X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=ansible%2Fbuild_yardstick_image.yml;h=495a547bb62e310fa49d03c8e62e67284f7a3c20;hb=62c06a9435fe0f42eeb1fde5e86fb273941e39c8;hp=5f915857698848dad5080ce162a350e690145791;hpb=6138d2c4115f87ff71b2084cc1021701e2697c2a;p=yardstick.git diff --git a/ansible/build_yardstick_image.yml b/ansible/build_yardstick_image.yml index 5f9158576..495a547bb 100644 --- a/ansible/build_yardstick_image.yml +++ b/ansible/build_yardstick_image.yml @@ -12,33 +12,48 @@ # See the License for the specific language governing permissions and # limitations under the License. --- -- hosts: localhost +- hosts: jumphost vars: boot_modes: 'amd64': disk1 'arm64': uefi1 boot_mode: "{{ boot_modes[YARD_IMG_ARCH] }}" - image_filename: "{{ release }}-server-cloudimg-{{ YARD_IMG_ARCH }}-{{ boot_mode }}.img" - image_path: "{{ release }}/current/{{ image_filename }}" + image_filename: + 'xenial': "{{ release }}-server-cloudimg-{{ YARD_IMG_ARCH }}-{{ boot_mode }}.img" + 'bionic': "{{ release }}-server-cloudimg-{{ YARD_IMG_ARCH }}.img" + image_path: "{{ release }}/current/{{ image_filename[release] }}" host: "{{ lookup('env', 'HOST')|default('cloud-images.ubuntu.com', true)}}" image_url: "{{ lookup('env', 'IMAGE_URL')|default('https://' ~ host ~ '/' ~ image_path, true) }}" - image_dest: "{{ workspace }}/{{ image_filename }}" + image_dest: "{{ workspace }}/{{ image_filename[release] }}" sha256sums_path: "{{ release }}/current/SHA256SUMS" sha256sums_filename: "{{ sha256sums_path|basename }}" sha256sums_url: "{{ lookup('env', 'SHA256SUMS_URL')|default('https://' ~ host ~ '/' ~ sha256sums_path, true) }}" workspace: "{{ lookup('env', 'workspace')|default('/tmp/workspace/yardstick', true) }}" - imgfile: "{{ workspace }}/yardstick-image.img" raw_imgfile_basename: "yardstick-{{ release }}-server.raw" + growpart_package: + RedHat: cloud-utils-growpart + Debian: cloud-guest-utils environment: - PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/bin + - PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/bin + - "{{ proxy_env }}" tasks: - group_by: key: image_builder - package: name=parted state=present + - package: name=kpartx state=present + - package: name="{{ growpart_package[ansible_os_family] }}" state=present + + - set_fact: + imgfile: "{{ normal_image_file }}" + when: img_property == "normal" + + - set_fact: + imgfile: "{{ nsb_image_file }}" + when: img_property == "nsb" - set_fact: mountdir: "{{ lookup('env', 'mountdir')|default('/mnt/yardstick', true) }}" @@ -46,7 +61,7 @@ - set_fact: raw_imgfile: "{{ workspace }}/{{ raw_imgfile_basename }}" - # cleanup non-lxd + # cleanup non-lxd - name: unmount all old mount points mount: name: "{{ item }}" @@ -61,6 +76,21 @@ command: kpartx -dv "{{ raw_imgfile }}" ignore_errors: true + - name: Debug dump loop devices + command: losetup -a + ignore_errors: true + + - name: delete loop devices for image file + # use this because kpartx -dv will fail if raw_imgfile was delete + # but in theory we could have deleted file still attached to loopback device? + # use grep because of // and awk + shell: losetup -O NAME,BACK-FILE | grep "{{ raw_imgfile_basename }}" | awk '{ print $1 }' | xargs -l1 losetup -v -d + ignore_errors: true + + - name: Debug dump loop devices again + command: losetup -a + ignore_errors: true + - name: delete {{ raw_imgfile }} file: path: "{{ raw_imgfile }}" @@ -87,6 +117,13 @@ - name: convert image to raw command: "qemu-img convert {{ image_dest }} {{ raw_imgfile }}" + - name: resize image to allow for more VNFs + command: "qemu-img resize -f raw {{ raw_imgfile }} +2G" + + - name: resize parition to allow for more VNFs + # use growpart because maybe it handles GPT better than parted + command: growpart {{ raw_imgfile }} 1 + - name: create mknod devices in chroot command: "mknod -m 0660 /dev/loop{{ item }} b 7 {{ item }}" args: @@ -95,7 +132,6 @@ tags: mknod_devices - name: find first partition device -# command: kpartx -l "{{ loop_device }}" command: kpartx -l "{{ raw_imgfile }}" register: kpartx_res @@ -124,6 +160,18 @@ - set_fact: image_fs_type: "{{ blkid_res.stdout.strip() }}" + - fail: + msg: "We only support ext4 image filesystems because we have to resize" + when: image_fs_type != "ext4" + + - name: fsck the image filesystem + command: "e2fsck -y -f {{ image_first_partition_device }}" + + - name: resize filesystem to full partition size + command: resize2fs {{ image_first_partition_device }} + + - name: fsck the image filesystem + command: "e2fsck -y -f {{ image_first_partition_device }}" - name: make tmp disposable fstab command: mktemp --tmpdir fake_fstab.XXXXXXXXXX @@ -166,14 +214,6 @@ mode: 0755 when: "target_os == 'Ubuntu'" - - name: set img_modify_playbook - set_fact: - img_modify_playbook: ubuntu_server_cloudimg_modify.yml - - - debug: - var: img_modify_playbook - verbosity: 2 - - name: add chroot as host add_host: name: "{{ mountdir }}" @@ -184,8 +224,18 @@ nameserver_ip: "{{ ansible_dns.nameservers[0] }}" image_type: vm -- name: include {{ img_modify_playbook }} - include: "{{ img_modify_playbook }}" +- name: include ubuntu_server_cloudimg_modify.yml + include: ubuntu_server_cloudimg_modify.yml + when: img_property == "normal" + +- name: include ubuntu_server_cloudimg_modify_samplevnfs.yml + include: ubuntu_server_cloudimg_modify_samplevnfs.yml + when: img_property == "nsb" + +- hosts: localhost + tasks: + - name: convert image to image file + command: "qemu-img convert -c -o compat=0.10 -O qcow2 {{ raw_imgfile }} {{ imgfile }}" - name: run post build tasks include: post_build_yardstick_image.yml @@ -194,4 +244,4 @@ tasks: - debug: - msg: "yardstick image = {{ raw_imgfile }}" + msg: "yardstick image = {{ imgfile }}"