uninstall.yml 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603
  1. # This deletes *ALL* Origin and OpenShift Enterprise content installed by
  2. # ansible. This includes:
  3. #
  4. # configuration
  5. # containers
  6. # example templates and imagestreams
  7. # images
  8. # RPMs
  9. ---
  10. - hosts: OSEv3:children
  11. become: yes
  12. tasks:
  13. - name: Detecting Operating System
  14. shell: ls /run/ostree-booted
  15. ignore_errors: yes
  16. failed_when: false
  17. register: ostree_output
  18. # Since we're not calling openshift_facts we'll do this for now
  19. - set_fact:
  20. openshift_is_atomic: "{{ ostree_output.rc == 0 }}"
  21. openshift_is_containerized: "{{ ostree_output.rc == 0 or containerized | default(false) | bool }}"
  22. # Stop services on all hosts prior to removing files.
  23. - hosts: nodes
  24. become: yes
  25. tasks:
  26. - name: Remove dnsmasq dispatcher
  27. file:
  28. path: "{{ item }}"
  29. state: absent
  30. with_items:
  31. - /etc/dnsmasq.d/origin-dns.conf
  32. - /etc/dnsmasq.d/origin-upstream-dns.conf
  33. - /etc/dnsmasq.d/openshift-ansible.conf
  34. - /etc/NetworkManager/dispatcher.d/99-origin-dns.sh
  35. - service:
  36. name: NetworkManager
  37. state: restarted
  38. - name: Stop services
  39. service: name={{ item }} state=stopped
  40. with_items:
  41. - atomic-openshift-node
  42. - openshift-node
  43. - origin-node
  44. failed_when: false
  45. - name: Stop OVS service
  46. service: name=openvswitch state=stopped
  47. failed_when: false
  48. when: openshift_use_openshift_sdn | default(True) | bool
  49. - hosts: masters
  50. become: yes
  51. tasks:
  52. - name: Stop services
  53. service: name={{ item }} state=stopped
  54. with_items:
  55. - atomic-openshift-master
  56. - atomic-openshift-master-api
  57. - atomic-openshift-master-controllers
  58. - openshift-master
  59. - openshift-master-api
  60. - openshift-master-controllers
  61. - origin-master
  62. - origin-master-api
  63. - origin-master-controllers
  64. failed_when: false
  65. - hosts: etcd
  66. become: yes
  67. tasks:
  68. - name: Stop services
  69. service: name={{ item }} state=stopped
  70. with_items:
  71. - etcd
  72. failed_when: false
  73. - hosts: lb
  74. become: yes
  75. tasks:
  76. - name: Stop services
  77. service: name={{ item }} state=stopped
  78. with_items:
  79. - haproxy
  80. failed_when: false
  81. - hosts: nodes
  82. become: yes
  83. vars:
  84. node_dirs:
  85. - "/etc/origin"
  86. - "/var/lib/origin"
  87. tasks:
  88. - name: unmask services
  89. command: systemctl unmask "{{ item }}"
  90. changed_when: False
  91. failed_when: False
  92. with_items:
  93. - firewalld
  94. - block:
  95. - block:
  96. - name: Remove packages
  97. package: name={{ item }} state=absent
  98. with_items:
  99. - atomic-openshift
  100. - atomic-openshift-clients
  101. - atomic-openshift-excluder
  102. - atomic-openshift-docker-excluder
  103. - atomic-openshift-node
  104. - atomic-openshift-sdn-ovs
  105. - cockpit-bridge
  106. - cockpit-docker
  107. - cockpit-system
  108. - cockpit-ws
  109. - kubernetes-client
  110. - openshift
  111. - openshift-node
  112. - openshift-sdn
  113. - openshift-sdn-ovs
  114. - origin
  115. - origin-excluder
  116. - origin-docker-excluder
  117. - origin-clients
  118. - origin-node
  119. - origin-sdn-ovs
  120. - tuned-profiles-atomic-openshift-node
  121. - tuned-profiles-origin-node
  122. register: result
  123. until: result is succeeded
  124. - name: Remove OVS package
  125. package: name=openvswitch state=absent
  126. register: result
  127. until: result is succeeded
  128. when: openshift_use_openshift_sdn | default(True) | bool
  129. - name: Remove flannel package
  130. package: name=flannel state=absent
  131. when: openshift_use_flannel | default(false) | bool
  132. register: result
  133. until: result is succeeded
  134. when: not openshift_is_atomic | bool
  135. - shell: systemctl reset-failed
  136. changed_when: False
  137. - shell: systemctl daemon-reload
  138. changed_when: False
  139. - name: Remove br0 interface
  140. shell: ovs-vsctl del-br br0
  141. changed_when: False
  142. failed_when: False
  143. when: openshift_use_openshift_sdn | default(True) | bool
  144. - name: Remove linux interfaces
  145. shell: ip link del "{{ item }}"
  146. changed_when: False
  147. failed_when: False
  148. with_items:
  149. - lbr0
  150. - vlinuxbr
  151. - vovsbr
  152. when: openshift_use_openshift_sdn | default(True) | bool
  153. - name: Remove virtual devices
  154. command: nmcli delete device "{{ item }}"
  155. failed_when: False
  156. with_items:
  157. - tun0
  158. - docker0
  159. when: openshift_use_openshift_sdn | default(True) | bool
  160. when: openshift_remove_all | default(true) | bool
  161. - shell: atomic uninstall "{{ item }}"-master-api
  162. changed_when: False
  163. failed_when: False
  164. with_items:
  165. - openshift-enterprise
  166. - origin
  167. - shell: atomic uninstall "{{ item }}"-master-controllers
  168. changed_when: False
  169. failed_when: False
  170. with_items:
  171. - openshift-enterprise
  172. - origin
  173. - shell: atomic uninstall "{{ item }}"-master
  174. changed_when: False
  175. failed_when: False
  176. with_items:
  177. - openshift-enterprise
  178. - origin
  179. - shell: atomic uninstall "{{ item }}"-node
  180. changed_when: False
  181. failed_when: False
  182. with_items:
  183. - openshift-enterprise
  184. - origin
  185. - shell: atomic uninstall "{{ item }}"
  186. changed_when: False
  187. failed_when: False
  188. with_items:
  189. - etcd
  190. - shell: atomic uninstall "{{ item }}"
  191. changed_when: False
  192. failed_when: False
  193. with_items:
  194. - openvswitch
  195. when: openshift_use_openshift_sdn | default(True) | bool
  196. - shell: find /var/lib/origin/openshift.local.volumes -type d -exec umount {} \; 2>/dev/null || true
  197. changed_when: False
  198. - shell: docker rm -f "{{ item }}"-master "{{ item }}"-node
  199. changed_when: False
  200. failed_when: False
  201. with_items:
  202. - openshift-enterprise
  203. - origin
  204. - shell: docker ps -a | grep Exited | egrep "{{ item }}" | awk '{print $1}'
  205. changed_when: False
  206. failed_when: False
  207. register: exited_containers_to_delete
  208. with_items:
  209. - openshift3/ose
  210. - openshift3/node
  211. - openshift3/openvswitch
  212. - openshift/origin
  213. - shell: "docker rm {{ item.stdout_lines | join(' ') }}"
  214. changed_when: False
  215. failed_when: False
  216. with_items: "{{ exited_containers_to_delete.results }}"
  217. - block:
  218. - block:
  219. - shell: docker images | egrep {{ item }} | awk '{ print $3 }'
  220. changed_when: False
  221. failed_when: False
  222. register: images_to_delete
  223. with_items:
  224. - registry\.access\..*redhat\.com/openshift3
  225. - registry\.qe\.openshift\.com/.*
  226. - registry\.access\..*redhat\.com/rhel7/etcd
  227. - docker.io/openshift
  228. - shell: "docker rmi -f {{ item.stdout_lines | join(' ') }}"
  229. changed_when: False
  230. failed_when: False
  231. with_items: "{{ images_to_delete.results }}"
  232. when: openshift_uninstall_images | default(True) | bool
  233. - name: remove sdn drop files
  234. file:
  235. path: /run/openshift-sdn
  236. state: absent
  237. - name: Remove files owned by RPMs
  238. file: path={{ item }} state=absent
  239. with_items:
  240. - /etc/sysconfig/openshift-node
  241. - /run/openshift-sdn
  242. - name: Remove files owned by OVS RPM
  243. file: path=/etc/sysconfig/openvswitch state=absent
  244. when: openshift_use_openshift_sdn | default(True) | bool
  245. when: openshift_remove_all | default(True) | bool
  246. - find: path={{ item }} file_type=file
  247. register: files
  248. with_items:
  249. - "{{ node_dirs }}"
  250. - find: path={{ item }} file_type=directory
  251. register: directories
  252. with_items:
  253. - "{{ node_dirs }}"
  254. - file: path={{ item.1.path }} state=absent
  255. with_subelements:
  256. - "{{ files.results | default([]) }}"
  257. - files
  258. - file: path={{ item.1.path }} state=absent
  259. with_subelements:
  260. - "{{ directories.results | default([]) }}"
  261. - files
  262. - shell: systemctl daemon-reload
  263. changed_when: False
  264. - name: Stop container-engine service
  265. service: name=container-engine state=stopped enabled=no
  266. failed_when: false
  267. register: container_engine
  268. - name: Stop docker service
  269. service: name=docker state=stopped enabled=no
  270. failed_when: false
  271. when: not (container_engine is changed)
  272. register: l_docker_restart_docker_in_pb_result
  273. until: not (l_docker_restart_docker_in_pb_result is failed)
  274. retries: 3
  275. delay: 30
  276. - name: Remove remaining files
  277. file: path={{ item }} state=absent
  278. with_items:
  279. - /etc/ansible/facts.d/openshift.fact
  280. - /etc/openshift
  281. - /etc/openshift-sdn
  282. - /etc/pki/ca-trust/source/anchors/openshift-ca.crt
  283. - /etc/sysconfig/atomic-openshift-node
  284. - /etc/sysconfig/atomic-openshift-node-dep
  285. - /etc/sysconfig/openshift-node-dep
  286. - /etc/sysconfig/origin-node
  287. - /etc/sysconfig/origin-node
  288. - /etc/sysconfig/origin-node-dep
  289. - /etc/systemd/system/atomic-openshift-node-dep.service
  290. - /etc/systemd/system/atomic-openshift-node.service
  291. - /etc/systemd/system/atomic-openshift-node.service.wants
  292. - /etc/systemd/system/docker.service.d/docker-sdn-ovs.conf
  293. - /etc/systemd/system/origin-node-dep.service
  294. - /etc/systemd/system/origin-node.service
  295. - /etc/systemd/system/origin-node.service.wants
  296. - name: Remove remaining OVS files
  297. file: path={{ item }} state=absent
  298. with_items:
  299. - /etc/systemd/system/openvswitch.service
  300. when: openshift_use_openshift_sdn | default(True) | bool
  301. - name: Rebuild ca-trust
  302. command: update-ca-trust
  303. - name: Reset Docker proxy configuration
  304. lineinfile:
  305. state=absent
  306. dest=/etc/sysconfig/docker
  307. regexp='(NO_PROXY|HTTP_PROXY|HTTPS_PROXY)=.*'
  308. - name: Reset Docker registry configuration
  309. lineinfile:
  310. state=absent
  311. dest=/etc/sysconfig/docker
  312. regexp='(ADD_REGISTRY|BLOCK_REGISTRY|INSECURE_REGISTRY)=.*'
  313. - name: Remove docker storage contents
  314. shell: rm -rf /var/lib/docker
  315. - name: Reset docker-storage-setup
  316. shell: docker-storage-setup --reset
  317. - hosts: masters
  318. become: yes
  319. vars:
  320. master_dirs:
  321. - "/etc/origin"
  322. - "/var/lib/origin"
  323. tasks:
  324. - name: unmask services
  325. command: systemctl unmask "{{ item }}"
  326. changed_when: False
  327. failed_when: False
  328. with_items:
  329. - firewalld
  330. - atomic-openshift-master
  331. - name: Remove packages
  332. package: name={{ item }} state=absent
  333. when: not openshift_is_atomic | bool and openshift_remove_all | default(True) | bool
  334. with_items:
  335. - atomic-openshift
  336. - atomic-openshift-clients
  337. - atomic-openshift-excluder
  338. - atomic-openshift-docker-excluder
  339. - atomic-openshift-master
  340. - cockpit-bridge
  341. - cockpit-docker
  342. - cockpit-system
  343. - cockpit-ws
  344. - corosync
  345. - kubernetes-client
  346. - openshift
  347. - openshift-master
  348. - origin
  349. - origin-clients
  350. - origin-excluder
  351. - origin-docker-excluder
  352. - origin-master
  353. register: result
  354. until: result is succeeded
  355. - shell: systemctl reset-failed
  356. changed_when: False
  357. - shell: systemctl daemon-reload
  358. changed_when: False
  359. - name: Remove files owned by RPMs
  360. file: path={{ item }} state=absent
  361. with_items:
  362. - /etc/sysconfig/atomic-openshift-master
  363. when: openshift_remove_all | default(True) | bool
  364. - name: Remove files owned by OVS RPM
  365. file: path={{ item }} state=absent
  366. with_items:
  367. - /etc/sysconfig/openvswitch
  368. when:
  369. - openshift_remove_all | default(True) | bool
  370. - openshift_use_openshift_sdn | default(True) | bool
  371. - find: path={{ item }} file_type=file
  372. register: files
  373. with_items:
  374. - "{{ master_dirs }}"
  375. - find: path={{ item }} file_type=directory
  376. register: directories
  377. with_items:
  378. - "{{ master_dirs }}"
  379. - file: path={{ item.1.path }} state=absent
  380. with_subelements:
  381. - "{{ files.results | default([]) }}"
  382. - files
  383. - file: path={{ item.1.path }} state=absent
  384. with_subelements:
  385. - "{{ directories.results | default([]) }}"
  386. - files
  387. - set_fact:
  388. client_users: "{{ [ansible_ssh_user, 'root'] | unique }}"
  389. - name: Remove client kubeconfigs
  390. file:
  391. path: "~{{ item }}/.kube"
  392. state: absent
  393. with_items:
  394. - "{{ client_users }}"
  395. - name: Remove remaining files
  396. file: path={{ item }} state=absent
  397. with_items:
  398. - /etc/ansible/facts.d/openshift.fact
  399. - /etc/corosync
  400. - /etc/openshift
  401. - /etc/openshift-sdn
  402. - /etc/systemd/system/atomic-openshift-master.service
  403. - /etc/systemd/system/atomic-openshift-master-api.service
  404. - /etc/systemd/system/atomic-openshift-master-controllers.service
  405. - /etc/systemd/system/origin-master.service
  406. - /etc/systemd/system/origin-master-api.service
  407. - /etc/systemd/system/origin-master-controllers.service
  408. - /etc/sysconfig/atomic-openshift-master-api
  409. - /etc/sysconfig/atomic-openshift-master-controllers
  410. - /etc/sysconfig/origin-master
  411. - /etc/sysconfig/origin-master-api
  412. - /etc/sysconfig/origin-master-controllers
  413. - /etc/sysconfig/openshift-master
  414. - /etc/sysconfig/origin-master
  415. - /etc/sysconfig/origin-master-api
  416. - /etc/sysconfig/origin-master-controllers
  417. - /usr/share/openshift/examples
  418. - /usr/lib/systemd/system/atomic-openshift-master-api.service
  419. - /usr/lib/systemd/system/atomic-openshift-master-controllers.service
  420. - /usr/lib/systemd/system/origin-master-api.service
  421. - /usr/lib/systemd/system/origin-master-controllers.service
  422. - /usr/local/bin/openshift
  423. - /usr/local/bin/oadm
  424. - /usr/local/bin/oc
  425. - /usr/local/bin/kubectl
  426. - /etc/flannel
  427. - name: Remove remaining OVS files
  428. file: path={{ item }} state=absent
  429. with_items:
  430. - /etc/systemd/system/openvswitch.service
  431. when: openshift_use_openshift_sdn | default(True) | bool
  432. # Since we are potentially removing the systemd unit files for separated
  433. # master-api and master-controllers services, so we need to reload the
  434. # systemd configuration manager
  435. - name: Reload systemd manager configuration
  436. command: systemctl daemon-reload
  437. - hosts: etcd
  438. become: yes
  439. vars:
  440. etcd_dirs:
  441. - "/etc/etcd"
  442. - "/var/lib/etcd"
  443. tasks:
  444. - name: unmask services
  445. command: systemctl unmask "{{ item }}"
  446. changed_when: False
  447. failed_when: False
  448. with_items:
  449. - etcd
  450. - etcd3
  451. - firewalld
  452. - name: Stop additional atomic services
  453. service: name={{ item }} state=stopped
  454. when: openshift_is_containerized | bool
  455. with_items:
  456. - etcd_container
  457. failed_when: false
  458. - name: Remove packages
  459. package: name={{ item }} state=absent
  460. when: not openshift_is_atomic | bool and openshift_remove_all | default(True) | bool
  461. with_items:
  462. - etcd
  463. - etcd3
  464. register: result
  465. until: result is succeeded
  466. - shell: systemctl reset-failed
  467. changed_when: False
  468. - shell: systemctl daemon-reload
  469. changed_when: False
  470. - find: path={{ item }} file_type=file
  471. register: files
  472. with_items:
  473. - "{{ etcd_dirs }}"
  474. - find: path={{ item }} file_type=directory
  475. register: directories
  476. with_items:
  477. - "{{ etcd_dirs }}"
  478. - file: path={{ item.1.path }} state=absent
  479. with_subelements:
  480. - "{{ files.results | default([]) }}"
  481. - files
  482. - file: path={{ item.1.path }} state=absent
  483. with_subelements:
  484. - "{{ directories.results | default([]) }}"
  485. - files
  486. # Intenationally using rm command over file module because if someone had mounted a filesystem
  487. # at /var/lib/etcd then the contents was not removed correctly
  488. - name: Remove etcd data
  489. shell: rm -rf /var/lib/etcd/*
  490. args:
  491. warn: no
  492. failed_when: false
  493. - name: Remove remaining files
  494. file: path={{ item }} state=absent
  495. with_items:
  496. - /etc/ansible/facts.d/openshift.fact
  497. - /etc/systemd/system/etcd_container.service
  498. - /etc/profile.d/etcdctl.sh
  499. - hosts: lb
  500. become: yes
  501. tasks:
  502. - name: unmask services
  503. command: systemctl unmask "{{ item }}"
  504. changed_when: False
  505. failed_when: False
  506. with_items:
  507. - firewalld
  508. - name: Remove packages
  509. package: name={{ item }} state=absent
  510. when: not openshift_is_atomic | bool and openshift_remove_all | default(True) | bool
  511. with_items:
  512. - haproxy
  513. register: result
  514. until: result is succeeded
  515. - shell: systemctl reset-failed
  516. changed_when: False
  517. - shell: systemctl daemon-reload
  518. changed_when: False
  519. - name: Remove remaining files
  520. file: path={{ item }} state=absent
  521. with_items:
  522. - /etc/ansible/facts.d/openshift.fact
  523. - /var/lib/haproxy/stats
  524. # Here we remove only limits.conf rather than directory, as users may put their files.
  525. # - /etc/systemd/system/haproxy.service.d
  526. - /etc/systemd/system/haproxy.service.d/limits.conf
  527. - /etc/systemd/system/haproxy.service