[Baremetal] Modify interaction with bifrost roles 95/60795/19
authorManuel Buil <mbuil@suse.com>
Thu, 9 Aug 2018 14:29:24 +0000 (16:29 +0200)
committerManuel Buil <mbuil@suse.com>
Mon, 15 Oct 2018 15:57:24 +0000 (15:57 +0000)
Change some of the variables when calling opnfv-virtual.yml and
baremetal=true:

1 - We want to configure DHCP mapping between ip and mac when doing
baremetal. The create-nodes role will generate a file with that
mapping for us (baremetalstaticips)

2 - Don't download the standard IPA image but build one with Fedora
(only one that works in ericsson-pod2) when doing baremetal

3 - Wait for the blade to complete its booting. Its ssh port becomes
available with the IPA provision but that is not the final state.
We need to wait until the required distro gets installed.
When not doing baremetal, this is fine as the VMs boot very fast with
the chosen distro but for baremetal it takes a while (ericsson-pod2
servers take around 2 minutes to finish all BIOS booting). The playbook
wait-for-baremetal.yml does this.

Change-Id: I5536517209ff7f46ec034554d29566707778e397
Signed-off-by: Manuel Buil <mbuil@suse.com>
xci/infra/bifrost/infra-provision.sh
xci/infra/bifrost/playbooks/opnfv-virtual.yml
xci/infra/bifrost/playbooks/wait-for-baremetal.yml [new file with mode: 0644]
xci/infra/bifrost/scripts/bifrost-env.sh

index 0b25f25..e60e9de 100644 (file)
@@ -54,12 +54,12 @@ ansible-playbook ${XCI_ANSIBLE_PARAMS} \
     -e testing_user=root \
     -e test_vm_num_nodes=${NUM_NODES} \
     -e test_vm_cpu='host-model' \
-    -e inventory_dhcp=false \
+    -e inventory_dhcp=${BIFROST_INVENTORY_DHCP} \
     -e inventory_dhcp_static_ip=false \
     -e enable_inspector=true \
     -e inspect_nodes=true \
-    -e download_ipa=true \
-    -e create_ipa_image=false \
+    -e download_ipa=${BIFROST_DOWNLOAD_IPA} \
+    -e create_ipa_image=${BIFROST_CREATE_IPA} \
     -e write_interfaces_file=true \
     -e ipv4_gateway=192.168.122.1 \
     -e wait_timeout=3600 \
@@ -76,6 +76,14 @@ ansible-playbook ${XCI_ANSIBLE_PARAMS} \
     -e ironic_url="http://192.168.122.2:6385/" \
     ${BIFROST_ROOT_DIR}/playbooks/opnfv-virtual.yml
 
+
+if [ "${BAREMETAL}" = true ]; then
+  ansible-playbook ${XCI_ANSIBLE_PARAMS} \
+      --user=devuser -i ${XCI_PATH}/xci/playbooks/dynamic_inventory.py \
+      -i ${XCI_CACHE}/repos/bifrost/playbooks/inventory/bifrost_inventory.py \
+      ${BIFROST_ROOT_DIR}/playbooks/wait-for-baremetal.yml
+fi
+
 echo "-----------------------------------------------------------------------"
 echo "Info: VM nodes are provisioned!"
 echo "-----------------------------------------------------------------------"
index 8dfd9db..313919b 100644 (file)
       enabled_hardware_types: ipmi
       network_interface: "{{ ansible_default_ipv4.interface }}"
       # Create the IPA image for ironic to boot the nodes and write the final distro in the hard drive
+      # fedora is used because it is the only one working with ericsson-pod2 (it has support for newer hardware)
     - role: bifrost-create-dib-image
       dib_imagename: "{{ http_boot_folder }}/ipa"
       build_ramdisk: false
-      dib_os_element: "{{ ipa_dib_os_element|default('debian') }}"
-      dib_os_release: "jessie"
+      dib_os_element: "{{ ipa_dib_os_element|default('fedora') }}"
       dib_elements: "ironic-agent {{ ipa_extra_dib_elements | default('') }}"
       dib_notmpfs: true
       when:
diff --git a/xci/infra/bifrost/playbooks/wait-for-baremetal.yml b/xci/infra/bifrost/playbooks/wait-for-baremetal.yml
new file mode 100644 (file)
index 0000000..cb42cc4
--- /dev/null
@@ -0,0 +1,17 @@
+# ironic needs to boot the server again to install the OS in the hard drive
+# we are currently modifying opnfv vm networking config while ironic is
+# doing that and it sometimes fail because of networking glitches. We should
+# wait until the OS is installed to do the opnfv config
+
+- hosts: baremetal
+  name: "Wait for baremetal blades to be ready"
+  become: no
+  gather_facts: False
+  tasks:
+    - name: "Wait for nodes to reboot."
+      wait_for: state=stopped port=22 host={{ ipv4_address }} timeout=240
+      delegate_to: opnfv
+    - name: "Wait for nodes to become available."
+      wait_for: state=started port=22 host={{ ipv4_address }} timeout=3600
+      delegate_to: opnfv
+
index 72d1daf..7d88212 100755 (executable)
@@ -30,4 +30,14 @@ esac
 
 export BIFROST_INVENTORY_SOURCE=/tmp/baremetal.json
 
+if [ "${BAREMETAL}" = true ]; then
+    export BIFROST_INVENTORY_DHCP=true
+    export BIFROST_DOWNLOAD_IPA=false
+    export BIFROST_CREATE_IPA=true
+else
+    export BIFROST_INVENTORY_DHCP=false
+    export BIFROST_DOWNLOAD_IPA=true
+    export BIFROST_CREATE_IPA=false
+fi
+
 pip install -q --upgrade -r "${XCI_CACHE}/repos/bifrost/requirements.txt"