50-coreos-inst-prep.yml 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. ---
  2. # Download all the tools, set up registry credentials, ssh keys, and a DHCP server on utility.
  3. - name: Download all the tools we need on workstation, set up registry credentials, and a SSH keypair.
  4. hosts: workstation.lab.example.com
  5. gather_subset: min
  6. become: no
  7. vars:
  8. downloads:
  9. - baseurl: https://mirror.openshift.com/pub/openshift-v4/clients/butane/latest
  10. filename: butane-amd64
  11. dest_dir: /usr/local/bin
  12. deploy: yes
  13. extract: no
  14. extract_files: []
  15. target_filename: butane
  16. completion: no
  17. - baseurl: https://mirror.openshift.com/pub/openshift-v4/clients/coreos-installer/latest
  18. filename: coreos-installer_amd64
  19. dest_dir: /usr/local/bin
  20. deploy: yes
  21. extract: no
  22. extract_files: []
  23. target_filename: coreos-installer
  24. completion: no
  25. - baseurl: https://mirror.openshift.com/pub/openshift-v4/clients/ocp/4.18.6
  26. filename: openshift-install-rhel9-amd64.tar.gz
  27. dest_dir: /usr/local/bin
  28. deploy: yes
  29. extract: yes
  30. extract_files:
  31. - openshift-install-fips
  32. target_filename: None
  33. completion: yes
  34. - baseurl: https://mirror.openshift.com/pub/openshift-v4/clients/ocp/stable-4.18
  35. filename: openshift-client-linux-amd64-rhel9.tar.gz
  36. dest_dir: /usr/local/bin
  37. deploy: yes
  38. extract: yes
  39. extract_files:
  40. - oc
  41. - kubectl
  42. target_filename: None
  43. completion: yes
  44. - baseurl: https://rhcos.mirror.openshift.com/art/storage/prod/streams/4.18-9.4/builds/418.94.202501221327-0/x86_64
  45. filename: rhcos-418.94.202501221327-0-live.x86_64.iso
  46. deploy: no
  47. tasks:
  48. - name: Download tools, if necessary.
  49. ansible.builtin.get_url:
  50. url: "{{ item.baseurl }}/{{ item.filename }}"
  51. dest: "{{ ansible_facts['user_dir'] }}/Downloads/{{ item.filename }}"
  52. mode: 0644
  53. owner: student
  54. group: student
  55. loop: "{{ downloads }}"
  56. loop_control:
  57. label: "{{ item.filename }}"
  58. - name: Extract tools, if necessary.
  59. become: yes
  60. ansible.builtin.unarchive:
  61. src: "{{ ansible_facts['user_dir'] }}/Downloads/{{ item.filename }}"
  62. remote_src: yes
  63. dest: "{{ item.dest_dir }}"
  64. include: "{{ item.extract_files }}"
  65. creates: "{{ item.extract_files[0] }}"
  66. mode: 0755
  67. owner: root
  68. group: root
  69. loop: "{{ downloads }}"
  70. loop_control:
  71. label: "{{ item.filename }}"
  72. when:
  73. - item.deploy
  74. - item.extract
  75. - name: Install tools, if necessary.
  76. become: yes
  77. ansible.builtin.copy:
  78. src: "{{ ansible_facts['user_dir'] }}/Downloads/{{ item.filename }}"
  79. remote_src: yes
  80. dest: "{{ item.dest_dir }}/{{ item.target_filename }}"
  81. mode: 0755
  82. owner: root
  83. group: root
  84. loop: "{{ downloads }}"
  85. loop_control:
  86. label: "{{ item.filename }}"
  87. when:
  88. - item.deploy
  89. - not item.extract
  90. - item.target_filename is defined
  91. - item.target_filename != None
  92. - name: Create command completion files, if necessary.
  93. become: yes
  94. ansible.builtin.shell:
  95. cmd: "{{ item.extract_files[0] }} completion bash > /etc/bash_completion.d/{{ item.extract_files[0] }}.completion"
  96. creates: "/etc/bash_completion.d/{{ item.extract_files[0] }}.completion"
  97. loop: "{{ downloads }}"
  98. loop_control:
  99. label: "{{ item.filename }}"
  100. when:
  101. - item.completion is defined
  102. - item.completion
  103. - name: Ensure .docker directory exists.
  104. ansible.builtin.file:
  105. path: "{{ ansible_facts['user_dir'] }}/.docker"
  106. state: directory
  107. mode: 0750
  108. owner: student
  109. group: student
  110. - name: Ensure mirror registry auth file is on standby.
  111. ansible.builtin.copy:
  112. dest: "{{ ansible_facts['user_dir'] }}/.docker/config.json-mirror"
  113. mode: 0640
  114. owner: student
  115. group: student
  116. content: '{"auths":{"registry.ocp4.example.com":{"auth":"YWRtaW46cmVkaGF0MTIz"},"cloud.openshift.com":{"auth":"b3BlbnNoaWZ0LXJlbGVhc2UtZGV2K29jbV9hY2Nlc3NfNGM4ZmZhZTI5ZjUzNGJiZjgyZDhlNWE0ZmZiYjRiY2Y6N0NER083UjM4TE1KTEJTN1EzVkVKQVkyTVVCUkpXQjNWNlUxR1BLVzRaN0tGTVpaSENVVTMwMVdaTzMxTDBPNQ==","email":"glsbugs-devops@redhat.com"},"quay.io":{"auth":"b3BlbnNoaWZ0LXJlbGVhc2UtZGV2K29jbV9hY2Nlc3NfNGM4ZmZhZTI5ZjUzNGJiZjgyZDhlNWE0ZmZiYjRiY2Y6N0NER083UjM4TE1KTEJTN1EzVkVKQVkyTVVCUkpXQjNWNlUxR1BLVzRaN0tGTVpaSENVVTMwMVdaTzMxTDBPNQ==","email":"glsbugs-devops@redhat.com"},"registry.connect.redhat.com":{"auth":"fHVoYy1wb29sLTlmMDA1Mzc2LTM2YTItNDJhMS1hNTQwLTA0NzNkYzg3MzYzMzpleUpoYkdjaU9pSlNVelV4TWlKOS5leUp6ZFdJaU9pSTVPRGc1WVdFeFl6Qm1PV0kwWmpVM1lqazNObUk1WldFeU16SXdaalUwTUNKOS5zWmQ5VE1RbzBXREc2NUc5Qk1ObmtuYlBjRkIzNmhyRFhkMThfdTNLeHFaczdlOG1hQ19QeEFReGpwdVk0YVM2VERIbkxDNWpGYjRRNXFYVEpWbjJCOGE4cDFuY08tM24ySG5QdDg3NmktVUFDU3lldWtpb3k4aHI0V3d1ZkhReFVYMmxxWFhYdjN6blE3am1URUNBc25rWkNRSFU1dFNpRnNUZHhFZGZkeU42Z20xN3VqY2thZG5NbFBZcTZfU1I2bUtLaUpUdFQ3SFlDWXJBVk5zZ0tfNGFkZ2MtRXBlbEtHbGNERWkzNGhYbzFqbEIzRERyUWkxSUxCV0UwZkdXb1czZy1ZUzFGMFlEXzc0bm1XSU5mUE1jM25UOERaQWl0OEw0VlFPTnZnUE51YnVfTVVGUGhqX29VUjF3VUR0a1BRNktJdm82UWYyRkdwMndLM1B6YnRBRFFzRVZTZDlITzQ3a0RKdGFobk95YTFmRmdqZVk1bFNxLW1vT2RqUldCZ3U2XzNIX25lZExJR1lQRHRBZnp5cGJ1eHZ1cEd1M2hYWnVzeWN0aURtR203SkR5RW5KdjF1RFZmYVduU2EzSV9NcFRSVVcyZWU1RF9CanJleTdlU2I0bEpGcmp1eC1nY2JVaHFsWGJZc2l6azdXWHpvRmtrVFlMdXFDQ1FvS1J0OFdSN1UzTmh3c3Q2ckV3eEFOaWJFTlNzUVB3MGg4X0NDRm5qTHFSTl82cWpTc0tpeWRGT2tHVFliT0taTktaSVVhYkZFTjRhYVRVYmlYTVdPS2Eyak1xLUhwazBMNEowUmtOM2JkQVVqWmtERHE0ZFY1ZVFjdXNIeV9LY29nd1VKSjZ4MDNObnM4b0xBdjRJZ3RKeXlxcmE1YUJHSkxReHNjRXVSNzQwWQ==","email":"glsbugs-devops@redhat.com"},"registry.redhat.io":{"auth":"fHVoYy1wb29sLTlmMDA1Mzc2LTM2YTItNDJhMS1hNTQwLTA0NzNkYzg3MzYzMzpleUpoYkdjaU9pSlNVelV4TWlKOS5leUp6ZFdJaU9pSTVPRGc1WVdFeFl6Qm1PV0kwWmpVM1lqazNObUk1WldFeU16SXdaalUwTUNKOS5zWmQ5VE1RbzBXREc2NUc5Qk1ObmtuYlBjRkIzNmhyRFhkMThfdTNLeHFaczdlOG1hQ19QeEFReGpwdVk0YVM2VERIbkxDNWpGYjRRNXFYVEpWbjJCOGE4cDFuY08tM24ySG5QdDg3NmktVUFDU3lldWtpb3k4aHI0V3d1ZkhReFVYMmxxWFhYdjN6blE3am1URUNBc25rWkNRSFU1dFNpRnNUZHhFZGZkeU42Z20xN3VqY2thZG5NbFBZcTZfU1I2bUtLaUpUdFQ3SFlDWXJBVk5zZ0tfNGFkZ2MtRXBlbEtHbGNERWkzNGhYbzFqbEIzRERyUWkxSUxCV0UwZkdXb1czZy1ZUzFGMFlEXzc0bm1XSU5mUE1jM25UOERaQWl0OEw0VlFPTnZnUE51YnVfTVVGUGhqX29VUjF3VUR0a1BRNktJdm82UWYyRkdwMndLM1B6YnRBRFFzRVZTZDlITzQ3a0RKdGFobk95YTFmRmdqZVk1bFNxLW1vT2RqUldCZ3U2XzNIX25lZExJR1lQRHRBZnp5cGJ1eHZ1cEd1M2hYWnVzeWN0aURtR203SkR5RW5KdjF1RFZmYVduU2EzSV9NcFRSVVcyZWU1RF9CanJleTdlU2I0bEpGcmp1eC1nY2JVaHFsWGJZc2l6azdXWHpvRmtrVFlMdXFDQ1FvS1J0OFdSN1UzTmh3c3Q2ckV3eEFOaWJFTlNzUVB3MGg4X0NDRm5qTHFSTl82cWpTc0tpeWRGT2tHVFliT0taTktaSVVhYkZFTjRhYVRVYmlYTVdPS2Eyak1xLUhwazBMNEowUmtOM2JkQVVqWmtERHE0ZFY1ZVFjdXNIeV9LY29nd1VKSjZ4MDNObnM4b0xBdjRJZ3RKeXlxcmE1YUJHSkxReHNjRXVSNzQwWQ==","email":"glsbugs-devops@redhat.com"}}}'
  117. - name: Ensure installation registry auth file is active.
  118. ansible.builtin.copy:
  119. dest: "{{ item }}"
  120. mode: 0640
  121. owner: student
  122. group: student
  123. content: '{"auths":{"registry.ocp4.example.com":{"auth":"YWRtaW46cmVkaGF0MTIz"}}}'
  124. loop:
  125. - "{{ ansible_facts['user_dir'] }}/.docker/config.json"
  126. - "{{ ansible_facts['user_dir'] }}/install-pull-secret"
  127. - name: Create a SSH keypair, if necessary.
  128. community.crypto.openssh_keypair:
  129. path: "{{ ansible_facts['user_dir'] }}/.ssh/openshift"
  130. type: rsa
  131. size: 2048
  132. state: present
  133. - name: Ensure DHCP server on utility is configured.
  134. hosts: utility.lab.example.com
  135. gather_subset: min
  136. become: yes
  137. tasks:
  138. - name: Ensure there is a DHCP server installed.
  139. ansible.builtin.yum:
  140. name: dhcp-server
  141. state: present
  142. - name: Fix the environment of the DHCP server a bit by ensuring the unit file specifies it.
  143. ansible.builtin.copy:
  144. dest: /etc/systemd/system/dhcpd.service
  145. mode: 0644
  146. owner: root
  147. group: root
  148. content: |
  149. [Unit]
  150. Description=DHCPv4 Server Daemon
  151. Documentation=man:dhcpd(8) man:dhcpd.conf(5)
  152. Wants=network-online.target
  153. After=network-online.target
  154. After=time-sync.target
  155. [Service]
  156. Type=notify
  157. Environment=DHCPDARGS=eth1
  158. EnvironmentFile=-/etc/sysconfig/dhcpd
  159. ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid $DHCPDARGS
  160. StandardError=null
  161. [Install]
  162. WantedBy=multi-user.target
  163. notify: reload systemd
  164. - name: Ensure systemd is reloaded if it needs to be at this point.
  165. ansible.builtin.meta: flush_handlers
  166. - name: Ensure the DHCP config file has the correct content.
  167. ansible.builtin.copy:
  168. dest: /etc/dhcp/dhcpd.conf
  169. mode: 0640
  170. owner: root
  171. group: root
  172. content: |
  173. ddns-update-style interim;
  174. ignore client-updates;
  175. authoritative;
  176. allow booting;
  177. allow bootp;
  178. allow unknown-clients;
  179. # Set default and max IP lease time to infinite with -1 value
  180. default-lease-time -1;
  181. max-lease-time -1;
  182. # BEGIN ANSIBLE MANAGED DHCP CONFIG for ocp4.example.com
  183. subnet 192.168.50.0 netmask 255.255.255.0 {
  184. range 192.168.50.100 192.168.50.149;
  185. option routers 192.168.50.254;
  186. option ntp-servers 103.16.182.23,103.16.182.214;
  187. option domain-search "ocp4.example.com";
  188. filename "pxelinux.0";
  189. option domain-name-servers 192.168.50.254;
  190. next-server 192.168.50.254;
  191. host master01.ocp4.example.com { hardware ethernet 52:54:00:00:32:0A; fixed-address 192.168.50.10; option host-name "master01"; }
  192. host master02.ocp4.example.com { hardware ethernet 52:54:00:00:32:0B; fixed-address 192.168.50.11; option host-name "master02"; }
  193. host master03.ocp4.example.com { hardware ethernet 52:54:00:00:32:0C; fixed-address 192.168.50.12; option host-name "master03"; }
  194. host worker01.ocp4.example.com { hardware ethernet 52:54:00:00:32:0D; fixed-address 192.168.50.13; option host-name "worker01"; }
  195. host worker02.ocp4.example.com { hardware ethernet 52:54:00:00:32:0E; fixed-address 192.168.50.14; option host-name "worker02"; }
  196. }
  197. # END ANSIBLE MANAGED DHCP CONFIG for ocp4.example.com
  198. notify: restart dhcpd
  199. - name: Ensure DHCP server is enabled and running.
  200. ansible.builtin.systemd_service:
  201. name: dhcpd
  202. enabled: yes
  203. state: started
  204. handlers:
  205. - name: restart dhcpd
  206. ansible.builtin.systemd_service:
  207. name: dhcpd
  208. state: restarted
  209. - name: reload systemd
  210. ansible.builtin.systemd_service:
  211. daemon_reload: true
  212. ...