Merge pull request #3549 from wy65701436/ova-ci

Add OVA CI scripts
This commit is contained in:
Daniel Jiang 2017-11-06 15:05:17 +08:00 committed by GitHub
commit 91ae1255e8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 185 additions and 44 deletions

36
.drone.ova.yml Normal file
View File

@ -0,0 +1,36 @@
# Harbor OVA drone.
---
workspace:
base: /drone
path: src/github.com/vmware/harbor
pipeline:
clone:
image: plugins/git
tags: true
recursive: false
integration-test-on-pr:
image: vmware/harbor-e2e-engine:1.39
pull: true
privileged: true
environment:
BIN: bin
GOPATH: /drone
SHELL: /bin/bash
LOG_TEMP_DIR: install-logs
HARBOR_ADMIN: ${HARBOR_ADMIN}
HARBOR_PASSWORD: ${HARBOR_PASSWORD}
DHCP: ${DHCP}
PROTOCOL: ${PROTOCOL}
USER: ${USER}
PASSWORD: ${PASSWORD}
HOST: ${HOST}
DATASTORE: ${DATASTORE}
CLUSTER: ${CLUSTER}
DATACENTER: ${DATACERTER}
commands:
- tests/integration_ova.sh
when:
status: success

36
tests/integration_ova.sh Executable file
View File

@ -0,0 +1,36 @@
#!/bin/bash
# Copyright 2017 VMware, Inc. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
set -x
gsutil version -l
set +x
container_ip=`ip addr s eth0 |grep "inet "|awk '{print $2}' |awk -F "/" '{print $1}'`
echo $container_ip
ova_url="$(python /auto-ova/ova.py)"
echo $ova_url
## --------------------------------------------- Init Env -------------------------------------------------
# Start Xvfb for Chrome headlesss
Xvfb -ac :99 -screen 0 1280x1024x16 & export DISPLAY=:99
## --------------------------------------------- Run -------------------------------------------------
pybot -v ip:$container_ip -v ova_url:$ova_url --include OVA tests/robot-cases/Group5-OVA-install-config/5-00-OVA-BAT.robot
## --------------------------------------------- Tear Down -------------------------------------------------
rc="$?"
echo $rc
exit $rc

View File

@ -148,3 +148,16 @@ Compile and Up Harbor With Source Code
Log ${output} Log ${output}
Should Be Equal As Integers ${rc} 0 Should Be Equal As Integers ${rc} 0
Sleep 20 Sleep 20
Wait for Harbor Ready
[Arguments] ${protocol} ${HARBOR_IP}
Log To Console Waiting for Harbor to Come Up...
:FOR ${i} IN RANGE 20
\ ${out}= Run curl -k ${protocol}://${HARBOR_IP}
\ Log ${out}
\ ${status}= Run Keyword And Return Status Should Not Contain ${out} 502 Bad Gateway
\ ${status}= Run Keyword If ${status} Run Keyword And Return Status Should Not Contain ${out} Connection refused
\ ${status}= Run Keyword If ${status} Run Keyword And Return Status Should Contain ${out} <title>Harbor</title>
\ Return From Keyword If ${status} ${HARBOR_IP}
\ Sleep 30s
Fail Harbor failed to come up properly!

View File

