Move VM image build to remote DUT 45/66945/4
authorStepan Andrushko <stepanx.andrushko@intel.com>
Mon, 11 Feb 2019 19:10:54 +0000 (21:10 +0200)
committerStepan Andrushko <stepanx.andrushko@intel.com>
Tue, 19 Mar 2019 16:43:50 +0000 (18:43 +0200)
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 <stepanx.andrushko@intel.com>
ansible/build_vm.yml [new file with mode: 0644]
ansible/group_vars/all.yml
ansible/install-inventory.ini
ansible/install.yaml
ansible/roles/build_yardstick_image/tasks/post_build.yml
ansible/roles/build_yardstick_image/tasks/pre_build.yml
ansible/roles/install_image_dependencies/defaults/main.yml

diff --git a/ansible/build_vm.yml b/ansible/build_vm.yml
new file mode 100644 (file)
index 0000000..9774f9f
--- /dev/null
@@ -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
index cd12bf0..e94d240 100644 (file)
@@ -7,7 +7,16 @@ release: "{{ OS_RELEASE  | default('xenial') }}"
 normal_image_file: "{{ workspace }}/yardstick-image.img"\r
 nsb_image_file: "{{ workspace }}/yardstick-nsb-image.img"\r
 ubuntu_image_file: /tmp/workspace/yardstick/yardstick-trusty-server.raw\r
+arch_amd64: "amd64"\r
+arch_arm64: "arm64"\r
+inst_mode_baremetal: "baremetal"\r
+inst_mode_container: "container"\r
+inst_mode_container_pull: "container_pull"\r
+ubuntu_archive:\r
+  "amd64": "http://archive.ubuntu.com/ubuntu/"\r
+  "arm64": "http://ports.ubuntu.com/ubuntu-ports/"\r
 installation_mode: "{{ INSTALLATION_MODE | default('baremetal') }}"\r
+yardstick_dir: "{{ YARDSTICK_DIR | default('/home/opnfv/repos/yardstick') }}"\r
 proxy_env:\r
   PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/bin\r
   http_proxy: "{{ lookup('env', 'http_proxy') }}"\r
index bcd57db..07d2c13 100644 (file)
@@ -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=<ISOL_CPUS> nohz=on nohz_full=<ISOL_CPUS> rcu_nocbs=1<ISOL_CPUS>"
index 558c486..a78a11f 100644 (file)
@@ -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/') }}"
 
     - 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
         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
index c6888f8..abbf57c 100644 (file)
     name: "{{ mountdir }}/proc"\r
     state: unmounted\r
 \r
+- mount:\r
+    name: "{{ mountdir }}/run"\r
+    state: unmounted\r
+\r
 - mount:\r
     name: "{{ mountdir }}"\r
     state: unmounted\r
 \r
 - debug:\r
     msg: "yardstick image = {{ imgfile }}"\r
+\r
+- set_fact:\r
+    imgdest: "/var/lib/libvirt/images/{{ imgfile | basename}}"\r
+    name: "{{ (imgfile | basename | splitext)[0] }}"\r
+    ext: "{{ (imgfile | basename | splitext)[1] }}"\r
+\r
+- name: Verify if imgfile exists in libvirt images\r
+  stat:\r
+    path: "{{ imgdest }}"\r
+  register: imgdest_stat\r
+\r
+- set_fact:\r
+    imgdest: "/var/lib/libvirt/images/{{ name }}_autogen{{ ext }}"\r
+  when: imgdest_stat.stat.exists\r
+\r
+- name: Copy image to libvirt images\r
+  shell: "cp {{ imgfile }} {{ imgdest }}"\r
index 2dae380..3ac8e90 100644 (file)
@@ -45,6 +45,7 @@
   with_items:\r
     # order matters\r
     - "{{ mountdir }}/proc"\r
+    - "{{ mountdir }}/run"\r
     - "{{ mountdir }}"\r
     - "/mnt/{{ release }}"\r
 \r
     fstab: "{{ fake_fstab }}"\r
     state: mounted\r
 \r
+- name: mount chroot /run\r
+  mount:\r
+    src: /run\r
+    name: "{{ mountdir }}/run"\r
+    fstype: tmpfs\r
+    opts: bind\r
+    # !!!!!!! this is required otherwise we add entries to /etc/fstab\r
+    # and prevent the system from booting\r
+    fstab: "{{ fake_fstab }}"\r
+    state: mounted\r
+\r
 - name: if arm copy qemu-aarch64-static into chroot\r
   copy:\r
     src: /usr/bin/qemu-aarch64-static\r
index 42951bf..558e68a 100644 (file)
@@ -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