main.yml 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. ---
  2. # TODO: add validation for openshift_master_identity_providers
  3. # TODO: add ability to configure certificates given either a local file to
  4. # point to or certificate contents, set in default cert locations.
  5. - assert:
  6. that:
  7. - openshift_master_oauth_grant_method in openshift_master_valid_grant_methods
  8. when: openshift_master_oauth_grant_method is defined
  9. #- fail:
  10. # msg: "openshift_master_cluster_password must be set for multi-master installations"
  11. # when: openshift_master_ha | bool and not openshift.master.cluster_defer_ha | bool and openshift_master_cluster_password is not defined
  12. - name: Set master facts
  13. openshift_facts:
  14. role: master
  15. local_facts:
  16. cluster_hostname: "{{ openshift_master_cluster_hostname | default(None) }}"
  17. cluster_public_hostname: "{{ openshift_master_cluster_public_hostname | default(None) }}"
  18. cluster_defer_ha: "{{ openshift_master_cluster_defer_ha | default(None) }}"
  19. debug_level: "{{ openshift_master_debug_level | default(openshift.common.debug_level) }}"
  20. api_port: "{{ openshift_master_api_port | default(None) }}"
  21. api_url: "{{ openshift_master_api_url | default(None) }}"
  22. api_use_ssl: "{{ openshift_master_api_use_ssl | default(None) }}"
  23. public_api_url: "{{ openshift_master_public_api_url | default(None) }}"
  24. console_path: "{{ openshift_master_console_path | default(None) }}"
  25. console_port: "{{ openshift_master_console_port | default(None) }}"
  26. console_url: "{{ openshift_master_console_url | default(None) }}"
  27. console_use_ssl: "{{ openshift_master_console_use_ssl | default(None) }}"
  28. public_console_url: "{{ openshift_master_public_console_url | default(None) }}"
  29. etcd_hosts: "{{ openshift_master_etcd_hosts | default(None)}}"
  30. etcd_port: "{{ openshift_master_etcd_port | default(None) }}"
  31. etcd_use_ssl: "{{ openshift_master_etcd_use_ssl | default(None) }}"
  32. etcd_urls: "{{ openshift_master_etcd_urls | default(None) }}"
  33. embedded_etcd: "{{ openshift_master_embedded_etcd | default(None) }}"
  34. embedded_kube: "{{ openshift_master_embedded_kube | default(None) }}"
  35. embedded_dns: "{{ openshift_master_embedded_dns | default(None) }}"
  36. dns_port: "{{ openshift_master_dns_port | default(None) }}"
  37. bind_addr: "{{ openshift_master_bind_addr | default(None) }}"
  38. portal_net: "{{ openshift_master_portal_net | default(None) }}"
  39. session_max_seconds: "{{ openshift_master_session_max_seconds | default(None) }}"
  40. session_name: "{{ openshift_master_session_name | default(None) }}"
  41. session_secrets_file: "{{ openshift_master_session_secrets_file | default(None) }}"
  42. access_token_max_seconds: "{{ openshift_master_access_token_max_seconds | default(None) }}"
  43. auth_token_max_seconds: "{{ openshift_master_auth_token_max_seconds | default(None) }}"
  44. identity_providers: "{{ openshift_master_identity_providers | default(None) }}"
  45. registry_url: "{{ oreg_url | default(None) }}"
  46. oauth_grant_method: "{{ openshift_master_oauth_grant_method | default(None) }}"
  47. sdn_cluster_network_cidr: "{{ osm_cluster_network_cidr | default(None) }}"
  48. sdn_host_subnet_length: "{{ osm_host_subnet_length | default(None) }}"
  49. default_subdomain: "{{ osm_default_subdomain | default(None) }}"
  50. custom_cors_origins: "{{ osm_custom_cors_origins | default(None) }}"
  51. default_node_selector: "{{ osm_default_node_selector | default(None) }}"
  52. project_request_message: "{{ osm_project_request_message | default(None) }}"
  53. project_request_template: "{{ osm_project_request_template | default(None) }}"
  54. mcs_allocator_range: "{{ osm_mcs_allocator_range | default(None) }}"
  55. mcs_labels_per_project: "{{ osm_mcs_labels_per_project | default(None) }}"
  56. uid_allocator_range: "{{ osm_uid_allocator_range | default(None) }}"
  57. router_selector: "{{ openshift_router_selector | default(None) }}"
  58. registry_selector: "{{ openshift_registry_selector | default(None) }}"
  59. api_server_args: "{{ osm_api_server_args | default(None) }}"
  60. controller_args: "{{ osm_controller_args | default(None) }}"
  61. infra_nodes: "{{ num_infra | default(None) }}"
  62. disabled_features: "{{ osm_disabled_features | default(None) }}"
  63. master_count: "{{ openshift_master_count | default(None) }}"
  64. controller_lease_ttl: "{{ osm_controller_lease_ttl | default(None) }}"
  65. - name: Install Master package
  66. yum: pkg={{ openshift.common.service_type }}-master state=present
  67. register: install_result
  68. # TODO: These values need to be configurable
  69. - name: Set dns facts
  70. openshift_facts:
  71. role: dns
  72. local_facts:
  73. ip: "{{ openshift_master_cluster_vip | default(openshift.common.ip, true) | default(None) }}"
  74. domain: cluster.local
  75. when: openshift.master.embedded_dns
  76. - name: Create config parent directory if it doesn't exist
  77. file:
  78. path: "{{ openshift_master_config_dir }}"
  79. state: directory
  80. - name: Create the policy file if it does not already exist
  81. command: >
  82. {{ openshift.common.admin_binary }} create-bootstrap-policy-file
  83. --filename={{ openshift_master_policy }}
  84. args:
  85. creates: "{{ openshift_master_policy }}"
  86. notify:
  87. - restart master
  88. - restart master api
  89. - restart master controllers
  90. - name: Create the scheduler config
  91. template:
  92. dest: "{{ openshift_master_scheduler_conf }}"
  93. src: scheduler.json.j2
  94. backup: true
  95. notify:
  96. - restart master
  97. - restart master api
  98. - restart master controllers
  99. - name: Install httpd-tools if needed
  100. yum: pkg=httpd-tools state=present
  101. when: item.kind == 'HTPasswdPasswordIdentityProvider'
  102. with_items: openshift.master.identity_providers
  103. - name: Ensure htpasswd directory exists
  104. file:
  105. path: "{{ item.filename | dirname }}"
  106. state: directory
  107. when: item.kind == 'HTPasswdPasswordIdentityProvider'
  108. with_items: openshift.master.identity_providers
  109. - name: Create the htpasswd file if needed
  110. copy:
  111. dest: "{{ item.filename }}"
  112. content: ""
  113. mode: 0600
  114. force: no
  115. when: item.kind == 'HTPasswdPasswordIdentityProvider'
  116. with_items: openshift.master.identity_providers
  117. # workaround for missing systemd unit files for controllers/api
  118. - name: Create the api service file
  119. copy:
  120. src: atomic-openshift-master-api.service
  121. dest: /usr/lib/systemd/system/atomic-openshift-master-api.service
  122. force: no
  123. - name: Create the controllers service file
  124. copy:
  125. src: atomic-openshift-master-controllers.service
  126. dest: /usr/lib/systemd/system/atomic-openshift-master-controllers.service
  127. force: no
  128. - name: Create the api env file
  129. copy:
  130. src: atomic-openshift-master-api
  131. dest: /etc/sysconfig/atomic-openshift-master-api
  132. force: no
  133. - name: Create the controllers env file
  134. copy:
  135. src: atomic-openshift-master-controllers
  136. dest: /etc/sysconfig/atomic-openshift-master-controllers
  137. force: no
  138. - command: systemctl daemon-reload
  139. # end workaround for missing systemd unit files
  140. # TODO: add the validate parameter when there is a validation command to run
  141. - name: Create master config
  142. template:
  143. dest: "{{ openshift_master_config_file }}"
  144. src: master.yaml.v1.j2
  145. backup: true
  146. notify:
  147. - restart master
  148. - restart master api
  149. - restart master controllers
  150. - name: Configure master settings
  151. lineinfile:
  152. dest: /etc/sysconfig/{{ openshift.common.service_type }}-master
  153. regexp: "{{ item.regex }}"
  154. line: "{{ item.line }}"
  155. with_items:
  156. - regex: '^OPTIONS='
  157. line: "OPTIONS=--loglevel={{ openshift.master.debug_level }}"
  158. - regex: '^CONFIG_FILE='
  159. line: "CONFIG_FILE={{ openshift_master_config_file }}"
  160. notify:
  161. - restart master
  162. - name: Configure master api settings
  163. lineinfile:
  164. dest: /etc/sysconfig/{{ openshift.common.service_type }}-master-api
  165. regexp: "{{ item.regex }}"
  166. line: "{{ item.line }}"
  167. with_items:
  168. - regex: '^OPTIONS='
  169. line: "OPTIONS=--loglevel={{ openshift.master.debug_level }} --listen=https://0.0.0.0:8443 --master=https://{{ openshift.common.ip }}:8443"
  170. - regex: '^CONFIG_FILE='
  171. line: "CONFIG_FILE={{ openshift_master_config_file }}"
  172. notify:
  173. - restart master api
  174. - name: Configure master controller settings
  175. lineinfile:
  176. dest: /etc/sysconfig/{{ openshift.common.service_type }}-master-controllers
  177. regexp: "{{ item.regex }}"
  178. line: "{{ item.line }}"
  179. with_items:
  180. - regex: '^OPTIONS='
  181. line: "OPTIONS=--loglevel={{ openshift.master.debug_level }} --listen=https://0.0.0.0:8444"
  182. - regex: '^CONFIG_FILE='
  183. line: "CONFIG_FILE={{ openshift_master_config_file }}"
  184. notify:
  185. - restart master controllers
  186. - name: Start and enable master
  187. service: name={{ openshift.common.service_type }}-master enabled=yes state=started
  188. when: not openshift_master_ha | bool
  189. register: start_result
  190. - name: Start and enable master api
  191. service: name={{ openshift.common.service_type }}-master-api enabled=yes state=started
  192. when: openshift_master_ha | bool
  193. register: start_result
  194. - name: pause to prevent service restart from interfering with bootstrapping
  195. pause: seconds=30
  196. when: openshift_master_ha | bool
  197. # TODO: fix the ugly workaround of setting ignore_errors
  198. # the controllers service tries to start even if it is already started
  199. - name: Start and enable master controller
  200. service: name={{ openshift.common.service_type }}-master-controllers enabled=yes state=started
  201. when: openshift_master_ha | bool
  202. register: start_result
  203. ignore_errors: yes
  204. - set_fact:
  205. master_service_status_changed = start_result | changed
  206. - name: Install cluster packages
  207. yum: pkg=pcs state=present
  208. when: openshift_master_ha | bool and not openshift.master.cluster_defer_ha | bool
  209. register: install_result
  210. - name: Start and enable cluster service
  211. service: name=pcsd enabled=yes state=started
  212. when: openshift_master_ha | bool and not openshift.master.cluster_defer_ha | bool
  213. - name: Set the cluster user password
  214. shell: echo {{ openshift_master_cluster_password | quote }} | passwd --stdin hacluster
  215. when: install_result | changed
  216. - name: Lookup default group for ansible_ssh_user
  217. command: "/usr/bin/id -g {{ ansible_ssh_user }}"
  218. register: _ansible_ssh_user_gid
  219. - name: Create the client config dir(s)
  220. file:
  221. path: "~{{ item }}/.kube"
  222. state: directory
  223. mode: 0700
  224. owner: "{{ item }}"
  225. group: "{{ 'root' if item == 'root' else _ansible_ssh_user_gid.stdout }}"
  226. with_items:
  227. - root
  228. - "{{ ansible_ssh_user }}"
  229. # TODO: Update this file if the contents of the source file are not present in
  230. # the dest file, will need to make sure to ignore things that could be added
  231. - name: Copy the admin client config(s)
  232. command: cp {{ openshift_master_config_dir }}/admin.kubeconfig ~{{ item }}/.kube/config
  233. args:
  234. creates: ~{{ item }}/.kube/config
  235. with_items:
  236. - root
  237. - "{{ ansible_ssh_user }}"
  238. - name: Update the permissions on the admin client config(s)
  239. file:
  240. path: "~{{ item }}/.kube/config"
  241. state: file
  242. mode: 0700
  243. owner: "{{ item }}"
  244. group: "{{ 'root' if item == 'root' else _ansible_ssh_user_gid.stdout }}"
  245. with_items:
  246. - root
  247. - "{{ ansible_ssh_user }}"