From 91d4cfa839bb2633cba2f70443168c22f895a969 Mon Sep 17 00:00:00 2001 From: Stepan Andrushko Date: Mon, 11 Feb 2019 21:10:54 +0200 Subject: Move VM image build to remote DUT VM image is built on localhost but should be on remote DUT server. VM image will be built on server added to group 'yardstick-standalone'. NSB dependencies will be installed on servers added to groups 'yardstick-baremetal' and 'yardstick-standalone'. Added extra package installation, copy VM image to libvirt folder. JIRA: YARDSTICK-1597 Change-Id: Iac4444c6f332c5ea80da033f2fe8371e208d7fbc Signed-off-by: Stepan Andrushko --- ansible/build_vm.yml | 44 ++++++++++++ ansible/group_vars/all.yml | 9 +++ ansible/install-inventory.ini | 20 +++--- ansible/install.yaml | 79 +++++++++++----------- .../build_yardstick_image/tasks/post_build.yml | 21 ++++++ .../build_yardstick_image/tasks/pre_build.yml | 12 ++++ .../install_image_dependencies/defaults/main.yml | 2 + 7 files changed, 137 insertions(+), 50 deletions(-) create mode 100644 ansible/build_vm.yml diff --git a/ansible/build_vm.yml b/ansible/build_vm.yml new file mode 100644 index 000000000..9774f9ff5 --- /dev/null +++ b/ansible/build_vm.yml @@ -0,0 +1,44 @@ +- name: Prepare to build VM + hosts: jumphost + become: yes + vars: + img_prop_item: "{{ IMG_PROPERTY }}" + img_arch: "{{ YARD_IMG_ARCH }}" + + tasks: + - name: Include pre-build + include_role: + name: build_yardstick_image + tasks_from: pre_build.yml + when: + - installation_mode != inst_mode_container + + +- name: Build VM in chroot + hosts: chroot_image + connection: chroot + become: yes + vars: + img_property: "{{ IMG_PROPERTY }}" + environment: "{{ proxy_env }}" + + tasks: + - name: Include image build + include_role: + name: build_yardstick_image + tasks_from: "cloudimg_modify_{{ img_property }}.yml" + when: + - installation_mode != inst_mode_container + + +- name: Clear up after VM is built + hosts: jumphost + become: yes + + tasks: + - name: Include post-build + include_role: + name: build_yardstick_image + tasks_from: post_build.yml + when: + - installation_mode != inst_mode_container diff --git a/ansible/group_vars/all.yml b/ansible/group_vars/all.yml index cd12bf02e..e94d24023 100644 --- a/ansible/group_vars/all.yml +++ b/ansible/group_vars/all.yml @@ -7,7 +7,16 @@ release: "{{ OS_RELEASE | default('xenial') }}" normal_image_file: "{{ workspace }}/yardstick-image.img" nsb_image_file: "{{ workspace }}/yardstick-nsb-image.img" ubuntu_image_file: /tmp/workspace/yardstick/yardstick-trusty-server.raw +arch_amd64: "amd64" +arch_arm64: "arm64" +inst_mode_baremetal: "baremetal" +inst_mode_container: "container" +inst_mode_container_pull: "container_pull" +ubuntu_archive: + "amd64": "http://archive.ubuntu.com/ubuntu/" + "arm64": "http://ports.ubuntu.com/ubuntu-ports/" installation_mode: "{{ INSTALLATION_MODE | default('baremetal') }}" +yardstick_dir: "{{ YARDSTICK_DIR | default('/home/opnfv/repos/yardstick') }}" proxy_env: PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/bin http_proxy: "{{ lookup('env', 'http_proxy') }}" diff --git a/ansible/install-inventory.ini b/ansible/install-inventory.ini index bcd57db65..07d2c13f4 100644 --- a/ansible/install-inventory.ini +++ b/ansible/install-inventory.ini @@ -8,24 +8,20 @@ localhost ansible_connection=local [yardstick:children] jumphost -[yardstick-standalone] -# standalone-node ansible_host=192.168.2.51 ansible_user=ubuntu ansible_ssh_pass=password ansible_connection=ssh - [yardstick-baremetal] -# baremetal-node ansible_host=192.168.2.52 ansible_user=ubuntu ansible_ssh_pass=password ansible_connection=ssh +# baremetal-node ansible_host=192.168.2.51 ansible_user=ubuntu ansible_ssh_pass=password ansible_connection=ssh + +[yardstick-standalone] +# standalone-node ansible_host=192.168.2.52 ansible_user=ubuntu ansible_ssh_pass=password ansible_connection=ssh [all:vars] -arch_amd64=amd64 -arch_arm64=arm64 -inst_mode_baremetal=baremetal -inst_mode_container=container -inst_mode_container_pull=container_pull -ubuntu_archive={"amd64": "http://archive.ubuntu.com/ubuntu/", "arm64": "http://ports.ubuntu.com/ubuntu-ports/"} -# When IMG_PROPERTY is passed neither normal nor nsb set "path_to_vm=/path/to/image" to add it to OpenStack -# path_to_img=/tmp/workspace/yardstick-image.img # Uncomment credentials below if needed # ansible_user=root # ansible_ssh_pass=root +# ansible_ssh_private_key_file=/root/.ssh/id_rsa + +# When IMG_PROPERTY is passed neither normal nor nsb set "path_to_vm=/path/to/image" to add it to OpenStack +# path_to_img=/tmp/workspace/yardstick-image.img # List of CPUs to be isolated (not used by default) # Grub line will be extended with: "isolcpus= nohz=on nohz_full= rcu_nocbs=1" diff --git a/ansible/install.yaml b/ansible/install.yaml index 558c48609..a78a11f68 100644 --- a/ansible/install.yaml +++ b/ansible/install.yaml @@ -15,7 +15,6 @@ - hosts: jumphost become: yes vars: - yardstick_dir: "{{ YARDSTICK_DIR | default('/home/opnfv/repos/yardstick') }}" virtual_environment: "{{ VIRTUAL_ENVIRONMENT | default(False) }}" nsb_dir: "{{ NSB_DIR | default('/opt/nsb_bin/') }}" @@ -105,54 +104,59 @@ - docker - barometer_collectd - - name: Prepare to build VM - hosts: jumphost + hosts: yardstick-standalone become: yes vars: img_prop_item: "{{ IMG_PROPERTY }}" img_arch: "{{ YARD_IMG_ARCH }}" - - tasks: - - name: Include pre-build - include_role: - name: build_yardstick_image - tasks_from: pre_build.yml - when: - - installation_mode != inst_mode_container - - IMG_PROPERTY == 'nsb' or IMG_PROPERTY == 'normal' - - -- name: Build VM in chroot - hosts: chroot_image - connection: chroot - become: yes - vars: - img_property: "{{ IMG_PROPERTY }}" environment: "{{ proxy_env }}" tasks: - - name: Include image build - include_role: - name: build_yardstick_image - tasks_from: "cloudimg_modify_{{ img_property }}.yml" + - file: + dest: /tmp/ansible + state: directory + mode: 0755 + + - name: Copy ansible folder to remote DUT + copy: + src: "." + dest: /tmp/ansible + + - name: Install DUT related packages + apt: + name: "{{ packages }}" + vars: + packages: + - qemu-kvm + - libvirt-bin + - bridge-utils + - fping + - genisoimage + + # There is a bug with the easy install ansible module in Ubuntu 16.04 linux. + # Refer https://github.com/ansible/ansible/issues/23534 + - name: Install pip + shell: easy_install -U pip when: - - installation_mode != inst_mode_container - - IMG_PROPERTY == 'nsb' or IMG_PROPERTY == 'normal' + - ansible_distribution == 'Ubuntu' + - ansible_distribution_major_version|int <= 16 + - name: Install python-pip + action: "{{ ansible_pkg_mgr }} name=python-pip state=present" + when: + - ansible_distribution == 'Ubuntu' + - ansible_distribution_major_version|int >= 17 -- name: Clear up after VM is built - hosts: jumphost - become: yes + - name: Update pip ansible docker + pip: + name: "ansible==2.5.5" - tasks: - - name: Include post-build - include_role: - name: build_yardstick_image - tasks_from: post_build.yml - when: - - installation_mode != inst_mode_container - - IMG_PROPERTY == 'nsb' or IMG_PROPERTY == 'normal' + # This is used as workaround as ansible doesn't support chroot on remote server + - name: Run ansible on remote + shell: "ansible-playbook -e OS_RELEASE={{ OS_RELEASE }} -e IMAGE_PROPERTY={{ IMAGE_PROPERTY }} -e YARD_IMAGE_ARCH={{ YARD_IMAGE_ARCH }} -i install-inventory.ini build_vm.yml -vv" + args: + chdir: "/tmp/ansible" - name: Add OpenStack variables, image @@ -216,6 +220,5 @@ volumes: - "{{ openrc_file|default('/dev/null') }}:/etc/yardstick/openstack.creds:ro" - /var/run/docker.sock:/var/run/docker.sock - - /opt:/opt - /etc/localtime:/etc/localtime:ro when: installation_mode == inst_mode_container_pull diff --git a/ansible/roles/build_yardstick_image/tasks/post_build.yml b/ansible/roles/build_yardstick_image/tasks/post_build.yml index c6888f8df..abbf57c03 100644 --- a/ansible/roles/build_yardstick_image/tasks/post_build.yml +++ b/ansible/roles/build_yardstick_image/tasks/post_build.yml @@ -34,6 +34,10 @@ name: "{{ mountdir }}/proc" state: unmounted +- mount: + name: "{{ mountdir }}/run" + state: unmounted + - mount: name: "{{ mountdir }}" state: unmounted @@ -44,3 +48,20 @@ - debug: msg: "yardstick image = {{ imgfile }}" + +- set_fact: + imgdest: "/var/lib/libvirt/images/{{ imgfile | basename}}" + name: "{{ (imgfile | basename | splitext)[0] }}" + ext: "{{ (imgfile | basename | splitext)[1] }}" + +- name: Verify if imgfile exists in libvirt images + stat: + path: "{{ imgdest }}" + register: imgdest_stat + +- set_fact: + imgdest: "/var/lib/libvirt/images/{{ name }}_autogen{{ ext }}" + when: imgdest_stat.stat.exists + +- name: Copy image to libvirt images + shell: "cp {{ imgfile }} {{ imgdest }}" diff --git a/ansible/roles/build_yardstick_image/tasks/pre_build.yml b/ansible/roles/build_yardstick_image/tasks/pre_build.yml index 2dae38060..3ac8e90e9 100644 --- a/ansible/roles/build_yardstick_image/tasks/pre_build.yml +++ b/ansible/roles/build_yardstick_image/tasks/pre_build.yml @@ -45,6 +45,7 @@ with_items: # order matters - "{{ mountdir }}/proc" + - "{{ mountdir }}/run" - "{{ mountdir }}" - "/mnt/{{ release }}" @@ -178,6 +179,17 @@ fstab: "{{ fake_fstab }}" state: mounted +- name: mount chroot /run + mount: + src: /run + name: "{{ mountdir }}/run" + fstype: tmpfs + opts: bind + # !!!!!!! this is required otherwise we add entries to /etc/fstab + # and prevent the system from booting + fstab: "{{ fake_fstab }}" + state: mounted + - name: if arm copy qemu-aarch64-static into chroot copy: src: /usr/bin/qemu-aarch64-static diff --git a/ansible/roles/install_image_dependencies/defaults/main.yml b/ansible/roles/install_image_dependencies/defaults/main.yml index 42951bf6d..558e68a9b 100644 --- a/ansible/roles/install_image_dependencies/defaults/main.yml +++ b/ansible/roles/install_image_dependencies/defaults/main.yml @@ -30,6 +30,7 @@ install_dependencies: - libxss-dev - expect - libnuma-dev + - curl RedHat: - bc - fio @@ -50,3 +51,4 @@ install_dependencies: - sysstat - unzip - python-devel + - curl -- cgit 1.2.3-korg