@ -17,9 +17,9 @@ Documentation This resource provides any keywords related to Unified OVA
*** Variables *** *** Variables ***
${ova_root_pwd} ova-test-root-pwd ${ova_root_pwd} ova-test-root-pwd
${ova_appliance_options} --prop:appliance.root_pwd=${ova_root_pwd} --prop:appliance.permit_root_login=True ${ova_appliance_options} --prop:root_pwd=${ova_root_pwd} --prop:permit_root_login=true
${ova_target_vm_name} vic-unified-ova-integration-test ${ova_target_vm_name} harbor-unified-ova-integration-test
${ovftool_options} --noSSLVerify --acceptAllEulas --name=${ova_target_vm_name} --diskMode=thin --powerOn --X:waitForIp --X:injectOvfEnv --X:enableHiddenProperties ${ovftool_options} --noSSLVerify --acceptAllEulas --name=${ova_target_vm_name} --diskMode=thin --powerOn --X:waitForIp --X:injectOvfEnv --X:enableHiddenProperties
${ova_network_ip0} 10.17.109.207 ${ova_network_ip0} 10.17.109.207
@ -32,7 +32,7 @@ ${ova_network_options} --prop:network.ip0=${ova_network_ip0} --prop:network.net
${ova_harbor_admin_password} harbor-admin-passwd ${ova_harbor_admin_password} harbor-admin-passwd
${ova_harbor_db_password} harbor-db-passwd ${ova_harbor_db_password} harbor-db-passwd
${ova_service_options} --prop:registry.admin_password=${ova_harbor_admin_password} --prop:registry.db_password=${ova_harbor_db_password} ${ova_service_options} --prop:auth_mode="%{AUTH_MODE}" --prop:clair_db_password="%{CLAIR_DB_PASSWORD}" --prop:max_job_workers="%{MAX_JOB_WORKERS}" --prop:harbor_admin_password="%{HARBOR_ADMIN_PASSWORD}" --prop:db_password="%{DB_PASSWORD}"
${ova_options} ${ovftool_options} ${ova_appliance_options} ${ova_service_options} ${ova_options} ${ovftool_options} ${ova_appliance_options} ${ova_service_options}
${ova_options_with_network} ${ova_options} ${ova_network_options} ${ova_options_with_network} ${ova_options} ${ova_network_options}
@ -41,11 +41,8 @@ ${tls_not_disabled} False
*** Keywords *** *** Keywords ***
# Requires vc credential for govc # Requires vc credential for govc
Deploy VIC-OVA To Test Server Deploy Harbor-OVA To Test Server
[Arguments] ${dhcp}=False ${build}=False ${user}=%{TEST_USERNAME} ${password}=%{TEST_PASSWORD} ${host}=%{TEST_URL} ${datastore}=%{TEST_DATASTORE} ${cluster}=%{TEST_RESOURCE} ${datacenter}=%{TEST_DATACENTER} [Arguments] ${dhcp} ${protocol} ${build} ${user} ${password} ${ova_path} ${host} ${datastore} ${cluster} ${datacenter}
Run Keyword if ${build} Build Unified OVA
${rev}= Run git rev-parse --short HEAD
Set Test Variable ${ova_path} bin/vic-1.1.0-${rev}.ova
Log To Console \nCleanup environment... Log To Console \nCleanup environment...
Run Keyword And Ignore Error Run GOVC_URL=${host} GOVC_USERNAME=${user} GOVC_PASSWORD=${password} GOVC_INSECURE=1 govc vm.destroy ${ova_target_vm_name} Run Keyword And Ignore Error Run GOVC_URL=${host} GOVC_USERNAME=${user} GOVC_PASSWORD=${password} GOVC_INSECURE=1 govc vm.destroy ${ova_target_vm_name}
@ -56,16 +53,31 @@ Deploy VIC-OVA To Test Server
... ELSE Log To Console ovftool --datastore=${datastore} ${ova_options_with_network} ${ova_path} 'vi://${user}:${password}@${host}/${datacenter}/host/${cluster}' ... ELSE Log To Console ovftool --datastore=${datastore} ${ova_options_with_network} ${ova_path} 'vi://${user}:${password}@${host}/${datacenter}/host/${cluster}'
${out}= Run Keyword If ${dhcp} Run ovftool --datastore=${datastore} ${ova_options} ${ova_path} 'vi://${user}:${password}@${host}/${datacenter}/host/${cluster}' ${out}= Run Keyword If ${dhcp} Run ovftool --datastore=${datastore} ${ova_options} ${ova_path} 'vi://${user}:${password}@${host}/${datacenter}/host/${cluster}'
... ELSE Run ovftool --datastore=${datastore} ${ova_options_with_network} ${ova_path} 'vi://${user}:${password}@${host}/${datacenter}/host/${cluster}' ... ELSE Run ovftool --datastore=${datastore} ${ova_options_with_network} ${ova_path} 'vi://${user}:${password}@${host}/${datacenter}/host/${cluster}'
Log ${out}
Log To Console \n${out} Should Contain ${out} Received IP address:
@{out}= Split To Lines ${out} Should Not Contain ${out} None
Should Contain @{out}[-1] Completed successfully
Log To Console \nUnified OVA is deployed successfully ${out}= Run GOVC_URL=${host} GOVC_USERNAME=${user} GOVC_PASSWORD=${password} GOVC_INSECURE=1 govc ls /ha-datacenter/host/cls/
${out}= Split To Lines ${out}
${idx}= Set Variable 1
:FOR ${line} IN @{out}
\ Continue For Loop If '${line}' == '/ha-datacenter/host/cls/Resources'
\ ${ip}= Fetch From Right ${line} /
\ Set Suite Variable ${esx${idx}-ip} ${ip}
\ ${idx}= Evaluate ${idx}+1
Run Keyword And Ignore Error Run GOVC_URL=${host} GOVC_USERNAME=${user} GOVC_PASSWORD=${password} GOVC_INSECURE=1 govc host.esxcli -host.ip=${esx1-ip} system settings advanced set -o /Net/GuestIPHack -i 1
${ip}= Run GOVC_URL=${host} GOVC_USERNAME=${user} GOVC_PASSWORD=${password} GOVC_INSECURE=1 govc vm.ip -esxcli harbor-unified-ova-integration-test
Set Environment Variable HARBOR_IP ${ip}
Log To Console \nHarbor IP: %{HARBOR_IP}
Wait for Harbor Ready ${protocol} %{HARBOR_IP}
[Return] %{HARBOR_IP}
# Requires vc credential for govc # Requires vc credential for govc
Cleanup VIC-OVA On Test Server Cleanup Harbor-OVA On Test Server
[Arguments] ${url}=%{GOVC_URL} ${username}=%{GOVC_USERNAME} ${password}=%{GOVC_PASSWORD} [Arguments] ${url}=%{GOVC_URL} ${username}=%{GOVC_USERNAME} ${password}=%{GOVC_PASSWORD}
${rc} ${output}= Run And Return Rc And Output GOVC_URL=${url} GOVC_USERNAME=${username} GOVC_PASSWORD=${password} GOVC_INSECURE=1 govc vm.destroy ${ova_target_vm_name} ${rc} ${output}= Run And Return Rc And Output GOVC_URL=${url} GOVC_USERNAME=${username} GOVC_PASSWORD=${password} GOVC_INSECURE=1 govc vm.destroy ${ova_target_vm_name}
Log ${output} Log ${output}
@ -83,7 +95,3 @@ Build Unified OVA
@{out}= Split To Lines ${out} @{out}= Split To Lines ${out}
Should Not Contain @{out}[-1] Error Should Not Contain @{out}[-1] Error
Log To Console \nUnified OVA is built successfully Log To Console \nUnified OVA is built successfully
Remove OVA Artifacts Locally
${rev}= Run git rev-parse --short HEAD
Remove Files bin/vic-1.1.0-${rev}.ova bin/vic-1.1.0-${rev}.ovf bin/vic-1.1.0-${rev}.mk bin/vic-1.1.0-${rev}-disk*.vmdk

