Add CPU isolation support for Yardstick NSB setup
[yardstick.git] / ansible / install.yaml
index e93232d..847f01c 100644 (file)
 - hosts: jumphost
   become: yes
   vars:
-    installation_mode: "{{ INSTALLATION_MODE | default('baremetal') }}"
     yardstick_dir: "{{ YARDSTICK_DIR | default('/home/opnfv/repos/yardstick') }}"
     virtual_environment: "{{ VIRTUAL_ENVIRONMENT | default(False) }}"
     nsb_dir: "{{ NSB_DIR | default('/opt/nsb_bin/') }}"
 
   pre_tasks:
 
-    - name: Create NSB binaries directory, accesible to any user
+    - name: Create NSB binaries directory, accessible to any user
       file:
         path: "{{ nsb_dir }}"
         state: directory
         owner: root
         mode: 0777
+      when:
+        - installation_mode != inst_mode_container_pull
 
   roles:
     - add_repos_jumphost
     - install_dependencies_jumphost
-    - install_yardstick
-    - configure_uwsgi
-    - configure_nginx
-    - configure_gui
-    - download_trex
-    - install_trex
-    - configure_rabbitmq
+    - { role: install_yardstick, when: installation_mode != inst_mode_container_pull }
+    - { role: configure_uwsgi, when: installation_mode != inst_mode_container_pull }
+    - { role: configure_nginx, when: installation_mode != inst_mode_container_pull }
+    - { role: configure_gui, when: installation_mode != inst_mode_container_pull }
+    - { role: download_trex, when: installation_mode != inst_mode_container_pull }
+    - { role: install_trex, when: installation_mode != inst_mode_container_pull }
+    - { role: configure_rabbitmq, when: installation_mode == inst_mode_baremetal }
+
 
   post_tasks:
 
     - service:
         name: nginx
         state: restarted
-      when: installation_mode != inst_mode_container
+      when: installation_mode == inst_mode_baremetal
 
     - shell: uwsgi -i /etc/yardstick/yardstick.ini
-      when: installation_mode != inst_mode_container
+      when: installation_mode == inst_mode_baremetal
 
-- name: Prepare baremetal and standalone server(s)
+
+- name: Prepare baremetal and standalone servers
   hosts: yardstick-baremetal,yardstick-standalone
   become: yes
-  vars:
-    YARD_IMG_ARCH: "{{ arch_amd64 }}"
-  environment:
-    proxy_env:
-      http_proxy: "{{ lookup('env', 'http_proxy') }}"
-      https_proxy: "{{ lookup('env', 'https_proxy') }}"
-      ftp_proxy: "{{ lookup('env', 'ftp_proxy') }}"
-      no_proxy: "{{ lookup('env', 'no_proxy') }}"
+  vars_files:
+    - roles/download_dpdk/defaults/main.yml
+  environment: "{{ proxy_env }}"
 
   roles:
     - add_custom_repos
       when: proxy_env is defined and proxy_env
     # can't update grub in chroot/docker
     - enable_hugepages_on_boot
+    - enable_iommu_on_boot
+    - enable_cpu_isolation_on_boot
     # needed for collectd plugins
     - increase_open_file_limits
     - install_image_dependencies
     - role: download_dpdk
-    # dpdk_version: "17.02"
+      dpdk_version: "{{ dpdk_version_for_PROX }}"
+    - role: install_dpdk
+      dpdk_version: "{{ dpdk_version_for_PROX }}"
+    - download_samplevnfs
+    - role: install_samplevnf
+      vnf_name: PROX
+    - download_dpdk
     - install_dpdk
     - download_trex
     - install_trex
     - download_civetweb
     - install_civetweb
-    - download_samplevnfs
-    - role: install_samplevnf
-      vnf_name: PROX
     - role: install_samplevnf
       vnf_name: UDP_Replay
     - role: install_samplevnf
@@ -88,7 +91,7 @@
     - role: install_samplevnf
       vnf_name: FW
     - role: install_samplevnf
-      vnf_name: CGNATP
+      vnf_name: CGNAPT
     # build shared DPDK for collectd only, required DPDK downloaded already
     - install_dpdk_shared
     - install_rabbitmq
     - install_pmu_tools
     - download_collectd
     - install_collectd
+    - docker
+    - barometer_collectd
+
+
+- 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
+        - 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"
+      when:
+        - installation_mode != inst_mode_container
+        - IMG_PROPERTY == 'nsb' or IMG_PROPERTY == 'normal'
+
+
+- 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
+        - IMG_PROPERTY == 'nsb' or IMG_PROPERTY == 'normal'
+
+
+- name: Add OpenStack variables, image
+  hosts: jumphost
+  vars:
+    openrc_flag: false
+  vars_files:
+    - yardstick_config.yml
+
+  pre_tasks:
+    - name: Get information about external VM image
+      stat:
+        path: "{{ path_to_img }}"
+      register: image_file_stat
+      when:
+        - path_to_img is defined
+        - imgfile is not defined
+
+    - set_fact:
+        imgfile: "{{ path_to_img }}"
+      when:
+        - path_to_img is defined
+        - imgfile is not defined
+        - image_file_stat.stat.islnk is defined
+        - not image_file_stat.stat.islnk
+
+    - set_fact:
+        openrc_flag: true
+      when:
+        - openrc_file is defined
+        - imgfile is defined
+
+  roles:
+    - { role: convert_openrc, when: openrc_file is defined }
+    - { role: clean_images, when: openrc_flag }
+    - { role: clean_flavors, when: openrc_flag }
+    - { role: create_samplevnfs_image, when: openrc_flag }
+  environment:
+    "{{ openrc | default({}) }}"
+
+
+- name: Start yardstick container on jumphost
+  hosts: jumphost
+
+  tasks:
+    - name: Install docker needed to pull Yardstick container
+      include_role:
+        name: docker
+      when: installation_mode == inst_mode_container_pull
+
+    - name: Start yardstick container
+      docker_container:
+        name: yardstick
+        pull: yes
+        recreate: yes
+        image: "{{ yardstick_docker_image|default('opnfv/yardstick:latest') }}"
+        state: started
+        restart_policy: always
+        privileged: yes
+        interactive: yes
+        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