Skip to content

Commit

Permalink
fix: cloud init problems with ubuntu (#1150) (#1158)
Browse files Browse the repository at this point in the history
* fix: cloud init problems with ubuntu (#1150)

* fix: install guest info if cloud init version is > 23.1.2

* ci: adds basic ubuntu test

* fix: adds handling for redhat system and cloud init

* !fixup: higher parallel

* fix: adds override for ubuntu tests

* do not merge: build basic os for ubuntu

* do not merge: ensure new cloud init for tests

* fix: remove package pining

* fix: remvove cloud-init dropin for custom vmware guest datasource

* fix: magefile configuration to create vsphere infa override file

---------

Co-authored-by: Shalin Patel <shalin.patel@nutanix.com>

* ci: run rocky basic e2e tests

---------

Co-authored-by: Faiq <faiq.raza@nutanix.com>
  • Loading branch information
supershal and faiq authored Aug 24, 2024
1 parent d2d0a6d commit c426f73
Show file tree
Hide file tree
Showing 8 changed files with 87 additions and 71 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/release-vsphere-template.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ jobs:
build-e2e:
strategy:
fail-fast: false
max-parallel: 3
max-parallel: 10
matrix:
include:
- os: "redhat 8.4"
Expand All @@ -22,7 +22,7 @@ jobs:
- os: "redhat 8.4"
buildConfig: "offline-fips"
- os: "ubuntu 20.04"
buildConfig: "offline"
buildConfig: "basic"
- os: "rocky 9.1"
buildConfig: "offline"
- os: "flatcar"
Expand Down
6 changes: 5 additions & 1 deletion .github/workflows/vsphere-e2e.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
rune2e:
strategy:
fail-fast: false
max-parallel: 5
max-parallel: 8
matrix:
include:
- os: "redhat 7.9"
Expand All @@ -33,8 +33,12 @@ jobs:
buildConfig: "offline-fips"
- os: "ubuntu 20.04"
buildConfig: "offline"
- os: "ubuntu 20.04"
buildConfig: "basic"
- os: "rocky 9.1"
buildConfig: "offline"
- os: "rocky 9.1"
buildConfig: "basic"
- os: "flatcar"
buildConfig: "basic"
runs-on:
Expand Down
5 changes: 5 additions & 0 deletions ansible/roles/providers/tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
52 changes: 52 additions & 0 deletions ansible/roles/providers/tasks/vmware-redhat.yaml
Original file line number Diff line number Diff line change
@@ -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
60 changes: 4 additions & 56 deletions ansible/roles/providers/tasks/vmware.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
- cloud-initramfs-dyn-netconf
when: ansible_os_family == "Debian"


- name: Install cloud-init packages
yum:
name: "{{ packages }}"
Expand Down Expand Up @@ -58,36 +59,6 @@
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
when: ansible_os_family != "Flatcar"

- 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
when: ansible_os_family != "Flatcar"

- name: Remove subiquity-disable-cloudinit-networking.cfg
file:
path: /etc/cloud/cloud.cfg.d/subiquity-disable-cloudinit-networking.cfg
Expand All @@ -100,29 +71,6 @@
state: absent
when: ansible_os_family != "Flatcar"

# 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
when: ansible_os_family != "Flatcar"

- name: Execute cloud-init-vmware.sh
shell: bash -o errexit -o pipefail /tmp/cloud-init-vmware.sh
environment:
VMWARE_DS_PATH: '/tmp/DataSourceVMwareGuestInfo.py'
when: ansible_os_family != "Flatcar"

- 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
file:
Expand Down Expand Up @@ -166,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:
Expand Down
27 changes: 17 additions & 10 deletions magefile.go
Original file line number Diff line number Diff line change
Expand Up @@ -140,14 +140,14 @@ func RunE2e(buildOS, buildConfig, buildInfra string, dryRun bool) error {
}
}

if buildOS == "flatcar" && buildInfra == ova {
flatcarOverride := "packer-ova-flatcar-override.yaml"
flatcarOverrideFlag := fmt.Sprintf("--overrides=%s", flatcarOverride)
overrideFlagForCmd = append(overrideFlagForCmd, flatcarOverrideFlag)
fmt.Printf("making flatcar override %s \n", flatcarOverride)
if buildConfig == basic && buildInfra == ova {
basicOverride := "packer-ova-basic-override.yaml"
basicOverrideFlag := fmt.Sprintf("--overrides=%s", basicOverride)
overrideFlagForCmd = append(overrideFlagForCmd, basicOverrideFlag)
fmt.Printf("making basic override %s \n", basicOverride)
// TODO: @faiq - move this to mage
if err := sh.RunV("make", flatcarOverride); err != nil {
return fmt.Errorf("failed to override for flatcar ova %s %v", flatcarOverride, err)
if err := sh.RunV("make", basicOverride); err != nil {
return fmt.Errorf("failed to override for basic ova %s %v", basicOverride, err)
}
}

Expand Down Expand Up @@ -391,18 +391,19 @@ func downloadAirgappedArtifacts(buildOS, buildConfig string) error {
if err := fetchPipPackages(artifactsDir); err != nil {
return fmt.Errorf("failed to fetch pip packages %w", err)
}
if buildConfig == offlineNvidia {
isGPU := buildConfig == offlineNvidia
if isGPU {
if err := fetchNvidiaRunFile(); err != nil {
return fmt.Errorf("failed to fetch nvidiaRunFile %w", err)
}
}
if err := createOSBundle(buildOS, kubeVersion, artifactsDir, isFips); err != nil {
if err := createOSBundle(buildOS, kubeVersion, artifactsDir, isFips, isGPU); err != nil {
return fmt.Errorf("failed to fetch OS bundle %w", err)
}
return nil
}

func createOSBundle(osName, kubernetesVersion, downloadDir string, fips bool) error {
func createOSBundle(osName, kubernetesVersion, downloadDir string, fips, gpu bool) error {
osInfo := strings.Replace(osName, " ", "-", 1)
args := []string{
"create-package-bundle", fmt.Sprintf("--os=%s", osInfo),
Expand All @@ -411,6 +412,12 @@ func createOSBundle(osName, kubernetesVersion, downloadDir string, fips bool) er
if fips {
args = append(args, "--fips=true")
}
if osName == "redhat 8.8" || osName == "redhat 8.6" {
args = append(args, "--enable-eus-repos=true")
}
if gpu {
args = append(args, "--fetch-kernel-headers=true")
}
return sh.RunV(wrapperCmd, args...)
}

Expand Down
4 changes: 2 additions & 2 deletions test/infra/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,8 @@ packer-aws-offline-override.yaml: infra.aws.create install-envsubst
packer-ova-offline-override.yaml: infra.vsphere.create install-envsubst
@$(INFRA_MODULES_DIR)/vsphere/export.sh $@

packer-ova-flatcar-override.yaml: install-envsubst
"${ENVSUBST_ASSETS}"/envsubst < "$(INFRA_MODULES_DIR)"/vsphere/packer-vsphere-flatcar.yaml.tmpl > $@
packer-ova-basic-override.yaml: install-envsubst
"${ENVSUBST_ASSETS}"/envsubst < "$(INFRA_MODULES_DIR)"/vsphere/packer-vsphere-basic.yaml.tmpl > $@

.PHONY: infra.aws.destroy
infra.aws.destroy: ## Destroy infrastructure
Expand Down

0 comments on commit c426f73

Please sign in to comment.