[robot] Add test executed by the suite
Enable a series of test cases that are executed by the test suite for Setup, Provision and Sanity. Depends-On : I34dfe1c01b27e5e8ce046de3305dd78c7f9d1383 Signed-off-by: Jose Perez Carranza <jose.perez.carranza@intel.com> Change-Id: Ia1e4e9ce011e1e527bd1109d1260bdc0b9a410b9
This commit is contained in:
parent
4ee20f9e40
commit
4fd5d5371b
|
@ -0,0 +1,257 @@
|
|||
*** Settings ***
|
||||
|
||||
Documentation Tests for provisioning and unlocking controllers, computes and
|
||||
... storage hosts.
|
||||
... Author(s):
|
||||
... - Jose Perez Carranza <jose.perez.carranza@intel.com>
|
||||
... - Juan Carlos Alonso <juan.carlos.alonso@intel.com>
|
||||
|
||||
Variables Variables/Global.py
|
||||
Resource Resources/HostManagement.robot
|
||||
Resource Resources/Utils.robot
|
||||
Resource Resources/OpenStack.robot
|
||||
Resource Resources/Provisioning.robot
|
||||
Library Libraries/common.py
|
||||
Library Collections
|
||||
Suite Setup Run Keywords Utils.Stx Suite Setup
|
||||
... provisioning.Assign Data Interfaces
|
||||
|
||||
*** Variables ***
|
||||
${master_controller} controller-0
|
||||
${second_controller} controller-1
|
||||
${backend_type} ceph
|
||||
${physnet0} physnet0
|
||||
${physnet1} physnet1
|
||||
${mtu} 1500
|
||||
${publicnet} public-net0
|
||||
${privatenet} private-net0
|
||||
${internalnet} internal-net0
|
||||
${externalnet} external-net0
|
||||
${publicsubnet} public-subnet0
|
||||
${privatesubnet} private-subnet0
|
||||
${internalsubnet} internal-subnet0
|
||||
${externalsubnet} external-subnet0
|
||||
${publicrouter} public-router0
|
||||
${privaterouter} private-router0
|
||||
${lgv_name} nova-local
|
||||
${nova_size} 100
|
||||
${nova_size_comp} True
|
||||
${cgts_part_size} 20
|
||||
${app_tarball} ${APP_TARBALL_FILE}
|
||||
${host_image_path} /home/${CLI_USER_NAME}/
|
||||
${clouds_yml} clouds.yml
|
||||
${password} ${Config.credentials.STX_DEPLOY_USER_PSWD}
|
||||
|
||||
*** Test Cases ***
|
||||
Provisioning Simplex System
|
||||
[Tags] Simplex
|
||||
[Documentation] Validates provisioning of a simplex configuration
|
||||
... according to steps defined at
|
||||
... "https://wiki.openstack.org/wiki/StarlingX/Containers/Installation"
|
||||
Configure OAM Interface ${master_controller}
|
||||
Run Keyword If '${ENVIRONMENT}'=='baremetal' Run Keywords
|
||||
... Set NTP Server AND Configure Vswitch Type
|
||||
Configure Data Interfaces ${master_controller} ${data0if}
|
||||
... ${data1if} ${physnet0} ${physnet1} ${mtu}
|
||||
Enable Containerized Services ${master_controller}
|
||||
Setup Partitions ${master_controller} ${lgv_name} ${nova_size}
|
||||
... ${cgts_part_size}
|
||||
Configure Ceph ${master_controller} ${backend_type}
|
||||
Unlock Master Controller ${master_controller}
|
||||
Set Ceph Pool Replication
|
||||
Wait Until Keyword Succeeds 5 min 5 sec
|
||||
... Check Ceph Status
|
||||
Put File %{PYTHONPATH}/${app_tarball}
|
||||
... ${host_image_path}/${app_tarball}
|
||||
Stage Application Deployment stx-openstack ${app_tarball}
|
||||
Bring Up Services stx-openstack
|
||||
Set Ceph Pool Replication
|
||||
Put File %{PYTHONPATH}/Utils/${clouds_yml}
|
||||
... ${host_image_path}/${clouds_yml}
|
||||
${sed_cmd} Catenate
|
||||
... sed -i 's/PASS/${password}/' ${host_image_path}/${clouds_yml}
|
||||
Run Command ${sed_cmd}
|
||||
Set Cluster Endpoints ${clouds_yml}
|
||||
Provider Network Setup ${physnet0} ${physnet1}
|
||||
Tenant Networking Setup ${physnet0} ${physnet1} ${externalnet}
|
||||
... ${publicnet} ${privatenet} ${internalnet} ${publicsubnet}
|
||||
... ${privatesubnet} ${internalsubnet} ${externalsubnet}
|
||||
... ${publicrouter} ${privaterouter}
|
||||
|
||||
Provisioning Duplex System
|
||||
[Tags] Duplex
|
||||
[Documentation] Validates provisioning of a duplex configuration
|
||||
... according to steps defined at
|
||||
... "https://wiki.openstack.org/wiki/StarlingX/Containers/
|
||||
... InstallationOnAIODX"
|
||||
Configure OAM Interface ${master_controller}
|
||||
Configure MGMT Interface ${master_controller}
|
||||
Run Keyword If '${ENVIRONMENT}'=='baremetal' Run Keywords
|
||||
... Set NTP Server AND Configure Vswitch Type
|
||||
Configure Data Interfaces ${master_controller} ${data0if}
|
||||
... ${data1if} ${physnet0} ${physnet1} ${mtu}
|
||||
Enable Containerized Services ${master_controller}
|
||||
Setup Partitions ${master_controller} ${lgv_name} ${nova_size}
|
||||
... ${cgts_part_size}
|
||||
Configure Ceph ${master_controller} ${backend_type}
|
||||
Unlock Master Controller ${master_controller}
|
||||
Wait Until Keyword Succeeds 5 min 5 sec
|
||||
... Check Ceph Status
|
||||
# --- Installing Remaining Nodes ---
|
||||
Run Keyword IF '${ENVIRONMENT}'=='virtual'
|
||||
... Install Remaining Nodes Virtual
|
||||
... ELSE Install Remaining Nodes Baremetal
|
||||
# --- Controller-1 ---
|
||||
Configure Data Interfaces ${second_controller} ${data0if}
|
||||
... ${data1if} ${physnet0} ${physnet1} ${mtu}
|
||||
Enable Containerized Services ${second_controller}
|
||||
Setup Partitions ${second_controller} ${lgv_name} ${nova_size}
|
||||
... ${cgts_part_size}
|
||||
Configure Ceph ${second_controller} ${backend_type}
|
||||
Unlock Second Controller ${second_controller}
|
||||
Check Host Readiness ${second_controller}
|
||||
Wait Until Keyword Succeeds 5 min 5 sec
|
||||
... Check Ceph Status
|
||||
Put File %{PYTHONPATH}/${app_tarball}
|
||||
... ${host_image_path}/${app_tarball}
|
||||
Stage Application Deployment stx-openstack ${app_tarball}
|
||||
Bring Up Services stx-openstack
|
||||
Set Ceph Pool Replication
|
||||
Put File %{PYTHONPATH}/Utils/${clouds_yml}
|
||||
... ${host_image_path}/${clouds_yml}
|
||||
${sed_cmd} Catenate
|
||||
... sed -i 's/PASS/${password}/' ${host_image_path}/${clouds_yml}
|
||||
Run Command ${sed_cmd}
|
||||
Set Cluster Endpoints ${clouds_yml}
|
||||
Provider Network Setup ${physnet0} ${physnet1}
|
||||
Tenant Networking Setup ${physnet0} ${physnet1} ${externalnet}
|
||||
... ${publicnet} ${privatenet} ${internalnet} ${publicsubnet}
|
||||
... ${privatesubnet} ${internalsubnet} ${externalsubnet}
|
||||
... ${publicrouter} ${privaterouter}
|
||||
|
||||
Provisioning Standard Non-Storage System
|
||||
[Tags] MN-Local
|
||||
[Documentation] Validates provisioning of a standard non storage
|
||||
... configuration according to steps defined at
|
||||
... "https://wiki.openstack.org/wiki/StarlingX/Containers/
|
||||
... InstallationOnStandard"
|
||||
# --- Controller-0 ---
|
||||
Configure OAM Interface ${master_controller}
|
||||
Configure MGMT Interface ${master_controller}
|
||||
Run Keyword If '${ENVIRONMENT}'=='baremetal' Run Keywords
|
||||
... Set NTP Server AND Configure Vswitch Type
|
||||
Enable Containerized Services ${master_controller}
|
||||
Unlock Master Controller ${master_controller}
|
||||
# --- Installing Remaining Nodes ---
|
||||
Run Keyword IF '${ENVIRONMENT}'=='virtual'
|
||||
... Install Remaining Nodes Virtual
|
||||
... ELSE Install Remaining Nodes Baremetal
|
||||
# --- Controller-1 ---
|
||||
Enable Containerized Services ${second_controller}
|
||||
Provide OAM Network Interface ${second_controller}
|
||||
Setup Cluster Host Interfaces ${second_controller}
|
||||
Unlock Second Controller ${second_controller}
|
||||
Check Host Readiness ${second_controller}
|
||||
## TO DO : HERE KEYWORD TO CHECK QUORUM ON CEPH
|
||||
# --- Computes ---
|
||||
${computes} = Get Compute Nodes
|
||||
Sort List ${computes}
|
||||
: FOR ${compute} IN @{computes}
|
||||
\ Enable Containerized Services ${compute}
|
||||
\ Run Keyword If '${compute}'=='compute-0'
|
||||
\ ... Add Ceph Monitor ${compute}
|
||||
\ Setup Partitions ${compute} ${lgv_name} ${nova_size_comp}
|
||||
... ${cgts_part_size}
|
||||
\ Configure Data Interfaces ${compute} ${data0if}
|
||||
... ${data1if} ${physnet0} ${physnet1} ${mtu}
|
||||
\ Setup Cluster Host Interfaces ${compute}
|
||||
\ Unlock Compute ${compute}
|
||||
\ Check Host Readiness ${compute} 1
|
||||
## TO DO : HERE KEYWORD TO CHECK QUORUM ON CEPH
|
||||
# - Enable ODS on Controllers
|
||||
${controllers} Create List controller-0 controller-1
|
||||
: FOR ${controller} IN @{controllers}
|
||||
\ Add ODS To Tier ${controller}
|
||||
# HERE KEYWORD TO CHECK QUORUM AND STATUS CEPH
|
||||
Put File %{PYTHONPATH}/${app_tarball}
|
||||
... ${host_image_path}/${app_tarball}
|
||||
Stage Application Deployment stx-openstack ${app_tarball}
|
||||
Bring Up Services stx-openstack
|
||||
Set Ceph Pool Replication
|
||||
Put File %{PYTHONPATH}/Utils/${clouds_yml}
|
||||
... ${host_image_path}/${clouds_yml}
|
||||
${sed_cmd} Catenate
|
||||
... sed -i 's/PASS/${password}/' ${host_image_path}/${clouds_yml}
|
||||
Run Command ${sed_cmd}
|
||||
Set Cluster Endpoints ${clouds_yml}
|
||||
Provider Network Setup ${physnet0} ${physnet1}
|
||||
Tenant Networking Setup ${physnet0} ${physnet1} ${externalnet}
|
||||
... ${publicnet} ${privatenet} ${internalnet} ${publicsubnet}
|
||||
... ${privatesubnet} ${internalsubnet} ${externalsubnet}
|
||||
... ${publicrouter} ${privaterouter}
|
||||
|
||||
Provisioning Standard Storage System
|
||||
[Tags] MN-External
|
||||
[Documentation] Validates provisioning of a standard storage
|
||||
... configuration according to steps defined at
|
||||
... "https://wiki.openstack.org/wiki/StarlingX/Containers/
|
||||
... InstallationOnStandardStorage"
|
||||
# --- Controller-0 ---
|
||||
Configure OAM Interface ${master_controller}
|
||||
Configure MGMT Interface ${master_controller}
|
||||
Run Keyword If '${ENVIRONMENT}'=='baremetal' Run Keywords
|
||||
... Set NTP Server AND Configure Vswitch Type
|
||||
Enable Containerized Services ${master_controller}
|
||||
Unlock Master Controller ${master_controller}
|
||||
# --- Installing Remaining Nodes ---
|
||||
Run Keyword IF '${ENVIRONMENT}'=='virtual'
|
||||
... Install Remaining Nodes Virtual
|
||||
... ELSE Install Remaining Nodes Baremetal
|
||||
# --- Controller-1 ---
|
||||
Enable Containerized Services ${second_controller}
|
||||
Provide OAM Network Interface ${second_controller}
|
||||
Setup Cluster Host Interfaces ${second_controller}
|
||||
Unlock Second Controller ${second_controller}
|
||||
Check Host Readiness ${second_controller}
|
||||
## TO DO : HERE KEYWORD TO CHECK QUORUM ON CEPH
|
||||
# --- Storage Nodes ---
|
||||
# HERE CONTAINERIZED SERVICES
|
||||
${storages} = Get Storage Nodes
|
||||
Sort List ${storages}
|
||||
: FOR ${storage} IN @{storages}
|
||||
\ Setup Cluster Host Interfaces Storage Node ${storage}
|
||||
\ Add Storage OSD ${storage} /dev/sdb
|
||||
\ Unlock Storage ${storage}
|
||||
## TO DO : HERE KEYWORD TO CHECK QUORUM ON CEPH
|
||||
# --- Compute Nodes ---
|
||||
${computes} = Get Compute Nodes
|
||||
Sort List ${computes}
|
||||
: FOR ${compute} IN @{computes}
|
||||
\ Enable Containerized Services ${compute}
|
||||
\ Label Remote Storage ${compute}
|
||||
## TODO : According to the wiki comment "Why is this step different
|
||||
## than Standard?", so using storage keyword meanwhile
|
||||
\ Setup Cluster Host Interfaces Storage Node ${compute}
|
||||
\ Configure Data Interfaces ${compute} ${data0if}
|
||||
... ${data1if} ${physnet0} ${physnet1} ${mtu}
|
||||
\ Setup Partitions ${compute} ${lgv_name} ${nova_size_comp}
|
||||
... ${cgts_part_size} True
|
||||
\ Unlock Compute ${compute}
|
||||
\ Check Host Readiness ${compute} 1
|
||||
## TO DO : HERE KEYWORD TO CHECK QUORUM ON CEPH
|
||||
Put File %{PYTHONPATH}/${app_tarball}
|
||||
... ${host_image_path}/${app_tarball}
|
||||
Stage Application Deployment stx-openstack ${app_tarball}
|
||||
Bring Up Services stx-openstack
|
||||
Set Ceph Pool Replication
|
||||
Put File %{PYTHONPATH}/Utils/${clouds_yml}
|
||||
... ${host_image_path}/${clouds_yml}
|
||||
${sed_cmd} Catenate
|
||||
... sed -i 's/PASS/${password}/' ${host_image_path}/${clouds_yml}
|
||||
Run Command ${sed_cmd}
|
||||
Set Cluster Endpoints ${clouds_yml}
|
||||
Provider Network Setup ${physnet0} ${physnet1}
|
||||
Tenant Networking Setup ${physnet0} ${physnet1} ${externalnet}
|
||||
... ${publicnet} ${privatenet} ${internalnet} ${publicsubnet}
|
||||
... ${privatesubnet} ${internalsubnet} ${externalsubnet}
|
||||
... ${publicrouter} ${privaterouter}
|
|
@ -0,0 +1,163 @@
|
|||
*** Settings ***
|
||||
Documentation Create instances from image, perform different
|
||||
... power status and set properties, using Cirros OS and Centos OS.
|
||||
... Author(s):
|
||||
... - Juan Carlos Alonso juan.carlos.alonso@intel.com
|
||||
|
||||
Resource Resources/Utils.robot
|
||||
Resource Resources/OpenStack.robot
|
||||
Suite Setup Utils.Stx Suite Setup
|
||||
Suite TearDown Run Keywords
|
||||
... OpenStack.Openstack Cleanup All
|
||||
... Utils.Stx Suite TearDown
|
||||
|
||||
*** Variables ***
|
||||
${cirros_image} ${CIRROS_FILE}
|
||||
${cirros_image_name} cirros
|
||||
${cirros_flavor_name_1} f1.small
|
||||
${cirros_flavor_name_2} f2.small
|
||||
${cirros_flavor_ram} 2048
|
||||
${cirros_flavor_disk} 20
|
||||
${cirros_flavor_vcpus} 1
|
||||
${cirros_instance_name} vm-cirros-1
|
||||
${centos_image} ${CENTOS_FILE}
|
||||
${centos_image_name} centos
|
||||
${centos_flavor_name} f1.medium
|
||||
${centos_flavor_ram} 4096
|
||||
${centos_flavor_disk} 40
|
||||
${centos_flavor_vcpus} 2
|
||||
${centos_instance_name} vm-centos-1
|
||||
${network_name} network-1
|
||||
${subnet_name} subnet-1
|
||||
${disk_format} qcow2
|
||||
${subnet_range} 192.168.0.0/24
|
||||
${subnet_extras} --ip-version 4 --dhcp ${subnet_name}
|
||||
${flavor_property_1} --property sw:wrs:guest:heartbeat='false'
|
||||
${flavor_property_2} --property hw:cpu_policy='shared'
|
||||
${instance_property_1} --property sw:wrs:auto_recovery
|
||||
${instance_property_2} --property hw:wrs:live_migration_max_downtime
|
||||
${instance_property_3} --property hw:wrs:live_migration_timeout
|
||||
${host_image_path} /home/${CLI_USER_NAME}/
|
||||
|
||||
*** Test Cases ***
|
||||
Create Flavors For Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Create flavors with or without properties to be used
|
||||
... to launch Cirros and Centos instances.
|
||||
${properties} Catenate ${flavor_property_1} ${flavor_property_2}
|
||||
Create Flavor ${cirros_flavor_ram} ${cirros_flavor_vcpus}
|
||||
... ${cirros_flavor_disk} ${cirros_flavor_name_1}
|
||||
Create Flavor ${centos_flavor_ram} ${centos_flavor_vcpus}
|
||||
... ${centos_flavor_disk} ${properties} ${centos_flavor_name}
|
||||
|
||||
Create Images For Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Create images with or without properties to be used
|
||||
... to launch Cirros and Centos instances.
|
||||
Put File %{PYTHONPATH}/${cirros_image}
|
||||
... ${host_image_path}/${cirros_image}
|
||||
Put File %{PYTHONPATH}/${centos_image}
|
||||
... ${host_image_path}/${centos_image}
|
||||
Create Image ${host_image_path}/${cirros_image} ${disk_format}
|
||||
... ${cirros_image_name}
|
||||
Create Image ${host_image_path}/${centos_image} ${disk_format}
|
||||
... ${centos_image_name}
|
||||
|
||||
Create Networks For Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Create networks to be used to launch Cirros and Centos
|
||||
... instances.
|
||||
Create Network ${network_name}
|
||||
Create Subnet ${network_name} ${subnet_range} ${subnet_extras}
|
||||
|
||||
Launch Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Launch Cirros and Centos instances.
|
||||
Create Instance ${network_name} ${cirros_instance_name}
|
||||
... ${cirros_image_name} ${cirros_flavor_name_1}
|
||||
Create Instance ${network_name} ${centos_instance_name}
|
||||
... ${centos_image_name} ${centos_flavor_name}
|
||||
|
||||
Suspend Resume Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Suspend and Resume Cirros and Centos instances.
|
||||
Suspend Instance ${cirros_instance_name}
|
||||
Resume Instance ${cirros_instance_name}
|
||||
Suspend Instance ${centos_instance_name}
|
||||
Resume Instance ${centos_instance_name}
|
||||
|
||||
Set Error Active Flags Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Set 'Error' and 'Active' flags to Cirros and Centos
|
||||
... instances.
|
||||
Set Error State Instance ${cirros_instance_name} error
|
||||
Set Active State Instance ${cirros_instance_name} active
|
||||
Set Error State Instance ${centos_instance_name} error
|
||||
Set Active State Instance ${centos_instance_name} active
|
||||
|
||||
Pause Unpause Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Pause and Unpause Cirros and Centos instances.
|
||||
Pause Instance ${cirros_instance_name}
|
||||
Pause Instance ${centos_instance_name}
|
||||
Unpause Instance ${cirros_instance_name}
|
||||
Unpause Instance ${centos_instance_name}
|
||||
|
||||
Stop Start Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Stop and Start Cirros and Centos instances.
|
||||
Stop Instance ${cirros_instance_name}
|
||||
Stop Instance ${centos_instance_name}
|
||||
Start Instance ${cirros_instance_name}
|
||||
Start Instance ${centos_instance_name}
|
||||
|
||||
Lock Unlock Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Lock and Unlock Cirros and Centos instances.
|
||||
Lock Instance ${cirros_instance_name}
|
||||
Lock Instance ${centos_instance_name}
|
||||
Unlock Instance ${cirros_instance_name}
|
||||
Unlock Instance ${centos_instance_name}
|
||||
|
||||
Reboot Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Reboot Cirros and Centos instances.
|
||||
Reboot Instance ${cirros_instance_name}
|
||||
Reboot Instance ${centos_instance_name}
|
||||
|
||||
Rebuild Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Rebuild Cirros and Centos instances.
|
||||
Rebuild Instance ${cirros_instance_name}
|
||||
Rebuild Instance ${centos_instance_name}
|
||||
|
||||
Resize Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Resize Cirros instance.
|
||||
Create Flavor ${cirros_flavor_ram} ${cirros_flavor_vcpus}
|
||||
... ${cirros_flavor_disk} ${cirros_flavor_name_2}
|
||||
Resize Instance ${cirros_instance_name} ${cirros_flavor_name_2}
|
||||
Resize Instance ${cirros_instance_name} ${cirros_flavor_name_1}
|
||||
|
||||
Set Unset Properties Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Set Unset properties of Cirros and Centos instances.
|
||||
${properties} Catenate ${instance_property_1}='true'
|
||||
... ${instance_property_2}='500' ${instance_property_3}='180'
|
||||
Set Instance Property ${cirros_instance_name} ${properties}
|
||||
Set Instance Property ${centos_instance_name} ${properties}
|
||||
${properties} Catenate ${instance_property_1}
|
||||
... ${instance_property_2} ${instance_property_3}
|
||||
Unset Instance Property ${cirros_instance_name} ${properties}
|
||||
Unset Instance Property ${centos_instance_name} ${properties}
|
||||
|
||||
Evacuate Instances From Hosts
|
||||
[Tags] Duplex MN-Local MN-External
|
||||
[Documentation] Evacuate all Cirros and Centos instances from computes
|
||||
... or controllers.
|
||||
Run Keyword If '${CONFIGURATION_TYPE}' == 'Duplex'
|
||||
... Run Keywords Evacuate Instances controller-0 AND
|
||||
... Evacuate Instances controller-1
|
||||
... ELSE IF '${CONFIGURATION_TYPE}' == 'MN-Local' or '${CONFIGURATION_TYPE}' == 'MN-External'
|
||||
... Run Keywords Evacuate Instances compute-0 AND
|
||||
... Evacuate Instances compute-1
|
|
@ -0,0 +1,165 @@
|
|||
*** Settings ***
|
||||
Documentation Create instances from volume, perform different
|
||||
... power status and set properties, using Cirros OS.
|
||||
... Author(s):
|
||||
... - Juan Carlos Alonso juan.carlos.alonso@intel.com
|
||||
|
||||
Resource Resources/Utils.robot
|
||||
Resource Resources/OpenStack.robot
|
||||
Suite Setup Utils.Stx Suite Setup
|
||||
Suite TearDown Run Keywords
|
||||
... OpenStack.Openstack Cleanup All
|
||||
... Utils.Stx Suite TearDown
|
||||
|
||||
*** Variables ***
|
||||
${cirros_image} ${CIRROS_FILE}
|
||||
${cirros_image_name} cirros
|
||||
${cirros_flavor_name_1} f1.small
|
||||
${cirros_flavor_name_2} f2.small
|
||||
${cirros_flavor_ram} 2048
|
||||
${cirros_flavor_disk} 20
|
||||
${cirros_flavor_vcpus} 1
|
||||
${cirros_instance_name_1} vm-cirros-1
|
||||
${cirros_instance_name_2} vm-cirros-2
|
||||
${cirros_volume_size} 20
|
||||
${cirros_volume_name_1} vol-cirros-1
|
||||
${cirros_volume_name_2} vol-cirros-2
|
||||
${network_name} network-1
|
||||
${subnet_name} subnet-1
|
||||
${disk_format} qcow2
|
||||
${subnet_range} 192.168.0.0/24
|
||||
${subnet_extras} --ip-version 4 --dhcp ${subnet_name}
|
||||
${flavor_property_1} --property sw:wrs:guest:heartbeat='false'
|
||||
${flavor_property_2} --property hw:cpu_policy='shared'
|
||||
${instance_property_1} --property sw:wrs:auto_recovery
|
||||
${instance_property_2} --property hw:wrs:live_migration_max_downtime
|
||||
${instance_property_3} --property hw:wrs:live_migration_timeout
|
||||
${host_image_path} /home/${CLI_USER_NAME}/
|
||||
|
||||
*** Test Cases ***
|
||||
Create Flavors For Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Create flavors with or without properties to be used
|
||||
... to launch Cirros instances.
|
||||
${properties} Catenate ${flavor_property_1} ${flavor_property_2}
|
||||
Create Flavor ${cirros_flavor_ram} ${cirros_flavor_vcpus}
|
||||
... ${cirros_flavor_disk} ${cirros_flavor_name_1}
|
||||
|
||||
Create Images For Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Create images with or without properties to be used
|
||||
... to launch Cirros instances.
|
||||
Put File %{PYTHONPATH}/${cirros_image}
|
||||
... ${host_image_path}/${cirros_image}
|
||||
Create Image ${host_image_path}/${cirros_image} ${disk_format}
|
||||
... ${cirros_image_name}
|
||||
|
||||
Create Networks For Instance
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Create networks to be used to launch Cirros
|
||||
... instances.
|
||||
Create Network ${network_name}
|
||||
Create Subnet ${network_name} ${subnet_range} ${subnet_extras}
|
||||
|
||||
Create Volume For Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Create volumes with or without properties to be used to
|
||||
... to launch Cirros instances.
|
||||
Create Volume ${cirros_volume_size} ${cirros_image_name}
|
||||
... --bootable ${cirros_volume_name_1}
|
||||
Create Volume ${cirros_volume_size} ${cirros_image_name}
|
||||
... --bootable ${cirros_volume_name_2}
|
||||
|
||||
Launch Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Launch Cirros instances.
|
||||
Create Instance From Volume ${network_name} ${cirros_instance_name_1}
|
||||
... ${cirros_volume_name_1} ${cirros_flavor_name_1}
|
||||
Create Instance From Volume ${network_name} ${cirros_instance_name_2}
|
||||
... ${cirros_volume_name_2} ${cirros_flavor_name_1}
|
||||
|
||||
Suspend Resume Instance
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Suspend and Resume Cirros instances.
|
||||
Suspend Instance ${cirros_instance_name_1}
|
||||
Resume Instance ${cirros_instance_name_1}
|
||||
Suspend Instance ${cirros_instance_name_2}
|
||||
Resume Instance ${cirros_instance_name_2}
|
||||
|
||||
Set Error Active Flags Instance
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Set 'Error' and 'Active' flags to Cirros
|
||||
... instance.
|
||||
Set Error State Instance ${cirros_instance_name_1} error
|
||||
Set Active State Instance ${cirros_instance_name_1} active
|
||||
Set Error State Instance ${cirros_instance_name_2} error
|
||||
Set Active State Instance ${cirros_instance_name_2} active
|
||||
|
||||
Pause Unpause Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Pause and Unpause Cirros instances.
|
||||
Pause Instance ${cirros_instance_name_1}
|
||||
Pause Instance ${cirros_instance_name_2}
|
||||
Unpause Instance ${cirros_instance_name_1}
|
||||
Unpause Instance ${cirros_instance_name_2}
|
||||
|
||||
Stop Start Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Stop and Start Cirros instances.
|
||||
Stop Instance ${cirros_instance_name_1}
|
||||
Stop Instance ${cirros_instance_name_2}
|
||||
Start Instance ${cirros_instance_name_1}
|
||||
Start Instance ${cirros_instance_name_2}
|
||||
|
||||
Lock Unlock Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Lock and Unlock Cirros instances.
|
||||
Lock Instance ${cirros_instance_name_1}
|
||||
Lock Instance ${cirros_instance_name_2}
|
||||
Unlock Instance ${cirros_instance_name_1}
|
||||
Unlock Instance ${cirros_instance_name_2}
|
||||
|
||||
Reboot Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Reboot Cirros instances.
|
||||
Reboot Instance ${cirros_instance_name_1}
|
||||
Reboot Instance ${cirros_instance_name_2}
|
||||
|
||||
Rebuild Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Rebuild Cirros instances.
|
||||
Rebuild Instance From Volume ${cirros_instance_name_1}
|
||||
... ${cirros_image_name}
|
||||
Rebuild Instance From Volume ${cirros_instance_name_2}
|
||||
... ${cirros_image_name}
|
||||
|
||||
Resize Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Resize Cirros instances.
|
||||
Create Flavor ${cirros_flavor_ram} ${cirros_flavor_vcpus}
|
||||
... ${cirros_flavor_disk} ${cirros_flavor_name_2}
|
||||
Resize Instance ${cirros_instance_name_1} ${cirros_flavor_name_2}
|
||||
Resize Instance ${cirros_instance_name_1} ${cirros_flavor_name_1}
|
||||
|
||||
Set Unset Properties Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Set Unset properties of Cirros instances.
|
||||
${properties} Catenate ${instance_property_1}='true'
|
||||
... ${instance_property_2}='500' ${instance_property_3}='180'
|
||||
Set Instance Property ${cirros_instance_name_1} ${properties}
|
||||
Set Instance Property ${cirros_instance_name_2} ${properties}
|
||||
${properties} Catenate ${instance_property_1}
|
||||
... ${instance_property_2} ${instance_property_3}
|
||||
Unset Instance Property ${cirros_instance_name_1} ${properties}
|
||||
Unset Instance Property ${cirros_instance_name_2} ${properties}
|
||||
|
||||
Evacuate Instances From Hosts
|
||||
[Tags] Duplex MN-Local MN-External
|
||||
[Documentation] Evacuate all Cirros instances from computes
|
||||
... or controllers.
|
||||
Run Keyword If '${CONFIGURATION_TYPE}' == 'Duplex'
|
||||
... Run Keywords Evacuate Instances controller-0 AND
|
||||
... Evacuate Instances controller-1
|
||||
... ELSE IF '${CONFIGURATION_TYPE}' == 'MN-Local' or '${CONFIGURATION_TYPE}' == 'MN-External'
|
||||
... Run Keywords Evacuate Instances compute-0 AND
|
||||
... Evacuate Instances compute-1
|
|
@ -0,0 +1,174 @@
|
|||
*** Settings ***
|
||||
Documentation Create instances from snapshot, perform different
|
||||
... power status and set properties, using Cirros OS.
|
||||
... Author(s):
|
||||
... - Juan Carlos Alonso <juan.carlos.alonso@intel.com>
|
||||
|
||||
Library SSHLibrary
|
||||
Resource Resources/Utils.robot
|
||||
Resource Resources/OpenStack.robot
|
||||
Suite Setup Utils.Stx Suite Setup
|
||||
Suite TearDown Run Keywords
|
||||
... OpenStack.Openstack Cleanup All
|
||||
... Utils.Stx Suite TearDown
|
||||
|
||||
*** Variables ***
|
||||
${cirros_image} ${CIRROS_FILE}
|
||||
${cirros_image_name} cirros
|
||||
${cirros_flavor_name_1} f1.small
|
||||
${cirros_flavor_name_2} f2.small
|
||||
${cirros_flavor_ram} 2048
|
||||
${cirros_flavor_disk} 20
|
||||
${cirros_flavor_vcpus} 1
|
||||
${cirros_instance_name_1} vm-cirros-1
|
||||
${cirros_instance_name_2} vm-cirros-2
|
||||
${cirros_volume_size} 20
|
||||
${cirros_volume_name} vol-cirros-1
|
||||
${cirros_snapshot_name_1} snap-cirros-1
|
||||
${cirros_snapshot_name_2} snap-cirros-2
|
||||
${cirros_snapshot_size} 20
|
||||
${network_name} network-1
|
||||
${subnet_name} subnet-1
|
||||
${disk_format} qcow2
|
||||
${subnet_range} 192.168.0.0/24
|
||||
${subnet_extras} --ip-version 4 --dhcp ${subnet_name}
|
||||
${flavor_property_1} --property sw:wrs:guest:heartbeat='false'
|
||||
${flavor_property_2} --property hw:cpu_policy='shared'
|
||||
${instance_property_1} --property sw:wrs:auto_recovery
|
||||
${instance_property_2} --property hw:wrs:live_migration_max_downtime
|
||||
${instance_property_3} --property hw:wrs:live_migration_timeout
|
||||
${host_image_path} /home/${CLI_USER_NAME}/
|
||||
|
||||
*** Test Cases ***
|
||||
Create Flavors For Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Create flavors with or without properties to be used
|
||||
... to launch Cirros instances.
|
||||
${properties} Catenate ${flavor_property_1} ${flavor_property_2}
|
||||
Create Flavor ${cirros_flavor_ram} ${cirros_flavor_vcpus}
|
||||
... ${cirros_flavor_disk} ${cirros_flavor_name_1}
|
||||
|
||||
Create Images For Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Create images with or without properties to be used
|
||||
... to launch Cirros instances.
|
||||
Put File %{PYTHONPATH}/${cirros_image}
|
||||
... ${host_image_path}/${cirros_image}
|
||||
Create Image ${host_image_path}/${cirros_image} ${disk_format}
|
||||
... ${cirros_image_name}
|
||||
|
||||
Create Networks For Instance
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Create networks to be used to launch Cirros and Centos
|
||||
... instances.
|
||||
Create Network ${network_name}
|
||||
Create Subnet ${network_name} ${subnet_range} ${subnet_extras}
|
||||
|
||||
Create Volume For Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Create volumes with or without properties to be used
|
||||
... to launch Cirros instances.
|
||||
Create Volume ${cirros_volume_size} ${cirros_image_name}
|
||||
... --bootable ${cirros_volume_name}
|
||||
|
||||
Create Snapshot For Instance
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Create snapshots with or without properties to be used
|
||||
... to launch Cirros instances.
|
||||
Create Snapshot ${cirros_volume_name} ${cirros_snapshot_name_1}
|
||||
Create Snapshot ${cirros_volume_name} ${cirros_snapshot_name_2}
|
||||
|
||||
Launch Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Launch Cirros instances from snapshot.
|
||||
Create Instance From Snapshot ${network_name} ${cirros_image_name}
|
||||
... ${cirros_instance_name_1} ${cirros_snapshot_name_1}
|
||||
... ${cirros_snapshot_size} ${cirros_flavor_name_1}
|
||||
Create Instance From Snapshot ${network_name} ${cirros_image_name}
|
||||
... ${cirros_instance_name_2} ${cirros_snapshot_name_2}
|
||||
... ${cirros_snapshot_size} ${cirros_flavor_name_1}
|
||||
|
||||
Suspend Resume Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Suspend and Resume Cirros instances.
|
||||
Suspend Instance ${cirros_instance_name_1}
|
||||
Resume Instance ${cirros_instance_name_1}
|
||||
Suspend Instance ${cirros_instance_name_2}
|
||||
Resume Instance ${cirros_instance_name_2}
|
||||
|
||||
Set Error Active Flags Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Set 'Error' and 'Active' flags to Cirros instances.
|
||||
Set Error State Instance ${cirros_instance_name_1} error
|
||||
Set Active State Instance ${cirros_instance_name_1} active
|
||||
Set Error State Instance ${cirros_instance_name_2} error
|
||||
Set Active State Instance ${cirros_instance_name_2} active
|
||||
|
||||
Pause Unpause Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Pause and Unpause Cirros instances.
|
||||
Pause Instance ${cirros_instance_name_1}
|
||||
Pause Instance ${cirros_instance_name_2}
|
||||
Unpause Instance ${cirros_instance_name_1}
|
||||
Unpause Instance ${cirros_instance_name_2}
|
||||
|
||||
Stop Start Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Stop and Start Cirros instances.
|
||||
Stop Instance ${cirros_instance_name_1}
|
||||
Stop Instance ${cirros_instance_name_2}
|
||||
Start Instance ${cirros_instance_name_1}
|
||||
Start Instance ${cirros_instance_name_2}
|
||||
|
||||
Lock Unlock Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Lock and Unlock Cirros instances.
|
||||
Lock Instance ${cirros_instance_name_1}
|
||||
Lock Instance ${cirros_instance_name_2}
|
||||
Unlock Instance ${cirros_instance_name_1}
|
||||
Unlock Instance ${cirros_instance_name_2}
|
||||
|
||||
Reboot Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Reboot Cirros instances.
|
||||
Reboot Instance ${cirros_instance_name_1}
|
||||
Reboot Instance ${cirros_instance_name_2}
|
||||
|
||||
Rebuild Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Rebuild Cirros instances.
|
||||
Rebuild Instance From Volume ${cirros_instance_name_1}
|
||||
... ${cirros_image_name}
|
||||
Rebuild Instance From Volume ${cirros_instance_name_2}
|
||||
... ${cirros_image_name}
|
||||
|
||||
Resize Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Resize Cirros instances.
|
||||
Create Flavor ${cirros_flavor_ram} ${cirros_flavor_vcpus}
|
||||
... ${cirros_flavor_disk} ${cirros_flavor_name_2}
|
||||
Resize Instance ${cirros_instance_name_1} ${cirros_flavor_name_2}
|
||||
Resize Instance ${cirros_instance_name_1} ${cirros_flavor_name_1}
|
||||
|
||||
Set Unset Properties Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Set Unset properties of Cirros instances.
|
||||
${properties} Catenate ${instance_property_1}='true'
|
||||
... ${instance_property_2}='500' ${instance_property_3}='180'
|
||||
Set Instance Property ${cirros_instance_name_1} ${properties}
|
||||
Set Instance Property ${cirros_instance_name_2} ${properties}
|
||||
${properties} Catenate ${instance_property_1}
|
||||
... ${instance_property_2} ${instance_property_3}
|
||||
Unset Instance Property ${cirros_instance_name_1} ${properties}
|
||||
Unset Instance Property ${cirros_instance_name_2} ${properties}
|
||||
|
||||
Evacuate Instances From Hosts
|
||||
[Tags] Duplex MN-Local MN-External
|
||||
[Documentation] Evacuate all instances from computes or
|
||||
... controllers.
|
||||
Run Keyword If '${CONFIGURATION_TYPE}' == 'Duplex'
|
||||
... Run Keywords Evacuate Instances controller-0 AND
|
||||
... Evacuate Instances controller-1
|
||||
... ELSE IF '${CONFIGURATION_TYPE}' == 'MN-Local' or '${CONFIGURATION_TYPE}' == 'MN-External'
|
||||
... Run Keywords Evacuate Instances compute-0 AND
|
||||
... Evacuate Instances compute-1
|
|
@ -0,0 +1,62 @@
|
|||
***Settings ***
|
||||
Documentation Test to launch instance through a heat template.
|
||||
... Author(s):
|
||||
... - Hector Ivan Ramos Escobar <ramos.escobarx.hector.ivan@intel.com>
|
||||
... - Juan Carlos Alonso Sanchez <juan.carlos.alonso@intel.com>
|
||||
|
||||
Resource Resources/Utils.robot
|
||||
Resource Resources/OpenStack.robot
|
||||
Suite Setup Utils.Stx Suite Setup
|
||||
Suite TearDown Run Keywords
|
||||
... OpenStack.Openstack Cleanup All
|
||||
... Utils.Stx Suite TearDown
|
||||
|
||||
*** Variables ***
|
||||
${stack_template} Utils/stack_template.yml
|
||||
${stack_name_1} stack-cirros-1
|
||||
${stack_name_2} stack-cirros-2
|
||||
${cirros_image} ${CIRROS_FILE}
|
||||
${cirros_image_name} cirros
|
||||
${cirros_flavor_name} f1.small
|
||||
${cirros_flavor_ram} 2048
|
||||
${cirros_flavor_disk} 20
|
||||
${cirros_flavor_vcpus} 1
|
||||
${network_name} network-1
|
||||
${subnet_name} subnet-1
|
||||
${disk_format} qcow2
|
||||
${subnet_range} 192.168.0.0/24
|
||||
${subnet_extras} --ip-version 4 --dhcp ${subnet_name}
|
||||
${host_image_path} /home/${CLI_USER_NAME}/
|
||||
|
||||
*** Test Cases ***
|
||||
Create Flavors for Instance
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Create flavors with or without properties to be used
|
||||
... to launch Cirros instances.
|
||||
Create Flavor ${cirros_flavor_ram} ${cirros_flavor_vcpus}
|
||||
... ${cirros_flavor_disk} ${cirros_flavor_name}
|
||||
|
||||
Create Images for Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Create images with or without properties to be used
|
||||
... to launch Cirros instances.
|
||||
Put File %{PYTHONPATH}/${cirros_image}
|
||||
... ${host_image_path}/${cirros_image}
|
||||
Create Image ${host_image_path}/${cirros_image} ${disk_format}
|
||||
... ${cirros_image_name}
|
||||
|
||||
Create Networks for Instance
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Create networks to be used to launch Cirros
|
||||
... instances.
|
||||
Create Network ${network_name}
|
||||
Create Subnet ${network_name} ${subnet_range} ${subnet_extras}
|
||||
|
||||
Create Instance Trough Stack
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Create a Cirros instance using a heat template
|
||||
Put File %{PYTHONPATH}/${stack_template}
|
||||
... ${host_image_path}/${stack_template}
|
||||
${net_id} Get Net Id ${network_name}
|
||||
Create Stack ${stack_name_1} ${stack_template} ${net_id}
|
||||
Create Stack ${stack_name_2} ${stack_template} ${net_id}
|
|
@ -0,0 +1,95 @@
|
|||
*** Settings ***
|
||||
Documentation Test to create an instance with Cirros.
|
||||
... Author(s):
|
||||
... - Hector Ivan Ramos Escobar <ramos.escobarx.hector.ivan@intel.com>
|
||||
... - Juan Carlos Alonso <juan.carlos.alonso@intel.com>
|
||||
|
||||
Resource Resources/Utils.robot
|
||||
Resource Resources/OpenStack.robot
|
||||
Suite Setup Utils.Stx Suite Setup
|
||||
Suite TearDown Run Keywords
|
||||
... OpenStack.Openstack Cleanup All
|
||||
... Utils.Stx Suite TearDown
|
||||
|
||||
*** Variables ***
|
||||
${cirros_image} ${CIRROS_FILE}
|
||||
${cirros_image_name} cirros
|
||||
${cirros_image_name_tmp} cirros-tmp
|
||||
${disk_format} qcow2
|
||||
${host_image_path} /home/${CLI_USER_NAME}/
|
||||
${image_disk_size} 10
|
||||
${image_ram_size} 20
|
||||
|
||||
*** Test Cases ***
|
||||
Create Image For Metrics
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Create images with or without properties to be used
|
||||
... to launch Cirros instances.
|
||||
Put File %{PYTHONPATH}/${cirros_image}
|
||||
... ${host_image_path}/${cirros_image}
|
||||
Create Image ${host_image_path}/${cirros_image} ${disk_format}
|
||||
... ${cirros_image_name}
|
||||
|
||||
Update Image Name
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Update image name.
|
||||
${openstack_cmd} Catenate openstack image show
|
||||
... ${cirros_image_name}
|
||||
${cmd} Catenate SEPARATOR=| ${openstack_cmd} grep "created_at"
|
||||
... awk '{print $4}'
|
||||
&{result} Run OS Command ${cmd}
|
||||
${created_at} Get From Dictionary ${result} stdout
|
||||
${openstack_cmd} Set Variable openstack image set
|
||||
${cmd} Catenate ${openstack_cmd} --name ${cirros_image_name_tmp}
|
||||
... ${cirros_image_name}
|
||||
Run OS Command ${cmd} True
|
||||
${openstack_cmd} Catenate openstack image show
|
||||
... ${cirros_image_name_tmp}
|
||||
${cmd} Catenate SEPARATOR=| ${openstack_cmd} grep "updated_at"
|
||||
... awk '{print $4}'
|
||||
&{result} Run OS Command ${cmd}
|
||||
${first_update} Get From Dictionary ${result} stdout
|
||||
Should Not Be Equal ${created_at} ${first_update}
|
||||
${openstack_cmd} Set Variable openstack image set
|
||||
${cmd} Catenate ${openstack_cmd} --name ${cirros_image_name}
|
||||
... ${cirros_image_name_tmp}
|
||||
Run OS Command ${cmd} True
|
||||
${openstack_cmd} Catenate openstack image show
|
||||
... ${cirros_image_name}
|
||||
${cmd} Catenate SEPARATOR=| ${openstack_cmd} grep "updated_at"
|
||||
... awk '{print $4}'
|
||||
&{result} Run OS Command ${cmd}
|
||||
${second_update} Get From Dictionary ${result} stdout
|
||||
Should Not Be Equal ${first_update} ${second_update}
|
||||
|
||||
Update Image Disk Ram Size
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Update image disk size and ram size.
|
||||
${openstack_cmd} Catenate openstack image show
|
||||
... ${cirros_image_name}
|
||||
${cmd} Catenate SEPARATOR=| ${openstack_cmd} grep "updated_at"
|
||||
... awk '{print $4}'
|
||||
&{result} Run OS Command ${cmd}
|
||||
${updated_at} Get From Dictionary ${result} stdout
|
||||
${openstack_cmd} Set Variable openstack image set
|
||||
${cmd} Catenate ${openstack_cmd} --min-disk ${image_disk_size}
|
||||
... ${cirros_image_name}
|
||||
Run OS Command ${cmd} True
|
||||
${openstack_cmd} Catenate openstack image show
|
||||
... ${cirros_image_name}
|
||||
${cmd} Catenate SEPARATOR=| ${openstack_cmd} grep "updated_at"
|
||||
... awk '{print $4}'
|
||||
&{result} Run OS Command ${cmd}
|
||||
${first_update} Get From Dictionary ${result} stdout
|
||||
Should Not Be Equal ${updated_at} ${first_update}
|
||||
${openstack_cmd} Set Variable openstack image set
|
||||
${cmd} Catenate ${openstack_cmd} --min-ram ${image_ram_size}
|
||||
... ${cirros_image_name}
|
||||
Run OS Command ${cmd} True
|
||||
${openstack_cmd} Catenate openstack image show
|
||||
... ${cirros_image_name}
|
||||
${cmd} Catenate SEPARATOR=| ${openstack_cmd} grep "updated_at"
|
||||
... awk '{print $4}'
|
||||
&{result} Run OS Command ${cmd}
|
||||
${second_update} Get From Dictionary ${result} stdout
|
||||
Should Not Be Equal ${first_update} ${second_update}
|
|
@ -0,0 +1,56 @@
|
|||
*** Settings ***
|
||||
Documentation Check the health of PODs services; update and apply the
|
||||
... helm chart via system application-apply.
|
||||
... Author(s):
|
||||
... - Hector Ivan Ramos Escobar <ramos.escobarx.hector.ivan@intel.com>
|
||||
... - Juan Carlos Alonso <juan.carlos.alonso@intel.com>
|
||||
|
||||
Resource Resources/Utils.robot
|
||||
Resource Resources/OpenStack.robot
|
||||
Resource Resources/Kubernetes.robot
|
||||
Suite Setup Utils.Stx Suite Setup
|
||||
Suite TearDown Run Keywords
|
||||
... Utils.Stx Suite TearDown
|
||||
|
||||
*** Variables ***
|
||||
${pod_yml} testpod.yaml
|
||||
${pod_name} testpod
|
||||
${chart_manifest} helm-charts-manifest.tgz
|
||||
${host_image_path} /home/${CLI_USER_NAME}/
|
||||
|
||||
*** Test Cases ***
|
||||
OpenStack PODs Healthy
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Check all OpenStack pods are healthy, in Running or
|
||||
... Completed state.
|
||||
Check System Application Status stx-openstack applied
|
||||
Check PODs Health
|
||||
|
||||
Reapply STX OpenStack
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Re apply stx openstack application without any
|
||||
... modification to helm charts.
|
||||
System Application Apply stx-openstack
|
||||
|
||||
STX OpenStack Override Update Reset
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Helm override for OpenStack nova chart and reset.
|
||||
Helm Override OpenStack stx-openstack nova openstack
|
||||
System Application Apply stx-openstack
|
||||
Check Helm Override OpenStack
|
||||
|
||||
Kube System Services
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Check pods status and kube-system services are
|
||||
... displayed.
|
||||
Check PODs Health
|
||||
Check Kube System Services
|
||||
|
||||
Create Check Delete POD
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Launch a POD via kubectl.
|
||||
Put File %{PYTHONPATH}/Utils/${pod_yml}
|
||||
... ${host_image_path}/${pod_yml}
|
||||
Create POD ${pod_yml} ${pod_name}
|
||||
Wait Until Keyword Succeeds 1 min 5 sec Check POD ${pod_name}
|
||||
Delete POD ${pod_name}
|
|
@ -0,0 +1,81 @@
|
|||
*** Settings ***
|
||||
Documentation Add hosts and perform swacts to test host management.
|
||||
... Author(s):
|
||||
... - Hector Ivan Ramos Escobar <ramos.escobarx.hector.ivan@intel.com>
|
||||
... - Juan Carlos Alonso <juan.carlos.alonso@intel.com>
|
||||
|
||||
Resource Resources/Provisioning.robot
|
||||
Resource Resources/Utils.robot
|
||||
Resource Resources/HostManagement.robot
|
||||
Resource Resources/OpenStack.robot
|
||||
Suite Setup Utils.Stx Suite Setup
|
||||
Suite TearDown Run Keywords
|
||||
... Utils.Stx Suite TearDown
|
||||
|
||||
*** Variables ***
|
||||
${controller_0} controller-0
|
||||
${controller_1} controller-1
|
||||
${add_error_msg} Host-add Rejected: Adding a host on a simplex system
|
||||
... is not allowed.
|
||||
${swact_error_msg} Swact action not allowed for a simplex system.
|
||||
${lock_error_msg} Rejected: Can not lock an active controller.
|
||||
|
||||
*** Test Cases ***
|
||||
Add Controller Host Simplex
|
||||
[Tags] Simplex
|
||||
[Documentation] Try to add a new controller on a Simplex
|
||||
... configuration, expect to fail.
|
||||
&{result} Run Command system host-add -n ${controller_1}
|
||||
${output} Get From Dictionary ${result} stderr
|
||||
Should Contain ${output} ${add_error_msg}
|
||||
|
||||
Swact Controller Host Simplex
|
||||
[Tags] Simplex
|
||||
[Documentation] Try to perform a swact controller on a Simplex
|
||||
... configuration, expect to fail.
|
||||
&{result} Run Command system host-swact ${controller_0}
|
||||
${output} Get From Dictionary ${result} stderr
|
||||
Should Contain ${output} ${swact_error_msg}
|
||||
|
||||
Lock Active Controller
|
||||
[Tags] Duplex MN-Local MN-External
|
||||
[Documentation] Try to perform a lock to the Active controller
|
||||
${system_cmd} Catenate SEPARATOR=| system host-show ${controller_0}
|
||||
... grep capabilities awk -F"'" '{print$8}'
|
||||
&{result} Run Command ${system_cmd}
|
||||
${personality} Get From Dictionary ${result} stdout
|
||||
${active_controller} Set Variable If
|
||||
... '${personality}'=='Controller-Active' controller-0 controller-1
|
||||
&{result} Run Command system host-lock ${active_controller}
|
||||
${output} Get From Dictionary ${result} stderr
|
||||
Should Contain ${output} ${lock_error_msg}
|
||||
|
||||
Lock Unlock Standby Controller
|
||||
[Tags] Duplex MN-Local MN-External
|
||||
[Documentation] Perform a lock/unlock to the Standby controller
|
||||
${system_cmd} Catenate SEPARATOR=| system host-show ${controller_0}
|
||||
... grep capabilities awk -F"'" '{print$8}'
|
||||
&{result} Run Command ${system_cmd}
|
||||
${personality} Get From Dictionary ${result} stdout
|
||||
${standby_controller} Set Variable If
|
||||
... '${personality}'=='Controller-Standby' controller-0 controller-1
|
||||
Lock Node ${standby_controller}
|
||||
Unlock Controller ${standby_controller}
|
||||
|
||||
Lock Unlock Compute Hosts
|
||||
[Tags] MN-Local MN-External
|
||||
[Documentation] Perform a lock/unlock to the compute nodes
|
||||
${computes} = Get Compute Nodes
|
||||
Sort List ${computes}
|
||||
: FOR ${compute} IN @{computes}
|
||||
\ Lock Node ${compute}
|
||||
\ Unlock Compute ${compute}
|
||||
|
||||
Lock Unlock Storage Hosts
|
||||
[Tags] MN-External
|
||||
[Documentation] Perform a lock/unlock to the storage nodes
|
||||
${storages} = Get Storage Nodes
|
||||
Sort List ${storages}
|
||||
: FOR ${storage} IN @{storages}
|
||||
\ Lock Node ${storage}
|
||||
\ Unlock Storage ${storage}
|
|
@ -0,0 +1,118 @@
|
|||
*** Settings ***
|
||||
Documentation Install and configure StarlingX ISO.
|
||||
... Author(s):
|
||||
... - Jose Perez Carranza <jose.perez.carranza@intel.com>
|
||||
... - Humberto Perez Rodriguez <humberto.i.perez.rodriguez@intel.com>
|
||||
... - Juan Carlos Alonso <juan.carlos.alonso@intel.com>
|
||||
|
||||
Library SSHLibrary
|
||||
Library Collections
|
||||
Library OperatingSystem
|
||||
Library Process
|
||||
Library String
|
||||
Library Qemu/qemu_setup.py
|
||||
Library Libraries/iso_setup.py
|
||||
Library Libraries/common.py
|
||||
Library Libraries/pxe_server.py
|
||||
Resource Resources/Utils.robot
|
||||
Resource Resources/Provisioning.robot
|
||||
Variables Variables/config_init.py Config
|
||||
... %{PYTHONPATH}/Config/config.ini
|
||||
Suite TearDown Utils.Stx Suite TearDown
|
||||
|
||||
*** Variables ***
|
||||
${destination} /home/${CLI_USER_NAME}/localhost.yml
|
||||
${source} %{PYTHONPATH}/Config/${Config.general.CONFIGURATION_FILE}
|
||||
${qemu_script} %{PYTHONPATH}/Qemu/qemu_setup.py
|
||||
${iso} %{PYTHONPATH}/${STX_ISO_FILE}
|
||||
${yaml} %{PYTHONPATH}/${CONFIG.general.ENV_YAML_FILE}
|
||||
${kernel_option} ${CONFIG.iso_installer.KERNEL_OPTION}
|
||||
${source_pkg} /var/www/html/stx/bootimage/Packages
|
||||
${source_repo} /var/www/html/stx/bootimage/repodata
|
||||
${password} ${Config.credentials.STX_DEPLOY_USER_PSWD}
|
||||
|
||||
*** Test Cases ***
|
||||
Qemu Libvirt VMs Setup Virtual
|
||||
[Tags] Simplex Duplex MN-Local MN-External virtual
|
||||
[Documentation] Qemu-Libvirt VMs setup and configuration for
|
||||
... StarlingX virtual deployment.
|
||||
# -- Install ISO on a VM
|
||||
${result} Run Process python ${qemu_script} -i ${iso} -c ${yaml}
|
||||
... shell=True
|
||||
log ${result.stdout}
|
||||
log ${result.stderr}
|
||||
Log To Console ${result.stderr}
|
||||
Should Be Equal As Integers ${result.rc} 0
|
||||
|
||||
GRUB Checker For BIOS Virtual
|
||||
[Tags] Simplex Duplex MN-Local MN-External virtual
|
||||
[Documentation] Check grub cmd boot line against the ones in StarlingX
|
||||
... ISO file.
|
||||
${grub_command_line} Get Cmd Boot Line
|
||||
${status} Grub Checker ${iso} vbios ${kernel_option}
|
||||
... ${grub_command_line}
|
||||
Should Be Equal As Strings ${status} match
|
||||
... msg="Kernel boot option does not match" values=False
|
||||
|
||||
Install ISO Virtual
|
||||
[Tags] Simplex Duplex MN-Local MN-External virtual
|
||||
[Documentation] Installation of controller node and define the
|
||||
... connection to be used on other test cases.
|
||||
# -- Install ISO on a VM
|
||||
${controller_connection} Install Iso
|
||||
Set Suite Variable ${controller_connection}
|
||||
|
||||
Check ISO Basic Mounting BareMetal
|
||||
[Tags] Simplex Duplex MN-Local MN-External baremetal
|
||||
[Documentation] Test basic ISO structure and funcntionality.
|
||||
Mount Iso On Pxe ${iso}
|
||||
|
||||
Install ISO BareMetal
|
||||
[Tags] Simplex Duplex MN-Local MN-External baremetal
|
||||
[Documentation] Installation of controller node and define the
|
||||
... connection to be used on other test cases.
|
||||
${master_controller} Install Iso Master Controller
|
||||
Run Keyword If '${CONFIGURATION_TYPE}'!='Simplex'
|
||||
... Turn Off Installation Nodes
|
||||
|
||||
Ansible Bootstrap Configuration
|
||||
[Tags] Simplex Duplex MN-Local MN-External virtual baremetal
|
||||
[Documentation] Configure controller with local bootstrap playbook.
|
||||
# -- Copy localhost.yml file to controller
|
||||
Wait Until Keyword Succeeds 5 min 5 sec
|
||||
... Connect to Controller Node ${CLI_USER_NAME} ${CLI_USER_PASS}
|
||||
... ${CONFIG.general.IP_UNIT_0_ADDRESS}
|
||||
SSHLibrary.Put File ${source} ${destination}
|
||||
${sed_cmd} Catenate
|
||||
... sed -i 's/ANSIBLE_PASS/${password}/' ${destination}
|
||||
Run Command ${sed_cmd}
|
||||
${sed_cmd} Catenate
|
||||
... sed -i 's/ADMIN_PASS/${password}/' ${destination}
|
||||
Run Command ${sed_cmd}
|
||||
${bootstrap} Set Variable
|
||||
... /usr/share/ansible/stx-ansible/playbooks/bootstrap/bootstrap.yml
|
||||
Run Command ansible-playbook ${bootstrap} True 3600 ~$
|
||||
|
||||
Copy Install Packages
|
||||
[Tags] Duplex MN-Local MN-External baremetal
|
||||
[Documentation] Copy packages required to install secondary nodes.
|
||||
# -- Copy required packages post install --Workaround for pxe install--
|
||||
Wait Until Keyword Succeeds 5 min 5 sec
|
||||
... Connect to Controller Node ${CLI_USER_NAME} ${CLI_USER_PASS}
|
||||
... ${CONFIG.general.IP_UNIT_0_ADDRESS}
|
||||
# -- Get current release
|
||||
${cmd_current_version} Catenate SEPARATOR=| cat /etc/build.info
|
||||
... grep SW_VERSION awk '{ split($1, v, "="); print v[2]}'
|
||||
&{result} Run Command ${cmd_current_version} True
|
||||
${current_version} Get From Dictionary ${result} stdout
|
||||
# -- Transfer directories with packages
|
||||
${destination_dir} Set Variable /home/${CLI_USER_NAME}/
|
||||
${destination_move} Set Variable
|
||||
... /www/pages/feed/rel-${${current_version.strip('"')}}
|
||||
SSHLibrary.Put Directory ${source_pkg} ${destination_dir} mode=0755
|
||||
SSHLibrary.Put Directory ${source_repo} ${destination_dir} mode=0755
|
||||
Execute Sudo Command
|
||||
... mv ${destination_dir}/Packages ${destination_move}/Packages
|
||||
Execute Sudo Command
|
||||
... mv ${destination_dir}/repodata ${destination_move}/repodata
|
||||
SSHLibrary.Close Connection
|
|
@ -0,0 +1,184 @@
|
|||
*** Settings ***
|
||||
Documentation Tests to create and stress instances from an image, perform
|
||||
... different power status and set properties, using Cirros OS
|
||||
... Author(s):
|
||||
... - Juan Carlos Alonso juan.carlos.alonso@intel.com
|
||||
|
||||
Resource Resources/Utils.robot
|
||||
Resource Resources/OpenStack.robot
|
||||
Resource Resources/Stress.robot
|
||||
Suite Setup Utils.Stx Suite Setup
|
||||
Suite TearDown Run Keywords
|
||||
... OpenStack.Openstack Cleanup All
|
||||
... Utils.Stx Suite TearDown
|
||||
|
||||
*** Variables ***
|
||||
${cirros_image} ${CIRROS_FILE}
|
||||
${cirros_image_name} cirros
|
||||
${cirros_flavor_name} f1.small
|
||||
${cirros_flavor_name_2} f2.small
|
||||
${cirros_flavor_ram} 2048
|
||||
${cirros_flavor_disk} 20
|
||||
${cirros_flavor_vcpus} 1
|
||||
${cirros_instance_name} vm-cirros
|
||||
${network_name} network-1
|
||||
${subnet_name} subnet-1
|
||||
${disk_format} qcow2
|
||||
${subnet_range} 192.168.0.0/24
|
||||
${subnet_extras} --ip-version 4 --dhcp ${subnet_name}
|
||||
${flavor_property_1} --property sw:wrs:guest:heartbeat='false'
|
||||
${flavor_property_2} --property hw:cpu_policy='shared'
|
||||
${instance_property_1} --property sw:wrs:auto_recovery
|
||||
${instance_property_2} --property hw:wrs:live_migration_max_downtime
|
||||
${instance_property_3} --property hw:wrs:live_migration_timeout
|
||||
${host_image_path} /home/${CLI_USER_NAME}/
|
||||
|
||||
*** Test Cases ***
|
||||
Create Flavor for Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Create flavor with or without properties to be used
|
||||
... to launch Cirros instances.
|
||||
${properties} Catenate ${flavor_property_1} ${flavor_property_2}
|
||||
Create Flavor ${cirros_flavor_ram} ${cirros_flavor_vcpus}
|
||||
... ${cirros_flavor_disk} ${properties} ${cirros_flavor_name}
|
||||
|
||||
Create Image for Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Create image with or without properties to be used
|
||||
... to launch Cirros instances.
|
||||
Put File %{PYTHONPATH}/${cirros_image}
|
||||
... ${host_image_path}/${cirros_image}
|
||||
Create Image ${host_image_path}/${cirros_image} ${disk_format}
|
||||
... ${cirros_image_name}
|
||||
|
||||
Create Network for Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Create network to be used to launch Cirros instances.
|
||||
Create Network ${network_name}
|
||||
Create Subnet ${network_name} ${subnet_range} ${subnet_extras}
|
||||
|
||||
Launch Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Launch 9 Cirros instances.
|
||||
:FOR ${i} IN RANGE 1 10
|
||||
\ Create Instance ${network_name} ${cirros_instance_name}-${i}
|
||||
... ${cirros_image_name} ${cirros_flavor_name}
|
||||
|
||||
Suspend Resume Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Suspend and Resume all Cirros instances 10 times.
|
||||
${openstack_cmd} Set Variable openstack server list
|
||||
${cmd} Catenate SEPARATOR=| ${openstack_cmd} awk '{print$4}'
|
||||
... grep -v "Name"
|
||||
&{result} Run OS Command ${cmd} True
|
||||
@{vm_list} Convert Response To List ${result}
|
||||
: FOR ${vm} IN @{vm_list}
|
||||
\ Stress Suspend Resume Instance ${vm}
|
||||
|
||||
Set Error Active Flags Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Set 'Error' and 'Active' flags to all Cirros instances
|
||||
... 10 times.
|
||||
${openstack_cmd} Set Variable openstack server list
|
||||
${cmd} Catenate SEPARATOR=| ${openstack_cmd} awk '{print$4}'
|
||||
... grep -v "Name"
|
||||
&{result} Run OS Command ${cmd} True
|
||||
@{vm_list} Convert Response To List ${result}
|
||||
: FOR ${vm} IN @{vm_list}
|
||||
\ Stress Set Error Active Instance ${vm}
|
||||
|
||||
Pause Unpause Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Pause and Unpause all Cirros instances 10 times.
|
||||
${openstack_cmd} Set Variable openstack server list
|
||||
${cmd} Catenate SEPARATOR=| ${openstack_cmd} awk '{print$4}'
|
||||
... grep -v "Name"
|
||||
&{result} Run OS Command ${cmd} True
|
||||
@{vm_list} Convert Response To List ${result}
|
||||
: FOR ${vm} IN @{vm_list}
|
||||
\ Stress Pause Unpause Instance ${vm}
|
||||
|
||||
Stop Start Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Stop and Start all Cirros instances 10 times.
|
||||
${openstack_cmd}= Set Variable openstack server list
|
||||
${cmd} Catenate SEPARATOR=| ${openstack_cmd} awk '{print$4}'
|
||||
... grep -v "Name"
|
||||
&{result} Run OS Command ${cmd} True
|
||||
@{vm_list} Convert Response To List ${result}
|
||||
: FOR ${vm} IN @{vm_list}
|
||||
\ Stress Stop Start Instance ${vm}
|
||||
|
||||
Lock Unlock Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Lock and Unlock all Cirros instances 10 times.
|
||||
${openstack_cmd} Set Variable openstack server list
|
||||
${cmd} Catenate SEPARATOR=| ${openstack_cmd} awk '{print$4}'
|
||||
... grep -v "Name"
|
||||
&{result} Run OS Command ${cmd} True
|
||||
@{vm_list} Convert Response To List ${result}
|
||||
: FOR ${vm} IN @{vm_list}
|
||||
\ Stress Lock Unlock Instance ${vm}
|
||||
|
||||
Reboot Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Reboot all Cirros instances 10 times.
|
||||
${openstack_cmd} Set Variable openstack server list
|
||||
${cmd} Catenate SEPARATOR=| ${openstack_cmd} awk '{print$4}'
|
||||
... grep -v "Name"
|
||||
&{result} Run OS Command ${cmd} True
|
||||
@{vm_list} Convert Response To List ${result}
|
||||
: FOR ${vm} IN @{vm_list}
|
||||
\ Stress Reboot Instance ${vm}
|
||||
|
||||
Rebuild Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Rebuild all Cirros instances 10 times.
|
||||
${openstack_cmd} Set Variable openstack server list
|
||||
${cmd} Catenate SEPARATOR=| ${openstack_cmd} awk '{print$4}'
|
||||
... grep -v "Name"
|
||||
&{result} Run OS Command ${cmd} True
|
||||
@{vm_list} Convert Response To List ${result}
|
||||
: FOR ${vm} IN @{vm_list}
|
||||
\ Stress Rebuild Instance ${vm}
|
||||
|
||||
Resize Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Resize all Cirros instances 10 times.
|
||||
Create Flavor ${cirros_flavor_ram} ${cirros_flavor_vcpus}
|
||||
... ${cirros_flavor_disk} ${cirros_flavor_name_2}
|
||||
${openstack_cmd} Set Variable openstack server list
|
||||
${cmd} Catenate SEPARATOR=| ${openstack_cmd} awk '{print$4}'
|
||||
... grep -v "Name"
|
||||
&{result} Run OS Command ${cmd} True
|
||||
@{vm_list} Convert Response To List ${result}
|
||||
: FOR ${vm} IN @{vm_list}
|
||||
\ Stress Resize Instance ${vm} ${cirros_flavor_name}
|
||||
... ${cirros_flavor_name_2}
|
||||
|
||||
Set Unset Properties Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Set Unset properties to all Cirros instances 10 times.
|
||||
${properties} Catenate ${instance_property_1}='true'
|
||||
... ${instance_property_2}='500' ${instance_property_3}='180'
|
||||
${properties_2} Catenate ${instance_property_1}
|
||||
... ${instance_property_2} ${instance_property_3}
|
||||
${openstack_cmd} Set Variable openstack server list
|
||||
${cmd} Catenate SEPARATOR=| ${openstack_cmd} awk '{print$4}'
|
||||
... grep -v "Name"
|
||||
&{result} Run OS Command ${cmd} True
|
||||
@{vm_list} Convert Response To List ${result}
|
||||
: FOR ${vm} IN @{vm_list}
|
||||
\ Stress Set Property Instance ${vm} ${properties}
|
||||
... ${properties_2}
|
||||
|
||||
Evacuate Instances From Hosts
|
||||
[Tags] Duplex MN-Local MN-External
|
||||
[Documentation] Evacuate all Cirros instances from computes
|
||||
... or controllers 10 times.
|
||||
Run Keyword If '${CONFIGURATION_TYPE}' == 'Duplex'
|
||||
... Run Keywords Evacuate Instances controller-0 AND
|
||||
... Evacuate Instances controller-1
|
||||
... ELSE IF '${CONFIGURATION_TYPE}' == 'MN-Local' or '${CONFIGURATION_TYPE}' == 'MN-External'
|
||||
... Run Keywords Evacuate Instances compute-0 AND
|
||||
... Evacuate Instances compute-1
|
|
@ -0,0 +1,202 @@
|
|||
*** Settings ***
|
||||
Documentation Tests to create and stress instances from volume, perform
|
||||
... different power status and set properties, using Cirros OS.
|
||||
... Author(s):
|
||||
... - Juan Carlos Alonso juan.carlos.alonso@intel.com
|
||||
|
||||
Resource Resources/Utils.robot
|
||||
Resource Resources/OpenStack.robot
|
||||
Resource Resources/Stress.robot
|
||||
Suite Setup Utils.Stx Suite Setup
|
||||
Suite TearDown Run Keywords
|
||||
... OpenStack.Openstack Cleanup All
|
||||
... Utils.Stx Suite TearDown
|
||||
|
||||
*** Variables ***
|
||||
${cirros_image} ${CIRROS_FILE}
|
||||
${cirros_image_name} cirros
|
||||
${cirros_flavor_name} f1.small
|
||||
${cirros_flavor_name_2} f2.small
|
||||
${cirros_flavor_ram} 2048
|
||||
${cirros_flavor_disk} 20
|
||||
${cirros_flavor_vcpus} 1
|
||||
${cirros_instance_name} vm-cirros
|
||||
${cirros_volume_size} 20
|
||||
${cirros_volume_name} vol-cirros
|
||||
${network_name} network-1
|
||||
${subnet_name} subnet-1
|
||||
${disk_format} qcow2
|
||||
${subnet_range} 192.168.0.0/24
|
||||
${subnet_extras} --ip-version 4 --dhcp ${subnet_name}
|
||||
${flavor_property_1} --property sw:wrs:guest:heartbeat='false'
|
||||
${flavor_property_2} --property hw:cpu_policy='shared'
|
||||
${instance_property_1} --property sw:wrs:auto_recovery
|
||||
${instance_property_2} --property hw:wrs:live_migration_max_downtime
|
||||
${instance_property_3} --property hw:wrs:live_migration_timeout
|
||||
${host_image_path} /home/${CLI_USER_NAME}/
|
||||
|
||||
*** Test Cases ***
|
||||
Create Flavor for Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Create flavor with or without properties to be used
|
||||
... to launch Cirros instances.
|
||||
${properties} Catenate ${flavor_property_1} ${flavor_property_2}
|
||||
Create Flavor ${cirros_flavor_ram} ${cirros_flavor_vcpus}
|
||||
... ${cirros_flavor_disk} ${cirros_flavor_name}
|
||||
|
||||
Create Image for Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Create image with or without properties to be used
|
||||
... to launch Cirros instances.
|
||||
Put File %{PYTHONPATH}/${cirros_image}
|
||||
... ${host_image_path}/${cirros_image}
|
||||
Create Image ${host_image_path}/${cirros_image} ${disk_format}
|
||||
... ${cirros_image_name}
|
||||
|
||||
Create Network for Instance
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Create network to be used to launch Cirros
|
||||
... instances.
|
||||
Create Network ${network_name}
|
||||
Create Subnet ${network_name} ${subnet_range} ${subnet_extras}
|
||||
|
||||
Create Volumes for Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Create volumes with or without properties to be used to
|
||||
... to launch Cirros instances.
|
||||
:FOR ${i} IN RANGE 1 10
|
||||
\ Create Volume ${cirros_volume_size} ${cirros_image_name}
|
||||
... --bootable ${cirros_volume_name}-${i}
|
||||
|
||||
Launch Instances From Volumes
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Launch 9 Cirros instances from volumes.
|
||||
${i} Set Variable 1
|
||||
${openstack_cmd}= Set Variable openstack volume list
|
||||
${cmd} Catenate SEPARATOR=| ${openstack_cmd} awk '{print$4}'
|
||||
... grep -v "Name"
|
||||
&{result} Run OS Command ${cmd} True
|
||||
@{vol_list} Convert Response To List ${result}
|
||||
: FOR ${vol} IN @{vol_list}
|
||||
\ Create Instance From Volume ${network_name}
|
||||
... ${cirros_instance_name}-${i} ${vol} ${cirros_flavor_name}
|
||||
\ ${i} Evaluate ${i} + 1
|
||||
|
||||
Suspend Resume Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Suspend and Resume all Cirros instances 10 times.
|
||||
${openstack_cmd} Set Variable openstack server list
|
||||
${cmd} Catenate SEPARATOR=| ${openstack_cmd} awk '{print$4}'
|
||||
... grep -v "Name"
|
||||
&{result} Run OS Command ${cmd} True
|
||||
@{vm_list} Convert Response To List ${result}
|
||||
: FOR ${vm} IN @{vm_list}
|
||||
\ Stress Suspend Resume Instance ${vm}
|
||||
|
||||
Set Error Active Flags Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Set 'Error' and 'Active' flags to all Cirros
|
||||
... instances 10 times.
|
||||
${openstack_cmd}= Set Variable openstack server list
|
||||
${cmd} Catenate SEPARATOR=| ${openstack_cmd} awk '{print$4}'
|
||||
... grep -v "Name"
|
||||
&{result} Run OS Command ${cmd} True
|
||||
@{vm_list} Convert Response To List ${result}
|
||||
: FOR ${vm} IN @{vm_list}
|
||||
\ Stress Set Error Active Instance ${vm}
|
||||
|
||||
Pause Unpause Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Pause and Unpause all Cirros instances 10 times.
|
||||
${openstack_cmd} Set Variable openstack server list
|
||||
${cmd} Catenate SEPARATOR=| ${openstack_cmd} awk '{print$4}'
|
||||
... grep -v "Name"
|
||||
&{result} Run OS Command ${cmd} True
|
||||
@{vm_list} Convert Response To List ${result}
|
||||
: FOR ${vm} IN @{vm_list}
|
||||
\ Stress Suspend Resume Instance ${vm}
|
||||
|
||||
Stop Start Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Stop and Start all Cirros instances.
|
||||
${openstack_cmd} Set Variable openstack server list
|
||||
${cmd} Catenate SEPARATOR=| ${openstack_cmd} awk '{print$4}'
|
||||
... grep -v "Name"
|
||||
&{result} Run OS Command ${cmd} True
|
||||
@{vm_list} Convert Response To List ${result}
|
||||
: FOR ${vm} IN @{vm_list}
|
||||
\ Stress Stop Start Instance ${vm}
|
||||
|
||||
Lock Unlock Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Lock and Unlock all Cirros instances 10 times.
|
||||
${openstack_cmd} Set Variable openstack server list
|
||||
${cmd} Catenate SEPARATOR=| ${openstack_cmd} awk '{print$4}'
|
||||
... grep -v "Name"
|
||||
&{result} Run OS Command ${cmd} True
|
||||
@{vm_list} Convert Response To List ${result}
|
||||
: FOR ${vm} IN @{vm_list}
|
||||
\ Stress Lock Unlock Instance ${vm}
|
||||
|
||||
Reboot Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Reboot all Cirros instances.
|
||||
${openstack_cmd} Set Variable openstack server list
|
||||
${cmd} Catenate SEPARATOR=| ${openstack_cmd} awk '{print$4}'
|
||||
... grep -v "Name"
|
||||
&{result} Run OS Command ${cmd} True
|
||||
@{vm_list} Convert Response To List ${result}
|
||||
: FOR ${vm} IN @{vm_list}
|
||||
\ Stress Reboot Instance ${vm}
|
||||
|
||||
Rebuild Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Rebuild all Cirros instances.
|
||||
${openstack_cmd} Set Variable openstack server list
|
||||
${cmd} Catenate SEPARATOR=| ${openstack_cmd} awk '{print$4}'
|
||||
... grep -v "Name"
|
||||
&{result} Run OS Command ${cmd} True
|
||||
@{vm_list} Convert Response To List ${result}
|
||||
: FOR ${vm} IN @{vm_list}
|
||||
\ Stress Rebuild Instance From Volume ${vm} ${cirros_image_name}
|
||||
|
||||
Resize Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Resize all Cirros instances.
|
||||
Create Flavor ${cirros_flavor_ram} ${cirros_flavor_vcpus}
|
||||
... ${cirros_flavor_disk} ${cirros_flavor_name_2}
|
||||
${openstack_cmd} Set Variable openstack server list
|
||||
${cmd} Catenate SEPARATOR=| ${openstack_cmd} awk '{print$4}'
|
||||
... grep -v "Name"
|
||||
&{result} Run OS Command ${cmd} True
|
||||
@{vm_list} Convert Response To List ${result}
|
||||
: FOR ${vm} IN @{vm_list}
|
||||
\ Stress Resize Instance ${vm} ${cirros_flavor_name}
|
||||
... ${cirros_flavor_name_2}
|
||||
|
||||
Set Unset Properties Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Set Unset properties to all Cirros instances 10 times.
|
||||
${properties} Catenate ${instance_property_1}='true'
|
||||
... ${instance_property_2}='500' ${instance_property_3}='180'
|
||||
${properties_2} Catenate ${instance_property_1}
|
||||
... ${instance_property_2} ${instance_property_3}
|
||||
${openstack_cmd} Set Variable openstack server list
|
||||
${cmd} Catenate SEPARATOR=| ${openstack_cmd} awk '{print$4}'
|
||||
... grep -v "Name"
|
||||
&{result} Run OS Command ${cmd} True
|
||||
@{vm_list} Convert Response To List ${result}
|
||||
: FOR ${vm} IN @{vm_list}
|
||||
\ Stress Set Property Instance ${vm} ${properties}
|
||||
... ${properties_2}
|
||||
|
||||
Evacuate Instances From Hosts
|
||||
[Tags] Duplex MN-Local MN-External
|
||||
[Documentation] Evacuate all Cirros instances from computes
|
||||
... or controllers 10 times.
|
||||
Run Keyword If '${CONFIGURATION_TYPE}' == 'Duplex'
|
||||
... Run Keywords Evacuate Instances controller-0 AND
|
||||
... Evacuate Instances controller-1
|
||||
... ELSE IF '${CONFIGURATION_TYPE}' == 'MN-Local' or '${CONFIGURATION_TYPE}' == 'MN-External'
|
||||
... Run Keywords Evacuate Instances compute-0 AND
|
||||
... Evacuate Instances compute-1
|
|
@ -0,0 +1,212 @@
|
|||
*** Settings ***
|
||||
Documentation Tests to create and stress instances from an snapshot, perform
|
||||
... different power status and set properties, using Cirros OS.
|
||||
... Author(s):
|
||||
... - Juan Carlos Alonso <juan.carlos.alonso@intel.com>
|
||||
|
||||
Library SSHLibrary
|
||||
Resource Resources/Utils.robot
|
||||
Resource Resources/OpenStack.robot
|
||||
Resource Resources/Stress.robot
|
||||
Suite Setup Utils.Stx Suite Setup
|
||||
Suite TearDown Run Keywords
|
||||
... OpenStack.Openstack Cleanup All
|
||||
... Utils.Stx Suite TearDown
|
||||
|
||||
*** Variables ***
|
||||
${cirros_image} ${CIRROS_FILE}
|
||||
${cirros_image_name} cirros
|
||||
${cirros_flavor_name} f1.small
|
||||
${cirros_flavor_name_2} f2.small
|
||||
${cirros_flavor_ram} 2048
|
||||
${cirros_flavor_disk} 20
|
||||
${cirros_flavor_vcpus} 1
|
||||
${cirros_instance_name} vm-cirros
|
||||
${cirros_volume_size} 20
|
||||
${cirros_volume_name} vol-cirros
|
||||
${cirros_snapshot_name} snap-cirros
|
||||
${cirros_snapshot_size} 20
|
||||
${network_name} network-1
|
||||
${subnet_name} subnet-1
|
||||
${disk_format} qcow2
|
||||
${subnet_range} 192.168.0.0/24
|
||||
${subnet_extras} --ip-version 4 --dhcp ${subnet_name}
|
||||
${flavor_property_1} --property sw:wrs:guest:heartbeat='false'
|
||||
${flavor_property_2} --property hw:cpu_policy='shared'
|
||||
${instance_property_1} --property sw:wrs:auto_recovery
|
||||
${instance_property_2} --property hw:wrs:live_migration_max_downtime
|
||||
${instance_property_3} --property hw:wrs:live_migration_timeout
|
||||
${host_image_path} /home/${CLI_USER_NAME}/
|
||||
|
||||
*** Test Cases ***
|
||||
Create Flavor for Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Create flavor with or without properties to be used
|
||||
... to launch Cirros instances.
|
||||
${properties} Catenate ${flavor_property_1} ${flavor_property_2}
|
||||
Create Flavor ${cirros_flavor_ram} ${cirros_flavor_vcpus}
|
||||
... ${cirros_flavor_disk} ${cirros_flavor_name}
|
||||
|
||||
Create Image for Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Create image with or without properties to be used
|
||||
... to launch Cirros instances.
|
||||
Put File %{PYTHONPATH}/${cirros_image}
|
||||
... ${host_image_path}/${cirros_image}
|
||||
Create Image ${host_image_path}/${cirros_image} ${disk_format}
|
||||
... ${cirros_image_name}
|
||||
|
||||
Create Network for Instance
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Create network to be used to launch Cirros instances.
|
||||
Create Network ${network_name}
|
||||
Create Subnet ${network_name} ${subnet_range} ${subnet_extras}
|
||||
|
||||
Create Volume for Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Create volume with or without properties to be used
|
||||
... to launch Cirros instances.
|
||||
Create Volume ${cirros_volume_size} ${cirros_image_name}
|
||||
... --bootable ${cirros_volume_name}
|
||||
|
||||
Create Snapshots for Instance
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Create snapshots with or without properties to be used
|
||||
... to launch Cirros instances.
|
||||
:FOR ${i} IN RANGE 1 10
|
||||
\ Create Snapshot ${cirros_volume_name}
|
||||
... ${cirros_snapshot_name}-${i}
|
||||
|
||||
Launch Instances From Snapshots
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Launch 9 Cirros instances from snapshots.
|
||||
${i} Set Variable 1
|
||||
${openstack_cmd} Set Variable openstack volume snapshot list
|
||||
${cmd} Catenate SEPARATOR=| ${openstack_cmd} awk '{print$4}'
|
||||
... grep -v "Name"
|
||||
&{result} Run OS Command ${cmd} True
|
||||
@{snap_list} Convert Response To List ${result}
|
||||
: FOR ${snap} IN @{snap_list}
|
||||
\ Create Instance From Snapshot ${network_name}
|
||||
... ${cirros_image_name} ${cirros_instance_name}-${i} ${snap}
|
||||
... ${cirros_snapshot_size} ${cirros_flavor_name}
|
||||
\ ${i} Evaluate ${i} + 1
|
||||
|
||||
Suspend Resume Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Suspend and Resume all Cirros instances 10 times.
|
||||
${openstack_cmd} Set Variable openstack server list
|
||||
${cmd} Catenate SEPARATOR=| ${openstack_cmd} awk '{print$4}'
|
||||
... grep -v "Name"
|
||||
&{result} Run OS Command ${cmd} True
|
||||
@{vm_list} Convert Response To List ${result}
|
||||
: FOR ${vm} IN @{vm_list}
|
||||
\ Stress Suspend Resume Instance ${vm}
|
||||
|
||||
Set Error Active Flags Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Set 'Error' and 'Active' flags all Cirros instances
|
||||
... 10 times.
|
||||
${openstack_cmd} Set Variable openstack server list
|
||||
${cmd} Catenate SEPARATOR=| ${openstack_cmd} awk '{print$4}'
|
||||
... grep -v "Name"
|
||||
&{result} Run OS Command ${cmd} True
|
||||
@{vm_list} Convert Response To List ${result}
|
||||
: FOR ${vm} IN @{vm_list}
|
||||
\ Stress Set Error Active Instance ${vm}
|
||||
|
||||
Pause Unpause Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Pause and Unpause all Cirros instances 10 times.
|
||||
${openstack_cmd} Set Variable openstack server list
|
||||
${cmd} Catenate SEPARATOR=| ${openstack_cmd} awk '{print$4}'
|
||||
... grep -v "Name"
|
||||
&{result} Run OS Command ${cmd} True
|
||||
@{vm_list} Convert Response To List ${result}
|
||||
: FOR ${vm} IN @{vm_list}
|
||||
\ Stress Suspend Resume Instance ${vm}
|
||||
|
||||
Stop Start Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Stop and Start all Cirros instances 10 times.
|
||||
${openstack_cmd} Set Variable openstack server list
|
||||
${cmd} Catenate SEPARATOR=| ${openstack_cmd} awk '{print$4}'
|
||||
... grep -v "Name"
|
||||
&{result} Run OS Command ${cmd} True
|
||||
@{vm_list} Convert Response To List ${result}
|
||||
: FOR ${vm} IN @{vm_list}
|
||||
\ Stress Stop Start Instance ${vm}
|
||||
|
||||
Lock Unlock Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Lock and Unlock all Cirros instances 10 times.
|
||||
${openstack_cmd} Set Variable openstack server list
|
||||
${cmd} Catenate SEPARATOR=| ${openstack_cmd} awk '{print$4}'
|
||||
... grep -v "Name"
|
||||
&{result} Run OS Command ${cmd} True
|
||||
@{vm_list} Convert Response To List ${result}
|
||||
: FOR ${vm} IN @{vm_list}
|
||||
\ Stress Lock Unlock Instance ${vm}
|
||||
|
||||
Reboot Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Reboot all Cirros instances 10 times.
|
||||
${openstack_cmd} Set Variable openstack server list
|
||||
${cmd} Catenate SEPARATOR=| ${openstack_cmd} awk '{print$4}'
|
||||
... grep -v "Name"
|
||||
&{result} Run OS Command ${cmd} True
|
||||
@{vm_list} Convert Response To List ${result}
|
||||
: FOR ${vm} IN @{vm_list}
|
||||
\ Stress Reboot Instance ${vm}
|
||||
|
||||
Rebuild Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Rebuild all Cirros instances 10 times.
|
||||
${openstack_cmd} Set Variable openstack server list
|
||||
${cmd} Catenate SEPARATOR=| ${openstack_cmd} awk '{print$4}'
|
||||
... grep -v "Name"
|
||||
&{result} Run OS Command ${cmd} True
|
||||
@{vm_list} Convert Response To List ${result}
|
||||
: FOR ${vm} IN @{vm_list}
|
||||
\ Stress Rebuild Instance From Volume ${vm} ${cirros_image_name}
|
||||
|
||||
Resize Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Resize all Cirros instances 10 times.
|
||||
Create Flavor ${cirros_flavor_ram} ${cirros_flavor_vcpus}
|
||||
... ${cirros_flavor_disk} ${cirros_flavor_name_2}
|
||||
${openstack_cmd} Set Variable openstack server list
|
||||
${cmd} Catenate SEPARATOR=| ${openstack_cmd} awk '{print$4}'
|
||||
... grep -v "Name"
|
||||
&{result} Run OS Command ${cmd} True
|
||||
@{vm_list} Convert Response To List ${result}
|
||||
: FOR ${vm} IN @{vm_list}
|
||||
\ Stress Resize Instance ${vm} ${cirros_flavor_name}
|
||||
... ${cirros_flavor_name_2}
|
||||
|
||||
Set Unset Properties Instances
|
||||
[Tags] Simplex Duplex MN-Local MN-External
|
||||
[Documentation] Set Unset properties of all Cirros instances 10 times.
|
||||
${properties} Catenate ${instance_property_1}='true'
|
||||
... ${instance_property_2}='500' ${instance_property_3}='180'
|
||||
${properties_2} Catenate ${instance_property_1}
|
||||
... ${instance_property_2} ${instance_property_3}
|
||||
${openstack_cmd}= Set Variable openstack server list
|
||||
${cmd} Catenate SEPARATOR=| ${openstack_cmd} awk '{print$4}'
|
||||
... grep -v "Name"
|
||||
&{result} Run OS Command ${cmd} True
|
||||
@{vm_list} Convert Response To List ${result}
|
||||
: FOR ${vm} IN @{vm_list}
|
||||
\ Stress Set Property Instance ${vm} ${properties}
|
||||
... ${properties_2}
|
||||
|
||||
Evacuate Instances From Hosts
|
||||
[Tags] Duplex MN-Local MN-External
|
||||
[Documentation] Evacuate all Cirros instances from computes or
|
||||
... controllers 10 times.
|
||||
Run Keyword If '${CONFIGURATION_TYPE}' == 'Duplex'
|
||||
... Run Keywords Evacuate Instances controller-0 AND
|
||||
... Evacuate Instances controller-1
|
||||
... ELSE IF '${CONFIGURATION_TYPE}' == 'MN-Local' or '${CONFIGURATION_TYPE}' == 'MN-External'
|
||||
... Run Keywords Evacuate Instances compute-0 AND
|
||||
... Evacuate Instances compute-1
|
Loading…
Reference in New Issue