blob: 216f459821c2bbe179b267e00f26d7852e640131 [file] [log] [blame]
Hanna Arhipova71ecc272019-08-20 14:54:22 +03001import pytest
Hanna Arhipovaeb3a2112019-09-13 18:45:21 +03002import sys
3import os
Hanna Arhipova71ecc272019-08-20 14:54:22 +03004
5from tcp_tests import logger
6from tcp_tests import settings
Hanna Arhipova71ecc272019-08-20 14:54:22 +03007
Hanna Arhipovaeb3a2112019-09-13 18:45:21 +03008sys.path.append(os.getcwd())
9try:
10 from tcp_tests.fixtures import config_fixtures
11 from tcp_tests.managers import underlay_ssh_manager
12 from tcp_tests.managers import saltmanager as salt_manager
13except ImportError:
14 print("ImportError: Run the application from the tcp-qa directory or "
15 "set the PYTHONPATH environment variable to directory which contains"
16 " ./tcp_tests")
17 sys.exit(1)
Hanna Arhipova71ecc272019-08-20 14:54:22 +030018LOG = logger.logger
19
20
Hanna Arhipovad35a29b2019-09-04 13:24:06 +030021def has_only_similar(values_by_nodes):
22 """
Hanna Arhipovaeb3a2112019-09-13 18:45:21 +030023 :param values_by_nodes: dict
Hanna Arhipovad35a29b2019-09-04 13:24:06 +030024 :return: bool, True if all items in the dict have similar values
25 """
26 values = list(values_by_nodes.values())
27 return all(value == values[0] for value in values)
28
29
Hanna Arhipovaeb3a2112019-09-13 18:45:21 +030030def get_control_plane_targets():
31 config = config_fixtures.config()
32 underlay = underlay_ssh_manager.UnderlaySSHManager(config)
33 saltmanager = salt_manager.SaltManager(config, underlay)
Hanna Arhipovafbcea852019-10-03 13:24:53 +030034 targets = list()
35 try:
36 targets += saltmanager.run_state(
37 "I@keystone:server", 'test.ping')[0]['return'][0].keys()
38 targets += saltmanager.run_state(
39 "I@nginx:server and not I@salt:master",
40 "test.ping")[0]['return'][0].keys()
Hanna Arhipova4462dd02019-10-28 19:05:08 +020041 telemetry_exists = saltmanager.get_single_pillar(
42 "I@salt:master",
43 "_param:openstack_telemetry_hostname")
44 barbican_exists = saltmanager.get_single_pillar(
45 "I@salt:master",
46 "_param:barbican_enabled")
Hanna Arhipovafbcea852019-10-03 13:24:53 +030047 except BaseException as err:
48 LOG.warning("Can't retrieve data from Salt. \
49 Maybe cluster is not deployed completely.\
50 Err: {}".format(err))
Hanna Arhipovaeb3a2112019-09-13 18:45:21 +030051
Hanna Arhipova75f21bb2019-10-07 19:22:15 +030052 # check for Manila existence
53 # if saltmanager.get_single_pillar("I@salt:master",
54 # "_param:manila_service_protocol"):
55 # targets.append('share*')
56
57 # check for Tenant Telemetry existence
Hanna Arhipova4462dd02019-10-28 19:05:08 +020058 if telemetry_exists:
Hanna Arhipova75f21bb2019-10-07 19:22:15 +030059 targets.append('mdb*')
60
61 # check for Barbican existence
Hanna Arhipova4462dd02019-10-28 19:05:08 +020062 if barbican_exists:
Hanna Arhipova75f21bb2019-10-07 19:22:15 +030063 targets.append('kmn*')
Hanna Arhipovaeb3a2112019-09-13 18:45:21 +030064 return targets
65
66
Hanna Arhipova19429962019-10-17 15:16:49 +030067@pytest.fixture(scope='class')
Hanna Arhipovaeb3a2112019-09-13 18:45:21 +030068def switch_to_proposed_pipelines(reclass_actions, salt_actions):
Hanna Arhipova19429962019-10-17 15:16:49 +030069 reclass = reclass_actions
70 proposed_repo = "http://mirror.mirantis.com/update/proposed/"
71 repo_param = "parameters._param.linux_system_repo_update_url"
Hanna Arhipova7cfeb072019-10-11 15:04:10 +030072
Hanna Arhipova19429962019-10-17 15:16:49 +030073 proposed_pipeline_branch = "release/proposed/2019.2.0"
74 pipeline_branch_param = "parameters._param.jenkins_pipelines_branch"
75 infra_yml = "cluster/*/infra/init.yml"
76
77 LOG.info("Check reclass has release/proposed/2019.2.0 branches")
78 if reclass.get_key(pipeline_branch_param,
79 infra_yml) == proposed_pipeline_branch \
80 and reclass.get_key(repo_param, infra_yml) == proposed_repo:
81 return True
82
83 LOG.info("Switch to release/proposed/2019.2.0 branches")
84 reclass.add_key(pipeline_branch_param, proposed_pipeline_branch, infra_yml)
85
86 reclass.add_key(repo_param, proposed_repo, infra_yml)
87 reclass.add_key(repo_param, proposed_repo, "cluster/*/openstack/init.yml")
88 reclass.add_key(repo_param, proposed_repo, "cluster/*/stacklight/init.yml")
89 reclass.add_key(repo_param, proposed_repo, "cluster/*/ceph/init.yml")
Hanna Arhipova7cfeb072019-10-11 15:04:10 +030090
91 salt_actions.run_state("*", "saltutil.refresh_pillar")
Hanna Arhipovaeb3a2112019-09-13 18:45:21 +030092 salt_actions.enforce_state("I@jenkins:client", "jenkins.client")
93
94
Hanna Arhipova19429962019-10-17 15:16:49 +030095@pytest.fixture(scope='class')
96def enable_openstack_update(reclass_actions, salt_actions):
97 param = "parameters._param.openstack_upgrade_enabled"
98 context_file = "cluster/*/infra/init.yml"
99
100 LOG.info("Enable openstack_upgrade_enabled in reclass")
101 reclass_actions.add_bool_key(param, "True", context_file)
102 salt_actions.run_state("*", "saltutil.refresh_pillar")
103 yield True
104 LOG.info("Disable openstack_upgrade_enabled in reclass")
105 reclass_actions.add_bool_key(param, "False", context_file)
106 salt_actions.run_state("*", "saltutil.refresh_pillar")
107
108
109@pytest.mark.usefixtures("switch_to_proposed_pipelines")
Hanna Arhipova71ecc272019-08-20 14:54:22 +0300110class TestUpdateMcpCluster(object):
111 """
112 Following the steps in
Hanna Arhipova94a8abe2019-08-22 14:11:46 +0300113 https://docs.mirantis.com/mcp/master/mcp-operations-guide/update-upgrade/minor-update.html#minor-update
Hanna Arhipova71ecc272019-08-20 14:54:22 +0300114 """
115
116 @pytest.mark.grab_versions
117 @pytest.mark.parametrize("_", [settings.ENV_NAME])
118 @pytest.mark.run_mcp_update
Hanna Arhipova17b2c102019-09-06 16:44:17 +0300119 def test_update_drivetrain(self, salt_actions, drivetrain_actions,
Hanna Arhipova19429962019-10-17 15:16:49 +0300120 show_step, _):
Hanna Arhipova71ecc272019-08-20 14:54:22 +0300121 """Updating DriveTrain component to release/proposed/2019.2.0 version
122
123 Scenario:
Hanna Arhipova17b2c102019-09-06 16:44:17 +0300124 1. Add workaround for PROD-32751
Hanna Arhipova71ecc272019-08-20 14:54:22 +0300125 2. Run job git-mirror-downstream-mk-pipelines
126 3. Run job git-mirror-downstream-pipeline-library
127 4. If jobs are passed then start 'Deploy - upgrade MCP Drivetrain'
128
Hanna Arhipovad35a29b2019-09-04 13:24:06 +0300129 Duration: ~70 min
Hanna Arhipova71ecc272019-08-20 14:54:22 +0300130 """
131 salt = salt_actions
Hanna Arhipova17b2c102019-09-06 16:44:17 +0300132 dt = drivetrain_actions
Hanna Arhipova71ecc272019-08-20 14:54:22 +0300133
Hanna Arhipova17b2c102019-09-06 16:44:17 +0300134 # #################### Add workaround for PROD-32751 #################
Hanna Arhipova71ecc272019-08-20 14:54:22 +0300135 show_step(1)
136
Hanna Arhipova71ecc272019-08-20 14:54:22 +0300137 # FIXME: workaround for PROD-32751
138 salt.cmd_run("cfg01*", "cd /srv/salt/reclass; git add -u && \
139 git commit --allow-empty -m 'Cluster model update'")
140
141 # ################### Downstream mk-pipelines #########################
142 show_step(2)
143 job_name = 'git-mirror-downstream-mk-pipelines'
144 job_parameters = {
145 'BRANCHES': 'release/proposed/2019.2.0'
146 }
Hanna Arhipova17b2c102019-09-06 16:44:17 +0300147 update_pipelines = dt.start_job_on_cid_jenkins(
Hanna Arhipova71ecc272019-08-20 14:54:22 +0300148 job_name=job_name,
149 job_parameters=job_parameters)
150
Hanna Arhipova17b2c102019-09-06 16:44:17 +0300151 assert update_pipelines == 'SUCCESS'
Hanna Arhipova71ecc272019-08-20 14:54:22 +0300152
153 # ################### Downstream pipeline-library ####################
154 show_step(3)
155 job_name = 'git-mirror-downstream-pipeline-library'
156 job_parameters = {
157 'BRANCHES': 'release/proposed/2019.2.0'
158 }
Hanna Arhipova17b2c102019-09-06 16:44:17 +0300159 update_pipeline_library = dt.start_job_on_cid_jenkins(
Hanna Arhipova71ecc272019-08-20 14:54:22 +0300160 job_name=job_name,
161 job_parameters=job_parameters)
162
Hanna Arhipova17b2c102019-09-06 16:44:17 +0300163 assert update_pipeline_library == 'SUCCESS'
Hanna Arhipova71ecc272019-08-20 14:54:22 +0300164
165 # ################### Start 'Deploy - upgrade MCP Drivetrain' job #####
166 show_step(4)
167
Hanna Arhipova71ecc272019-08-20 14:54:22 +0300168 job_name = 'upgrade-mcp-release'
169 job_parameters = {
Hanna Arhipovad35a29b2019-09-04 13:24:06 +0300170 'GIT_REFSPEC': 'release/proposed/2019.2.0',
Hanna Arhipova71ecc272019-08-20 14:54:22 +0300171 'MK_PIPELINES_REFSPEC': 'release/proposed/2019.2.0',
172 'TARGET_MCP_VERSION': '2019.2.0'
173 }
Hanna Arhipova17b2c102019-09-06 16:44:17 +0300174 update_drivetrain = dt.start_job_on_cid_jenkins(
Hanna Arhipova71ecc272019-08-20 14:54:22 +0300175 job_name=job_name,
Hanna Arhipova17b2c102019-09-06 16:44:17 +0300176 job_parameters=job_parameters,
Hanna Arhipova19429962019-10-17 15:16:49 +0300177 build_timeout=90 * 60)
Hanna Arhipova71ecc272019-08-20 14:54:22 +0300178
Hanna Arhipova17b2c102019-09-06 16:44:17 +0300179 assert update_drivetrain == 'SUCCESS'
Hanna Arhipova71ecc272019-08-20 14:54:22 +0300180
Hanna Arhipova94a8abe2019-08-22 14:11:46 +0300181 @pytest.mark.grab_versions
182 @pytest.mark.parametrize("_", [settings.ENV_NAME])
Hanna Arhipova71ecc272019-08-20 14:54:22 +0300183 @pytest.mark.run_mcp_update
Hanna Arhipovacc3759b2019-08-28 16:01:11 +0300184 def test_update_glusterfs(self, salt_actions, reclass_actions,
Hanna Arhipova17b2c102019-09-06 16:44:17 +0300185 drivetrain_actions, show_step, _):
Hanna Arhipovacc3759b2019-08-28 16:01:11 +0300186 """ Upgrade GlusterFS
187 Scenario:
188 1. In infra/init.yml in Reclass, add the glusterfs_version parameter
189 2. Start linux.system.repo state
190 3. Start "update-glusterfs" job
191 4. Check version for GlusterFS servers
192 5. Check version for GlusterFS clients
193
194 """
195 salt = salt_actions
196 reclass = reclass_actions
Hanna Arhipova17b2c102019-09-06 16:44:17 +0300197 dt = drivetrain_actions
Hanna Arhipovacc3759b2019-08-28 16:01:11 +0300198
Hanna Arhipovacc3759b2019-08-28 16:01:11 +0300199 # ############## Change reclass ######################################
200 show_step(1)
201 reclass.add_key(
202 "parameters._param.linux_system_repo_mcp_glusterfs_version_number",
203 "5",
204 "cluster/*/infra/init.yml"
205 )
206 # ################# Run linux.system state ###########################
207 show_step(2)
208 salt.enforce_state("*", "linux.system.repo")
209
210 # ############## Start deploy-upgrade-galera job #####################
211 show_step(3)
Hanna Arhipovacc3759b2019-08-28 16:01:11 +0300212 job_name = 'update-glusterfs'
213
Hanna Arhipova17b2c102019-09-06 16:44:17 +0300214 update_glusterfs = dt.start_job_on_cid_jenkins(
Hanna Arhipovacc3759b2019-08-28 16:01:11 +0300215 job_name=job_name,
Hanna Arhipova17b2c102019-09-06 16:44:17 +0300216 build_timeout=40 * 60)
Hanna Arhipovacc3759b2019-08-28 16:01:11 +0300217
Hanna Arhipova17b2c102019-09-06 16:44:17 +0300218 assert update_glusterfs == 'SUCCESS'
Hanna Arhipovacc3759b2019-08-28 16:01:11 +0300219
220 # ################ Check GlusterFS version for servers ##############
221 show_step(4)
222 gluster_server_versions_by_nodes = salt.cmd_run(
223 "I@glusterfs:server",
224 "glusterd --version|head -n1")[0]
225
Hanna Arhipova19429962019-10-17 15:16:49 +0300226 assert has_only_similar(gluster_server_versions_by_nodes), \
Hanna Arhipovacc3759b2019-08-28 16:01:11 +0300227 gluster_server_versions_by_nodes
228
229 # ################ Check GlusterFS version for clients ##############
230 show_step(5)
231 gluster_client_versions_by_nodes = salt.cmd_run(
232 "I@glusterfs:client",
233 "glusterfs --version|head -n1")[0]
234
235 assert has_only_similar(gluster_client_versions_by_nodes), \
236 gluster_client_versions_by_nodes
237
238 @pytest.mark.grab_versions
239 @pytest.mark.parametrize("_", [settings.ENV_NAME])
240 @pytest.mark.run_mcp_update
Hanna Arhipova17b2c102019-09-06 16:44:17 +0300241 def test_update_galera(self, salt_actions, reclass_actions,
242 drivetrain_actions, show_step, _):
Hanna Arhipova94a8abe2019-08-22 14:11:46 +0300243 """ Upgrade Galera automatically
244
245 Scenario:
246 1. Include the Galera upgrade pipeline job to DriveTrain
247 2. Apply the jenkins.client state on the Jenkins nodes
248 3. set the openstack_upgrade_enabled parameter to true
249 4. Refresh pillars
250 5. Add repositories with new Galera packages
251 6. Start job from Jenkins
252 """
253 salt = salt_actions
254 reclass = reclass_actions
Hanna Arhipova17b2c102019-09-06 16:44:17 +0300255 dt = drivetrain_actions
Hanna Arhipova94a8abe2019-08-22 14:11:46 +0300256 # ################### Enable pipeline #################################
257 show_step(1)
258 reclass.add_class(
259 "system.jenkins.client.job.deploy.update.upgrade_galera",
260 "cluster/*/cicd/control/leader.yml")
261 show_step(2)
262 salt.enforce_state("I@jenkins:client", "jenkins.client")
263
264 # ############### Enable automatic upgrade ############################
265 show_step(3)
266 reclass.add_bool_key("parameters._param.openstack_upgrade_enabled",
267 "True",
268 "cluster/*/infra/init.yml")
269
270 show_step(4)
Hanna Arhipova7cfeb072019-10-11 15:04:10 +0300271 salt.run_state("dbs*", "saltutil.refresh_pillar")
Hanna Arhipova94a8abe2019-08-22 14:11:46 +0300272
273 # ############# Add repositories with new Galera packages #######
274 show_step(5)
275 salt.enforce_state("dbs*", "linux.system.repo")
276 salt.enforce_state("cfg*", "salt.master")
277
Hanna Arhipova94a8abe2019-08-22 14:11:46 +0300278 # #################### Login Jenkins on cid01 node ###################
279 show_step(6)
280
Hanna Arhipova94a8abe2019-08-22 14:11:46 +0300281 job_name = 'deploy-upgrade-galera'
282 job_parameters = {
283 'INTERACTIVE': 'false'
284 }
285
Hanna Arhipova17b2c102019-09-06 16:44:17 +0300286 update_galera = dt.start_job_on_cid_jenkins(
Hanna Arhipova94a8abe2019-08-22 14:11:46 +0300287 job_name=job_name,
Hanna Arhipova17b2c102019-09-06 16:44:17 +0300288 job_parameters=job_parameters,
289 build_timeout=40 * 60)
Hanna Arhipova94a8abe2019-08-22 14:11:46 +0300290
Hanna Arhipova17b2c102019-09-06 16:44:17 +0300291 assert update_galera == 'SUCCESS'
Hanna Arhipova1fcaf442019-09-06 15:30:45 +0300292
293 @pytest.fixture
294 def disable_automatic_failover_neutron_for_test(self, salt_actions):
295 """
296 On each OpenStack controller node, modify the neutron.conf file
297 Restart the neutron-server service
298 """
Hanna Arhipova19429962019-10-17 15:16:49 +0300299
Hanna Arhipovaeb3a2112019-09-13 18:45:21 +0300300 def comment_line(node, file_name, word):
Hanna Arhipova1fcaf442019-09-06 15:30:45 +0300301 """
302 Adds '#' before the specific line in specific file
303
304 :param node: string, salt target of node where the file locates
Hanna Arhipovaeb3a2112019-09-13 18:45:21 +0300305 :param file_name: string, full path to the file
Hanna Arhipova1fcaf442019-09-06 15:30:45 +0300306 :param word: string, the begin of line which should be commented
307 :return: None
308 """
309 salt_actions.cmd_run(node,
310 "sed -i 's/^{word}/#{word}/' {file}".
311 format(word=word,
Hanna Arhipovaeb3a2112019-09-13 18:45:21 +0300312 file=file_name))
Hanna Arhipova1fcaf442019-09-06 15:30:45 +0300313
Hanna Arhipovaeb3a2112019-09-13 18:45:21 +0300314 def add_line(node, file_name, line):
Hanna Arhipova1fcaf442019-09-06 15:30:45 +0300315 """
316 Appends line to the end of file
317
318 :param node: string, salt target of node where the file locates
Hanna Arhipovaeb3a2112019-09-13 18:45:21 +0300319 :param file_name: string, full path to the file
Hanna Arhipova1fcaf442019-09-06 15:30:45 +0300320 :param line: string, line that should be added
321 :return: None
322 """
323 salt_actions.cmd_run(node, "echo {line} >> {file}".format(
Hanna Arhipova19429962019-10-17 15:16:49 +0300324 line=line,
325 file=file_name))
Hanna Arhipova1fcaf442019-09-06 15:30:45 +0300326
327 neutron_conf = '/etc/neutron/neutron.conf'
328 neutron_server = "I@neutron:server"
329 # ######## Create backup for config file #######################
330 salt_actions.cmd_run(
331 neutron_server,
332 "cp -p {file} {file}.backup".format(file=neutron_conf))
333
334 # ## Change parameters in neutron.conf'
335 comment_line(neutron_server, neutron_conf,
Hanna Arhipova19429962019-10-17 15:16:49 +0300336 "allow_automatic_l3agent_failover", )
Hanna Arhipova1fcaf442019-09-06 15:30:45 +0300337 comment_line(neutron_server, neutron_conf,
338 "allow_automatic_dhcp_failover")
339 add_line(neutron_server, neutron_conf,
340 "allow_automatic_dhcp_failover = false")
341 add_line(neutron_server, neutron_conf,
342 "allow_automatic_l3agent_failover = false")
343
344 # ## Apply changed config to the neutron-server service
Hanna Arhipovaeb3a2112019-09-13 18:45:21 +0300345 result = salt_actions.cmd_run(neutron_server,
346 "service neutron-server restart")
Hanna Arhipova1fcaf442019-09-06 15:30:45 +0300347 # TODO: add check that neutron-server is up and running
Hanna Arhipovaeb3a2112019-09-13 18:45:21 +0300348 yield result
Hanna Arhipova1fcaf442019-09-06 15:30:45 +0300349 # ## Revert file changes
350 salt_actions.cmd_run(
351 neutron_server,
352 "cp -p {file}.backup {file}".format(file=neutron_conf))
353 salt_actions.cmd_run(neutron_server,
354 "service neutron-server restart")
355
356 @pytest.fixture
357 def disable_neutron_agents_for_test(self, salt_actions):
358 """
Hanna Arhipovaeb3a2112019-09-13 18:45:21 +0300359 Disable the neutron services before the test and
360 enable it after test
Hanna Arhipova1fcaf442019-09-06 15:30:45 +0300361 """
Hanna Arhipovaeb3a2112019-09-13 18:45:21 +0300362 result = salt_actions.cmd_run("I@neutron:server", """
Hanna Arhipova1fcaf442019-09-06 15:30:45 +0300363 service neutron-dhcp-agent stop && \
364 service neutron-l3-agent stop && \
365 service neutron-metadata-agent stop && \
366 service neutron-openvswitch-agent stop
367 """)
Hanna Arhipovaeb3a2112019-09-13 18:45:21 +0300368 yield result
369 #
Hanna Arhipova1fcaf442019-09-06 15:30:45 +0300370 salt_actions.cmd_run("I@neutron:server", """
371 service neutron-dhcp-agent start && \
372 service neutron-l3-agent start && \
373 service neutron-metadata-agent start && \
374 service neutron-openvswitch-agent start
375 """)
376 # TODO: add check that all services are UP and running
377
378 @pytest.mark.grab_versions
379 @pytest.mark.parametrize("_", [settings.ENV_NAME])
380 @pytest.mark.run_mcp_update
381 def test_update_rabbit(self, salt_actions, reclass_actions,
382 drivetrain_actions, show_step, _,
383 disable_automatic_failover_neutron_for_test,
384 disable_neutron_agents_for_test):
385 """ Updates RabbitMQ
386 Scenario:
387 1. Include the RabbitMQ upgrade pipeline job to DriveTrain
388 2. Add repositories with new RabbitMQ packages
389 3. Start Deploy - upgrade RabbitMQ pipeline
390
391 Updating RabbitMq should be completed before the OpenStack updating
392 process starts
393 """
394 salt = salt_actions
395 reclass = reclass_actions
396 dt = drivetrain_actions
397
398 # ####### Include the RabbitMQ upgrade pipeline job to DriveTrain ####
399 show_step(1)
400 reclass.add_class(
401 "system.jenkins.client.job.deploy.update.upgrade_rabbitmq",
402 "cluster/*/cicd/control/leader.yml")
403 salt.enforce_state("I@jenkins:client", "jenkins.client")
404
405 reclass.add_bool_key("parameters._param.openstack_upgrade_enabled",
406 "True",
407 "cluster/*/infra/init.yml")
408 salt.run_state("I@rabbitmq:server", "saltutil.refresh_pillar")
409
410 # ########### Add repositories with new RabbitMQ packages ############
411 show_step(2)
412 salt.enforce_state("I@rabbitmq:server", "linux.system.repo")
413
414 # ########### Start Deploy - upgrade RabbitMQ pipeline ############
415 show_step(3)
416 job_parameters = {
417 'INTERACTIVE': 'false'
418 }
419
420 update_rabbit = dt.start_job_on_cid_jenkins(
421 job_name='deploy-upgrade-rabbitmq',
422 job_parameters=job_parameters,
423 build_timeout=40 * 60
424 )
425 assert update_rabbit == 'SUCCESS'
Hanna Arhipovad35a29b2019-09-04 13:24:06 +0300426
427 @pytest.mark.grab_versions
428 @pytest.mark.parametrize("_", [settings.ENV_NAME])
429 @pytest.mark.run_mcp_update
430 def test_update_ceph(self, salt_actions, drivetrain_actions, show_step, _):
431 """ Updates Ceph to the latest minor version
432
433 Scenario:
434 1. Add workaround for unhealth Ceph
435 2. Start ceph-upgrade job with default parameters
436 3. Check Ceph version for all nodes
437
438 https://docs.mirantis.com/mcp/master/mcp-operations-guide/update-upgrade/minor-update/ceph-update.html
439 """
440 salt = salt_actions
441 dt = drivetrain_actions
442
443 # ###################### Add workaround for unhealth Ceph ############
444 show_step(1)
445 salt.cmd_run("I@ceph:radosgw",
446 "ceph config set 'mon pg warn max object skew' 20")
447 # ###################### Start ceph-upgrade pipeline #################
448 show_step(2)
449 job_parameters = {}
450
451 update_ceph = dt.start_job_on_cid_jenkins(
452 job_name='ceph-update',
453 job_parameters=job_parameters)
454
455 assert update_ceph == 'SUCCESS'
456
457 # ########## Verify Ceph version #####################################
458 show_step(3)
459
460 ceph_version_by_nodes = salt.cmd_run(
Hanna Arhipova19429962019-10-17 15:16:49 +0300461 "I@ceph:* and not I@ceph:monitoring and not I@ceph:backup:server",
462 "ceph version")[0]
Hanna Arhipovad35a29b2019-09-04 13:24:06 +0300463
464 assert has_only_similar(ceph_version_by_nodes), ceph_version_by_nodes
Hanna Arhipovaeb3a2112019-09-13 18:45:21 +0300465
Hanna Arhipovaac008562019-10-17 11:54:23 +0300466 @pytest.mark.grab_versions
467 @pytest.mark.parametrize("_", [settings.ENV_NAME])
468 @pytest.mark.run_mcp_update
469 def test_update_stacklight(self, _, drivetrain_actions):
470 """ Update packages for Stacklight
471 Scenario:
472 1. Start Deploy - upgrade Stacklight job
473 """
474 drivetrain = drivetrain_actions
475
476 job_parameters = {
477 "STAGE_UPGRADE_DOCKER_COMPONENTS": True,
478 "STAGE_UPGRADE_ES_KIBANA": True,
479 "STAGE_UPGRADE_SYSTEM_PART": True
480 }
481 upgrade_control_pipeline = drivetrain.start_job_on_cid_jenkins(
482 job_name="stacklight-upgrade",
483 job_parameters=job_parameters)
484
485 assert upgrade_control_pipeline == 'SUCCESS'
486
Hanna Arhipovaeb3a2112019-09-13 18:45:21 +0300487
Hanna Arhipova19429962019-10-17 15:16:49 +0300488@pytest.mark.usefixtures("switch_to_proposed_pipelines",
489 "enable_openstack_update")
Hanna Arhipovaeb3a2112019-09-13 18:45:21 +0300490class TestOpenstackUpdate(object):
491
492 @pytest.mark.grab_versions
493 @pytest.mark.run_mcp_update
494 def test__pre_update__enable_pipeline_job(self,
495 reclass_actions, salt_actions,
496 show_step):
497 """ Enable pipeline in the Drivetrain
498
499 Scenario:
500 1. Add deploy.update.* classes to the reclass
501 2. Start jenkins.client salt state
502
503 """
504 salt = salt_actions
505 reclass = reclass_actions
506 show_step(1)
507 reclass.add_class("system.jenkins.client.job.deploy.update.upgrade",
508 "cluster/*/cicd/control/leader.yml")
509
510 reclass.add_class(
511 "system.jenkins.client.job.deploy.update.upgrade_ovs_gateway",
512 "cluster/*/cicd/control/leader.yml")
513
514 reclass.add_class(
515 "system.jenkins.client.job.deploy.update.upgrade_compute",
516 "cluster/*/cicd/control/leader.yml")
517
518 show_step(2)
519 r, errors = salt.enforce_state("I@jenkins:client", "jenkins.client")
520 assert errors is None
521
522 @pytest.mark.grab_versions
523 @pytest.mark.parametrize('target', get_control_plane_targets())
524 @pytest.mark.run_mcp_update
Hanna Arhipova19429962019-10-17 15:16:49 +0300525 def test__update__control_plane(self, drivetrain_actions, target):
Hanna Arhipovaeb3a2112019-09-13 18:45:21 +0300526 """Start 'Deploy - upgrade control VMs' for specific node
527 """
528 job_parameters = {
529 "TARGET_SERVERS": target,
530 "INTERACTIVE": False}
531 upgrade_control_pipeline = drivetrain_actions.start_job_on_cid_jenkins(
532 job_name="deploy-upgrade-control",
533 job_parameters=job_parameters)
534
535 assert upgrade_control_pipeline == 'SUCCESS'
536
537 @pytest.mark.grab_versions
538 @pytest.mark.run_mcp_update
539 def test__update__data_plane(self, drivetrain_actions):
540 """Start 'Deploy - upgrade OVS gateway'
541 """
542 job_parameters = {
543 "INTERACTIVE": False}
544 upgrade_data_pipeline = drivetrain_actions.start_job_on_cid_jenkins(
545 job_name="deploy-upgrade-ovs-gateway",
546 job_parameters=job_parameters)
547
548 assert upgrade_data_pipeline == 'SUCCESS'
Hanna Arhipova19429962019-10-17 15:16:49 +0300549
550 @pytest.mark.grab_versions
551 @pytest.mark.run_mcp_update
552 def test__update__computes(self, drivetrain_actions):
553 """Start 'Deploy - upgrade computes'
554 """
555 job_parameters = {
556 "INTERACTIVE": False}
557 upgrade_compute_pipeline = drivetrain_actions.start_job_on_cid_jenkins(
558 job_name="deploy-upgrade-compute",
559 job_parameters=job_parameters)
560
561 assert upgrade_compute_pipeline == 'SUCCESS'