main.yml 13 KB

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