Improve provisioning central IP address for ovn tests 63/90763/7
authorKonrad Bańka <k.banka@samsung.com>
Tue, 2 Jul 2019 07:07:49 +0000 (09:07 +0200)
committerKonrad Bańka <k.banka@samsung.com>
Tue, 16 Jul 2019 12:42:31 +0000 (14:42 +0200)
Function responsible for providing central ovn address has been
corrected to utilize already configured address instead of
checking it each time. Error reporting within the same function
has been also corrected and improved as well as iproute package
became used for address determining instead of net-tools' ifconfig

Issue-ID: MULTICLOUD-686

Signed-off-by: Konrad Bańka <k.banka@samsung.com>
Change-Id: I156297098b7919471df711f049f0d9439bd81420

kud/README.md
kud/tests/_functions.sh

index 99805c3..caa731d 100644 (file)
@@ -30,8 +30,8 @@ Apache-2.0
 
 [1]: https://git.onap.org/multicloud/k8s
 [2]: https://github.com/kubernetes-incubator/kubespray
-[3]: playbooks/configure-ovn4nfv.yml
-[4]: playbooks/configure-virtlet.yml
-[5]: playbooks/configure-multus.yml
-[6]: playbooks/configure-nfd.yml
-[7]: playbooks/configure-istio.yml
+[3]: deployment_infra/playbooks/configure-ovn4nfv.yml
+[4]: deployment_infra/playbooks/configure-virtlet.yml
+[5]: deployment_infra/playbooks/configure-multus.yml
+[6]: deployment_infra/playbooks/configure-nfd.yml
+[7]: deployment_infra/playbooks/configure-istio.yml
index 483aed5..86636cc 100755 (executable)
@@ -25,12 +25,36 @@ function print_msg {
 }
 
 function get_ovn_central_address {
-    ansible_ifconfig=$(ansible ovn-central[0] -i ${FUNCTIONS_DIR}/../hosting_providers/vagrant/inventory/hosts.ini -m shell -a "ifconfig ${OVN_CENTRAL_INTERFACE} |grep \"inet addr\" |awk '{print \$2}' |awk -F: '{print \$2}'")
-    if [[ $ansible_ifconfig != *CHANGED* ]]; then
-        echo "Fail to get the OVN central IP address from ${OVN_CENTRAL_INTERFACE} nic"
-        exit
+    #Reuse OVN_CENTRAL_ADDRESS if available (bypassable by --force flag)
+    if [[ "${1:-}" != "--force" ]] && [[ -n "${OVN_CENTRAL_ADDRESS:-}" ]]; then
+        echo "${OVN_CENTRAL_ADDRESS}"
+        return 0
+    fi
+
+    local remote_command="ip address show dev $OVN_CENTRAL_INTERFACE primary"
+    declare -a ansible_command=(ansible ovn-central[0] -i \
+                "${FUNCTIONS_DIR}/../hosting_providers/vagrant/inventory/hosts.ini")
+    declare -a filter=(awk -F '[ \t/]+' \
+                'BEGIN {r=1} {for (i=1; i<=NF; i++) if ($i == "inet") {print $(i+1); r=0}} END {exit r}')
+    local result
+
+    #Determine OVN_CENTRAL_INTERFACE address
+    if ! result="$("${ansible_command[@]}" -a "${remote_command}")"; then
+        echo "Ansible error for remote host ovn-central[0]" >&2
+        return 1
+    else
+        if [[ "${result}" != *CHANGED* ]]; then
+            echo "Failed to execute command on remote host ovn-central[0]" >&2
+            return 2
+        else
+            if ! result="$("${filter[@]}" <<< "${result}")"; then
+                echo "Failed to retrieve interface address from command output" >&2
+                return 3
+            else
+                echo "${result}:6641"
+            fi
+        fi
     fi
-    echo "$(echo ${ansible_ifconfig#*>>} | tr '\n' ':')6641"
 }
 
 function call_api {