Merge "Add tcp-qa configuration to testrail-reporter"
diff --git a/tcp_tests/fixtures/reclass_fixtures.py b/tcp_tests/fixtures/reclass_fixtures.py
index a2d84cb..c28de1d 100644
--- a/tcp_tests/fixtures/reclass_fixtures.py
+++ b/tcp_tests/fixtures/reclass_fixtures.py
@@ -6,7 +6,7 @@
LOG = logger.logger
-@pytest.fixture(scope='function')
+@pytest.fixture(scope='session')
def reclass_actions(config, underlay_actions):
"""Fixture that provides various actions for salt
diff --git a/tcp_tests/fixtures/salt_fixtures.py b/tcp_tests/fixtures/salt_fixtures.py
index 226ab22..d662180 100644
--- a/tcp_tests/fixtures/salt_fixtures.py
+++ b/tcp_tests/fixtures/salt_fixtures.py
@@ -21,7 +21,7 @@
LOG = logger.logger
-@pytest.fixture(scope='function')
+@pytest.fixture(scope='session')
def salt_actions(config, underlay_actions):
"""Fixture that provides various actions for salt
diff --git a/tcp_tests/fixtures/underlay_fixtures.py b/tcp_tests/fixtures/underlay_fixtures.py
index a8856d6..1cfae51 100644
--- a/tcp_tests/fixtures/underlay_fixtures.py
+++ b/tcp_tests/fixtures/underlay_fixtures.py
@@ -158,7 +158,7 @@
request.addfinalizer(test_fin)
-@pytest.fixture(scope="function")
+@pytest.fixture(scope="session")
def underlay_actions(config):
"""Fixture that provides SSH access to underlay objects.
diff --git a/tcp_tests/managers/reclass_manager.py b/tcp_tests/managers/reclass_manager.py
index 8448169..f8895c6 100644
--- a/tcp_tests/managers/reclass_manager.py
+++ b/tcp_tests/managers/reclass_manager.py
@@ -11,7 +11,6 @@
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
-
from tcp_tests import logger
from tcp_tests.managers.execute_commands import ExecuteCommandsMixin
@@ -69,18 +68,40 @@
path=short_path
))
- def get_key(self, key, short_path):
+ def get_key(self, key, file_name):
"""Find a key in a YAML
:param key: string, parameter to add
- :param short_path: path to reclass yaml file.
- It takes into account default path where the reclass is located.
- May look like cluster/*/cicd/control/leader.yml
+ :param file_name: name of YAML file to find a key
:return: str, key if found
"""
- return self.ssh.check_call(
- "{reclass_tools} get-key {key} /srv/salt/reclass/classes".format(
- reclass_tools=self.reclass_tools_cmd, key=key))
+ request_key = self.ssh.check_call(
+ "{reclass_tools} get-key {key} /srv/salt/reclass/*/{file_name}".
+ format(reclass_tools=self.reclass_tools_cmd,
+ key=key,
+ file_name=file_name))['stdout']
+
+ # Reclass-tools returns result to stdout, so we get it as
+ # ['\n',
+ # '---\n',
+ # '# Found parameters._param.jenkins_pipelines_branch in \
+ # /srv/salt/reclass/classes/cluster/../infra/init.yml\n',
+ # 'release/proposed/2019.2.0\n',
+ # '...\n',
+ # '\n']
+ # So we have no chance to get value without dirty code like `stdout[3]`
+
+ LOG.info("From reclass.get_key {}".format(request_key))
+ if len(request_key) < 4:
+ assert "Can't find {key} in {file_name}. Got stdout {stdout}".\
+ format(
+ key=key,
+ file_name=file_name,
+ stdout=request_key
+ )
+ value = request_key[3].strip('\n')
+ LOG.info("From reclass.get_key {}".format(value))
+ return value
def add_bool_key(self, key, value, short_path):
"""
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 96af1d4..4a7286e 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,13 +1,16 @@
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_address_baremetal: 10.14.0.10
+ openstack_baremetal_node01_baremetal_address: 10.14.0.11
+ openstack_baremetal_node02_baremetal_address: 10.14.0.12
+ openstack_baremetal_node03_baremetal_address: 10.14.0.13
openstack_baremetal_node01_address: 10.167.11.21
openstack_baremetal_node02_address: 10.167.11.22
openstack_baremetal_node03_address: 10.167.11.23
+ openstack_baremetal_neutron_subnet_cidr: 10.14.0.0/24
+ openstack_baremetal_neutron_subnet_allocation_start: 10.14.0.100
+ openstack_baremetal_neutron_subnet_allocation_end: 10.14.0.200
openstack_baremetal_address: 10.167.11.20
openstack_baremetal_interface: ens7
openstack_baremetal_vip_interface: phy-baremetal
@@ -708,8 +711,8 @@
openstack_nova_cpu_pinning: 6,7,8,9,10,11
openstack_nova_compute_reserved_host_memory_mb: '900'
openstack_ovs_dvr_enabled: 'True'
- openstack_ovs_encapsulation_type: vlan
- openstack_ovs_encapsulation_vlan_range: 2402:2406
+ openstack_ovs_encapsulation_type: vxlan
+ ironic_vlan_range: 2402:2402
openstack_proxy_address: 10.167.11.80
openstack_proxy_hostname: prx
openstack_proxy_node01_address: 10.167.11.81
diff --git a/tcp_tests/templates/bm-cicd-queens-ovs-maas/salt-context-environment.yaml b/tcp_tests/templates/bm-cicd-queens-ovs-maas/salt-context-environment.yaml
index c687eac..7722eaa 100644
--- a/tcp_tests/templates/bm-cicd-queens-ovs-maas/salt-context-environment.yaml
+++ b/tcp_tests/templates/bm-cicd-queens-ovs-maas/salt-context-environment.yaml
@@ -24,6 +24,10 @@
role: bond_ctl_lacp
sten2:
role: bond_ctl_lacp
+ ten1:
+ role: bond_baremetal_lacp
+ sten1:
+ role: bond_baremetal_lacp
kvm02.bm-cicd-queens-ovs-maas.local:
reclass_storage_name: infra_kvm_node02
@@ -37,6 +41,10 @@
role: bond_ctl_lacp
sten2:
role: bond_ctl_lacp
+ ten1:
+ role: bond_baremetal_lacp
+ sten1:
+ role: bond_baremetal_lacp
kvm03.bm-cicd-queens-ovs-maas.local:
reclass_storage_name: infra_kvm_node03
@@ -50,6 +58,10 @@
role: bond_ctl_lacp
sten2:
role: bond_ctl_lacp
+ ten1:
+ role: bond_baremetal_lacp
+ sten1:
+ role: bond_baremetal_lacp
kvm04.bm-cicd-queens-ovs-maas.local:
reclass_storage_name: infra_kvm_node04
@@ -133,11 +145,11 @@
one1:
role: single_mgm_dhcp
ten1:
- role: bond_ctl_lacp
+ role: bond_ctl_baremetal_lacp
ten2:
role: bond_prv_lacp
sten1:
- role: bond_ctl_lacp
+ role: bond_ctl_baremetal_lacp
sten2:
role: bond_prv_lacp
@@ -150,11 +162,11 @@
one1:
role: single_mgm_dhcp
ten1:
- role: bond_ctl_lacp
+ role: bond_ctl_baremetal_lacp
ten2:
role: bond_prv_lacp
sten1:
- role: bond_ctl_lacp
+ role: bond_ctl_baremetal_lacp
sten2:
role: bond_prv_lacp
@@ -167,10 +179,10 @@
one1:
role: single_mgm_dhcp
ten1:
- role: bond_ctl_lacp
+ role: bond_ctl_baremetal_lacp
ten2:
role: bond_prv_lacp
sten1:
- role: bond_ctl_lacp
+ role: bond_ctl_baremetal_lacp
sten2:
role: bond_prv_lacp
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 1cefe2f..c274129 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
@@ -4,8 +4,6 @@
roles:
- openstack_control_leader
- linux_system_codename_xenial
- - features_ironic_baremetal_nodes
- - features_ironic_switch
interfaces:
ens2:
role: single_dhcp
@@ -17,7 +15,6 @@
roles:
- openstack_control
- linux_system_codename_xenial
- - features_ironic_switch
interfaces:
ens2:
role: single_dhcp
@@ -29,7 +26,6 @@
roles:
- openstack_control
- linux_system_codename_xenial
- - features_ironic_switch
interfaces:
ens2:
role: single_dhcp
@@ -420,6 +416,8 @@
role: single_dhcp
ens3:
role: single_ctl
+ ens4:
+ role: single_baremetal
bmt02.bm-cicd-queens-ovs-maas.local:
reclass_storage_name: openstack_baremetal_node02
@@ -431,6 +429,8 @@
role: single_dhcp
ens3:
role: single_ctl
+ ens4:
+ role: single_baremetal
bmt03.bm-cicd-queens-ovs-maas.local:
reclass_storage_name: openstack_baremetal_node03
@@ -442,4 +442,6 @@
role: single_dhcp
ens3:
role: single_ctl
+ ens4:
+ role: single_baremetal
diff --git a/tcp_tests/templates/cookied-model-generator/salt_bm-cicd-queens-ovs-maas.yaml b/tcp_tests/templates/cookied-model-generator/salt_bm-cicd-queens-ovs-maas.yaml
index 5aee981..f34cc38 100644
--- a/tcp_tests/templates/cookied-model-generator/salt_bm-cicd-queens-ovs-maas.yaml
+++ b/tcp_tests/templates/cookied-model-generator/salt_bm-cicd-queens-ovs-maas.yaml
@@ -36,6 +36,7 @@
sed -i 's/br\-ctl/br\_ctl/g' /srv/salt/reclass/classes/cluster/{{ LAB_CONFIG_NAME }}/infra/kvm.yml;
sed -i 's/br\-mgm/br\_mgm/g' /srv/salt/reclass/classes/cluster/{{ LAB_CONFIG_NAME }}/infra/kvm.yml;
sed -i 's/br\-ctl/br\_ctl/g' /srv/salt/reclass/classes/cluster/{{ LAB_CONFIG_NAME }}/openstack/gateway.yml;
+ sed -i 's/br\-baremetal/br\_baremetal/g' /srv/salt/reclass/classes/cluster/{{ LAB_CONFIG_NAME }}/infra/kvm.yml;
salt '*' saltutil.refresh_pillar;
node_name: {{ HOSTNAME_CFG01 }}
retry: {count: 1, delay: 10}
diff --git a/tcp_tests/tests/system/test_mcp_update.py b/tcp_tests/tests/system/test_mcp_update.py
index 4a1cfa2..1ff7642 100644
--- a/tcp_tests/tests/system/test_mcp_update.py
+++ b/tcp_tests/tests/system/test_mcp_update.py
@@ -54,29 +54,49 @@
return targets
-@pytest.fixture
+@pytest.fixture(scope='class')
def switch_to_proposed_pipelines(reclass_actions, salt_actions):
- reclass_actions.add_key(
- "parameters._param.jenkins_pipelines_branch",
- "release/proposed/2019.2.0",
- "cluster/*/infra/init.yml"
- )
+ reclass = reclass_actions
+ proposed_repo = "http://mirror.mirantis.com/update/proposed/"
+ repo_param = "parameters._param.linux_system_repo_update_url"
- proposed_branch = "http://mirror.mirantis.com/update/proposed/"
- url_param = "parameters._param.linux_system_repo_update_url"
- reclass_actions.add_key(url_param, proposed_branch,
- "cluster/*/infra/init.yml")
- reclass_actions.add_key(url_param, proposed_branch,
- "cluster/*/openstack/init.yml")
- reclass_actions.add_key(url_param, proposed_branch,
- "cluster/*/stacklight/init.yml")
- reclass_actions.add_key(url_param, proposed_branch,
- "cluster/*/ceph/init.yml")
+ proposed_pipeline_branch = "release/proposed/2019.2.0"
+ pipeline_branch_param = "parameters._param.jenkins_pipelines_branch"
+ infra_yml = "cluster/*/infra/init.yml"
+
+ LOG.info("Check reclass has release/proposed/2019.2.0 branches")
+ if reclass.get_key(pipeline_branch_param,
+ infra_yml) == proposed_pipeline_branch \
+ and reclass.get_key(repo_param, infra_yml) == proposed_repo:
+ return True
+
+ LOG.info("Switch to release/proposed/2019.2.0 branches")
+ reclass.add_key(pipeline_branch_param, proposed_pipeline_branch, infra_yml)
+
+ reclass.add_key(repo_param, proposed_repo, infra_yml)
+ reclass.add_key(repo_param, proposed_repo, "cluster/*/openstack/init.yml")
+ reclass.add_key(repo_param, proposed_repo, "cluster/*/stacklight/init.yml")
+ reclass.add_key(repo_param, proposed_repo, "cluster/*/ceph/init.yml")
salt_actions.run_state("*", "saltutil.refresh_pillar")
salt_actions.enforce_state("I@jenkins:client", "jenkins.client")
+@pytest.fixture(scope='class')
+def enable_openstack_update(reclass_actions, salt_actions):
+ param = "parameters._param.openstack_upgrade_enabled"
+ context_file = "cluster/*/infra/init.yml"
+
+ LOG.info("Enable openstack_upgrade_enabled in reclass")
+ reclass_actions.add_bool_key(param, "True", context_file)
+ salt_actions.run_state("*", "saltutil.refresh_pillar")
+ yield True
+ LOG.info("Disable openstack_upgrade_enabled in reclass")
+ reclass_actions.add_bool_key(param, "False", context_file)
+ salt_actions.run_state("*", "saltutil.refresh_pillar")
+
+
+@pytest.mark.usefixtures("switch_to_proposed_pipelines")
class TestUpdateMcpCluster(object):
"""
Following the steps in
@@ -87,7 +107,7 @@
@pytest.mark.parametrize("_", [settings.ENV_NAME])
@pytest.mark.run_mcp_update
def test_update_drivetrain(self, salt_actions, drivetrain_actions,
- show_step, _, switch_to_proposed_pipelines):
+ show_step, _):
"""Updating DriveTrain component to release/proposed/2019.2.0 version
Scenario:
@@ -144,7 +164,7 @@
update_drivetrain = dt.start_job_on_cid_jenkins(
job_name=job_name,
job_parameters=job_parameters,
- build_timeout=90*60)
+ build_timeout=90 * 60)
assert update_drivetrain == 'SUCCESS'
@@ -193,7 +213,7 @@
"I@glusterfs:server",
"glusterd --version|head -n1")[0]
- assert has_only_similar(gluster_server_versions_by_nodes),\
+ assert has_only_similar(gluster_server_versions_by_nodes), \
gluster_server_versions_by_nodes
# ################ Check GlusterFS version for clients ##############
@@ -266,6 +286,7 @@
On each OpenStack controller node, modify the neutron.conf file
Restart the neutron-server service
"""
+
def comment_line(node, file_name, word):
"""
Adds '#' before the specific line in specific file
@@ -290,8 +311,8 @@
:return: None
"""
salt_actions.cmd_run(node, "echo {line} >> {file}".format(
- line=line,
- file=file_name))
+ line=line,
+ file=file_name))
neutron_conf = '/etc/neutron/neutron.conf'
neutron_server = "I@neutron:server"
@@ -302,7 +323,7 @@
# ## Change parameters in neutron.conf'
comment_line(neutron_server, neutron_conf,
- "allow_automatic_l3agent_failover",)
+ "allow_automatic_l3agent_failover", )
comment_line(neutron_server, neutron_conf,
"allow_automatic_dhcp_failover")
add_line(neutron_server, neutron_conf,
@@ -427,12 +448,35 @@
show_step(3)
ceph_version_by_nodes = salt.cmd_run(
- "I@ceph:* and not I@ceph:monitoring and not I@ceph:backup:server",
- "ceph version")[0]
+ "I@ceph:* and not I@ceph:monitoring and not I@ceph:backup:server",
+ "ceph version")[0]
assert has_only_similar(ceph_version_by_nodes), ceph_version_by_nodes
+ @pytest.mark.grab_versions
+ @pytest.mark.parametrize("_", [settings.ENV_NAME])
+ @pytest.mark.run_mcp_update
+ def test_update_stacklight(self, _, drivetrain_actions):
+ """ Update packages for Stacklight
+ Scenario:
+ 1. Start Deploy - upgrade Stacklight job
+ """
+ drivetrain = drivetrain_actions
+ job_parameters = {
+ "STAGE_UPGRADE_DOCKER_COMPONENTS": True,
+ "STAGE_UPGRADE_ES_KIBANA": True,
+ "STAGE_UPGRADE_SYSTEM_PART": True
+ }
+ upgrade_control_pipeline = drivetrain.start_job_on_cid_jenkins(
+ job_name="stacklight-upgrade",
+ job_parameters=job_parameters)
+
+ assert upgrade_control_pipeline == 'SUCCESS'
+
+
+@pytest.mark.usefixtures("switch_to_proposed_pipelines",
+ "enable_openstack_update")
class TestOpenstackUpdate(object):
@pytest.mark.grab_versions
@@ -468,8 +512,7 @@
@pytest.mark.grab_versions
@pytest.mark.parametrize('target', get_control_plane_targets())
@pytest.mark.run_mcp_update
- def test__update__control_plane(self, drivetrain_actions,
- switch_to_proposed_pipelines, target):
+ def test__update__control_plane(self, drivetrain_actions, target):
"""Start 'Deploy - upgrade control VMs' for specific node
"""
job_parameters = {
@@ -493,3 +536,16 @@
job_parameters=job_parameters)
assert upgrade_data_pipeline == 'SUCCESS'
+
+ @pytest.mark.grab_versions
+ @pytest.mark.run_mcp_update
+ def test__update__computes(self, drivetrain_actions):
+ """Start 'Deploy - upgrade computes'
+ """
+ job_parameters = {
+ "INTERACTIVE": False}
+ upgrade_compute_pipeline = drivetrain_actions.start_job_on_cid_jenkins(
+ job_name="deploy-upgrade-compute",
+ job_parameters=job_parameters)
+
+ assert upgrade_compute_pipeline == 'SUCCESS'