okd-single-node-install/generate-iso.yaml

148 lines
5.5 KiB
YAML

---
- name: Generate custom ISO file for deploying OKD to baremetal
hosts: all
connection: local
gather_facts: no
vars:
#okdVersion: "4.16.0-okd-scos.1"
okdVersion: "4.15.0-0.okd-2024-03-10-010116"
localCDN: "https://cdn.endofday.com"
tempDir: "/tmp/ocp-baremetal-iso-staging"
#scosBaseUrl: "https://cdn.endofday.com/okd-project"
scosBaseUrl: ""
useCustomButaneTemplates: false
tasks:
- name: Ensure staging directory exists
ansible.builtin.file:
path: "{{ tempDir }}/{{ clusterName }}"
state: directory
- name: Check if binaries exist
ansible.builtin.stat:
path: "{{ tempDir }}/{{ item }}"
register: binaries
with_items:
- "openshift-install"
- "oc"
- name: Set URI for Legacy FCOS binaries
set_fact:
binariesBaseUrl: "{{ ( localCDN | d('') != '') | ternary('{{ localCDN }}/okd-project/okd/releases/download','https://github.com/okd-project/okd/releases/download') }}"
when: '"scos" not in okdVersion'
- name: Set URI for CentOS Stream CoreOS (SCOS) binaries
set_fact:
binariesBaseUrl: "{{ ( localCDN | d('') != '') | ternary('{{ localCDN }}/okd-project/okd-scos/releases/download','https://github.com/okd-project/okd-scos/releases/download') }}"
when: '"scos" in okdVersion'
- name: Download and extract binaries
when: >
(binaries.results | map(attribute='stat.exists') | select('equalto', false) | list | length) > 0
block:
- name: Download OKD Binaries
ansible.builtin.get_url:
url: "{{ binariesBaseUrl }}/{{ okdVersion }}/{{ item }}-{{ okdVersion }}.tar.gz"
dest: "{{ tempDir }}/{{ item }}-{{ okdVersion }}.tar.gz"
with_items:
- "openshift-client-linux"
- "openshift-install-linux"
- name: Extract openshift binaries
ansible.builtin.unarchive:
src: "{{ tempDir }}/{{ item }}-{{okdVersion}}.tar.gz"
dest: "{{ tempDir }}"
with_items:
- "openshift-client-linux"
- "openshift-install-linux"
- name: Ensure the extracted binaries are executable
ansible.builtin.file:
path: "{{ tempDir }}/{{ item }}"
state: file
mode: '0755'
with_items:
- kubectl
- oc
- openshift-install
- name: Remove binary tarballs
ansible.builtin.file:
path: "{{ tempDir }}/{{ item }}-{{okdVersion}}.tar.gz"
state: absent
with_items:
- "openshift-client-linux"
- "openshift-install-linux"
- name: Create install-config.yaml file
ansible.builtin.template:
src: "templates/install-config.yaml.j2"
dest: "{{ tempDir }}/{{ clusterName }}/install-config.yaml"
mode: "0644"
- name: Generate the install manifests (if butane is required)
when: useCustomButaneTemplates == true
block:
- name: Generate stock manifests
ansible.builtin.shell: |
set -o pipefail
{{ tempDir }}/openshift-install create manifests --dir={{ tempDir }}/{{ clusterName }}
register: generate_ignition_manifests
changed_when: false
- name: Create butane templates
ansible.builtin.template:
src: "{{ item }}"
dest: "{{ tempDir }}/{{ item | basename | regex_replace('\\.j2$', '') }}"
with_fileglob:
- templates/*.bu.j2
- name: Render butane template to OpenShift manifest
ansible.builtin.shell: |
set -o pipefail
butane {{ tempDir }}/{{ item|basename }} -o {{ tempDir }}/{{ clusterName }}/openshift/{{ item | basename | regex_replace('\\.bu', '.yaml') }}
with_fileglob:
- "{{ tempDir }}/*.bu"
register: render_butane_template
changed_when: false
- name: Generate ignition config for single node
ansible.builtin.shell: |
set -o pipefail
{{ tempDir }}/openshift-install create single-node-ignition-config --dir={{ tempDir }}/{{ clusterName }}
register: generate_ignition_file
- name: Check if ISO image exists
ansible.builtin.stat:
path: "{{ tempDir }}/os.iso"
register: iso
- name: Download CoreOS ISO
when: iso.stat.exists == false
block:
- name: Get CentOS Stream CoreOS ISO download location from openshift-installer
ansible.builtin.shell: |
set -o pipefail
{{ tempDir }}/openshift-install coreos print-stream-json | grep location | grep x86_64 | grep iso | cut -d\" -f4
register: scos_image_url
- name: Download ISO
ansible.builtin.get_url:
url: "{{ (localCDN | d('') != '') | ternary( scos_image_url.stdout | regex_replace( 'https://builds.coreos.fedoraproject.org/prod/streams/stable/builds', localCDN + '/okd-project'), scos_image_url.stdout) }}"
dest: "{{ tempDir }}/os.iso"
- name: Embed the ignition bootstrap into the iso image
become: true
ansible.builtin.shell: |
set -o pipefail
# Uncomment alias if you do not have a coreos-installer package installed
# alias coreos-installer='sudo podman run --privileged --pull always --rm -v /dev:/dev -v /run/udev:/run/udev -v {{ tempDir }}:/data -w /data quay.io/coreos/coreos-installer:release'
coreos-installer iso ignition embed -fi {{ tempDir}}/{{ clusterName }}/bootstrap-in-place-for-live-iso.ign {{ tempDir }}/os.iso
register: embed_ignition_in_iso