${CONFIG_FILE_TEMPLATE} ${CURDIR}/../variables/coe/odlovs-cni.conf.j2
${HOST_INVENTORY} ${CURDIR}/../variables/coe/hosts.yaml
${K8s_MASTER_IP} ${TOOLS_SYSTEM_1_IP}
-${K8s_MINION1_IP} ${TOOLS_SYSTEM_2_IP}
-${K8s_MINION2_IP} ${TOOLS_SYSTEM_3_IP}
-${K8s_MINION3_IP} ${TOOLS_SYSTEM_4_IP}
-${K8s_MINION4_IP} ${TOOLS_SYSTEM_5_IP}
${HOSTS_FILE_TEMPLATE} ${CURDIR}/../variables/coe/minions_template.yaml
-${NODE_READY_STATUS} \\sReady
+${NODE_READY_STATUS} \\sReady # The check using this variable should not mess up with NotReady
${PLAYBOOK_FILE} ${CURDIR}/../variables/coe/coe_play.yaml
${POD_RUNNING_STATUS} \\sRunning
${VARIABLES_PATH} ${CURDIR}/../variables/coe
${WATCHER_COE} ${CURDIR}/../variables/coe/coe.yaml
-@{NODE_IPs} ${K8s_MASTER_IP} ${K8s_MINION1_IP} ${K8s_MINION2_IP} ${K8s_MINION3_IP} ${K8s_MINION4_IP}
@{COE_DIAG_SERVICES} OPENFLOW IFM ITM DATASTORE ELAN OVSDB
*** Keywords ***
\ SSHLibrary.Switch Connection ${conn_id}
\ SSHKeywords.Flexible_SSH_Login ${DEFAULT_USER} ${DEFAULT_PASSWORD}
${file} = OperatingSystem.Get File ${CONFIG_FILE_TEMPLATE}
- ${ovs bridge output} ${bridge} = Should Match Regexp ${file} "ovsBridge": "(\\w.*)"
- Set Suite Variable ${bridge}
+ ${ovs bridge output} ${bridge} = BuiltIn.Should Match Regexp ${file} "ovsBridge": "(\\w.*)"
+ BuiltIn.Set Suite Variable ${bridge}
Configuration Playbook
[Documentation] Ansible playbook which does all basic configuration for kubernetes nodes.
OperatingSystem.Create File ${WATCHER_COE} ${watcher}
SSHKeywords.Copy_File_To_Remote_System ${K8s_MASTER_IP} ${WATCHER_COE} ${USER_HOME}
OperatingSystem.Copy File ${PLAYBOOK_FILE} ${USER_HOME}
- ${play_output} = OperatingSystem.Run ansible-playbook -v ${USER_HOME}/coe_play.yaml -i ${USER_HOME}/hosts.yaml --extra-vars '{"gerrit_branch":"FETCH_HEAD","gerrit_refspec":"${GERRIT_REFSPEC}"}'
+ ${gerrit_ref_spec} = BuiltIn.Set Variable If '${GERRIT_PROJECT}' == 'coe' ${GERRIT_REFSPEC} HEAD
+ Run Coe Playbook ${gerrit_ref_spec}
+
+Run Coe Playbook
+ [Arguments] ${gerrit_ref_spec}
+ ${play_output} = OperatingSystem.Run ansible-playbook -v ${USER_HOME}/coe_play.yaml -i ${USER_HOME}/hosts.yaml --extra-vars '{"gerrit_branch":"FETCH_HEAD","gerrit_refspec":"${gerrit_ref_spec}"}'
BuiltIn.Log ${play_output}
Modifying templates in playbook
${template} = String.Replace String ${template} minion_ip ${TOOLS_SYSTEM_ALL_IPS[0]}
@{minions} Create List coe-minion
${hosts} Set Variable coe-master:
- : FOR ${i} INRANGE 1 ${NUM_TOOLS_SYSTEM}
+ : FOR ${i} IN RANGE 1 ${NUM_TOOLS_SYSTEM}
\ Append To List ${minions} coe-minion${i}
\ ${hosts} = Catenate ${hosts} coe-minion${i}:
${hosts} = Replace String Using Regexp ${hosts} :$ ${EMPTY}
${hosts} = Remove Space on String ${hosts}
${minion hosts} = Replace String Using Regexp ${hosts} ^[\\w-]+: ${EMPTY}
- : FOR ${i} INRANGE 1 ${NUM_TOOLS_SYSTEM}
+ : FOR ${i} IN RANGE 1 ${NUM_TOOLS_SYSTEM}
\ ${j} = Evaluate ${i}+1
\ ${template} = String.Replace String ${template} ${minions[${i}-1]} ${minions[${i}]}
\ ${template} = String.Replace String ${template} ${TOOLS_SYSTEM_ALL_IPS[${i}-1]} ${TOOLS_SYSTEM_ALL_IPS[${i}]}
Check Node Status Is Ready
[Documentation] Checks the status of nodes.This keyword is repeated until the status of all nodes is Ready
- ${nodes} = Utils.Run Command On Remote System ${K8s_MASTER_IP} kubectl get nodes ${DEFAULT_USER} ${DEFAULT_PASSWORD} ${DEFAULT_LINUX_PROMPT_STRICT}
- @{cluster} = String.Split To Lines ${nodes} 1
- : FOR ${node} IN @{cluster}
- \ BuiltIn.Should Match Regexp ${node} ${NODE_READY_STATUS}
+ ${nodes} = Utils.Run Command On Remote System And Log ${K8s_MASTER_IP} kubectl get nodes ${DEFAULT_USER} ${DEFAULT_PASSWORD} ${DEFAULT_LINUX_PROMPT_STRICT}
+ ${node_status} = String.Get Lines Matching Regexp ${nodes} ${NODE_READY_STATUS} partial_match=True
+ ${lines_containing_ready} = String.Get Line Count ${node_status}
+ BuiltIn.Should Be Equal As Strings ${lines_containing_ready} ${NUM_TOOLS_SYSTEM}
Label Nodes
[Documentation] Create labels for minions so that random allocation of pods to minions is avoided
Check Pod Status Is Running
[Documentation] Checks the status of pods.This keyword is repeated until the status of all pods is Running
- ${pods} = Utils.Run Command On Remote System ${K8s_MASTER_IP} kubectl get pods -o wide ${DEFAULT_USER} ${DEFAULT_PASSWORD} ${DEFAULT_LINUX_PROMPT_STRICT}
+ ${pods} = Utils.Run Command On Remote System And Log ${K8s_MASTER_IP} kubectl get pods -o wide ${DEFAULT_USER} ${DEFAULT_PASSWORD} ${DEFAULT_LINUX_PROMPT_STRICT}
@{cluster} = String.Split To Lines ${pods} 1
: FOR ${pod} IN @{cluster}
\ BuiltIn.Should Match Regexp ${pod} ${POD_RUNNING_STATUS}
Kube reset
[Documentation] Reset K8s to clear up all stale entries
- : FOR ${nodes} IN @{NODE_IPs}
+ : FOR ${nodes} IN @{TOOLS_SYSTEM_ALL_IPS}
\ ${kube} = Utils.Run Command On Remote System And Log ${nodes} sudo kubeadm reset
\ BuiltIn.Should Contain ${kube} Stopping the kubelet service.