From e0ed4d2dee5028b0ea0bfc7f27720cf24106b065 Mon Sep 17 00:00:00 2001 From: Julia Kreger Date: Thu, 3 Sep 2020 08:01:02 -0700 Subject: [PATCH] Rework jobs so failed devstack does not retry the job Per clarkb, should any step in pre.yaml fail, zuul presently retries the entire job up to the built in retry limit which cannot be changed or disabled on a job basis. In the terms of setting up devstack, this is not ideal as devstack is not perfect and can often fail for unrelated reasons such as package mirrors being updated or even another project or component failing to setup properly. As such, in order to be good neighbors and minimize the amount of time it takes to troubleshoot such issues, we need to move the devstack setup into the main part of the CI job. Change-Id: I08d6f3132ebc045ba7e2d1295efe39af7c57187c --- .zuul.yaml | 2 - playbooks/integration/centos-image.yaml | 236 +++++++++--------- .../{pre.yaml => initial-setup.yaml} | 0 playbooks/integration/run.yaml | 12 +- 4 files changed, 131 insertions(+), 119 deletions(-) rename playbooks/integration/{pre.yaml => initial-setup.yaml} (100%) diff --git a/.zuul.yaml b/.zuul.yaml index 7d19ac1..14fb876 100644 --- a/.zuul.yaml +++ b/.zuul.yaml @@ -3,7 +3,6 @@ description: | Base job for devstack-based metalsmith jobs. parent: devstack-minimal - pre-run: playbooks/integration/pre.yaml post-run: playbooks/integration/post.yaml run: playbooks/integration/run.yaml irrelevant-files: @@ -120,7 +119,6 @@ Integration job using Glance as image source and CentOS7 with local boot. parent: metalsmith-integration-base timeout: 7200 - pre-run: playbooks/integration/centos-image.yaml vars: devstack_localrc: # NOTE(dtantsur): we need to use streaming, otherwise the image won't diff --git a/playbooks/integration/centos-image.yaml b/playbooks/integration/centos-image.yaml index d68e9d1..fb9da51 100644 --- a/playbooks/integration/centos-image.yaml +++ b/playbooks/integration/centos-image.yaml @@ -1,145 +1,149 @@ --- -- hosts: all - environment: - OS_CLOUD: devstack-admin - - vars: +- name: Set facts for centos image builds + set_fact: centos_image_file: ~/centos-download.qcow2 centos_initramfs_file: ~/centos.initramfs centos_kernel_file: ~/centos.kernel centos_partition_file: ~/centos-root.qcow2 centos_image_url: https://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2.xz - tasks: - - name: Install guestfish - package: - name: libguestfs-tools - state: present - become: true +- name: Install guestfish + package: + name: libguestfs-tools + state: present + become: true - - name: Make kernel files readable (workaround for Ubuntu) - shell: chmod 0644 /boot/vmlinuz-* - become: true +- name: Make kernel files readable (workaround for Ubuntu) + shell: chmod 0644 /boot/vmlinuz-* + become: true - - name: Download the CentOS image - get_url: - url: "{{ centos_image_url }}" - dest: "{{ centos_image_file }}.xz" - register: centos_image_result - until: centos_image_result is succeeded - retries: 3 - delay: 10 +- name: Download the CentOS image + get_url: + url: "{{ centos_image_url }}" + dest: "{{ centos_image_file }}.xz" + register: centos_image_result + until: centos_image_result is succeeded + retries: 3 + delay: 10 - - name: Unpack the CentOS image - command: xz -d {{ centos_image_file }}.xz +- name: Unpack the CentOS image + command: xz -d {{ centos_image_file }}.xz - - name: Print filesystems from the image - command: virt-filesystems -a {{ centos_image_file }} -l --extra --block-devices +- name: Print filesystems from the image + command: virt-filesystems -a {{ centos_image_file }} -l --extra --block-devices - - name: Upload the CentOS whole-disk image - command: > - openstack image create --disk-format qcow2 - --public --file {{ centos_image_file }} - {{ centos_glance_whole_disk_image }} - when: centos_glance_whole_disk_image is defined +- name: Upload the CentOS whole-disk image + command: > + openstack image create --disk-format qcow2 + --public --file {{ centos_image_file }} + {{ centos_glance_whole_disk_image }} + environment: + OS_CLOUD: devstack-admin + when: centos_glance_whole_disk_image is defined - - name: Create a temporary directory for extraction - tempfile: - state: directory - suffix: boot - register: temp_dir +- name: Create a temporary directory for extraction + tempfile: + state: directory + suffix: boot + register: temp_dir - - name: Extract kernel/ramdisk from the image - command: > - virt-get-kernel -a {{ centos_image_file }} - -o {{ temp_dir.path }} --unversioned-names +- name: Extract kernel/ramdisk from the image + command: > + virt-get-kernel -a {{ centos_image_file }} + -o {{ temp_dir.path }} --unversioned-names - - name: Upload the CentOS kernel image - command: > - openstack image create --disk-format aki --container-format aki \ - --public --file {{ temp_dir.path }}/vmlinuz -f value -c id - {{ centos_glance_kernel_image }} - register: centos_kernel_id - failed_when: centos_kernel_id.stdout == "" - when: centos_glance_kernel_image is defined +- name: Upload the CentOS kernel image + command: > + openstack image create --disk-format aki --container-format aki \ + --public --file {{ temp_dir.path }}/vmlinuz -f value -c id + {{ centos_glance_kernel_image }} + register: centos_kernel_id + failed_when: centos_kernel_id.stdout == "" + environment: + OS_CLOUD: devstack-admin + when: centos_glance_kernel_image is defined - - name: Upload the CentOS initramfs image - command: > - openstack image create --disk-format ari --container-format ari \ - --public --file {{ temp_dir.path }}/initramfs -f value -c id - {{ centos_glance_initramds_image }} - register: centos_initramfs_id - failed_when: centos_initramfs_id.stdout == "" - when: centos_glance_initramds_image is defined +- name: Upload the CentOS initramfs image + command: > + openstack image create --disk-format ari --container-format ari \ + --public --file {{ temp_dir.path }}/initramfs -f value -c id + {{ centos_glance_initramds_image }} + register: centos_initramfs_id + failed_when: centos_initramfs_id.stdout == "" + environment: + OS_CLOUD: devstack-admin + when: centos_glance_initramds_image is defined - - name: Delete the kernel and ramdisk image files - file: - state: absent - path: "{{ temp_dir.path }}/{{ item }}" - with_items: - - vmlinuz - - initramfs +- name: Delete the kernel and ramdisk image files + file: + state: absent + path: "{{ temp_dir.path }}/{{ item }}" + with_items: + - vmlinuz + - initramfs - - name: Extract the root file system - command: virt-tar-out -a {{ centos_image_file }} / {{ temp_dir.path }}/root.tar +- name: Extract the root file system + command: virt-tar-out -a {{ centos_image_file }} / {{ temp_dir.path }}/root.tar - - name: Delete the whole-disk image file - file: - state: absent - path: "{{ centos_image_file }}" +- name: Delete the whole-disk image file + file: + state: absent + path: "{{ centos_image_file }}" - - name: Extract /etc/fstab and /etc/selinux/config - command: > - tar -f {{ temp_dir.path }}/root.tar - -C {{ temp_dir.path }} --extract {{ item }} - with_items: - - ./etc/fstab - - ./etc/selinux/config +- name: Extract /etc/fstab and /etc/selinux/config + command: > + tar -f {{ temp_dir.path }}/root.tar + -C {{ temp_dir.path }} --extract {{ item }} + with_items: + - ./etc/fstab + - ./etc/selinux/config - - name: Remove /etc/fstab and /etc/selinux/config from the archive - command: tar -f {{ temp_dir.path }}/root.tar --delete {{ item }} - with_items: - - ./etc/fstab - - ./etc/selinux/config +- name: Remove /etc/fstab and /etc/selinux/config from the archive + command: tar -f {{ temp_dir.path }}/root.tar --delete {{ item }} + with_items: + - ./etc/fstab + - ./etc/selinux/config - - name: Edit /etc/fstab to replace UUID with LABEL - command: sed -i 's/UUID=[^ ]* /\/dev\/vda2 /' {{ temp_dir.path}}/etc/fstab +- name: Edit /etc/fstab to replace UUID with LABEL + command: sed -i 's/UUID=[^ ]* /\/dev\/vda2 /' {{ temp_dir.path}}/etc/fstab - - name: Rewrite /etc/selinux/config to disable selinux - copy: - dest: "{{ temp_dir.path }}/etc/selinux/config" - content: "SELINUX=disabled" +- name: Rewrite /etc/selinux/config to disable selinux + copy: + dest: "{{ temp_dir.path }}/etc/selinux/config" + content: "SELINUX=disabled" - - name: Add edited /etc/fstab and /etc/selinux/config back - command: > - tar -f {{ temp_dir.path }}/root.tar - -C {{ temp_dir.path }} - --append {{ item }} --owner root --group root - with_items: - - ./etc/fstab - - ./etc/selinux/config +- name: Add edited /etc/fstab and /etc/selinux/config back + command: > + tar -f {{ temp_dir.path }}/root.tar + -C {{ temp_dir.path }} + --append {{ item }} --owner root --group root + with_items: + - ./etc/fstab + - ./etc/selinux/config - - name: Pack the root file system into a partition image - command: virt-make-fs {{ temp_dir.path }}/root.tar {{ centos_partition_file }} +- name: Pack the root file system into a partition image + command: virt-make-fs {{ temp_dir.path }}/root.tar {{ centos_partition_file }} - - name: Print filesystems from the image - command: virt-filesystems -a {{ centos_partition_file }} -l --extra --block-devices +- name: Print filesystems from the image + command: virt-filesystems -a {{ centos_partition_file }} -l --extra --block-devices - - name: Remove the temporary directory - file: - state: absent - path: "{{ temp_dir.path }}" +- name: Remove the temporary directory + file: + state: absent + path: "{{ temp_dir.path }}" - - name: Upload the CentOS partition image - command: > - openstack image create --disk-format qcow2 - --public --file {{ centos_partition_file }} - --property kernel_id={{ centos_kernel_id.stdout }} - --property ramdisk_id={{ centos_initramfs_id.stdout }} - {{ centos_glance_root_image }} - when: centos_glance_root_image is defined +- name: Upload the CentOS partition image + command: > + openstack image create --disk-format qcow2 + --public --file {{ centos_partition_file }} + --property kernel_id={{ centos_kernel_id.stdout }} + --property ramdisk_id={{ centos_initramfs_id.stdout }} + {{ centos_glance_root_image }} + environment: + OS_CLOUD: devstack-admin + when: centos_glance_root_image is defined - - name: Remove the partition image file - file: - state: absent - path: "{{ centos_partition_file }}" +- name: Remove the partition image file + file: + state: absent + path: "{{ centos_partition_file }}" diff --git a/playbooks/integration/pre.yaml b/playbooks/integration/initial-setup.yaml similarity index 100% rename from playbooks/integration/pre.yaml rename to playbooks/integration/initial-setup.yaml diff --git a/playbooks/integration/run.yaml b/playbooks/integration/run.yaml index 252f15b..61f44aa 100644 --- a/playbooks/integration/run.yaml +++ b/playbooks/integration/run.yaml @@ -1,4 +1,7 @@ --- +- name: Perform initial setup + include: initial-setup.yaml + - hosts: all environment: OS_CLOUD: devstack-admin @@ -6,8 +9,15 @@ tasks: - include_tasks: ssh-key.yaml + - include_tasks: centos-image.yaml + when: + - metalsmith_whole_disk_image is defined + - metalsmith_partition_image is defined + - include_tasks: cirros-image.yaml - when: metalsmith_whole_disk_image is not defined + when: + - metalsmith_whole_disk_image is undefined + - metalsmith_partition_image is undefined - name: Test a whole-disk image include_tasks: exercise.yaml