Add a k8s cluster for the k8s related FT in zuul
This patch add a kubernetes cluster for the kubernetes related functional tests of the VNF LCM in the zuul environment. There is no impact to the existing jobs because this patch only add a new job, however we may need to watch the load on the Zuul environment due to its parallel jobs. A new node-set consists of four nodes; * Controller: Keystone, Nova, Neutron, Glance, Cinder, Octavia, MySQL, MQ, ETCD * Controller-tacker: Tacker, Tacker-conductor * Controller-k8s: kuryr-k8s, kuryr-CNI, k8s-api, kubelet * Compute: Nova-compute All kubernetes resources are created on the controller-k8s node. This patch includes the following changes: * Added a execution command for the functional test of related k8s for the VNF LCM in tox.ini. * Registered a vim of the `kubernetes` type by ansible. Also added related materials. * Moved the functional test files for k8s to other new directory. * Fixed a minor invalid definition in the definition file used for functional testing. Change-Id: I1621b904450e94d6793b4c524de6785520f2e805
This commit is contained in:
parent
3bb268a2a7
commit
fe46bd2612
218
.zuul.yaml
218
.zuul.yaml
@ -32,6 +32,36 @@
|
|||||||
- compute1
|
- compute1
|
||||||
- compute2
|
- compute2
|
||||||
|
|
||||||
|
- nodeset:
|
||||||
|
name: openstack-k8s-4-nodes-focal
|
||||||
|
nodes:
|
||||||
|
- name: controller
|
||||||
|
label: ubuntu-focal
|
||||||
|
- name: controller-tacker
|
||||||
|
label: ubuntu-focal
|
||||||
|
- name: controller-k8s
|
||||||
|
label: ubuntu-focal
|
||||||
|
- name: compute1
|
||||||
|
label: ubuntu-focal
|
||||||
|
groups:
|
||||||
|
- name: compute
|
||||||
|
nodes:
|
||||||
|
- controller-k8s
|
||||||
|
- compute1
|
||||||
|
- name: subnode
|
||||||
|
nodes:
|
||||||
|
- controller-tacker
|
||||||
|
- controller-k8s
|
||||||
|
- compute1
|
||||||
|
- name: switch
|
||||||
|
nodes:
|
||||||
|
- controller
|
||||||
|
- name: peers
|
||||||
|
nodes:
|
||||||
|
- controller-tacker
|
||||||
|
- controller-k8s
|
||||||
|
- compute1
|
||||||
|
|
||||||
- job:
|
- job:
|
||||||
name: tacker-functional-devstack-multinode-legacy
|
name: tacker-functional-devstack-multinode-legacy
|
||||||
parent: devstack
|
parent: devstack
|
||||||
@ -232,6 +262,193 @@
|
|||||||
base_url: http://127.0.0.1:9990/grant/v1/grants
|
base_url: http://127.0.0.1:9990/grant/v1/grants
|
||||||
tox_envlist: dsvm-functional-sol-separated-nfvo
|
tox_envlist: dsvm-functional-sol-separated-nfvo
|
||||||
|
|
||||||
|
- job:
|
||||||
|
name: tacker-functional-devstack-multinode-sol-kubernetes
|
||||||
|
parent: devstack
|
||||||
|
description: |
|
||||||
|
Multinodes job for SOL devstack-based kubernetes functional tests
|
||||||
|
nodeset: openstack-k8s-4-nodes-focal
|
||||||
|
pre-run: playbooks/devstack/pre.yaml
|
||||||
|
run: playbooks/devstack/run.yaml
|
||||||
|
post-run: playbooks/devstack/post.yaml
|
||||||
|
roles:
|
||||||
|
- zuul: openstack-infra/devstack
|
||||||
|
timeout: 10800
|
||||||
|
required-projects:
|
||||||
|
- openstack/barbican
|
||||||
|
- openstack/cinder
|
||||||
|
- openstack/devstack-gate
|
||||||
|
- openstack/devstack-plugin-container
|
||||||
|
- openstack/glance
|
||||||
|
- openstack/heat
|
||||||
|
- openstack/horizon
|
||||||
|
- openstack/keystone
|
||||||
|
- openstack/kuryr-kubernetes
|
||||||
|
- openstack/mistral
|
||||||
|
- openstack/neutron
|
||||||
|
- openstack/nova
|
||||||
|
- openstack/octavia
|
||||||
|
- openstack/placement
|
||||||
|
- openstack/python-barbicanclient
|
||||||
|
- openstack/python-blazarclient
|
||||||
|
- openstack/python-mistralclient
|
||||||
|
- openstack/python-octaviaclient
|
||||||
|
- openstack/python-tackerclient
|
||||||
|
- openstack/tacker
|
||||||
|
- openstack/tacker-horizon
|
||||||
|
host-vars:
|
||||||
|
controller:
|
||||||
|
devstack_plugins:
|
||||||
|
barbican: https://opendev.org/openstack/barbican
|
||||||
|
heat: https://opendev.org/openstack/heat
|
||||||
|
mistral: https://opendev.org/openstack/mistral
|
||||||
|
octavia: https://opendev.org/openstack/octavia
|
||||||
|
devstack_services:
|
||||||
|
base: false
|
||||||
|
c-api: true
|
||||||
|
c-bak: false
|
||||||
|
c-sch: true
|
||||||
|
c-vol: true
|
||||||
|
cinder: true
|
||||||
|
coredns: false
|
||||||
|
etcd3: true
|
||||||
|
g-api: true
|
||||||
|
g-reg: true
|
||||||
|
horizon: false
|
||||||
|
key: true
|
||||||
|
mysql: true
|
||||||
|
n-api-meta: true
|
||||||
|
n-api: true
|
||||||
|
n-cond: true
|
||||||
|
n-cpu: false
|
||||||
|
n-novnc: true
|
||||||
|
n-sch: true
|
||||||
|
neutron: true
|
||||||
|
o-api: true
|
||||||
|
o-cw: true
|
||||||
|
o-hk: true
|
||||||
|
o-hm: true
|
||||||
|
octavia: true
|
||||||
|
placement-api: true
|
||||||
|
placement-client: true
|
||||||
|
q-agt: true
|
||||||
|
q-dhcp: true
|
||||||
|
q-l3: true
|
||||||
|
q-meta: true
|
||||||
|
q-metering: true
|
||||||
|
q-qos: true
|
||||||
|
q-svc: true
|
||||||
|
rabbit: true
|
||||||
|
s-account: false
|
||||||
|
s-container: false
|
||||||
|
s-object: false
|
||||||
|
s-proxy: false
|
||||||
|
swift: false
|
||||||
|
tempest: false
|
||||||
|
tls-proxy: false
|
||||||
|
tox_install_siblings: false
|
||||||
|
controller-tacker:
|
||||||
|
devstack_local_conf: {}
|
||||||
|
devstack_services:
|
||||||
|
q-agt: true
|
||||||
|
tacker: true
|
||||||
|
tacker-conductor: true
|
||||||
|
devstack_plugins:
|
||||||
|
tacker: https://opendev.org/openstack/tacker
|
||||||
|
tox_envlist: dsvm-functional-sol-kubernetes
|
||||||
|
controller-k8s:
|
||||||
|
devstack_local_conf: {}
|
||||||
|
devstack_plugins:
|
||||||
|
devstack-plugin-container: https://opendev.org/openstack/devstack-plugin-container
|
||||||
|
kuryr-kubernetes: https://opendev.org/openstack/kuryr-kubernetes
|
||||||
|
devstack_services:
|
||||||
|
etcd3: false
|
||||||
|
kubelet: true
|
||||||
|
kubernetes-api: true
|
||||||
|
kubernetes-controller-manager: true
|
||||||
|
kubernetes-scheduler: true
|
||||||
|
kuryr-daemon: true
|
||||||
|
kuryr-kubernetes: true
|
||||||
|
octavia: false
|
||||||
|
q-agt: true
|
||||||
|
tox_install_siblings: false
|
||||||
|
group-vars:
|
||||||
|
subnode:
|
||||||
|
devstack_localrc:
|
||||||
|
CELLSV2_SETUP: singleconductor
|
||||||
|
DATABASE_TYPE: mysql
|
||||||
|
IS_ZUUL_FT: True
|
||||||
|
KEYSTONE_SERVICE_HOST: "{{ hostvars['controller']['nodepool']['private_ipv4'] }}"
|
||||||
|
KURYR_FORCE_IMAGE_BUILD: true
|
||||||
|
KURYR_K8S_API_PORT: 8080
|
||||||
|
KURYR_K8S_API_URL: "http://{{ hostvars['controller-k8s']['nodepool']['private_ipv4'] }}:${KURYR_K8S_API_PORT}"
|
||||||
|
KURYR_K8S_CLOUD_PROVIDER: false
|
||||||
|
KURYR_K8S_CONTAINERIZED_DEPLOYMENT: false
|
||||||
|
KURYR_K8S_MULTI_WORKER_TESTS: false
|
||||||
|
KURYR_NEUTRON_DEFAULT_SUBNETPOOL_ID: shared-default-subnetpool-v4
|
||||||
|
MYSQL_HOST: "{{ hostvars['controller']['nodepool']['private_ipv4'] }}"
|
||||||
|
OCTAVIA_AMP_IMAGE_FILE: "/tmp/test-only-amphora-x64-haproxy-ubuntu-bionic.qcow2"
|
||||||
|
OCTAVIA_AMP_IMAGE_NAME: "test-only-amphora-x64-haproxy-ubuntu-bionic"
|
||||||
|
OCTAVIA_AMP_IMAGE_SIZE: 3
|
||||||
|
OVS_BRIDGE_MAPPINGS: public:br-ex,mgmtphysnet0:br-infra
|
||||||
|
PHYSICAL_NETWORK: mgmtphysnet0
|
||||||
|
Q_DVR_MODE: dvr
|
||||||
|
TACKER_HOST: "{{ hostvars['controller-tacker']['nodepool']['private_ipv4'] }}"
|
||||||
|
TACKER_MODE: standalone
|
||||||
|
USE_PYTHON3: true
|
||||||
|
devstack_services:
|
||||||
|
dstat: false
|
||||||
|
horizon: false
|
||||||
|
n-api-meta: false
|
||||||
|
n-api: false
|
||||||
|
n-cauth: false
|
||||||
|
n-cond: false
|
||||||
|
n-cpu: true
|
||||||
|
n-novnc: false
|
||||||
|
n-obj: false
|
||||||
|
n-sch: false
|
||||||
|
q-agt: true
|
||||||
|
tls-proxy: false
|
||||||
|
vars:
|
||||||
|
devstack_localrc:
|
||||||
|
CELLSV2_SETUP: singleconductor
|
||||||
|
DATABASE_TYPE: mysql
|
||||||
|
ETCD_USE_RAMDISK: true
|
||||||
|
IS_ZUUL_FT: True
|
||||||
|
KEYSTONE_SERVICE_HOST: "{{ hostvars['controller']['nodepool']['private_ipv4'] }}"
|
||||||
|
L2_AGENT_EXTENSIONS: qos
|
||||||
|
MYSQL_HOST: "{{ hostvars['controller']['nodepool']['private_ipv4'] }}"
|
||||||
|
OCTAVIA_AMP_IMAGE_FILE: "/tmp/test-only-amphora-x64-haproxy-ubuntu-bionic.qcow2"
|
||||||
|
OCTAVIA_AMP_IMAGE_NAME: "test-only-amphora-x64-haproxy-ubuntu-bionic"
|
||||||
|
OCTAVIA_AMP_IMAGE_SIZE: 3
|
||||||
|
OVS_BRIDGE_MAPPINGS: public:br-ex,mgmtphysnet0:br-infra
|
||||||
|
PHYSICAL_NETWORK: mgmtphysnet0
|
||||||
|
Q_DVR_MODE: dvr
|
||||||
|
Q_ML2_PLUGIN_EXT_DRIVERS: port_security,qos
|
||||||
|
Q_SERVICE_PLUGIN_CLASSES: router,neutron.services.metering.metering_plugin.MeteringPlugin,neutron.services.qos.qos_plugin.QoSPlugin,qos
|
||||||
|
TACKER_HOST: "{{ hostvars['controller-tacker']['nodepool']['private_ipv4'] }}"
|
||||||
|
TACKER_MODE: standalone
|
||||||
|
USE_PYTHON3: true
|
||||||
|
devstack_local_conf:
|
||||||
|
post-config:
|
||||||
|
$NEUTRON_DHCP_CONF:
|
||||||
|
DEFAULT:
|
||||||
|
enable_isolated_metadata: True
|
||||||
|
$OCTAVIA_CONF:
|
||||||
|
controller_worker:
|
||||||
|
amp_active_retries: 9999
|
||||||
|
kuryr_k8s_api_url: "http://{{ hostvars['controller-k8s']['nodepool']['private_ipv4'] }}:8080"
|
||||||
|
test_matrix_configs: [neutron]
|
||||||
|
zuul_work_dir: src/opendev.org/openstack/tacker
|
||||||
|
zuul_copy_output:
|
||||||
|
'{{ devstack_log_dir }}/kubernetes': 'logs'
|
||||||
|
irrelevant-files:
|
||||||
|
- ^.*\.rst$
|
||||||
|
- ^doc/.*$
|
||||||
|
- ^releasenotes/.*$
|
||||||
|
- ^contrib/.*$
|
||||||
|
voting: false
|
||||||
|
|
||||||
- project:
|
- project:
|
||||||
templates:
|
templates:
|
||||||
- check-requirements
|
- check-requirements
|
||||||
@ -245,3 +462,4 @@
|
|||||||
- tacker-functional-devstack-multinode-legacy
|
- tacker-functional-devstack-multinode-legacy
|
||||||
- tacker-functional-devstack-multinode-sol
|
- tacker-functional-devstack-multinode-sol
|
||||||
- tacker-functional-devstack-multinode-sol-separated-nfvo
|
- tacker-functional-devstack-multinode-sol-separated-nfvo
|
||||||
|
- tacker-functional-devstack-multinode-sol-kubernetes
|
||||||
|
@ -65,3 +65,81 @@
|
|||||||
|
|
||||||
when:
|
when:
|
||||||
- inventory_hostname == 'controller-tacker'
|
- inventory_hostname == 'controller-tacker'
|
||||||
|
|
||||||
|
- block:
|
||||||
|
- name: Copy tools/test-setup-k8s-vim.sh
|
||||||
|
copy:
|
||||||
|
remote_src=True
|
||||||
|
src={{ devstack_base_dir }}/tacker/tools/test-setup-k8s-vim.sh
|
||||||
|
dest={{ zuul_work_dir }}/tools/test-setup-k8s-vim.sh
|
||||||
|
mode=0755
|
||||||
|
|
||||||
|
- name: Copy test k8s vim file
|
||||||
|
copy:
|
||||||
|
remote_src=True
|
||||||
|
src={{ devstack_base_dir }}/tacker/tacker/tests/etc/samples/local-k8s-vim.yaml
|
||||||
|
dest={{ zuul_work_dir }}/tacker/tests/etc/samples/local-k8s-vim.yaml
|
||||||
|
|
||||||
|
- name: Check if project's tools/test-setup-k8s-vim.sh exists
|
||||||
|
stat:
|
||||||
|
path: "{{ zuul_work_dir }}/tools/test-setup-k8s-vim.sh"
|
||||||
|
register: p
|
||||||
|
- fail:
|
||||||
|
msg: >
|
||||||
|
{{ zuul_work_dir }}/tools/test-setup-k8s-vim.sh doesn't exists
|
||||||
|
or it doesn't have execute permission.
|
||||||
|
when: p.stat.exists != True or p.stat.executable != True
|
||||||
|
|
||||||
|
- name: Get stackenv from devstack environment
|
||||||
|
slurp:
|
||||||
|
src: "{{ devstack_base_dir }}/devstack/.stackenv"
|
||||||
|
register: stackenv
|
||||||
|
|
||||||
|
- name: Set a keystone authentication uri
|
||||||
|
set_fact:
|
||||||
|
auth_uri: "{{
|
||||||
|
stackenv.content
|
||||||
|
| b64decode
|
||||||
|
| regex_replace('\n', ' ')
|
||||||
|
| regex_replace('^.*KEYSTONE_SERVICE_URI=([^ ]+).*$', '\\1')
|
||||||
|
}}"
|
||||||
|
when:
|
||||||
|
- p.stat.exists
|
||||||
|
|
||||||
|
- name: Replace keystone auth uri in test-setup-k8s-vim.sh
|
||||||
|
replace:
|
||||||
|
path: "{{ item }}"
|
||||||
|
regexp: "http://127.0.0.1/identity"
|
||||||
|
replace: "{{ auth_uri }}"
|
||||||
|
with_items:
|
||||||
|
- "{{ zuul_work_dir }}/tools/test-setup-k8s-vim.sh"
|
||||||
|
when:
|
||||||
|
- p.stat.exists
|
||||||
|
|
||||||
|
- name: Replace k8s auth uri in local-k8s-vim.yaml
|
||||||
|
replace:
|
||||||
|
path: "{{ item }}"
|
||||||
|
regexp: "https://127.0.0.1:6443"
|
||||||
|
replace: "{{ kuryr_k8s_api_url }}"
|
||||||
|
with_items:
|
||||||
|
- "{{ zuul_work_dir }}/tacker/tests/etc/samples/local-k8s-vim.yaml"
|
||||||
|
when:
|
||||||
|
- p.stat.exists
|
||||||
|
|
||||||
|
- name: Replace the config file path in the test-setup-k8s-vim.sh
|
||||||
|
replace:
|
||||||
|
path: "{{ zuul_work_dir }}/tools/test-setup-k8s-vim.sh"
|
||||||
|
regexp: '(?<=config-file )([^ ]+)(?= )'
|
||||||
|
replace: "{{ ansible_env.HOME }}/{{ zuul_work_dir }}/tacker/tests/etc/samples/local-k8s-vim.yaml"
|
||||||
|
|
||||||
|
- name: Run tools/test-setup-k8s-vim.sh
|
||||||
|
command: tools/test-setup-k8s-vim.sh
|
||||||
|
args:
|
||||||
|
chdir: "{{ zuul_work_dir }}"
|
||||||
|
when:
|
||||||
|
- p.stat.exists
|
||||||
|
- p.stat.executable
|
||||||
|
|
||||||
|
when:
|
||||||
|
- inventory_hostname == 'controller-tacker'
|
||||||
|
- kuryr_k8s_api_url is defined
|
||||||
|
@ -220,7 +220,7 @@ topology_template:
|
|||||||
properties:
|
properties:
|
||||||
aspect: worker_instance
|
aspect: worker_instance
|
||||||
deltas:
|
deltas:
|
||||||
delta_2:
|
delta_1:
|
||||||
number_of_instances: 1
|
number_of_instances: 1
|
||||||
targets: [ VDU2 ]
|
targets: [ VDU2 ]
|
||||||
|
|
||||||
|
6
tacker/tests/etc/samples/local-k8s-vim.yaml
Normal file
6
tacker/tests/etc/samples/local-k8s-vim.yaml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
auth_url: "https://127.0.0.1:6443"
|
||||||
|
username: "admin"
|
||||||
|
password: "admin"
|
||||||
|
project_name: "default"
|
||||||
|
ssl_ca_cert: None
|
||||||
|
type: "kubernetes"
|
0
tacker/tests/functional/sol_kubernetes/__init__.py
Normal file
0
tacker/tests/functional/sol_kubernetes/__init__.py
Normal file
27
tools/test-setup-k8s-vim.sh
Executable file
27
tools/test-setup-k8s-vim.sh
Executable file
@ -0,0 +1,27 @@
|
|||||||
|
#!/bin/bash -xe
|
||||||
|
|
||||||
|
# This script is used to set up default vim
|
||||||
|
# for functional testing, which cannot be put
|
||||||
|
# in devstack/plugin.sh because new zuul3 CI
|
||||||
|
# cannot keep the devstack plugins order
|
||||||
|
#
|
||||||
|
# Also, this script updates the following
|
||||||
|
# parameter which has been modified
|
||||||
|
# unintentionally by ansible playbook
|
||||||
|
# `roles/setup-default-vim/tasks/main.yaml`
|
||||||
|
# according to the execution environment of
|
||||||
|
# Zuul.
|
||||||
|
#
|
||||||
|
# --os-auth-url
|
||||||
|
# --config-file
|
||||||
|
|
||||||
|
openstack vim register \
|
||||||
|
--os-username nfv_user \
|
||||||
|
--os-project-name nfv \
|
||||||
|
--os-password devstack \
|
||||||
|
--os-auth-url http://127.0.0.1/identity \
|
||||||
|
--os-project-domain-name Default \
|
||||||
|
--os-user-domain-name Default \
|
||||||
|
--description "Kubernetes VIM" \
|
||||||
|
--config-file /opt/stack/tacker/tacker/tests/etc/samples/local-k8s-vim.yaml \
|
||||||
|
vim-kubernetes
|
6
tox.ini
6
tox.ini
@ -58,6 +58,12 @@ setenv = {[testenv]setenv}
|
|||||||
commands =
|
commands =
|
||||||
stestr --test-path=./tacker/tests/functional/sol_separated_nfvo run --slowest --concurrency 1 {posargs}
|
stestr --test-path=./tacker/tests/functional/sol_separated_nfvo run --slowest --concurrency 1 {posargs}
|
||||||
|
|
||||||
|
[testenv:dsvm-functional-sol-kubernetes]
|
||||||
|
setenv = {[testenv]setenv}
|
||||||
|
|
||||||
|
commands =
|
||||||
|
stestr --test-path=./tacker/tests/functional/sol_kubernetes run --slowest --concurrency 2 {posargs}
|
||||||
|
|
||||||
[testenv:debug]
|
[testenv:debug]
|
||||||
commands = oslo_debug_helper {posargs}
|
commands = oslo_debug_helper {posargs}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user