upgrade.yml 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648
  1. ---
  2. ###############################################################################
  3. # Evaluate host groups and gather facts
  4. ###############################################################################
  5. - name: Evaluate host groups
  6. include: ../../evaluate_groups.yml
  7. - name: Load openshift_facts
  8. hosts: oo_masters_to_config:oo_nodes_to_config:oo_etcd_to_config:oo_lb_to_config
  9. roles:
  10. - openshift_facts
  11. - name: Evaluate additional groups for upgrade
  12. hosts: localhost
  13. connection: local
  14. become: no
  15. tasks:
  16. - name: Evaluate etcd_hosts_to_backup
  17. add_host:
  18. name: "{{ item }}"
  19. groups: etcd_hosts_to_backup
  20. with_items: groups.oo_etcd_to_config if groups.oo_etcd_to_config is defined and groups.oo_etcd_to_config | length > 0 else groups.oo_first_master
  21. ###############################################################################
  22. # Pre-upgrade checks
  23. ###############################################################################
  24. - name: Verify upgrade can proceed
  25. hosts: oo_first_master
  26. vars:
  27. openshift_master_ha: "{{ groups.oo_masters_to_config | length > 1 }}"
  28. target_version: "{{ '1.1' if deployment_type == 'origin' else '3.1' }}"
  29. gather_facts: no
  30. tasks:
  31. # Pacemaker is currently the only supported upgrade path for multiple masters
  32. - fail:
  33. msg: "openshift_master_cluster_method must be set to 'pacemaker'"
  34. 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 != "pacemaker"))
  35. - fail:
  36. msg: >
  37. This upgrade is only supported for origin, openshift-enterprise, and online
  38. deployment types
  39. when: deployment_type not in ['origin','openshift-enterprise', 'online']
  40. - fail:
  41. msg: >
  42. openshift_pkg_version is {{ openshift_pkg_version }} which is not a
  43. valid version for a {{ target_version }} upgrade
  44. when: openshift_pkg_version is defined and openshift_pkg_version.split('-',1).1 | version_compare(target_version ,'<')
  45. # If this script errors out ansible will show the default stdout/stderr
  46. # which contains details for the user:
  47. - script: ../files/pre-upgrade-check
  48. - name: Verify upgrade can proceed
  49. hosts: oo_masters_to_config:oo_nodes_to_config
  50. vars:
  51. target_version: "{{ '1.1' if deployment_type == 'origin' else '3.1' }}"
  52. tasks:
  53. - name: Clean package cache
  54. command: "{{ ansible_pkg_mgr }} clean all"
  55. - set_fact:
  56. g_new_service_name: "{{ 'origin' if deployment_type =='origin' else 'atomic-openshift' }}"
  57. - name: Determine available versions
  58. script: ../files/rpm_versions.sh {{ g_new_service_name }} openshift
  59. register: g_versions_result
  60. - set_fact:
  61. g_aos_versions: "{{ g_versions_result.stdout | from_yaml }}"
  62. - set_fact:
  63. g_new_version: "{{ g_aos_versions.curr_version.split('-', 1).0 if g_aos_versions.avail_version is none else g_aos_versions.avail_version.split('-', 1).0 }}"
  64. when: openshift_pkg_version is not defined
  65. - set_fact:
  66. g_new_version: "{{ openshift_pkg_version | replace('-','') }}"
  67. when: openshift_pkg_version is defined
  68. - fail:
  69. msg: This playbook requires Origin 1.0.6 or later
  70. when: deployment_type == 'origin' and g_aos_versions.curr_version | version_compare('1.0.6','<')
  71. - fail:
  72. msg: Upgrade packages not found
  73. when: (g_aos_versions.avail_version | default(g_aos_versions.curr_version, true) | version_compare(target_version, '<'))
  74. - set_fact:
  75. pre_upgrade_complete: True
  76. ##############################################################################
  77. # Gate on pre-upgrade checks
  78. ##############################################################################
  79. - name: Gate on pre-upgrade checks
  80. hosts: localhost
  81. connection: local
  82. become: no
  83. vars:
  84. pre_upgrade_hosts: "{{ groups.oo_masters_to_config | union(groups.oo_nodes_to_config) }}"
  85. tasks:
  86. - set_fact:
  87. pre_upgrade_completed: "{{ hostvars
  88. | oo_select_keys(pre_upgrade_hosts)
  89. | oo_collect('inventory_hostname', {'pre_upgrade_complete': true}) }}"
  90. - set_fact:
  91. pre_upgrade_failed: "{{ pre_upgrade_hosts | difference(pre_upgrade_completed) }}"
  92. - fail:
  93. msg: "Upgrade cannot continue. The following hosts did not complete pre-upgrade checks: {{ pre_upgrade_failed | join(',') }}"
  94. when: pre_upgrade_failed | length > 0
  95. ###############################################################################
  96. # Backup etcd
  97. ###############################################################################
  98. - name: Backup etcd
  99. hosts: etcd_hosts_to_backup
  100. vars:
  101. embedded_etcd: "{{ openshift.master.embedded_etcd }}"
  102. timestamp: "{{ lookup('pipe', 'date +%Y%m%d%H%M%S') }}"
  103. roles:
  104. - openshift_facts
  105. tasks:
  106. # Ensure we persist the etcd role for this host in openshift_facts
  107. - openshift_facts:
  108. role: etcd
  109. local_facts: {}
  110. when: "'etcd' not in openshift"
  111. - stat: path=/var/lib/openshift
  112. register: var_lib_openshift
  113. - stat: path=/var/lib/origin
  114. register: var_lib_origin
  115. - name: Create origin symlink if necessary
  116. file: src=/var/lib/openshift/ dest=/var/lib/origin state=link
  117. when: var_lib_openshift.stat.exists == True and var_lib_origin.stat.exists == False
  118. # TODO: replace shell module with command and update later checks
  119. # We assume to be using the data dir for all backups.
  120. - name: Check available disk space for etcd backup
  121. shell: df --output=avail -k {{ openshift.common.data_dir }} | tail -n 1
  122. register: avail_disk
  123. # TODO: replace shell module with command and update later checks
  124. - name: Check current embedded etcd disk usage
  125. shell: du -k {{ openshift.etcd.etcd_data_dir }} | tail -n 1 | cut -f1
  126. register: etcd_disk_usage
  127. when: embedded_etcd | bool
  128. - name: Abort if insufficient disk space for etcd backup
  129. fail:
  130. msg: >
  131. {{ etcd_disk_usage.stdout }} Kb disk space required for etcd backup,
  132. {{ avail_disk.stdout }} Kb available.
  133. when: (embedded_etcd | bool) and (etcd_disk_usage.stdout|int > avail_disk.stdout|int)
  134. - name: Install etcd (for etcdctl)
  135. action: "{{ ansible_pkg_mgr }} name=etcd state=latest"
  136. - name: Generate etcd backup
  137. command: >
  138. etcdctl backup --data-dir={{ openshift.etcd.etcd_data_dir }}
  139. --backup-dir={{ openshift.common.data_dir }}/etcd-backup-{{ timestamp }}
  140. - set_fact:
  141. etcd_backup_complete: True
  142. - name: Display location of etcd backup
  143. debug:
  144. msg: "Etcd backup created in {{ openshift.common.data_dir }}/etcd-backup-{{ timestamp }}"
  145. ##############################################################################
  146. # Gate on etcd backup
  147. ##############################################################################
  148. - name: Gate on etcd backup
  149. hosts: localhost
  150. connection: local
  151. become: no
  152. tasks:
  153. - set_fact:
  154. etcd_backup_completed: "{{ hostvars
  155. | oo_select_keys(groups.etcd_hosts_to_backup)
  156. | oo_collect('inventory_hostname', {'etcd_backup_complete': true}) }}"
  157. - set_fact:
  158. etcd_backup_failed: "{{ groups.etcd_hosts_to_backup | difference(etcd_backup_completed) }}"
  159. - fail:
  160. msg: "Upgrade cannot continue. The following hosts did not complete etcd backup: {{ etcd_backup_failed | join(',') }}"
  161. when: etcd_backup_failed | length > 0
  162. ###############################################################################
  163. # Upgrade Masters
  164. ###############################################################################
  165. - name: Create temp directory for syncing certs
  166. hosts: localhost
  167. connection: local
  168. become: no
  169. gather_facts: no
  170. tasks:
  171. - name: Create local temp directory for syncing certs
  172. local_action: command mktemp -d /tmp/openshift-ansible-XXXXXXX
  173. register: g_master_mktemp
  174. changed_when: False
  175. - name: Update deployment type
  176. hosts: oo_masters_to_config:oo_nodes_to_config:oo_etcd_to_config
  177. roles:
  178. - openshift_facts
  179. post_tasks:
  180. - openshift_facts:
  181. role: common
  182. local_facts:
  183. deployment_type: "{{ deployment_type }}"
  184. - name: Update master facts
  185. hosts: oo_masters_to_config
  186. roles:
  187. - openshift_facts
  188. post_tasks:
  189. - openshift_facts:
  190. role: master
  191. local_facts:
  192. cluster_method: "{{ openshift_master_cluster_method | default(None) }}"
  193. - name: Upgrade master packages and configuration
  194. hosts: oo_masters_to_config
  195. vars:
  196. openshift_version: "{{ openshift_pkg_version | default('') }}"
  197. roles:
  198. - openshift_facts
  199. tasks:
  200. - name: Upgrade to latest available kernel
  201. action: "{{ ansible_pkg_mgr}} name=kernel state=latest"
  202. - name: Upgrade master packages
  203. command: "{{ ansible_pkg_mgr}} update -y {{ openshift.common.service_type }}-master{{ openshift_version }}"
  204. when: openshift_pkg_version is not defined
  205. - name: Upgrade packages
  206. command: "{{ ansible_pkg_mgr}} install -y {{ openshift.common.installed_variant_rpms | oo_31_rpm_rename_conversion(openshift_version) | join (' ')}}"
  207. when: openshift_pkg_version is defined and deployment_type == 'openshift-enterprise'
  208. - name: Ensure python-yaml present for config upgrade
  209. action: "{{ ansible_pkg_mgr }} name=PyYAML state=present"
  210. when: not openshift.common.is_atomic | bool
  211. - name: Upgrade master configuration
  212. openshift_upgrade_config:
  213. from_version: '3.0'
  214. to_version: '3.1'
  215. role: master
  216. config_base: "{{ hostvars[inventory_hostname].openshift.common.config_base }}"
  217. - set_fact:
  218. openshift_master_certs_no_etcd:
  219. - admin.crt
  220. - master.kubelet-client.crt
  221. - "{{ 'master.proxy-client.crt' if openshift.common.version_gte_3_1_or_1_1 else omit }}"
  222. - master.server.crt
  223. - openshift-master.crt
  224. - openshift-registry.crt
  225. - openshift-router.crt
  226. - etcd.server.crt
  227. openshift_master_certs_etcd:
  228. - master.etcd-client.crt
  229. - set_fact:
  230. openshift_master_certs: "{{ (openshift_master_certs_no_etcd | union(openshift_master_certs_etcd)) if (groups.oo_etcd_to_config is defined and groups.oo_etcd_to_config) else openshift_master_certs_no_etcd }}"
  231. - name: Check status of master certificates
  232. stat:
  233. path: "{{ openshift.common.config_base }}/master/{{ item }}"
  234. with_items: openshift_master_certs
  235. register: g_master_cert_stat_result
  236. - set_fact:
  237. master_certs_missing: "{{ False in (g_master_cert_stat_result.results
  238. | oo_collect(attribute='stat.exists')
  239. | list ) }}"
  240. master_cert_subdir: master-{{ openshift.common.hostname }}
  241. master_cert_config_dir: "{{ openshift.common.config_base }}/master"
  242. - name: Generate missing master certificates
  243. hosts: oo_first_master
  244. vars:
  245. master_hostnames: "{{ hostvars
  246. | oo_select_keys(groups.oo_masters_to_config)
  247. | oo_collect('openshift.common.all_hostnames')
  248. | oo_flatten | unique }}"
  249. master_generated_certs_dir: "{{ openshift.common.config_base }}/generated-configs"
  250. masters_needing_certs: "{{ hostvars
  251. | oo_select_keys(groups['oo_masters_to_config'] | difference(groups['oo_first_master']))
  252. | oo_filter_list(filter_attr='master_certs_missing') }}"
  253. sync_tmpdir: "{{ hostvars.localhost.g_master_mktemp.stdout }}"
  254. openshift_deployment_type: "{{ deployment_type }}"
  255. roles:
  256. - openshift_master_certificates
  257. post_tasks:
  258. - name: Remove generated etcd client certs when using external etcd
  259. file:
  260. path: "{{ master_generated_certs_dir }}/{{ item.0.master_cert_subdir }}/{{ item.1 }}"
  261. state: absent
  262. when: groups.oo_etcd_to_config is defined and groups.oo_etcd_to_config
  263. with_nested:
  264. - masters_needing_certs
  265. - - master.etcd-client.crt
  266. - master.etcd-client.key
  267. - name: Create a tarball of the master certs
  268. command: >
  269. tar -czvf {{ master_generated_certs_dir }}/{{ item.master_cert_subdir }}.tgz
  270. -C {{ master_generated_certs_dir }}/{{ item.master_cert_subdir }} .
  271. with_items: masters_needing_certs
  272. - name: Retrieve the master cert tarball from the master
  273. fetch:
  274. src: "{{ master_generated_certs_dir }}/{{ item.master_cert_subdir }}.tgz"
  275. dest: "{{ sync_tmpdir }}/"
  276. flat: yes
  277. fail_on_missing: yes
  278. validate_checksum: yes
  279. with_items: masters_needing_certs
  280. - name: Sync generated certs, update service config and restart master services
  281. hosts: oo_masters_to_config
  282. vars:
  283. sync_tmpdir: "{{ hostvars.localhost.g_master_mktemp.stdout }}"
  284. openshift_master_ha: "{{ groups.oo_masters_to_config | length > 1 }}"
  285. openshift_deployment_type: "{{ deployment_type }}"
  286. tasks:
  287. - name: Unarchive the tarball on the master
  288. unarchive:
  289. src: "{{ sync_tmpdir }}/{{ master_cert_subdir }}.tgz"
  290. dest: "{{ master_cert_config_dir }}"
  291. when: inventory_hostname != groups.oo_first_master.0
  292. - name: Restart master service
  293. service: name="{{ openshift.common.service_type}}-master" state=restarted
  294. when: not openshift_master_ha | bool
  295. - name: Ensure the master service is enabled
  296. service: name="{{ openshift.common.service_type}}-master" state=started enabled=yes
  297. when: not openshift_master_ha | bool
  298. - name: Check for configured cluster
  299. stat:
  300. path: /etc/corosync/corosync.conf
  301. register: corosync_conf
  302. when: openshift_master_ha | bool
  303. - name: Destroy cluster
  304. command: pcs cluster destroy --all
  305. when: openshift_master_ha | bool and corosync_conf.stat.exists == true
  306. run_once: true
  307. - name: Start pcsd
  308. service: name=pcsd enabled=yes state=started
  309. when: openshift_master_ha | bool
  310. - name: Re-create cluster
  311. hosts: oo_first_master
  312. vars:
  313. openshift_master_ha: "{{ groups.oo_masters_to_config | length > 1 }}"
  314. openshift_deployment_type: "{{ deployment_type }}"
  315. omc_cluster_hosts: "{{ groups.oo_masters_to_config | join(' ') }}"
  316. roles:
  317. - role: openshift_master_cluster
  318. when: openshift_master_ha | bool
  319. - name: Delete temporary directory on localhost
  320. hosts: localhost
  321. connection: local
  322. become: no
  323. gather_facts: no
  324. tasks:
  325. - file: name={{ g_master_mktemp.stdout }} state=absent
  326. changed_when: False
  327. - name: Set master update status to complete
  328. hosts: oo_masters_to_config
  329. tasks:
  330. - set_fact:
  331. master_update_complete: True
  332. ##############################################################################
  333. # Gate on master update complete
  334. ##############################################################################
  335. - name: Gate on master update
  336. hosts: localhost
  337. connection: local
  338. become: no
  339. tasks:
  340. - set_fact:
  341. master_update_completed: "{{ hostvars
  342. | oo_select_keys(groups.oo_masters_to_config)
  343. | oo_collect('inventory_hostname', {'master_update_complete': true}) }}"
  344. - set_fact:
  345. master_update_failed: "{{ groups.oo_masters_to_config | difference(master_update_completed) }}"
  346. - fail:
  347. msg: "Upgrade cannot continue. The following masters did not finish updating: {{ master_update_failed | join(',') }}"
  348. when: master_update_failed | length > 0
  349. ###############################################################################
  350. # Upgrade Nodes
  351. ###############################################################################
  352. - name: Upgrade nodes
  353. hosts: oo_nodes_to_config
  354. vars:
  355. openshift_version: "{{ openshift_pkg_version | default('') }}"
  356. roles:
  357. - openshift_facts
  358. tasks:
  359. - name: Upgrade node packages
  360. command: "{{ ansible_pkg_mgr }} update -y {{ openshift.common.service_type }}-node{{ openshift_version }}"
  361. when: openshift_pkg_version is not defined
  362. - name: Upgrade packages
  363. command: "{{ ansible_pkg_mgr}} install -y {{ openshift.common.installed_variant_rpms | oo_31_rpm_rename_conversion(openshift_version) | join (' ')}}"
  364. when: openshift_pkg_version is defined and deployment_type == 'openshift-enterprise'
  365. - name: Restart node service
  366. service: name="{{ openshift.common.service_type }}-node" state=restarted
  367. - name: Ensure node service enabled
  368. service: name="{{ openshift.common.service_type }}-node" state=started enabled=yes
  369. - name: Install Ceph storage plugin dependencies
  370. action: "{{ ansible_pkg_mgr }} name=ceph-common state=present"
  371. - name: Install GlusterFS storage plugin dependencies
  372. action: "{{ ansible_pkg_mgr }} name=glusterfs-fuse state=present"
  373. - name: Set sebooleans to allow gluster storage plugin access from containers
  374. seboolean:
  375. name: "{{ item }}"
  376. state: yes
  377. persistent: yes
  378. when: ansible_selinux and ansible_selinux.status == "enabled"
  379. with_items:
  380. - virt_use_fusefs
  381. - virt_sandbox_use_fusefs
  382. register: sebool_result
  383. failed_when: "'state' not in sebool_result and 'msg' in sebool_result and 'SELinux boolean {{ item }} does not exist' not in sebool_result.msg"
  384. - set_fact:
  385. node_update_complete: True
  386. ##############################################################################
  387. # Gate on nodes update
  388. ##############################################################################
  389. - name: Gate on nodes update
  390. hosts: localhost
  391. connection: local
  392. become: no
  393. tasks:
  394. - set_fact:
  395. node_update_completed: "{{ hostvars
  396. | oo_select_keys(groups.oo_nodes_to_config)
  397. | oo_collect('inventory_hostname', {'node_update_complete': true}) }}"
  398. - set_fact:
  399. node_update_failed: "{{ groups.oo_nodes_to_config | difference(node_update_completed) }}"
  400. - fail:
  401. msg: "Upgrade cannot continue. The following nodes did not finish updating: {{ node_update_failed | join(',') }}"
  402. when: node_update_failed | length > 0
  403. ###############################################################################
  404. # Post upgrade - Reconcile Cluster Roles and Cluster Role Bindings
  405. ###############################################################################
  406. - name: Reconcile Cluster Roles and Cluster Role Bindings
  407. hosts: oo_masters_to_config
  408. vars:
  409. origin_reconcile_bindings: "{{ deployment_type == 'origin' and g_new_version | version_compare('1.0.6', '>') }}"
  410. ent_reconcile_bindings: true
  411. openshift_master_ha: "{{ groups.oo_masters_to_config | length > 1 }}"
  412. tasks:
  413. - name: Reconcile Cluster Roles
  414. command: >
  415. {{ openshift.common.admin_binary}} --config={{ openshift.common.config_base }}/master/admin.kubeconfig
  416. policy reconcile-cluster-roles --confirm
  417. run_once: true
  418. - name: Reconcile Cluster Role Bindings
  419. command: >
  420. {{ openshift.common.admin_binary}} --config={{ openshift.common.config_base }}/master/admin.kubeconfig
  421. policy reconcile-cluster-role-bindings
  422. --exclude-groups=system:authenticated
  423. --exclude-groups=system:authenticated:oauth
  424. --exclude-groups=system:unauthenticated
  425. --exclude-users=system:anonymous
  426. --additive-only=true --confirm
  427. when: origin_reconcile_bindings | bool or ent_reconcile_bindings | bool
  428. run_once: true
  429. - name: Restart master services
  430. service: name="{{ openshift.common.service_type}}-master" state=restarted
  431. when: not openshift_master_ha | bool
  432. - name: Restart master cluster
  433. command: pcs resource restart master
  434. when: openshift_master_ha | bool
  435. run_once: true
  436. - name: Wait for the clustered master service to be available
  437. wait_for:
  438. host: "{{ openshift_master_cluster_vip }}"
  439. port: 8443
  440. state: started
  441. timeout: 180
  442. delay: 90
  443. when: openshift_master_ha | bool
  444. run_once: true
  445. - set_fact:
  446. reconcile_complete: True
  447. ##############################################################################
  448. # Gate on reconcile
  449. ##############################################################################
  450. - name: Gate on reconcile
  451. hosts: localhost
  452. connection: local
  453. become: no
  454. tasks:
  455. - set_fact:
  456. reconcile_completed: "{{ hostvars
  457. | oo_select_keys(groups.oo_masters_to_config)
  458. | oo_collect('inventory_hostname', {'reconcile_complete': true}) }}"
  459. - set_fact:
  460. reconcile_failed: "{{ groups.oo_masters_to_config | difference(reconcile_completed) }}"
  461. - fail:
  462. msg: "Upgrade cannot continue. The following masters did not finish reconciling: {{ reconcile_failed | join(',') }}"
  463. when: reconcile_failed | length > 0
  464. ###############################################################################
  465. # Post upgrade - Upgrade default router, default registry and examples
  466. ###############################################################################
  467. - name: Upgrade default router and default registry
  468. hosts: oo_first_master
  469. vars:
  470. openshift_deployment_type: "{{ deployment_type }}"
  471. registry_image: "{{ openshift.master.registry_url | replace( '${component}', 'docker-registry' ) | replace ( '${version}', 'v' + g_new_version ) }}"
  472. router_image: "{{ openshift.master.registry_url | replace( '${component}', 'haproxy-router' ) | replace ( '${version}', 'v' + g_new_version ) }}"
  473. oc_cmd: "{{ openshift.common.client_binary }} --config={{ openshift.common.config_base }}/master/admin.kubeconfig"
  474. roles:
  475. # Create the new templates shipped in 3.1, existing templates are left
  476. # unmodified. This prevents the subsequent role definition for
  477. # openshift_examples from failing when trying to replace templates that do
  478. # not already exist. We could have potentially done a replace --force to
  479. # create and update in one step.
  480. - openshift_examples
  481. # Update the existing templates
  482. - role: openshift_examples
  483. openshift_examples_import_command: replace
  484. pre_tasks:
  485. - name: Collect all routers
  486. command: >
  487. {{ oc_cmd }} get pods --all-namespaces -l 'router' -o json
  488. register: all_routers
  489. failed_when: false
  490. changed_when: false
  491. - set_fact: haproxy_routers="{{ (all_routers.stdout | from_json)['items'] | oo_pods_match_component(openshift_deployment_type, 'haproxy-router') | oo_select_keys_from_list(['metadata']) }}"
  492. when: all_routers.rc == 0
  493. - set_fact: haproxy_routers=[]
  494. when: all_routers.rc != 0
  495. - name: Check for allowHostNetwork and allowHostPorts
  496. when: all_routers.rc == 0
  497. shell: >
  498. {{ oc_cmd }} get -o yaml scc/privileged | /usr/bin/grep -e allowHostPorts -e allowHostNetwork
  499. register: _scc
  500. - name: Grant allowHostNetwork and allowHostPorts
  501. when:
  502. - all_routers.rc == 0
  503. - "'false' in _scc.stdout"
  504. command: >
  505. {{ oc_cmd }} patch scc/privileged -p
  506. '{"allowHostPorts":true,"allowHostNetwork":true}' --api-version=v1
  507. - name: Update deployment config to 1.0.4/3.0.1 spec
  508. when: all_routers.rc == 0
  509. command: >
  510. {{ oc_cmd }} patch dc/{{ item['labels']['deploymentconfig'] }} -p
  511. '{"spec":{"strategy":{"rollingParams":{"updatePercent":-10},"spec":{"serviceAccount":"router","serviceAccountName":"router"}}}}'
  512. --api-version=v1
  513. with_items: haproxy_routers
  514. - name: Switch to hostNetwork=true
  515. when: all_routers.rc == 0
  516. command: >
  517. {{ oc_cmd }} patch dc/{{ item['labels']['deploymentconfig'] }} -p '{"spec":{"template":{"spec":{"hostNetwork":true}}}}'
  518. --api-version=v1
  519. with_items: haproxy_routers
  520. - name: Update router image to current version
  521. when: all_routers.rc == 0
  522. command: >
  523. {{ oc_cmd }} patch dc/{{ item['labels']['deploymentconfig'] }} -p
  524. '{"spec":{"template":{"spec":{"containers":[{"name":"router","image":"{{ router_image }}"}]}}}}'
  525. --api-version=v1
  526. with_items: haproxy_routers
  527. when: not openshift.common.version_gte_3_1_1_or_1_1_1
  528. - name: Update router image to current version
  529. when: all_routers.rc == 0
  530. command: >
  531. {{ oc_cmd }} patch dc/{{ item['labels']['deploymentconfig'] }} -p
  532. '{"spec":{"template":{"spec":{"containers":[{"name":"router","image":"{{ router_image }}","livenessProbe":{"tcpSocket":null,"httpGet":{"path": "/healthz", "port": 1936, "host": "localhost", "scheme": "HTTP"},"initialDelaySeconds":10,"timeoutSeconds":1}}]}}}}'
  533. --api-version=v1
  534. with_items: haproxy_routers
  535. when: openshift.common.version_gte_3_1_1_or_1_1_1
  536. - name: Check for default registry
  537. command: >
  538. {{ oc_cmd }} get -n default dc/docker-registry
  539. register: _default_registry
  540. failed_when: false
  541. changed_when: false
  542. - name: Update registry image to current version
  543. when: _default_registry.rc == 0
  544. command: >
  545. {{ oc_cmd }} patch dc/docker-registry -p
  546. '{"spec":{"template":{"spec":{"containers":[{"name":"registry","image":"{{ registry_image }}"}]}}}}'
  547. --api-version=v1