View File

@ -18,28 +18,23 @@ Documentation This resource contains any keywords dealing with operations being
*** Keywords *** *** Keywords ***
Power On VM OOB Power On VM OOB
[Arguments] ${vm} [Arguments] ${vm}
${rc} ${output}= Run Keyword If '%{HOST_TYPE}' == 'VC' Run And Return Rc And Output govc vm.power -on %{VCH-NAME}/"${vm}" ${rc} ${output}= Run And Return Rc And Output govc vm.power -on "${vm}"
Run Keyword If '%{HOST_TYPE}' == 'VC' Should Be Equal As Integers ${rc} 0 Should Be Equal As Integers ${rc} 0
${rc} ${output}= Run Keyword If '%{HOST_TYPE}' == 'ESXi' Run And Return Rc And Output govc vm.power -on "${vm}"
Run Keyword If '%{HOST_TYPE}' == 'ESXi' Should Be Equal As Integers ${rc} 0
Log To Console Waiting for VM to power on ... Log To Console Waiting for VM to power on ...
Wait Until VM Powers On ${vm} Wait Until VM Powers On ${vm}
Power Off VM OOB Power Off VM OOB
[Arguments] ${vm} [Arguments] ${vm}
${rc} ${output}= Run Keyword If '%{HOST_TYPE}' == 'VC' Run And Return Rc And Output govc vm.power -off %{VCH-NAME}/"${vm}" ${rc} ${output}= Run And Return Rc And Output govc vm.power -off "${vm}"
Run Keyword If '%{HOST_TYPE}' == 'VC' Should Be Equal As Integers ${rc} 0 Log To Console ${output}
${rc} ${output}= Run Keyword If '%{HOST_TYPE}' == 'ESXi' Run And Return Rc And Output govc vm.power -off "${vm}" Should Be Equal As Integers ${rc} 0
Run Keyword If '%{HOST_TYPE}' == 'ESXi' Should Be Equal As Integers ${rc} 0
Log To Console Waiting for VM to power off ... Log To Console Waiting for VM to power off ...
Wait Until VM Powers Off "${vm}" Wait Until VM Powers Off "${vm}"
Destroy VM OOB Destroy VM OOB
[Arguments] ${vm} [Arguments] ${vm}
${rc} ${output}= Run Keyword If '%{HOST_TYPE}' == 'VC' Run And Return Rc And Output govc vm.destroy %{VCH-NAME}/"*-${vm}" ${rc} ${output}= Run And Return Rc And Output govc vm.destroy "*-${vm}"
Run Keyword If '%{HOST_TYPE}' == 'VC' Should Be Equal As Integers ${rc} 0 Should Be Equal As Integers ${rc} 0
${rc} ${output}= Run Keyword If '%{HOST_TYPE}' == 'ESXi' Run And Return Rc And Output govc vm.destroy "*-${vm}"
Run Keyword If '%{HOST_TYPE}' == 'ESXi' Should Be Equal As Integers ${rc} 0
Put Host Into Maintenance Mode Put Host Into Maintenance Mode
${rc} ${output}= Run And Return Rc And Output govc host.maintenance.enter -host.ip=%{TEST_URL} ${rc} ${output}= Run And Return Rc And Output govc host.maintenance.enter -host.ip=%{TEST_URL}
@ -56,13 +51,19 @@ Reboot VM
Power On VM OOB ${vm} Power On VM OOB ${vm}
Log To Console ${vm} Powered On Log To Console ${vm} Powered On
Reset VM
[Arguments] ${vm}
${rc} ${output}= Run And Return Rc And Output govc vm.power -reset "${vm}"
Log To Console ${output}
Should Be Equal As Integers ${rc} 0
Log To Console Waiting for VM to reset ...
Wait Until VM Powers On "${vm}"
Wait Until VM Powers On Wait Until VM Powers On
[Arguments] ${vm} [Arguments] ${vm}
:FOR ${idx} IN RANGE 0 30 :FOR ${idx} IN RANGE 0 30
\ ${ret}= Run Keyword If '%{HOST_TYPE}' == 'VC' Run govc vm.info %{VCH-NAME}/${vm} \ ${ret}= Run govc vm.info ${vm}
\ Run Keyword If '%{HOST_TYPE}' == 'VC' Set Test Variable ${out} ${ret} \ Set Test Variable ${out} ${ret}
\ ${ret}= Run Keyword If '%{HOST_TYPE}' == 'ESXi' Run govc vm.info ${vm}
\ Run Keyword If '%{HOST_TYPE}' == 'ESXi' Set Test Variable ${out} ${ret}
\ ${status}= Run Keyword And Return Status Should Contain ${out} poweredOn \ ${status}= Run Keyword And Return Status Should Contain ${out} poweredOn
\ Return From Keyword If ${status} \ Return From Keyword If ${status}
\ Sleep 1 \ Sleep 1
@ -71,10 +72,8 @@ Wait Until VM Powers On
Wait Until VM Powers Off Wait Until VM Powers Off
[Arguments] ${vm} [Arguments] ${vm}
:FOR ${idx} IN RANGE 0 30 :FOR ${idx} IN RANGE 0 30
\ ${ret}= Run Keyword If '%{HOST_TYPE}' == 'VC' Run govc vm.info %{VCH-NAME}/${vm} \ ${ret}= Run govc vm.info ${vm}
\ Run Keyword If '%{HOST_TYPE}' == 'VC' Set Test Variable ${out} ${ret} \ Set Test Variable ${out} ${ret}
\ ${ret}= Run Keyword If '%{HOST_TYPE}' == 'ESXi' Run govc vm.info ${vm}
\ Run Keyword If '%{HOST_TYPE}' == 'ESXi' Set Test Variable ${out} ${ret}
\ ${status}= Run Keyword And Return Status Should Contain ${out} poweredOff \ ${status}= Run Keyword And Return Status Should Contain ${out} poweredOff
\ Return From Keyword If ${status} \ Return From Keyword If ${status}
\ Sleep 1 \ Sleep 1
@ -83,10 +82,8 @@ Wait Until VM Powers Off
Wait Until VM Is Destroyed Wait Until VM Is Destroyed
[Arguments] ${vm} [Arguments] ${vm}
:FOR ${idx} IN RANGE 0 30 :FOR ${idx} IN RANGE 0 30
\ ${ret}= Run Keyword If '%{HOST_TYPE}' == 'VC' Run govc ls vm/%{VCH-NAME}/${vm} \ ${ret}= Run govc ls vm/${vm}
\ Run Keyword If '%{HOST_TYPE}' == 'VC' Set Test Variable ${out} ${ret} \ Set Test Variable ${out} ${ret}
\ ${ret}= Run Keyword If '%{HOST_TYPE}' == 'ESXi' Run govc ls vm/${vm}
\ Run Keyword If '%{HOST_TYPE}' == 'ESXi' Set Test Variable ${out} ${ret}
\ ${status}= Run Keyword And Return Status Should Be Empty ${out} \ ${status}= Run Keyword And Return Status Should Be Empty ${out}
\ Return From Keyword If ${status} \ Return From Keyword If ${status}
\ Sleep 1 \ Sleep 1

