blob: f9ab672604ef924e588bad98c7df47246ba29fee [file] [log] [blame]
Dennis Dmitriev6f59add2016-10-18 13:45:27 +03001# Copyright 2016 Mirantis, Inc.
2#
3# Licensed under the Apache License, Version 2.0 (the "License"); you may
4# not use this file except in compliance with the License. You may obtain
5# a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12# License for the specific language governing permissions and limitations
13# under the License.
14import copy
Dennis Dmitrieva982b2d2016-10-21 16:52:50 +030015import time
Dennis Dmitriev6f59add2016-10-18 13:45:27 +030016
17import pytest
18
Dennis Dmitriev6f59add2016-10-18 13:45:27 +030019from tcp_tests import settings
20from tcp_tests.helpers import ext
Dennis Dmitriev474e3f72016-10-21 16:46:09 +030021from tcp_tests import logger
22
23LOG = logger.logger
Dennis Dmitriev6f59add2016-10-18 13:45:27 +030024
25
26@pytest.mark.deploy
27class TestTCPInstaller(object):
28 """Test class for testing TCP deployment"""
29
Dennis Dmitriev4be178c2016-10-25 13:17:46 +030030 #salt_cmd = 'salt -l debug ' # For debug output
31 #salt_call_cmd = 'salt-call -l debug ' # For debug output
Dennis Dmitriev23e5d192016-10-31 11:27:10 +020032 salt_cmd = 'salt --hard-crash --state-output=mixed --state-verbose=False ' # For cause only output
33 salt_call_cmd = 'salt-call --hard-crash --state-output=mixed --state-verbose=False ' # For cause only output
Dennis Dmitriev4be178c2016-10-25 13:17:46 +030034 #salt_cmd = 'salt --state-output=terse --state-verbose=False ' # For reduced output
35 #salt_call_cmd = 'salt-call --state-output=terse --state-verbose=False ' # For reduced output
Dennis Dmitriev474e3f72016-10-21 16:46:09 +030036
Dennis Dmitriev23e5d192016-10-31 11:27:10 +020037 steps_mk22_advanced_lab = [
38 # Prepare salt services and nodes settings
Dennis Dmitriev4be178c2016-10-25 13:17:46 +030039 {
40 'description': "Run 'linux' formula on cfg01",
Dennis Dmitriev3bf410e2016-10-26 20:22:04 +030041 'cmd': salt_call_cmd + "state.sls linux",
Dennis Dmitriev0ebe9f32016-10-25 11:01:44 +030042 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
Dennis Dmitriev474e3f72016-10-21 16:46:09 +030043 'retry': {'count': 3, 'delay': 5},
Dennis Dmitriev423a7ff2016-10-21 18:31:36 +030044 'skip_fail': False,
Dennis Dmitriev474e3f72016-10-21 16:46:09 +030045 },
Dennis Dmitriev4be178c2016-10-25 13:17:46 +030046 {
47 'description': "Run 'openssh' formula on cfg01",
Dennis Dmitriev3bf410e2016-10-26 20:22:04 +030048 'cmd': (salt_call_cmd + "state.sls openssh;"
Dennis Dmitriev0ebe9f32016-10-25 11:01:44 +030049 "sed -i 's/PasswordAuthentication no/"
50 "PasswordAuthentication yes/' "
51 "/etc/ssh/sshd_config && service ssh restart"),
52 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
Dennis Dmitriev423a7ff2016-10-21 18:31:36 +030053 'retry': {'count': 3, 'delay': 5},
54 'skip_fail': False,
55 },
Dennis Dmitriev4be178c2016-10-25 13:17:46 +030056 {
57 'description': ("*Workaround* of the bug"
58 " https://mirantis.jira.com/browse/PROD-7962"),
Dennis Dmitriev474e3f72016-10-21 16:46:09 +030059 'cmd': "echo ' StrictHostKeyChecking no' >> /root/.ssh/config",
Dennis Dmitriev0ebe9f32016-10-25 11:01:44 +030060 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
Dennis Dmitriev474e3f72016-10-21 16:46:09 +030061 'retry': {'count': 1, 'delay': 1},
Dennis Dmitriev423a7ff2016-10-21 18:31:36 +030062 'skip_fail': False,
Dennis Dmitriev474e3f72016-10-21 16:46:09 +030063 },
Dennis Dmitriev4be178c2016-10-25 13:17:46 +030064 {
65 'description': "Run 'salt' formula on cfg01",
Dennis Dmitriev3bf410e2016-10-26 20:22:04 +030066 'cmd': salt_call_cmd + " state.sls salt",
Dennis Dmitriev0ebe9f32016-10-25 11:01:44 +030067 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
Dennis Dmitriev474e3f72016-10-21 16:46:09 +030068 'retry': {'count': 3, 'delay': 5},
Dennis Dmitriev3bf410e2016-10-26 20:22:04 +030069 'skip_fail': True,
Dennis Dmitriev474e3f72016-10-21 16:46:09 +030070 },
Dennis Dmitriev4be178c2016-10-25 13:17:46 +030071 {
Dennis Dmitriev7080d8d2016-10-26 13:43:37 +030072 'description': "Accept salt keys from all the nodes",
73 'cmd': "salt-key -A -y",
74 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
75 'retry': {'count': 1, 'delay': 5},
76 'skip_fail': False,
77 },
78 {
Dennis Dmitriev4be178c2016-10-25 13:17:46 +030079 'description': ("Generate inventory for all the nodes to the"
80 " /srv/salt/reclass/nodes/_generated"),
Dennis Dmitriev3bf410e2016-10-26 20:22:04 +030081 'cmd': salt_call_cmd + "state.sls reclass.storage",
Dennis Dmitriev0ebe9f32016-10-25 11:01:44 +030082 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
Dennis Dmitriev474e3f72016-10-21 16:46:09 +030083 'retry': {'count': 3, 'delay': 5},
Dennis Dmitriev423a7ff2016-10-21 18:31:36 +030084 'skip_fail': False,
Dennis Dmitriev474e3f72016-10-21 16:46:09 +030085 },
Dennis Dmitriev4be178c2016-10-25 13:17:46 +030086 {
87 'description': "Refresh pillars on all minions",
Dennis Dmitriev474e3f72016-10-21 16:46:09 +030088 'cmd': salt_cmd + "'*' saltutil.refresh_pillar",
Dennis Dmitriev0ebe9f32016-10-25 11:01:44 +030089 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
Dennis Dmitriev474e3f72016-10-21 16:46:09 +030090 'retry': {'count': 3, 'delay': 5},
Dennis Dmitriev423a7ff2016-10-21 18:31:36 +030091 'skip_fail': False,
Dennis Dmitriev474e3f72016-10-21 16:46:09 +030092 },
Dennis Dmitriev23e5d192016-10-31 11:27:10 +020093
94
95 # Bootstrap all nodes
96 {
97 'description': "Configure linux on controllers",
98 'cmd': salt_cmd + "'*' state.sls linux",
99 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
100 'retry': {'count': 5, 'delay': 5},
101 'skip_fail': False,
102 },
103 {
104 'description': "Configure openssh on controllers",
105 'cmd': (salt_cmd + "-C '* and not cfg*' state.sls openssh;"
106 + salt_cmd + "-C '* and not cfg*' cmd.run "
107 "\"sed -i 's/PasswordAuthentication no/"
108 "PasswordAuthentication yes/' /etc/ssh/sshd_config && "
109 "service ssh restart\""),
110 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
111 'retry': {'count': 3, 'delay': 5},
112 'skip_fail': False,
113 },
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300114 {
Dennis Dmitriev3bf410e2016-10-26 20:22:04 +0300115 'description': ("*Workaround* for the bug"
116 " https://mirantis.jira.com/browse/PROD-8025"),
117 'cmd': (salt_cmd + "'*' cmd.run 'apt-get update &&"
118 " apt-get -y upgrade'"),
119 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
120 'retry': {'count': 3, 'delay': 5},
121 'skip_fail': False,
122 },
123 {
124 'description': ("*Workaround* for the bug"
125 " https://mirantis.jira.com/browse/PROD-8021"),
126 'cmd': (salt_cmd + "'*' cmd.run 'apt-get -y install"
127 " linux-image-extra-$(uname -r)'"),
128 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
129 'retry': {'count': 3, 'delay': 5},
130 'skip_fail': False,
131 },
132 {
Dennis Dmitriev23e5d192016-10-31 11:27:10 +0200133 'description': ("*Workaround* for the bug"
134 " https://mirantis.jira.com/browse/PROD-XXXXX"),
135 'cmd': (salt_cmd + "'*' cmd.run 'apt-get -y install python-requests'"),
Dennis Dmitriev0ebe9f32016-10-25 11:01:44 +0300136 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300137 'retry': {'count': 3, 'delay': 5},
Dennis Dmitriev423a7ff2016-10-21 18:31:36 +0300138 'skip_fail': False,
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300139 },
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300140 {
141 'description': "Configure salt.minion on controllers",
Dennis Dmitriev23e5d192016-10-31 11:27:10 +0200142 'cmd': salt_cmd + "'*' state.sls salt.minion",
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300143 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
144 'retry': {'count': 3, 'delay': 5},
145 'skip_fail': False,
146 },
147 {
Dennis Dmitriev23e5d192016-10-31 11:27:10 +0200148 'description': "Configure ntp on controllers",
149 'cmd': salt_cmd + "'*' state.sls ntp",
150 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
151 'retry': {'count': 5, 'delay': 10},
152 'skip_fail': False,
153 },
154
155 # Install support services
156 {
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300157 'description': "Install keepalived on primary controller",
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300158 'cmd': salt_cmd + "'ctl01*' state.sls keepalived",
Dennis Dmitriev0ebe9f32016-10-25 11:01:44 +0300159 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300160 'retry': {'count': 3, 'delay': 5},
Dennis Dmitriev423a7ff2016-10-21 18:31:36 +0300161 'skip_fail': False,
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300162 },
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300163 {
Dennis Dmitriev23e5d192016-10-31 11:27:10 +0200164 'description': "Install keepalived on other controllers",
165 'cmd': salt_cmd + "'ctl*' state.sls keepalived -b 1",
Dennis Dmitriev0ebe9f32016-10-25 11:01:44 +0300166 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300167 'retry': {'count': 3, 'delay': 5},
Dennis Dmitriev423a7ff2016-10-21 18:31:36 +0300168 'skip_fail': False,
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300169 },
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300170 {
Dennis Dmitriev23e5d192016-10-31 11:27:10 +0200171 'description': "Check the VIP",
172 # First grep finds the IP, second is to get the correct exit code
173 'cmd': (salt_cmd + "'ctl*' cmd.run 'ip a | grep 172.16.10.254' |"
174 " grep -B1 172.16.10.254"),
Dennis Dmitriev0ebe9f32016-10-25 11:01:44 +0300175 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300176 'retry': {'count': 3, 'delay': 5},
Dennis Dmitriev423a7ff2016-10-21 18:31:36 +0300177 'skip_fail': False,
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300178 },
Dennis Dmitriev23e5d192016-10-31 11:27:10 +0200179
180
181
182
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300183 {
184 'description': "Install glusterfs on all controllers",
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300185 'cmd': salt_cmd + "'ctl*' state.sls glusterfs.server.service",
Dennis Dmitriev0ebe9f32016-10-25 11:01:44 +0300186 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300187 'retry': {'count': 3, 'delay': 5},
Dennis Dmitriev423a7ff2016-10-21 18:31:36 +0300188 'skip_fail': False,
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300189 },
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300190 {
191 'description': "Setup glusterfs on primary controller",
Dennis Dmitriev23e5d192016-10-31 11:27:10 +0200192 'cmd': salt_cmd + "'ctl01*' state.sls glusterfs.server.setup",
193 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300194 'retry': {'count': 3, 'delay': 5},
Dennis Dmitriev423a7ff2016-10-21 18:31:36 +0300195 'skip_fail': False,
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300196 },
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300197 {
Dennis Dmitriev23e5d192016-10-31 11:27:10 +0200198 'description': "Setup glusterfs on other controllers",
199 'cmd': salt_cmd + "'ctl*' state.sls glusterfs.server.setup -b 1",
200 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300201 'retry': {'count': 3, 'delay': 5},
Dennis Dmitriev423a7ff2016-10-21 18:31:36 +0300202 'skip_fail': False,
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300203 },
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300204 {
Dennis Dmitriev23e5d192016-10-31 11:27:10 +0200205 'description': "Check the gluster status",
206 'cmd': salt_cmd + "'ctl01*' cmd.run 'gluster peer status; gluster volume status'",
207 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300208 'retry': {'count': 3, 'delay': 5},
Dennis Dmitriev423a7ff2016-10-21 18:31:36 +0300209 'skip_fail': False,
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300210 },
Dennis Dmitriev23e5d192016-10-31 11:27:10 +0200211
212
213
214
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300215 {
216 'description': "Install RabbitMQ on all controllers",
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300217 'cmd': salt_cmd + "'ctl*' state.sls rabbitmq",
Dennis Dmitriev0ebe9f32016-10-25 11:01:44 +0300218 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300219 'retry': {'count': 3, 'delay': 5},
Dennis Dmitriev423a7ff2016-10-21 18:31:36 +0300220 'skip_fail': False,
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300221 },
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300222 {
Dennis Dmitriev23e5d192016-10-31 11:27:10 +0200223 'description': "Check the rabbitmq status",
224 'cmd': salt_cmd + "'ctl*' cmd.run 'rabbitmqctl cluster_status'",
225 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
226 'retry': {'count': 3, 'delay': 5},
227 'skip_fail': False,
228 },
229
230
231
232 {
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300233 'description': ("*Workaround* Update salt-formula-galera on"
234 " config node to the latest version"),
Dennis Dmitriev0ebe9f32016-10-25 11:01:44 +0300235 'cmd': "apt-get -y --force-yes install salt-formula-galera",
236 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300237 'retry': {'count': 3, 'delay': 5},
Dennis Dmitriev423a7ff2016-10-21 18:31:36 +0300238 'skip_fail': False,
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300239 },
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300240 {
241 'description': "Install Galera on primary controller",
Dennis Dmitriev0ebe9f32016-10-25 11:01:44 +0300242 'cmd': salt_call_cmd + "state.sls galera",
243 'node_name': 'ctl01.mk22-lab-advanced.local', # hardcoded for now
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300244 'retry': {'count': 3, 'delay': 5},
Dennis Dmitriev423a7ff2016-10-21 18:31:36 +0300245 'skip_fail': False,
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300246 },
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300247 {
248 'description': "Install Galera on other controllers",
Dennis Dmitriev23e5d192016-10-31 11:27:10 +0200249 'cmd': salt_cmd + "'ctl*' state.sls galera",
Dennis Dmitriev0ebe9f32016-10-25 11:01:44 +0300250 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300251 'retry': {'count': 3, 'delay': 5},
Dennis Dmitriev423a7ff2016-10-21 18:31:36 +0300252 'skip_fail': False,
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300253 },
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300254 {
Dennis Dmitriev23e5d192016-10-31 11:27:10 +0200255 'description': "Check mysql status",
256 'cmd': salt_cmd + "'ctl*' mysql.status",
Dennis Dmitriev0ebe9f32016-10-25 11:01:44 +0300257 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300258 'retry': {'count': 3, 'delay': 5},
Dennis Dmitriev23e5d192016-10-31 11:27:10 +0200259 'skip_fail': True,
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300260 },
Dennis Dmitriev23e5d192016-10-31 11:27:10 +0200261
262
263
264
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300265 {
266 'description': "Install haproxy on all controllers",
Dennis Dmitriev0ebe9f32016-10-25 11:01:44 +0300267 'cmd': salt_cmd + "'ctl*' state.sls haproxy",
268 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300269 'retry': {'count': 3, 'delay': 5},
Dennis Dmitriev423a7ff2016-10-21 18:31:36 +0300270 'skip_fail': False,
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300271 },
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300272 {
Dennis Dmitriev23e5d192016-10-31 11:27:10 +0200273 'description': "Check haproxy status",
274 'cmd': salt_cmd + "'ctl*' service.status haproxy",
275 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
276 'retry': {'count': 3, 'delay': 5},
277 'skip_fail': False,
278 },
279
280
281 {
282 'description': "Install memcached on all controllers",
283 'cmd': salt_cmd + "'ctl*' state.sls memcached",
284 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
285 'retry': {'count': 3, 'delay': 5},
286 'skip_fail': False,
287 },
288
289
290 # Install OpenStack control services
291
292
293 {
294 'description': "Install keystone on primary controller",
295 'cmd': salt_cmd + "'ctl01*' state.sls keystone",
Dennis Dmitriev0ebe9f32016-10-25 11:01:44 +0300296 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300297 'retry': {'count': 3, 'delay': 5},
Dennis Dmitriev423a7ff2016-10-21 18:31:36 +0300298 'skip_fail': False,
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300299 },
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300300 {
Dennis Dmitriev23e5d192016-10-31 11:27:10 +0200301 'description': "Install keystone on all controllers",
302 'cmd': salt_cmd + "'ctl*' state.sls keystone -b 1",
303 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300304 'retry': {'count': 3, 'delay': 5},
Dennis Dmitriev423a7ff2016-10-21 18:31:36 +0300305 'skip_fail': False,
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300306 },
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300307 {
Dennis Dmitriev23e5d192016-10-31 11:27:10 +0200308 'description': "Populate keystone services/tenants/admins",
Dennis Dmitriev3bf410e2016-10-26 20:22:04 +0300309 'cmd': salt_call_cmd + "state.sls keystone.client",
310 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
311 'retry': {'count': 3, 'delay': 5},
312 'skip_fail': False,
313 },
314 {
Dennis Dmitriev23e5d192016-10-31 11:27:10 +0200315 'description': "Check keystone service-list",
316 'cmd': salt_cmd + "'ctl01*' cmd.run '. /root/keystonerc; keystone service-list'",
317 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300318 'retry': {'count': 3, 'delay': 5},
Dennis Dmitriev423a7ff2016-10-21 18:31:36 +0300319 'skip_fail': False,
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300320 },
Dennis Dmitriev23e5d192016-10-31 11:27:10 +0200321
322
323
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300324 {
Dennis Dmitriev23e5d192016-10-31 11:27:10 +0200325 'description': "Install glance on primary controller",
326 'cmd': salt_cmd + "'ctl01*' state.sls glance",
Dennis Dmitriev0ebe9f32016-10-25 11:01:44 +0300327 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300328 'retry': {'count': 3, 'delay': 5},
Dennis Dmitriev423a7ff2016-10-21 18:31:36 +0300329 'skip_fail': False,
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300330 },
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300331 {
Dennis Dmitriev23e5d192016-10-31 11:27:10 +0200332 'description': "Install glance on all controllers",
333 'cmd': salt_cmd + "'ctl*' state.sls glance -b 1",
334 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
335 'retry': {'count': 3, 'delay': 5},
336 'skip_fail': False,
337 },
338 {
339 'description': "Configure glusterfs.client on all controllers",
Dennis Dmitriev0ebe9f32016-10-25 11:01:44 +0300340 'cmd': salt_cmd + "'ctl*' state.sls glusterfs.client",
341 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300342 'retry': {'count': 3, 'delay': 5},
Dennis Dmitriev423a7ff2016-10-21 18:31:36 +0300343 'skip_fail': False,
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300344 },
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300345 {
Dennis Dmitriev23e5d192016-10-31 11:27:10 +0200346 'description': "Configure(re-install) keystone on all controllers",
347 'cmd': salt_cmd + "'ctl*' state.sls keystone -b 1",
Dennis Dmitriev0ebe9f32016-10-25 11:01:44 +0300348 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300349 'retry': {'count': 3, 'delay': 5},
Dennis Dmitriev423a7ff2016-10-21 18:31:36 +0300350 'skip_fail': False,
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300351 },
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300352 {
Dennis Dmitriev23e5d192016-10-31 11:27:10 +0200353 'description': "Check glance image-list",
354 'cmd': salt_cmd + "'ctl01*' cmd.run '. /root/keystonerc; glance image-list'",
355 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
Dennis Dmitriev0ebe9f32016-10-25 11:01:44 +0300356 'retry': {'count': 3, 'delay': 5},
357 'skip_fail': False,
358 },
Dennis Dmitriev23e5d192016-10-31 11:27:10 +0200359
360
361
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300362 {
Dennis Dmitriev23e5d192016-10-31 11:27:10 +0200363 'description': "Install cinder on all controllers",
364 'cmd': salt_cmd + "'ctl*' state.sls cinder -b 1",
Dennis Dmitriev0ebe9f32016-10-25 11:01:44 +0300365 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300366 'retry': {'count': 3, 'delay': 5},
Dennis Dmitriev423a7ff2016-10-21 18:31:36 +0300367 'skip_fail': False,
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300368 },
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300369 {
Dennis Dmitriev23e5d192016-10-31 11:27:10 +0200370 'description': "Check cinder list",
371 'cmd': salt_cmd + "'ctl01*' cmd.run '. /root/keystonerc; cinder list'",
372 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
373 'retry': {'count': 3, 'delay': 5},
374 'skip_fail': False,
375 },
376
377
378 {
379 'description': "Install nova on ctl01",
380 'cmd': salt_cmd + "'ctl01*' state.sls nova",
Dennis Dmitriev0ebe9f32016-10-25 11:01:44 +0300381 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300382 'retry': {'count': 3, 'delay': 5},
Dennis Dmitriev423a7ff2016-10-21 18:31:36 +0300383 'skip_fail': False,
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300384 },
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300385 {
Dennis Dmitriev23e5d192016-10-31 11:27:10 +0200386 'description': "Install nova on all controllers",
Dennis Dmitriev3bf410e2016-10-26 20:22:04 +0300387 'cmd': salt_cmd + "'ctl*' state.sls nova",
Dennis Dmitriev0ebe9f32016-10-25 11:01:44 +0300388 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300389 'retry': {'count': 3, 'delay': 5},
Dennis Dmitriev423a7ff2016-10-21 18:31:36 +0300390 'skip_fail': False,
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300391 },
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300392 {
Dennis Dmitriev23e5d192016-10-31 11:27:10 +0200393 'description': "Check nova service-list",
394 'cmd': salt_cmd + "'ctl01*' cmd.run '. /root/keystonerc; nova service-list'",
395 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
396 'retry': {'count': 3, 'delay': 5},
397 'skip_fail': False,
398 },
399
400
401 {
402 'description': "Install neutron on ctl01",
403 'cmd': salt_cmd + "'ctl01*' state.sls neutron",
404 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300405 'retry': {'count': 3, 'delay': 5},
Dennis Dmitriev423a7ff2016-10-21 18:31:36 +0300406 'skip_fail': False,
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300407 },
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300408 {
Dennis Dmitriev23e5d192016-10-31 11:27:10 +0200409 'description': "Install neutron on all controllers",
Dennis Dmitriev0ebe9f32016-10-25 11:01:44 +0300410 'cmd': salt_cmd + "'ctl*' state.sls neutron",
411 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300412 'retry': {'count': 3, 'delay': 5},
Dennis Dmitriev423a7ff2016-10-21 18:31:36 +0300413 'skip_fail': False,
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300414 },
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300415 {
Dennis Dmitriev23e5d192016-10-31 11:27:10 +0200416 'description': "Check neutron agent-list",
417 'cmd': salt_cmd + "'ctl01*' cmd.run '. /root/keystonerc; neutron agent-list'",
418 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300419 'retry': {'count': 3, 'delay': 5},
Dennis Dmitriev423a7ff2016-10-21 18:31:36 +0300420 'skip_fail': False,
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300421 },
Dennis Dmitriev23e5d192016-10-31 11:27:10 +0200422
423
424 {
425 'description': "Deploy dashboard on prx*",
426 'cmd': salt_cmd + "'prx*' state.apply",
427 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
428 'retry': {'count': 3, 'delay': 5},
429 'skip_fail': True,
430 },
431
432
433 {
434 'description': "Deploy nginx proxy",
435 'cmd': salt_cmd + "'cfg*' state.sls nginx",
436 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
437 'retry': {'count': 3, 'delay': 5},
438 'skip_fail': True,
439 },
440
441
442
443 # Install contrail on controllers
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300444 {
445 'description': "Install contrail database on controllers",
Dennis Dmitriev23e5d192016-10-31 11:27:10 +0200446 'cmd': salt_cmd + "'ctl*' state.sls opencontrail.database -b 1",
Dennis Dmitriev0ebe9f32016-10-25 11:01:44 +0300447 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
448 'retry': {'count': 3, 'delay': 5},
449 'skip_fail': False,
450 },
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300451 {
452 'description': "Check cassandra status on ctl01",
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300453 'cmd': ("nodetool status;"
454 "nodetool compactionstats;"
455 "nodetool describecluster;"),
Dennis Dmitriev0ebe9f32016-10-25 11:01:44 +0300456 'node_name': 'ctl01.mk22-lab-advanced.local', # hardcoded for now
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300457 'retry': {'count': 3, 'delay': 5},
Dennis Dmitriev423a7ff2016-10-21 18:31:36 +0300458 'skip_fail': False,
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300459 },
Dennis Dmitriev23e5d192016-10-31 11:27:10 +0200460 {
461 'description': "Install contrail database on controllers",
462 'cmd': salt_cmd + "'ctl*' state.sls opencontrail -b 1",
463 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
464 'retry': {'count': 3, 'delay': 5},
465 'skip_fail': False,
466 },
467 {
468 'description': "Check contrail status",
469 'cmd': (salt_cmd + "'ctl01*' cmd.run '. /root/keystonerc;"
470 " contrail-status; neutron net-list; nova net-list'"),
471 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
472 'retry': {'count': 3, 'delay': 5},
473 'skip_fail': False,
474 },
475 {
476 'description': "Add contrail bgp router on ctl01",
477 'cmd': (salt_cmd + "'ctl01*' cmd.run "
478 "'/usr/share/contrail-utils/provision_control.py"
479 " --oper add"
480 " --api_server_ip 172.16.10.254"
481 " --api_server_port 8082"
482 " --host_name ctl01"
483 " --host_ip 172.16.10.101"
484 " --router_asn 64512"
485 " --admin_user admin"
486 " --admin_password workshop"
487 " --admin_tenant_name admin"
488 "'"),
489 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
490 'retry': {'count': 3, 'delay': 5},
491 'skip_fail': False,
492 },
493 {
494 'description': "Add contrail bgp router on ctl02",
495 'cmd': (salt_cmd + "'ctl02*' cmd.run "
496 "'/usr/share/contrail-utils/provision_control.py"
497 " --oper add"
498 " --api_server_ip 172.16.10.254"
499 " --api_server_port 8082"
500 " --host_name ctl02"
501 " --host_ip 172.16.10.102"
502 " --router_asn 64512"
503 " --admin_user admin"
504 " --admin_password workshop"
505 " --admin_tenant_name admin"
506 "'"),
507 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
508 'retry': {'count': 3, 'delay': 5},
509 'skip_fail': False,
510 },
511 {
512 'description': "Add contrail bgp router on ctl03",
513 'cmd': (salt_cmd + "'ctl03*' cmd.run "
514 "'/usr/share/contrail-utils/provision_control.py"
515 " --oper add"
516 " --api_server_ip 172.16.10.254"
517 " --api_server_port 8082"
518 " --host_name ctl03"
519 " --host_ip 172.16.10.103"
520 " --router_asn 64512"
521 " --admin_user admin"
522 " --admin_password workshop"
523 " --admin_tenant_name admin"
524 "'"),
525 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
526 'retry': {'count': 3, 'delay': 5},
527 'skip_fail': False,
528 },
529
530
531 # Install compute node
532 {
533 'description': "Apply formulas for compute node",
534 'cmd': salt_cmd + "'cmp*' state.apply",
535 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
536 'retry': {'count': 3, 'delay': 5},
537 'skip_fail': False,
538 },
539 {
540 'description': "Re-apply(as in doc) formulas for compute node",
541 'cmd': salt_cmd + "'cmp*' state.apply",
542 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
543 'retry': {'count': 3, 'delay': 5},
544 'skip_fail': False,
545 },
546 {
547 'description': "Add vrouter for cmp01",
548 'cmd': (salt_cmd + "'ctl01*' cmd.run "
549 "'/usr/share/contrail-utils/provision_vrouter.py"
550 " --oper add"
551 " --host_name cmp01"
552 " --host_ip 172.16.10.105"
553 " --api_server_ip 172.16.10.254"
554 " --api_server_port 8082"
555 " --admin_user admin"
556 " --admin_password workshop"
557 " --admin_tenant_name admin"
558 "'"),
559 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
560 'retry': {'count': 3, 'delay': 5},
561 'skip_fail': False,
562 },
563 {
564 'description': "Reboot compute nodes",
565 'cmd': salt_cmd + "'cmp*' system.reboot",
566 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
567 'retry': {'count': 3, 'delay': 5},
568 'skip_fail': False,
569 },
570 {
571 'description': "Check IP on computes",
572 'cmd': salt_cmd + "'cmp*' cmd.run 'ip a'",
573 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
574 'retry': {'count': 3, 'delay': 5},
575 'skip_fail': False,
576 },
577 {
578 'description': "Check contrail status on computes",
579 'cmd': salt_cmd + "'cmp*' cmd.run 'contrail-status'",
580 'node_name': 'cfg01.mk22-lab-advanced.local', # hardcoded for now
581 'retry': {'count': 3, 'delay': 5},
582 'skip_fail': False,
583 },
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300584 ]
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300585
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300586
Dennis Dmitriev23e5d192016-10-31 11:27:10 +0200587 @pytest.mark.steps(steps_mk22_advanced_lab)
Dennis Dmitriev6f59add2016-10-18 13:45:27 +0300588 @pytest.mark.revert_snapshot(ext.SNAPSHOT.underlay)
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300589 # @pytest.mark.snapshot_needed
590 # @pytest.mark.fail_snapshot
591 def test_tcp_install_default(self, underlay, tcp_actions, steps, show_step):
Dennis Dmitriev6f59add2016-10-18 13:45:27 +0300592 """Test for deploying an tcp environment and check it
593
Dennis Dmitriev6f59add2016-10-18 13:45:27 +0300594 Scenario:
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300595 1. Prepare salt on hosts
596 2. Setup controller nodes
597 3. Setup compute nodes
Dennis Dmitriev6f59add2016-10-18 13:45:27 +0300598
Dennis Dmitriev75fce1b2016-10-18 15:04:28 +0300599 """
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300600 for n, step in enumerate(steps):
601 LOG.info(" ####################################################")
602 LOG.info(" *** [ STEP #{0} ] {1} ***"
603 .format(n+1, step['description']))
604
605 with underlay.remote(node_name=step['node_name']) as remote:
606 for x in range(step['retry']['count'], 0, -1):
Dennis Dmitriev3bf410e2016-10-26 20:22:04 +0300607 time.sleep(3)
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300608 result = remote.execute(step['cmd'], verbose=True)
Dennis Dmitriev0ebe9f32016-10-25 11:01:44 +0300609
610 # Workaround of exit code 0 from salt in case of failures
611 failed = 0
612 for s in result['stdout']:
613 if s.startswith("Failed:"):
614 failed += int(s.split("Failed:")[1])
615
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300616 if result.exit_code != 0:
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300617 time.sleep(step['retry']['delay'])
618 LOG.info(" === RETRY ({0}/{1}) ========================="
619 .format(x-1, step['retry']['count']))
Dennis Dmitriev0ebe9f32016-10-25 11:01:44 +0300620 elif failed != 0:
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300621 LOG.error(" === SALT returned exit code = 0 while "
622 "there are failed modules! ===")
623 LOG.info(" === RETRY ({0}/{1}) ======================="
624 .format(x-1, step['retry']['count']))
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300625 else:
Dennis Dmitriev423a7ff2016-10-21 18:31:36 +0300626 # Workarounds for crashed services
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300627 tcp_actions.check_salt_service(
628 "salt-master",
629 "cfg01.mk22-lab-advanced.local",
Dennis Dmitriev3bf410e2016-10-26 20:22:04 +0300630 "salt-call pillar.items",
631 'active (running)') # Hardcoded for now
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300632 tcp_actions.check_salt_service(
633 "salt-minion",
634 "cfg01.mk22-lab-advanced.local",
Dennis Dmitriev3bf410e2016-10-26 20:22:04 +0300635 "salt 'cfg01*' pillar.items",
636 "active (running)") # Hardcoded for now
Dennis Dmitriev474e3f72016-10-21 16:46:09 +0300637 break
Dennis Dmitriev423a7ff2016-10-21 18:31:36 +0300638
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300639 if x == 1 and step['skip_fail'] == False:
Dennis Dmitriev423a7ff2016-10-21 18:31:36 +0300640 # In the last retry iteration, raise an exception
Dennis Dmitriev4be178c2016-10-25 13:17:46 +0300641 raise Exception("Step '{0}' failed"
642 .format(step['description']))