aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStepan Andrushko <stepanx.andrushko@intel.com>2019-02-11 21:10:54 +0200
committerStepan Andrushko <stepanx.andrushko@intel.com>2019-03-19 18:43:50 +0200
commit91d4cfa839bb2633cba2f70443168c22f895a969 (patch)
treea416ea03d2dceba496e29437dc37dc7c80fbc80e
parent4c995d8a3ad25afe2ad8d75d43c7519ce22797eb (diff)
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 <stepanx.andrushko@intel.com>
-rw-r--r--ansible/build_vm.yml44
-rw-r--r--ansible/group_vars/all.yml9
-rw-r--r--ansible/install-inventory.ini20
-rw-r--r--ansible/install.yaml79
-rw-r--r--ansible/roles/build_yardstick_image/tasks/post_build.yml21
-rw-r--r--ansible/roles/build_yardstick_image/tasks/pre_build.yml12
-rw-r--r--ansible/roles/install_image_dependencies/defaults/main.yml2
7 files changed, 137 insertions, 50 deletions
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=<ISOL_CPUS> nohz=on nohz_full=<ISOL_CPUS> rcu_nocbs=1<ISOL_CPUS>"
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
@@ -35,6 +35,10 @@
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