View File

@ -0,0 +1,51 @@
// Copyright (c) 2017 VMware, Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
*** Settings ***
Documentation Harbor BATs
Resource ../../resources/Util.robot
Default Tags OVA
*** Test Cases ***
Test Case - Deploy OVA
Deploy Harbor-OVA To Test Server %{DHCP} %{PROTOCOL} False %{USER} %{PASSWORD} ${ova_url} %{HOST} %{DATASTORE} %{CLUSTER} %{DATACENTER}
Test Case - Sign With Admin Modified Pwd
Open Connection %{HARBOR_IP}
Login root ova-test-root-pwd
SSHLibrary.Get File /data/ca_download/harbor_ca.crt
Close All Connections
Generate Certificate Authority For Chrome %{HARBOR_PASSWORD}
Init Chrome Driver
Sign In Harbor https://%{HARBOR_IP} admin %{HARBOR_ADMIN_PASSWORD}
Close Browser
Test Case - Push Image
Init Chrome Driver
Start Docker Daemon Locally
${d}= Get Current Date result_format=%m%s
Create An New User url=https://%{HARBOR_IP} username=tester${d} email=tester${d}@vmware.com realname=harbortest newPassword=Test1@34 comment=harbortest
Create An New Project test${d}
Push image %{HARBOR_IP} tester${d} Test1@34 test${d} hello-world:latest
Go Into Project test${d}
Wait Until Page Contains test${d}/hello-world
Test Case - OVA reboot
Reboot VM harbor-unified-ova-integration-test
Wait for Harbor Ready %{protocol} %{HARBOR_IP}
Test Case - OVA reset
Reset VM harbor-unified-ova-integration-test
Wait for Harbor Ready %{protocol} %{HARBOR_IP}