CRs Used By the test-operator¶
This file contains definitions of all custom resources (CRs) that are accepted by the test-operator. Currently, there are four CRs accepted by the test-operator:
Tempest Custom Resource¶
---
apiVersion: test.openstack.org/v1beta1
kind: Tempest
metadata:
name: tempest-tests
namespace: openstack
spec:
containerImage: ""
# storageClass: local-storage
# parallel: false
# debug: false
# configOverwrite
# ---------------
# An interface to overwrite default config files like e.g. logging.conf But can also
# be used to add additional files. Those get added to the service config dir in
# /etc/test_operator/<file>
#
# configOverwrite:
# file.txt: |
# content of the file
# SSHKeySecretName
# ----------------
# SSHKeySecretName is the name of the k8s secret that contains an ssh key. The key is
# mounted to ~/.ssh/id_ecdsa in the tempest pod. Note, the test-operator looks for
# the private key in ssh-privatekey field of the secret.
#
# SSHKeySecretName: secret_name
# Privileged
# ----------
# Use with caution! This parameter specifies whether test-operator should spawn test
# pods with allowedPrivilegedEscalation: true and the default capabilities on
# top of capabilities that are usually needed by the test pods (NET_ADMIN, NET_RAW).
# This parameter is deemed insecure but it is needed for certain test-operator
# functionalities to work properly (e.g.: extraRPMs in Tempest CR, or certain set
# tobiko tests).
#
# privileged: false
tempestRun:
# NOTE: All parameters have default values (use only when you want to override
# the default behaviour)
includeList: | # <-- Use | to preserve \n
tempest.api.identity.v3.*
concurrency: 8
# excludeList: | # <-- Use | to preserve \n
# tempest.api.identity.v3.*
# expectedFailuresList: | # <-- Use | to preserve \n
# tempest.api.identity.v3.test_tokens.TokensV3Test.test_create_token
# workerFile: | # <-- Use | to preserve \n
# - worker:
# - tempest.api.*
# - neutron_tempest_tests
# - worker:
# - tempest.scenario.*
# smoke: false
# serial: false
# parallel: true
# externalPlugin:
# - repository: "https://opendev.org/openstack/barbican-tempest-plugin.git"
# - repository: "https://opendev.org/openstack/neutron-tempest-plugin.git"
# changeRepository: "https://review.opendev.org/openstack/neutron-tempest-plugin"
# changeRefspec: "refs/changes/97/896397/2"
# extraImages:
# - URL: https://download.cirros-cloud.net/0.6.2/cirros-0.6.2-x86_64-disk.img
# name: cirros-0.6.2-test-operator
# flavor:
# name: cirros-0.6.2-test-operator-flavor
# RAM: 512
# disk: 20
# vcpus: 1
# extraRPMs:
# ----------
# A list of URLs that point to RPMs that should be installed before
# the execution of tempest. WARNING! This parameter has no efect when used
# in combination with externalPlugin parameter.
# extraRPMs:
# - https://cbs.centos.org/kojifiles/packages/python-sshtunnel/0.4.0/12.el9s/noarch/python3-sshtunnel-0.4.0-12.el9s.noarch.rpm
# - https://cbs.centos.org/kojifiles/packages/python-whitebox-tests-tempest/0.0.3/0.1.766ff04git.el9s/noarch/python3-whitebox-tests-tempest-0.0.3-0.1.766ff04git.el9s.noarch.rpm
tempestconfRun:
# NOTE: All parameters have default values (use only when you want to override
# the default behaviour)
# create: true
# collectTiming: false
# insecure: false
# noDefaultDeployer: false
# debug: false
# verbose: false
# nonAdmin: false
# retryImage: false
# convertToRaw: false
# out: ./etc/tempest.conf
# flavorMinMem: 128
# flavorMinDisk: 1
# timeout: 600
# imageDiskFormat: qcow2
# image: https://download.cirros-cloud.net/0.5.2/cirros-0.5.2-x86_64-disk.img
# The following text will be mounted to the tempest pod
# as /etc/test_operator/deployer_input.yaml
# deployerInput: |
# [section]
# value1 = exmaple_value2
# value2 = example_value2
# The following text will be mounted to the tempest pod
# as /etc/test_operator/accounts.yaml
# testAccounts: |
# - username: 'multi_role_user'
# tenant_name: 'test_tenant_42'
# password: 'test_password'
# roles:
# - 'fun_role'
# - 'not_an_admin'
# - 'an_admin'
# The following text will be mounted to the tempest pod
# as /etc/test_operator/profile.yaml
# profile: |
# collect_timing: false
# create: false
# create_accounts_file: null
# createAccountsFile: /path/to/accounts.yaml
# generateProfile: /path/to/profile.yaml
# networkID:
# append: | # <-- Use | to preserve \n
# section1.name1 value1
# section1.name1 value2
# remove: | # <-- Use | to preserve \n
# section1.name1 value1
# section1.name1 value2
# overrides: | # <-- Use | to preserve \n
# overrides_section1.name1 value1
# overrides_section1.name1 value2
# Workflow
# --------
# Workflow section can be utilized to spawn multiple test pods at the same time.
# The commented out example spawns two test pods that are executed sequentially.
# Each step inherits all configuration that is specified outside of the workflow
# field. For each step you can overwrite values specified in the tempestRun and
# tempestconfRun sections.
#
# workflow:
# - stepName: firstStep
# tempestRun:
# includeList: |
# tempest.api.*
# - stepName: secondStep
# tempestRun:
# includeList: |
# neutron_tempest_plugin.*
Tobiko Custom Resource¶
---
apiVersion: test.openstack.org/v1beta1
kind: Tobiko
metadata:
name: tobiko-tests
namespace: openstack
spec:
containerImage: ""
# Privileged
# ----------
#
# Use with caution! This parameter specifies whether test-operator should spawn test
# pods with allowedPrivilegedEscalation: true and the default capabilities on
# top of capabilities that are usually needed by the test pods (NET_ADMIN, NET_RAW).
# This parameter is deemed insecure but it is needed for certain test-operator
# functionalities to work properly (e.g.: extraRPMs in Tempest CR, or certain set
# of tobiko tests).
#
# privileged: false
# storageClass: local-storage
# parallel: false
# debug: false
# privateKey: |
# <private-key-value>
# publicKey: |
# <public-key-value>
# numProcesses: <integer>
# preventCreate: <true/false>
# pytestAddopts: >- # example:
# -m <markers>
# --maxfail <max-failed-tests>
# --skipregex <regex>
testenv: py3
version: master
config: |
[DEFAULT]
log_file = value
[testcase]
timeout = value
test_runner_timeout = value
[ubuntu]
interface_name = value
[keystone]
interface_name = value
workflow:
- stepName: unit-tests
testenv: py3
- stepName: functional-tests
testenv: functional
HorizonTest Custom Resource¶
apiVersion: test.openstack.org/v1beta1
kind: HorizonTest
metadata:
labels:
app.kubernetes.io/name: horizontest
app.kubernetes.io/instance: horizontest-sample
app.kubernetes.io/part-of: test-operator
app.kubernetes.io/managed-by: kustomize
app.kubernetes.io/created-by: test-operator
name: horizontest-sample
spec:
containerImage: ""
# debug: false
storageClass: "local-storage"
# OpenStack admin credentials
adminUsername: "admin"
adminPassword: "12345678"
# The URL of the Horizon dashboard
dashboardUrl: "https://horizon-openstack.apps.ocp.openstack.lab/"
# The OpenStack authentication URL
authUrl: "https://keystone-public-openstack.apps.ocp.openstack.lab"
# The Horizon repository URL
repoUrl: "https://review.opendev.org/openstack/horizon"
# The branch of the Horizon repository to checkout
horizonRepoBranch: "master"
# The URL to download the Cirros image (optional)
imageUrl: "http://download.cirros-cloud.net/0.6.2/cirros-0.6.2-x86_64-disk.img"
# The name of the OpenStack project for Horizon tests (optional)
projectName: "horizontest"
# The username under which Horizon tests will run (optional)
user: "horizontest"
# The password for the user running the Horizon tests (optional)
password: "horizontest"
# The name of the OpenStack flavor to create for Horizon tests (optional)
flavorName: "m1.tiny"
# The name of the directory to store test logs (optional)
logsDirectoryName: "horizon"
# The directory path for Horizon tests (optional)
horizonTestDir: "/var/lib/horizontest"
# Whether to run tests in parallel (optional)
parallel: false
# The maximum number of retry executions (optional)
backoffLimit: 0
# Privileged
# ----------
#
# Use with caution! This parameter specifies whether test-operator should spawn test
# pods with allowedPrivilegedEscalation: true and the default capabilities on
# top of capabilities that are usually needed by the test pods (NET_ADMIN, NET_RAW).
# This parameter is deemed insecure but it is needed for certain test-operator
# functionalities to work properly (e.g.: extraRPMs in Tempest CR, or certain set
# of tobiko tests).
#
# privileged: false
AnsibleTest Custom Resource¶
---
apiVersion: test.openstack.org/v1beta1
kind: AnsibleTest
metadata:
name: performance-tests
namespace: openstack
spec:
extraMounts:
- name: some-configmap
subPath: this.conf
mountPath: /var/conf
debug: true
storageClass: "local-storage"
workloadSSHKeySecretName: 'open-ssh-keys'
ansiblePlaybookPath: playbooks/my_playbook.yaml
ansibleGitRepo: https://github.com/myansible/project
# containerImage:
ansibleInventory: |
localhost ansible_connection=local ansible_python_interpreter=python3
ansibleVarFiles: |
---
# Use exist cloud resources
somevar: somevalue
# Privileged
# ----------
#
# Use with caution! This parameter specifies whether test-operator should spawn test
# pods with allowedPrivilegedEscalation: true and the default capabilities on
# top of capabilities that are usually needed by the test pods (NET_ADMIN, NET_RAW).
# This parameter is deemed insecure but it is needed for certain test-operator
# functionalities to work properly (e.g.: extraRPMs in Tempest CR, or certain set
# of tobiko tests).
#
# privileged: false
workflow:
- stepName: beststep
ansibleExtraVars: ' -e manual_run=false '
- stepName: laststep
ansibleExtraVars: ' -e manual_run=false '
Parallel Execution¶
By default, test-operator runs pods serially. The reason for this is to prevent collisions between tests (e.g., two tests from two different frameworks modifying the same resource). So, for example, if you run the following two commands:
oc apply -f crd1.yaml
oc apply -f crd2.yaml
where crd1.yaml
and crd2.yaml
are, let’s say, two Tobiko CRs, then
you will first see a test pod executing tests defined by crd1.yaml
. After
the test pod finishes, you will see a second test pod that will be executing tests
specified in crd2.yaml
.
If you want to run multiple test pods at the same time, then you need to set
parallel: true
in the Spec
section in both crd1.yaml
and crd2.yaml
:
---
apiVersion: test.openstack.org/v1beta1
kind: Tobiko
metadata:
name: crd1
namespace: openstack
spec:
parallel: true # <-- HERE
testenv: py3
---
apiVersion: test.openstack.org/v1beta1
kind: Tobiko
metadata:
name: crd1
namespace: openstack
spec:
parallel: true # <-- HERE
testenv: py3
Workflow Section¶
The workflow section enables the spawning of multiple test pods at the same
time. For example, in the Tempest CR shown below, two test pods are spawned,
each corresponding to a different step. Each step inherits a configuration
that is specified outside the workflow section. In individual steps, you can
overwrite values specified in the tempestRun
and
tempestconfRun
sections.
---
apiVersion: test.openstack.org/v1beta1
kind: Tempest
metadata:
name: tempest-tests
namespace: openstack
spec:
containerImage: ""
# parallel: true # <-- Uncomment for parallel execution
tempestRun:
includeList: |
tempest.api.identity.v3.*
concurrency: 8
tempestconfRun:
workflow:
- stepName: first-step
tempestRun:
includeList: |
tempest.api.*
- stepName: second-step
tempestRun:
includeList: |
neutron_tempest_plugin.*
By default, test pods are executed sequentially. To enable parallel
execution of test pods, you need to set parallel: true
in the
spec
section.
CRs that can use the workflow section: