Merge "Add scenario which updates GlusterFS"
diff --git a/src/com/mirantis/system_qa/SharedPipeline.groovy b/src/com/mirantis/system_qa/SharedPipeline.groovy
index bbf8415..0e0fdda 100644
--- a/src/com/mirantis/system_qa/SharedPipeline.groovy
+++ b/src/com/mirantis/system_qa/SharedPipeline.groovy
@@ -190,7 +190,7 @@
run_cmd("""\
if [ -n "$TCP_QA_REFS" ]; then
set -e
- git fetch https://review.gerrithub.io/Mirantis/tcp-qa $TCP_QA_REFS && git checkout FETCH_HEAD || exit \$?
+ git reset --hard && git fetch https://review.gerrithub.io/Mirantis/tcp-qa $TCP_QA_REFS && git checkout FETCH_HEAD || exit \$?
fi""")
if (updateRequirements) {
run_cmd("""\
diff --git a/tcp_tests/templates/_heat_environments/fragments/Networks.yaml b/tcp_tests/templates/_heat_environments/fragments/Networks.yaml
index 5840d80..11cc4a5 100644
--- a/tcp_tests/templates/_heat_environments/fragments/Networks.yaml
+++ b/tcp_tests/templates/_heat_environments/fragments/Networks.yaml
@@ -11,16 +11,19 @@
resources:
control_net:
+ depends_on: tenant_net
type: OS::Neutron::Net
properties:
port_security_enabled: false
name: { list_join: ['-', [ 'control_net', { get_param: env_name } ]] }
tenant_net:
+ depends_on: management_net
type: OS::Neutron::Net
properties:
port_security_enabled: false
name: { list_join: ['-', [ 'tenant_net', { get_param: env_name } ]] }
management_net:
+ depends_on: external_net
type: OS::Neutron::Net
properties:
port_security_enabled: false
diff --git a/tcp_tests/templates/bm-cicd-queens-ovs-maas/salt-context-cookiecutter-openstack_ovs.yaml b/tcp_tests/templates/bm-cicd-queens-ovs-maas/salt-context-cookiecutter-openstack_ovs.yaml
index 2e368b9..ec9fc66 100644
--- a/tcp_tests/templates/bm-cicd-queens-ovs-maas/salt-context-cookiecutter-openstack_ovs.yaml
+++ b/tcp_tests/templates/bm-cicd-queens-ovs-maas/salt-context-cookiecutter-openstack_ovs.yaml
@@ -1,4 +1,12 @@
default_context:
+ ironic_enabled: True
+ openstack_baremetal_hostname: bmt
+ openstack_baremetal_address_baremetal: 10.167.11.20
+ openstack_baremetal_node01_baremetal_address: 10.167.11.21
+ openstack_baremetal_node02_baremetal_address: 10.167.11.22
+ openstack_baremetal_node03_baremetal_address: 10.167.11.23
+ openstack_baremetal_interface: ens7
+ openstack_baremetal_vip_interface: phy-baremetal
jenkins_cfg_admin_password: r00tme
bmk_enabled: 'False'
cicd_control_node01_address: 10.167.11.91
diff --git a/tcp_tests/templates/bm-cicd-queens-ovs-maas/salt-context-vcp-environment.yaml b/tcp_tests/templates/bm-cicd-queens-ovs-maas/salt-context-vcp-environment.yaml
index e73344e..32f567a 100644
--- a/tcp_tests/templates/bm-cicd-queens-ovs-maas/salt-context-vcp-environment.yaml
+++ b/tcp_tests/templates/bm-cicd-queens-ovs-maas/salt-context-vcp-environment.yaml
@@ -405,3 +405,37 @@
role: single_dhcp
ens3:
role: single_ctl
+
+ bmt01.bm-cicd-queens-ovs-maas.local:
+ reclass_storage_name: openstack_baremetal_node01
+ roles:
+ - openstack_baremetal
+ - linux_system_codename_xenial
+ interfaces:
+ ens2:
+ role: single_dhcp
+ ens3:
+ role: single_ctl
+
+ bmt02.bm-cicd-queens-ovs-maas.local:
+ reclass_storage_name: openstack_baremetal_node02
+ roles:
+ - openstack_baremetal
+ - linux_system_codename_xenial
+ interfaces:
+ ens2:
+ role: single_dhcp
+ ens3:
+ role: single_ctl
+
+ bmt03.bm-cicd-queens-ovs-maas.local:
+ reclass_storage_name: openstack_baremetal_node03
+ roles:
+ - openstack_baremetal
+ - linux_system_codename_xenial
+ interfaces:
+ ens2:
+ role: single_dhcp
+ ens3:
+ role: single_ctl
+
diff --git a/tcp_tests/templates/heat-bm-cicd-pike-contrail-sl/underlay.hot b/tcp_tests/templates/heat-bm-cicd-pike-contrail-sl/underlay.hot
index 0afbd66..cffb044 100644
--- a/tcp_tests/templates/heat-bm-cicd-pike-contrail-sl/underlay.hot
+++ b/tcp_tests/templates/heat-bm-cicd-pike-contrail-sl/underlay.hot
@@ -1,6 +1,6 @@
---
-heat_template_version: pike
+heat_template_version: queens
description: MCP environment for heat-bm-cicd-pike-contrail-sl
diff --git a/tcp_tests/tests/system/test_backup_restore_galera.py b/tcp_tests/tests/system/test_backup_restore_galera.py
new file mode 100644
index 0000000..9309466
--- /dev/null
+++ b/tcp_tests/tests/system/test_backup_restore_galera.py
@@ -0,0 +1,222 @@
+import pytest
+
+from tcp_tests import logger
+from tcp_tests import settings
+from tcp_tests.utils import run_jenkins_job
+from tcp_tests.utils import get_jenkins_job_stages
+
+LOG = logger.logger
+
+
+class TestBackupRestoreGalera(object):
+ """
+ Created by https://mirantis.jira.com/browse/PROD-32674
+ """
+
+ @pytest.mark.grab_versions
+ @pytest.mark.parametrize("_", [settings.ENV_NAME])
+ @pytest.mark.run_galera_backup_restore
+ def test_backup_restore_galera(self, salt_actions, show_step, _):
+ """Execute backup/restore for galera
+
+ Scenario:
+ 1. Get CICD Jenkins access credentials from salt
+ 2. Run job galera_backup_database
+ 3. Run tests with cvp-sanity job
+ 4. Run tests with cvp-tempest job
+ 5. Run job galera_verify_restore
+ 6. If jobs are passed then start tests with cvp-sanity job
+ 7. Run tests with cvp-tempest job
+ """
+ salt = salt_actions
+ jenkins_creds = salt.get_cluster_jenkins_creds()
+
+ # ################### Login Jenkins on cid01 node ###################
+ show_step(1)
+
+ jenkins_url = jenkins_creds.get('url')
+ jenkins_user = jenkins_creds.get('user')
+ jenkins_pass = jenkins_creds.get('pass')
+ jenkins_start_timeout = 60
+ jenkins_build_timeout = 1800
+
+ # ################## Run backup job #########################
+ show_step(2)
+ job_name = 'galera_backup_database'
+ job_parameters = {
+ 'ASK_CONFIRMATION': False
+ }
+ backup_galera_pipeline = run_jenkins_job.run_job(
+ host=jenkins_url,
+ username=jenkins_user,
+ password=jenkins_pass,
+ start_timeout=jenkins_start_timeout,
+ build_timeout=jenkins_build_timeout,
+ verbose=False,
+ job_name=job_name,
+ job_parameters=job_parameters)
+
+ (description, stages) = get_jenkins_job_stages.get_deployment_result(
+ host=jenkins_url,
+ username=jenkins_user,
+ password=jenkins_pass,
+ job_name=job_name,
+ build_number='lastBuild')
+
+ LOG.info(description)
+ LOG.info('\n'.join(stages))
+
+ assert backup_galera_pipeline == 'SUCCESS', "{0}\n{1}".format(
+ description, '\n'.join(stages))
+ # ######################## Run CPV ###########################
+ show_step(3)
+ job_name = 'cvp-sanity'
+ job_cvp_sanity_parameters = {
+ 'EXTRA_PARAMS': '''
+
+ envs:
+ - skipped_packages='{},{},{},{},{},{}'
+ - skipped_modules='xunitmerge,setuptools'
+ - skipped_services='docker,containerd'
+ - ntp_skipped_nodes=''
+ - tests_set=-k "not {} and not {} and not {}"
+ '''.format('python-setuptools', 'python-pkg-resources',
+ 'xunitmerge', 'python-gnocchiclient',
+ 'python-ujson', 'python-octaviaclient',
+ 'test_ceph_status', 'test_prometheus_alert_count',
+ 'test_uncommited_changes')
+ }
+ job_parameters = job_cvp_sanity_parameters
+ run_cvp_sanity = run_jenkins_job.run_job(
+ host=jenkins_url,
+ username=jenkins_user,
+ password=jenkins_pass,
+ start_timeout=jenkins_start_timeout,
+ build_timeout=jenkins_build_timeout,
+ verbose=False,
+ job_name=job_name,
+ job_parameters=job_parameters)
+
+ (description, stages) = get_jenkins_job_stages.get_deployment_result(
+ host=jenkins_url,
+ username=jenkins_user,
+ password=jenkins_pass,
+ job_name=job_name,
+ build_number='lastBuild')
+
+ LOG.info(description)
+ LOG.info('\n'.join(stages))
+
+ assert run_cvp_sanity == 'SUCCESS', "{0}\n{1}".format(
+ description, '\n'.join(stages))
+ # ######################## Run Tempest ###########################
+ show_step(4)
+ job_name = 'cvp-tempest'
+ job_parameters = {
+ 'TEMPEST_ENDPOINT_TYPE': 'internalURL'
+ }
+ run_cvp_tempest = run_jenkins_job.run_job(
+ host=jenkins_url,
+ username=jenkins_user,
+ password=jenkins_pass,
+ start_timeout=jenkins_start_timeout,
+ build_timeout=jenkins_build_timeout,
+ verbose=False,
+ job_name=job_name,
+ job_parameters=job_parameters)
+
+ (description, stages) = get_jenkins_job_stages.get_deployment_result(
+ host=jenkins_url,
+ username=jenkins_user,
+ password=jenkins_pass,
+ job_name=job_name,
+ build_number='lastBuild')
+
+ LOG.info(description)
+ LOG.info('\n'.join(stages))
+
+ assert run_cvp_tempest == 'SUCCESS', "{0}\n{1}".format(
+ description, '\n'.join(stages))
+ # ######################## Run Restore ###########################
+ show_step(5)
+ job_name = 'galera_verify_restore'
+ job_parameters = {
+ 'RESTORE_TYPE': 'ONLY_RESTORE',
+ 'ASK_CONFIRMATION': False
+ }
+ run_galera_verify_restore = run_jenkins_job.run_job(
+ host=jenkins_url,
+ username=jenkins_user,
+ password=jenkins_pass,
+ start_timeout=jenkins_start_timeout,
+ build_timeout=jenkins_build_timeout,
+ verbose=False,
+ job_name=job_name,
+ job_parameters=job_parameters)
+
+ (description, stages) = get_jenkins_job_stages.get_deployment_result(
+ host=jenkins_url,
+ username=jenkins_user,
+ password=jenkins_pass,
+ job_name=job_name,
+ build_number='lastBuild')
+
+ LOG.info(description)
+ LOG.info('\n'.join(stages))
+
+ assert run_galera_verify_restore == 'SUCCESS', "{0}\n{1}".format(
+ description, '\n'.join(stages))
+ # ######################## Run CPV ###########################
+ show_step(6)
+ job_name = 'cvp-sanity'
+ job_parameters = job_cvp_sanity_parameters
+ run_cvp_sanity = run_jenkins_job.run_job(
+ host=jenkins_url,
+ username=jenkins_user,
+ password=jenkins_pass,
+ start_timeout=jenkins_start_timeout,
+ build_timeout=jenkins_build_timeout,
+ verbose=False,
+ job_name=job_name,
+ job_parameters=job_parameters)
+
+ (description, stages) = get_jenkins_job_stages.get_deployment_result(
+ host=jenkins_url,
+ username=jenkins_user,
+ password=jenkins_pass,
+ job_name=job_name,
+ build_number='lastBuild')
+
+ LOG.info(description)
+ LOG.info('\n'.join(stages))
+
+ assert run_cvp_sanity == 'SUCCESS', "{0}\n{1}".format(
+ description, '\n'.join(stages))
+ # ######################## Run Tempest ###########################
+ show_step(7)
+ job_name = 'cvp-tempest'
+ job_parameters = {
+ 'TEMPEST_ENDPOINT_TYPE': 'internalURL'
+ }
+ run_cvp_tempest = run_jenkins_job.run_job(
+ host=jenkins_url,
+ username=jenkins_user,
+ password=jenkins_pass,
+ start_timeout=jenkins_start_timeout,
+ build_timeout=jenkins_build_timeout,
+ verbose=False,
+ job_name=job_name,
+ job_parameters=job_parameters)
+
+ (description, stages) = get_jenkins_job_stages.get_deployment_result(
+ host=jenkins_url,
+ username=jenkins_user,
+ password=jenkins_pass,
+ job_name=job_name,
+ build_number='lastBuild')
+
+ LOG.info(description)
+ LOG.info('\n'.join(stages))
+
+ assert run_cvp_tempest == 'SUCCESS', "{0}\n{1}".format(
+ description, '\n'.join(stages))