Fix nested kvm detection and enablement 79/47979/3
authorFeng Pan <fpan@redhat.com>
Tue, 28 Nov 2017 21:26:22 +0000 (16:26 -0500)
committerFeng Pan <fpan@redhat.com>
Thu, 30 Nov 2017 22:19:09 +0000 (17:19 -0500)
- Fix ansible kvm_intel kernel module reload when trying to enable
  nested kvm
- Add "--libvirt-type qemu" to deploy command when nested kvm is
  not enabled.

JIRA: APEX-514

Change-Id: I0e659b1c99b5732854d723e1cb049845cb60ef37
Signed-off-by: Feng Pan <fpan@redhat.com>
apex/overcloud/deploy.py
lib/ansible/playbooks/deploy_dependencies.yml

index 3ddb5f4..809afc1 100644 (file)
@@ -129,7 +129,7 @@ def create_deploy_cmd(ds, ns, inv, tmp_dir,
     elif num_control > 1 and not ds['global_params']['ha_enabled']:
         num_control = 1
     cmd = "openstack overcloud deploy --templates --timeout {} " \
-          "--libvirt-type kvm".format(con.DEPLOY_TIMEOUT)
+          .format(con.DEPLOY_TIMEOUT)
     # build cmd env args
     for option in deploy_options:
         cmd += " -e {}".format(option)
@@ -139,6 +139,13 @@ def create_deploy_cmd(ds, ns, inv, tmp_dir,
     cmd += ' --control-flavor control --compute-flavor compute'
     if net_data:
         cmd += ' --networks-file network_data.yaml'
+    libvirt_type = 'kvm'
+    if virtual:
+        with open('/sys/module/kvm_intel/parameters/nested') as f:
+            nested_kvm = f.read().strip()
+            if nested_kvm != 'Y':
+                libvirt_type = 'qemu'
+    cmd += ' --libvirt-type {}'.format(libvirt_type)
     logging.info("Deploy command set: {}".format(cmd))
 
     with open(os.path.join(tmp_dir, 'deploy_command'), 'w') as fh:
index d274967..545ee33 100644 (file)
         name: default
         autostart: yes
         state: active
-    - lineinfile:
-        path: /etc/modprobe.d/kvm_intel.conf
-        line: 'options kvm-intel nested=1'
-        create: yes
-      when: ansible_architecture == "x86_64"
-    - modprobe:
-        name: "{{ item }}"
-        state: present
-      with_items:
-        - kvm
-        - kvm_intel
+    - shell: cat /sys/module/kvm_intel/parameters/nested || true
+      register: nested_result
       when: ansible_architecture == "x86_64"
+    - name: reload kvm_intel
+      block:
+        - lineinfile:
+            path: /etc/modprobe.d/kvm_intel.conf
+            line: 'options kvm-intel nested=1'
+            create: yes
+        - modprobe:
+            name: kvm_intel
+            state: absent
+        - modprobe:
+            name: kvm_intel
+            state: present
+      when:
+        - ansible_architecture == "x86_64"
+        - "'Y' not in nested_result.stdout"
     - name: Generate SSH key for root if missing
       shell: test -e ~/.ssh/id_rsa || ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
     - name: Check that /u/l/python3.4/site-packages/virtualbmc/vbmc.py exists