From fc31dd2a5ad761000d931e543f4d2aeef422f7f6 Mon Sep 17 00:00:00 2001 From: rblundon Date: Sat, 26 Jul 2025 16:55:43 -0500 Subject: [PATCH] sync to move --- .../playbooks/configure_openshift_cluster.yml | 218 ++++++++++++++++++ 1 file changed, 218 insertions(+) create mode 100644 infra-config/playbooks/configure_openshift_cluster.yml diff --git a/infra-config/playbooks/configure_openshift_cluster.yml b/infra-config/playbooks/configure_openshift_cluster.yml new file mode 100644 index 0000000..24b4a1b --- /dev/null +++ b/infra-config/playbooks/configure_openshift_cluster.yml @@ -0,0 +1,218 @@ +--- +- name: Configure DNS entries for cluster nodes + hosts: internal_cluster + gather_facts: false + become: true + tasks: + - name: Create DNS entry for each cluster node + ansible.builtin.include_tasks: tasks/create_dns_record.yml + vars: + host_ip_address: "{{ ip_address }}" + +- name: Configure DNS entries for OpenShift cluster services + hosts: internal_cluster[0] + gather_facts: false + become: true + tasks: + - name: Create DNS entries for OpenShift cluster services + ansible.builtin.include_tasks: tasks/create_dns_record.yml + vars: + dns_name: "{{ item.name }}" + dns_address: "{{ item.address }}" + loop: + - name: "api.{{ cluster_name }}" + address: "{{ api_address }}" + - name: "api-int.{{ cluster_name }}" + address: "{{ api_address }}" + - name: "*.apps.{{ cluster_name }}" + address: "{{ app_address }}" + loop_control: + label: "{{ item.name }}" + +- name: Configure DHCP entries for cluster nodes + hosts: internal_cluster + gather_facts: false + become: true + tasks: + - name: Configure DHCP entry for node + ansible.builtin.include_tasks: tasks/configure_dhcp_entry.yml + vars: + host_mac_address: "{{ install_mac_address }}" + host_ip_address: "{{ ip_address }}" + + handlers: + - name: Restart dnsmasq + delegate_to: "{{ dhcp_server }}" + become: true + ansible.builtin.service: + name: dnsmasq + state: restarted + +- name: Create OpenShift installer files + hosts: matchbox + gather_facts: true + + vars: + cluster_group: "internal_cluster" + download_dir: "/var/cache/openshift-install" + + tasks: + - name: Remove previous directory + ansible.builtin.file: + path: ~/homelab/terraform/{{ cluster_group }} + state: absent + + - name: Create directory + ansible.builtin.file: + path: ~/homelab/terraform/{{ cluster_group }} + state: directory + mode: '0755' + + - name: OpenShift Installer install-config.yaml + ansible.builtin.template: + src: templates/install-config.yaml.j2 + dest: ~/homelab/terraform/{{ cluster_group }}/install-config.yaml + mode: '0644' + + - name: OpenShift Installer agent-config.yaml + ansible.builtin.template: + src: templates/agent-config.yaml.j2 + dest: ~/homelab/terraform/{{ cluster_group }}/agent-config.yaml + mode: '0644' + + - name: Create directory for OpenShift Installer files + become: true + ansible.builtin.file: + path: "{{ download_dir }}/{{ hostvars[groups[cluster_group][0]].cluster_version }}" + state: directory + mode: '0755' + owner: root + group: root + + - name: Check if OpenShift installer file exists + ansible.builtin.stat: + path: "{{ download_dir }}/{{ hostvars[groups[cluster_group][0]].cluster_version }}/{{ hostvars[groups[cluster_group][0]].openshift_installer_file }}" + register: openshift_installer_file + + - name: Download and install OpenShift installer package + when: not openshift_installer_file.stat.exists + block: + - name: Download OpenShift Installer file + become: true + ansible.builtin.get_url: + url: "{{ hostvars[groups[cluster_group][0]].openshift_installer_download_url }}" + dest: /var/cache/openshift-install/{{ hostvars[groups[cluster_group][0]].cluster_version }} + mode: '0644' + + - name: Unarchive installer file + become: true + ansible.builtin.unarchive: + src: /var/cache/openshift-install/{{ hostvars[groups[cluster_group][0]].cluster_version }}/openshift-install-linux.tar.gz + dest: /var/cache/openshift-install/{{ hostvars[groups[cluster_group][0]].cluster_version }} + remote_src: true + + - name: Copy install binary + become: true + ansible.builtin.copy: + src: /var/cache/openshift-install/{{ hostvars[groups[cluster_group][0]].cluster_version }}/openshift-install + dest: /usr/local/bin + remote_src: true + owner: wed + group: wed + mode: '0755' + + - name: Check if OpenShift client file exists + ansible.builtin.stat: + path: "{{ download_dir }}/{{ hostvars[groups[cluster_group][0]].cluster_version }}/{{ hostvars[groups[cluster_group][0]].openshift_client_file }}" + register: openshift_client_file + + - name: Download and install OpenShift client package + when: not openshift_client_file.stat.exists + block: + - name: Download OpenShift Client file + become: true + ansible.builtin.get_url: + url: "{{ hostvars[groups[cluster_group][0]].openshift_client_download_url }}" + dest: /var/cache/openshift-install/{{ hostvars[groups[cluster_group][0]].cluster_version }} + mode: '0644' + + - name: Unarchive client file + become: true + ansible.builtin.unarchive: + src: /var/cache/openshift-install/{{ hostvars[groups[cluster_group][0]].cluster_version }}/openshift-client-linux.tar.gz + dest: /var/cache/openshift-install/{{ hostvars[groups[cluster_group][0]].cluster_version }} + remote_src: true + + - name: Copy client binary + become: true + ansible.builtin.copy: + src: /var/cache/openshift-install/{{ hostvars[groups[cluster_group][0]].cluster_version }}/oc + dest: /usr/local/bin + remote_src: true + owner: wed + group: wed + mode: '0755' + + - name: Check if OpenShift image exists + ansible.builtin.stat: + path: ~/homelab/terraform/{{ cluster_group }}/boot-artifacts/agent.x86_64-initrd.img + register: openshift_image_exists + + - name: OpenShift image creation + ansible.builtin.command: /usr/local/bin/openshift-install agent create pxe-files + args: + chdir: ~/homelab/terraform/{{ cluster_group }} + when: not openshift_image_exists.stat.exists + changed_when: true + + - name: Create a directory if it does not exist + become: true + ansible.builtin.file: + path: "{{ hostvars[groups['matchbox_server'][0]].assets }}/{{ hostvars[groups[cluster_group][0]].cluster_name }}" + state: directory + owner: matchbox + group: matchbox + mode: '0755' + + - name: Copy file with owner and permissions + become: true + ansible.builtin.copy: + src: "{{ ansible_env['HOME'] }}/homelab/terraform/{{ cluster_group }}/boot-artifacts/" + dest: "{{ hostvars[groups['matchbox_server'][0]].assets }}/{{ hostvars[groups[cluster_group][0]].cluster_name }}/" + remote_src: true + owner: matchbox + group: matchbox + mode: '0644' + + - name: Verify directory permissions + become: true + ansible.builtin.file: + path: "{{ hostvars[groups['matchbox_server'][0]].assets }}/{{ hostvars[groups[cluster_group][0]].cluster_name }}" + state: directory + owner: matchbox + group: matchbox + mode: '0755' + + - name: Create Terraform matchbox groups file from template + ansible.builtin.template: + src: templates/groups.tf.j2 + dest: ~/homelab/terraform/{{ cluster_group }}/groups.tf + mode: '0644' + + - name: Create Terraform matchbox profiles file from template + ansible.builtin.template: + src: templates/profiles.tf.j2 + dest: ~/homelab/terraform/{{ cluster_group }}/profiles.tf + mode: '0644' + + - name: Create Terraform matchbox provider file from template + ansible.builtin.template: + src: templates/provider.tf.j2 + dest: ~/homelab/terraform/{{ cluster_group }}/provider.tf + mode: '0644' + + - name: Configure Matchbox via Terraform + community.general.terraform: + project_path: ~/homelab/terraform/{{ cluster_group }} + state: present + force_init: true