From f96d6503669a64c09113018ede62b7d50279656b Mon Sep 17 00:00:00 2001 From: Daniel Lipovetsky Date: Fri, 13 Sep 2024 11:25:55 -0700 Subject: [PATCH] fix: cloud init problems with ubuntu (#1158) --- ansible/roles/providers/tasks/main.yml | 5 ++ .../roles/providers/tasks/vmware-redhat.yaml | 52 +++++++++++++++++ ansible/roles/providers/tasks/vmware.yml | 58 +++---------------- 3 files changed, 64 insertions(+), 51 deletions(-) create mode 100644 ansible/roles/providers/tasks/vmware-redhat.yaml diff --git a/ansible/roles/providers/tasks/main.yml b/ansible/roles/providers/tasks/main.yml index 8be5634c3..448cf3640 100644 --- a/ansible/roles/providers/tasks/main.yml +++ b/ansible/roles/providers/tasks/main.yml @@ -30,3 +30,8 @@ - include_tasks: misc.yml when: packer_builder_type and packer_builder_type != "" + +- include_tasks: vmware-redhat.yaml + when: + - packer_builder_type is search('vmware') or packer_builder_type is search('vsphere') + - ansible_os_family == "RedHat" diff --git a/ansible/roles/providers/tasks/vmware-redhat.yaml b/ansible/roles/providers/tasks/vmware-redhat.yaml new file mode 100644 index 000000000..428d43abf --- /dev/null +++ b/ansible/roles/providers/tasks/vmware-redhat.yaml @@ -0,0 +1,52 @@ +- name: Get package facts + ansible.builtin.package_facts: + manager: "auto" + +- name: Set cloud-init version + ansible.builtin.set_fact: + cloud_init_version: "{{ ansible_facts.packages['cloud-init'][0].version }}" + +# this program used by ds-identify to determine whether or not the +# VMwareGuestInfo datasource is useable. +- name: Directly install GuestInfo + when: cloud_init_version is version('21.3', '<') + block: + + - name: Copy vmware guestinfo datasource + copy: + src: "{{ item }}" + dest: /tmp/ + owner: root + group: root + mode: 0755 + with_items: + - cloud-init-vmware.sh + - DataSourceVMwareGuestInfo.py + + - name: Create ds-check program to verify VMwareGuestInfo datasource + copy: + src: files/dscheck_VMwareGuestInfo.sh + dest: /usr/bin/dscheck_VMwareGuestInfo + owner: root + group: root + mode: 0755 + + - name: Execute cloud-init-vmware.sh + shell: bash -o errexit -o pipefail /tmp/cloud-init-vmware.sh + environment: + VMWARE_DS_PATH: '/tmp/DataSourceVMwareGuestInfo.py' + + - name: Remove cloud-init-vmware.sh + file: + path: /tmp/cloud-init-vmware.sh + state: absent + + # sets the datasource_list to VMwareGuestInfo for all OS + # ensure that VMwareGuestInfo overrides existing datasource drop-ins if it exists. + - name: Copy cloud-init config file for vmware + copy: + src: files/etc/cloud/cloud.cfg.d/99-DataSourceVMwareGuestInfo.cfg + dest: /etc/cloud/cloud.cfg.d/99-DataSourceVMwareGuestInfo.cfg + owner: root + group: root + mode: 0644 diff --git a/ansible/roles/providers/tasks/vmware.yml b/ansible/roles/providers/tasks/vmware.yml index fe325302d..80b0225b5 100644 --- a/ansible/roles/providers/tasks/vmware.yml +++ b/ansible/roles/providers/tasks/vmware.yml @@ -25,6 +25,7 @@ - cloud-initramfs-dyn-netconf when: ansible_os_family == "Debian" + - name: Install cloud-init packages yum: name: "{{ packages }}" @@ -58,63 +59,17 @@ packages: "cloud-init cloud-utils python3-netifaces" when: ansible_os_family == "VMware Photon OS" -# pip on CentOS needs to be upgraded, but since it's still -# Python 2.7, need < 21.0 -- name: Upgrade pip - pip: - name: pip<21.0 - extra_args: "{{ '--no-index --find-links=' + pip_packages_remote_filesystem_repo_path if offline_mode_enabled }}" - state: forcereinstall - when: ansible_os_family == "RedHat" and ansible_distribution_major_version == '7' - -- name: Copy vmware guestinfo datasource - copy: - src: "{{ item }}" - dest: /tmp/ - owner: root - group: root - mode: 0755 - with_items: - - cloud-init-vmware.sh - - DataSourceVMwareGuestInfo.py - -- name: Copy cloud-init config file for vmware - copy: - src: files/etc/cloud/cloud.cfg.d/99-DataSourceVMwareGuestInfo.cfg - dest: /etc/cloud/cloud.cfg.d/99-DataSourceVMwareGuestInfo.cfg - owner: root - group: root - mode: 0644 - - name: Remove subiquity-disable-cloudinit-networking.cfg file: path: /etc/cloud/cloud.cfg.d/subiquity-disable-cloudinit-networking.cfg state: absent + when: ansible_os_family != "Flatcar" - name: Remove 99-installer.cfg file: path: /etc/cloud/cloud.cfg.d/99-installer.cfg state: absent - -# this program used by ds-identify to determine whether or not the -# VMwareGuestInfo datasource is useable. -- name: Create ds-check program to verify VMwareGuestInfo datasource - copy: - src: files/dscheck_VMwareGuestInfo.sh - dest: /usr/bin/dscheck_VMwareGuestInfo - owner: root - group: root - mode: 0755 - -- name: Execute cloud-init-vmware.sh - shell: bash -o errexit -o pipefail /tmp/cloud-init-vmware.sh - environment: - VMWARE_DS_PATH: '/tmp/DataSourceVMwareGuestInfo.py' - -- name: Remove cloud-init-vmware.sh - file: - path: /tmp/cloud-init-vmware.sh - state: absent + when: ansible_os_family != "Flatcar" - name: >- Remove cloud-init /etc/cloud/cloud.cfg.d/99-disable-networking-config.cfg @@ -146,6 +101,7 @@ owner: root group: root mode: 0644 + when: ansible_os_family != "Flatcar" - name: Get a list of services service_facts: @@ -158,15 +114,15 @@ when: ('ufw.service' in ansible_facts.services) and (ansible_os_family == "Debian") # See https://kb.vmware.com/s/article/82229 -# From systemd docs: -# "If a valid D-Bus machine ID is already configured for the system, +# From systemd docs: +# "If a valid D-Bus machine ID is already configured for the system, # the D-Bus machine ID is copied and used to initialize the machine ID in /etc/machine-id" # This needs to be reset/truncated as well on Ubuntu. - name: Truncate D-Bus machine-id file: path: /var/lib/dbus/machine-id state: absent - when: ansible_os_family == "Debian" + when: ansible_os_family == "Debian" - name: Link D-Bus machine-id to /etc/machine-id file: