blob: 95f2a42b609e99b9d6077bf2c39267a84a8a5270 [file] [log] [blame]
Tatyana Leontovichbb6d1a72017-05-17 14:10:38 +03001{% from 'virtual-mcp11-k8s-contrail/underlay.yaml' import HOSTNAME_CFG01 with context %}
2{% from 'virtual-mcp11-k8s-contrail/underlay.yaml' import REPOSITORY_SUITE with context %}
3
4{% set SALT_MODELS_REPOSITORY = os_env('SALT_MODELS_REPOSITORY','https://gerrit.mcp.mirantis.net/salt-models/mcp-virtual-lab') %}
5{% set SALT_MODELS_COMMIT = os_env('SALT_MODELS_COMMIT','master') %}
6
7# Address pools for reclass cluster model are taken in the following order:
8# 1. environment variables,
9# 2. config.underlay.address_pools based on fuel-devops address pools
10# (see generated '.ini' file after underlay is created),
11# 3. defaults
12{% set address_pools = config.underlay.address_pools %}
13{% set IPV4_NET_ADMIN = os_env('IPV4_NET_ADMIN', address_pools.get('admin-pool01', '192.168.10.0/24')) %}
14{% set IPV4_NET_CONTROL = os_env('IPV4_NET_CONTROL', address_pools.get('private-pool01', '172.16.10.0/24')) %}
15
16{% set IPV4_NET_ADMIN_PREFIX = '.'.join(IPV4_NET_ADMIN.split('.')[0:3]) %}
17{% set IPV4_NET_CONTROL_PREFIX = '.'.join(IPV4_NET_CONTROL.split('.')[0:3]) %}
18
Sergii Golovatiukc504a392017-05-22 21:41:06 +020019- description: Configure repository on the cfg01 node
20 cmd:
21 echo "172.18.248.114 jenkins.mcp.mirantis.net gerrit.mcp.mirantis.net" >> /etc/hosts;
22 echo "185.135.196.10 apt-mk.mirantis.com" >> /etc/hosts;
23 echo "nameserver 172.18.208.44" >> /etc/resolv.conf;
24 echo "nameserver 8.8.8.8" >> /etc/resolv.conf;
25 which wget >/dev/null || (apt-get update; apt-get install -y wget);
26 echo "deb [arch=amd64] http://apt-mk.mirantis.com/xenial nightly salt extra" > /etc/apt/sources.list.d/mcp_salt.list;
27 wget -O - http://apt-mk.mirantis.com/public.gpg | apt-key add -;
28 echo "deb http://repo.saltstack.com/apt/ubuntu/16.04/amd64/2016.3 xenial main" > /etc/apt/sources.list.d/saltstack.list;
29 wget -O - https://repo.saltstack.com/apt/ubuntu/16.04/amd64/2016.3/SALTSTACK-GPG-KEY.pub | apt-key add -;
30 node_name: {{ HOSTNAME_CFG01 }}
31 retry: {count: 1, delay: 1}
32 skip_fail: false
33
34- description: Update packages on cfg01
35 cmd: apt-get clean; apt-get update
36 node_name: {{ HOSTNAME_CFG01 }}
37 retry: {count: 1, delay: 1}
38 skip_fail: false
39
Tatyana Leontovichbb6d1a72017-05-17 14:10:38 +030040- description: Installing salt master on cfg01
41 cmd: eatmydata apt-get install -y reclass git salt-master
42 node_name: {{ HOSTNAME_CFG01 }}
43 retry: {count: 1, delay: 1}
44 skip_fail: false
45
Sergii Golovatiukc504a392017-05-22 21:41:06 +020046- description: Install common packages on cfg01
47 cmd: apt-get install -y python-pip wget curl tmux byobu iputils-ping traceroute htop tree
48 node_name: {{ HOSTNAME_CFG01 }}
49 retry: {count: 1, delay: 1}
50 skip_fail: false
Tatyana Leontovichbb6d1a72017-05-17 14:10:38 +030051
52- description: Configure salt-master on cfg01
53 cmd: |
54 cat << 'EOF' >> /etc/salt/master.d/master.conf
55 file_roots:
56 base:
57 - /usr/share/salt-formulas/env
58 pillar_opts: False
59 open_mode: True
60 reclass: &reclass
61 storage_type: yaml_fs
62 inventory_base_uri: /srv/salt/reclass
63 ext_pillar:
64 - reclass: *reclass
65 master_tops:
66 reclass: *reclass
67 EOF
68 node_name: {{ HOSTNAME_CFG01 }}
69 retry: {count: 1, delay: 1}
70 skip_fail: false
71
72- description: Configure GIT settings and certificates
73 cmd: touch /root/.git_trusted_certs.pem;
74 for server in git.tcpcloud.eu github.com; do
75 openssl s_client -showcerts -connect $server:443 </dev/null
76 | openssl x509 -outform PEM
77 >> /root/.git_trusted_certs.pem;
78 done;
79 HOME=/root git config --global http.sslCAInfo /root/.git_trusted_certs.pem;
80 HOME=/root git config --global user.email "tcp-qa@example.com";
81 HOME=/root git config --global user.name "TCP QA";
82 node_name: {{ HOSTNAME_CFG01 }}
83 retry: {count: 1, delay: 1}
84 skip_fail: false
85
86
87- description: Clone reclass models with submodules
88 cmd: |
89 ssh-keyscan -H github.com >> ~/.ssh/known_hosts;
90 git clone -b {{ SALT_MODELS_COMMIT }} --recurse-submodules {{ SALT_MODELS_REPOSITORY }} /srv/salt/reclass;
Tatyana Leontovichbb6d1a72017-05-17 14:10:38 +030091 mkdir -p /srv/salt/reclass/classes/service;
Sergii Golovatiukc504a392017-05-22 21:41:06 +020092 node_name: {{ HOSTNAME_CFG01 }}
93 retry: {count: 1, delay: 1}
94 skip_fail: false
Tatyana Leontovichbb6d1a72017-05-17 14:10:38 +030095
96 # Replace firstly to an intermediate value to avoid intersection between
97 # already replaced and replacing networks.
98 # For example, if generated IPV4_NET_ADMIN_PREFIX=10.16.0 , then there is a risk of replacing twice:
99 # 192.168.10 -> 10.16.0 (generated network for admin)
100 # 10.16.0 -> <external network>
101 # So let's replace constant networks to the keywords, and then keywords to the desired networks.
Sergii Golovatiukc504a392017-05-22 21:41:06 +0200102- description: Fix model
103 cmd: |
Tatyana Leontovichbb6d1a72017-05-17 14:10:38 +0300104 find /srv/salt/reclass/ -type f -exec sed -i 's/192\.168\.10\./==IPV4_NET_ADMIN_PREFIX==/g' {} +
105 find /srv/salt/reclass/ -type f -exec sed -i 's/172\.16\.10\./==IPV4_NET_CONTROL_PREFIX==/g' {} +
Tatyana Leontovichbb6d1a72017-05-17 14:10:38 +0300106 find /srv/salt/reclass/ -type f -exec sed -i 's/==IPV4_NET_ADMIN_PREFIX==/{{ IPV4_NET_ADMIN_PREFIX }}./g' {} +
107 find /srv/salt/reclass/ -type f -exec sed -i 's/==IPV4_NET_CONTROL_PREFIX==/{{ IPV4_NET_CONTROL_PREFIX }}./g' {} +
Tatyana Leontovichbb6d1a72017-05-17 14:10:38 +0300108 find /srv/salt/reclass/ -type f -exec sed -i 's/apt_mk_version:.*/apt_mk_version: {{ REPOSITORY_SUITE }}/g' {} +
109
110 # Disable checkouting the model from remote repository
111 cat << 'EOF' >> /srv/salt/reclass/nodes/{{ HOSTNAME_CFG01 }}.yml
112 # local storage
113 reclass:
114 storage:
115 data_source:
116 engine: local
117 EOF
118
119 # Show the changes to the console
120 cd /srv/salt/reclass/; git diff
121 node_name: {{ HOSTNAME_CFG01 }}
122 retry: {count: 1, delay: 1}
123 skip_fail: false
124
125- description: Configure reclass
126 cmd: |
127 FORMULA_PATH=${FORMULA_PATH:-/usr/share/salt-formulas};
Tatyana Leontovicheed70d72017-05-25 16:32:17 +0300128 FORMULA_REPOSITORY=${FORMULA_REPOSITORY:-deb [arch=amd64] http://apt-mk.mirantis.com/xenial {{ REPOSITORY_SUITE }} salt};
Tatyana Leontovichbb6d1a72017-05-17 14:10:38 +0300129 FORMULA_GPG=${FORMULA_GPG:-http://apt-mk.mirantis.com/public.gpg};
130 which wget > /dev/null || (apt-get update; apt-get install -y wget);
131 echo "${FORMULA_REPOSITORY}" > /etc/apt/sources.list.d/mcp_salt.list;
132 wget -O - "${FORMULA_GPG}" | apt-key add -;
133 apt-get clean; apt-get update;
134 [ ! -d /srv/salt/reclass/classes/service ] && mkdir -p /srv/salt/reclass/classes/service;
Tatyana Leontovicheed70d72017-05-25 16:32:17 +0300135 declare -a formula_services=("linux" "reclass" "salt" "openssh" "ntp" "git" "nginx" "collectd" "sensu" "heka" "sphinx" "keystone" "mysql" "grafana" "haproxy" "rsyslog" "horizon" "prometheus" "telegraf");
Tatyana Leontovichbb6d1a72017-05-17 14:10:38 +0300136 echo -e "\nInstalling all required salt formulas\n";
137 eatmydata apt-get install -y "${formula_services[@]/#/salt-formula-}";
138 for formula_service in "${formula_services[@]}"; do
139 echo -e "\nLink service metadata for formula ${formula_service} ...\n";
140 [ ! -L "/srv/salt/reclass/classes/service/${formula_service}" ] && ln -s ${FORMULA_PATH}/reclass/service/${formula_service} /srv/salt/reclass/classes/service/${formula_service};
141 done;
142 [ ! -d /srv/salt/env ] && mkdir -p /srv/salt/env;
143 [ ! -L /srv/salt/env/prd ] && ln -s ${FORMULA_PATH}/env /srv/salt/env/prd;
144 [ ! -d /etc/reclass ] && mkdir /etc/reclass;
145
146 cat << 'EOF' >> /etc/reclass/reclass-config.yml
147 storage_type: yaml_fs
148 pretty_print: True
149 output: yaml
150 inventory_base_uri: /srv/salt/reclass
151 EOF
152 node_name: {{ HOSTNAME_CFG01 }}
153 retry: {count: 1, delay: 1}
154 skip_fail: false
155
156- description: Restart salt-master service
157 cmd: |
158 systemctl restart salt-master;
159 node_name: {{ HOSTNAME_CFG01 }}
160 retry: {count: 1, delay: 5}
161 skip_fail: false
162
163{% for ssh in config.underlay.ssh %}
164- description: Configure salt-minion on {{ ssh['node_name'] }}
165 cmd: |
166 [ ! -d /etc/salt/minion.d ] && mkdir -p /etc/salt/minion.d;
167 cat << "EOF" >> /etc/salt/minion.d/minion.conf
168 id: {{ ssh['node_name'] }}
169 master: {{ config.salt.salt_master_host }}
170 EOF
171 eatmydata apt-get install -y salt-minion;
172 echo "Check for system info and metadata availability ...";
173 salt-call --no-color grains.items;
174 salt-call --no-color pillar.items;
175 node_name: {{ ssh['node_name'] }}
176 retry: {count: 1, delay: 1}
177 skip_fail: false
178{% endfor %}
179
180
181- description: Accept salt keys from all the nodes
182 cmd: salt-key -A -y
183 node_name: {{ HOSTNAME_CFG01 }}
184 retry: {count: 1, delay: 5}
185 skip_fail: true
186
187
188- description: Configure salt adoptors on cfg01
189 cmd: |
190 ln -s /usr/lib/python2.7/dist-packages/reclass/adapters/salt.py /usr/local/sbin/reclass-salt;
191 chmod +x /usr/lib/python2.7/dist-packages/reclass/adapters/salt.py
192 node_name: {{ HOSTNAME_CFG01 }}
193 retry: {count: 1, delay: 1}
194 skip_fail: false
195
196
197# Prepare salt services and nodes settings
198- description: Run 'linux' formula on cfg01
199 cmd: salt --hard-crash --state-output=mixed --state-verbose=False
200 -C 'I@salt:master' state.sls linux;
201 node_name: {{ HOSTNAME_CFG01 }}
202 retry: {count: 1, delay: 5}
203 skip_fail: false
204
205
206- description: Run 'openssh' formula on cfg01
207 cmd: salt --hard-crash --state-output=mixed --state-verbose=False
208 -C 'I@salt:master' state.sls openssh;
209 salt --hard-crash --state-output=mixed --state-verbose=False
210 -C 'I@salt:master' cmd.run "sed -i 's/PasswordAuthentication no/PasswordAuthentication
211 yes/' /etc/ssh/sshd_config && service ssh restart";
212 node_name: {{ HOSTNAME_CFG01 }}
213 retry: {count: 3, delay: 5}
214 skip_fail: false
215
216
217- description: '*Workaround* of the bug https://mirantis.jira.com/browse/PROD-7962'
218 cmd: salt --hard-crash --state-output=mixed --state-verbose=False
219 '*' cmd.run "echo ' StrictHostKeyChecking no' >> /root/.ssh/config"
220 node_name: {{ HOSTNAME_CFG01 }}
221 retry: {count: 1, delay: 1}
222 skip_fail: false
223
224- description: Run 'salt.master' formula on cfg01
225 cmd: timeout 120 salt --hard-crash --state-output=mixed --state-verbose=False
226 -C 'I@salt:master' state.sls salt.master.service;
227 node_name: {{ HOSTNAME_CFG01 }}
228 retry: {count: 2, delay: 5}
229 skip_fail: false
230
231- description: Run 'salt' formula on cfg01 with workaround proposed in PROD-10894
232 cmd: salt --hard-crash --state-output=mixed --state-verbose=False
233 -C 'I@salt:master' state.sls salt;
234 salt --hard-crash --state-output=mixed --state-verbose=False
235 -C 'I@salt:master' saltutil.sync_all
236 node_name: {{ HOSTNAME_CFG01 }}
237 retry: {count: 5, delay: 5}
238 skip_fail: false
239
240- description: Generate inventory for all the nodes to the /srv/salt/reclass/nodes/_generated
241 cmd: salt --hard-crash --state-output=mixed --state-verbose=False
242 -C 'I@salt:master' state.sls reclass
243 node_name: {{ HOSTNAME_CFG01 }}
244 retry: {count: 1, delay: 5}
245 skip_fail: false
246
247- description: Refresh pillars on all minions
248 cmd: salt --hard-crash --state-output=mixed --state-verbose=False '*' saltutil.refresh_pillar
249 node_name: {{ HOSTNAME_CFG01 }}
250 retry: {count: 1, delay: 5}
251 skip_fail: false
252
253- description: Sync all salt resources
254 cmd: salt --hard-crash --state-output=mixed --state-verbose=False '*' saltutil.sync_all
255 node_name: {{ HOSTNAME_CFG01 }}
256 retry: {count: 1, delay: 5}
257 skip_fail: false
258
259- description: Show reclass-salt --top
260 cmd: reclass-salt --top
261 node_name: {{ HOSTNAME_CFG01 }}
262 retry: {count: 1, delay: 5}
263 skip_fail: false
264
265- description: Execute salt.minion.cert
266 cmd: salt-call --no-color state.sls salt.minion.cert -l info;
267 node_name: {{ HOSTNAME_CFG01 }}
268 retry: {count: 1, delay: 5}
269 skip_fail: false
270
271# Bootstrap all nodes
272
273- description: Configure linux on controllers
274 cmd: salt --hard-crash --state-output=mixed --state-verbose=False 'ctl*' state.sls
275 linux
276 node_name: {{ HOSTNAME_CFG01 }}
277 retry: {count: 1, delay: 5}
278 skip_fail: false
279
280- description: Configure linux on cmp
281 cmd: salt --hard-crash --state-output=mixed --state-verbose=False 'cmp*' state.sls
282 linux
283 node_name: {{ HOSTNAME_CFG01 }}
284 retry: {count: 3, delay: 20}
285 skip_fail: false
286
287- description: Configure openssh on all nodes
288 cmd: salt --hard-crash --state-output=mixed --state-verbose=False -C '* and not
289 cfg*' state.sls openssh;salt --hard-crash --state-output=mixed --state-verbose=False
290 -C '* and not cfg*' cmd.run "sed -i 's/PasswordAuthentication no/PasswordAuthentication
291 yes/' /etc/ssh/sshd_config && service ssh restart"
292 node_name: {{ HOSTNAME_CFG01 }}
293 retry: {count: 1, delay: 5}
294 skip_fail: false
295
296- description: Configure salt.minion on ctl
297 cmd: salt --hard-crash --state-output=mixed --state-verbose=False 'ctl*' state.sls salt.minion
298 node_name: {{ HOSTNAME_CFG01 }}
299 retry: {count: 3, delay: 5}
300 skip_fail: false
301
302- description: Configure salt.minion on cmp
303 cmd: salt --hard-crash --state-output=mixed --state-verbose=False 'cmp*' state.sls salt.minion
304 node_name: {{ HOSTNAME_CFG01 }}
305 retry: {count: 3, delay: 5}
306 skip_fail: false
307
308- description: Check salt minion versions on slaves
309 cmd: salt '*' test.version
310 node_name: {{ HOSTNAME_CFG01 }}
311 retry: {count: 1, delay: 5}
312 skip_fail: false
313
314- description: Check salt top states on nodes
315 cmd: salt '*' state.show_top
316 node_name: {{ HOSTNAME_CFG01 }}
317 retry: {count: 1, delay: 5}
318 skip_fail: false
319
320- description: Configure ntp and rsyslog on nodes
321 cmd: salt --hard-crash --state-output=mixed --state-verbose=False '*' state.sls ntp,rsyslog
322 node_name: {{ HOSTNAME_CFG01 }}
323 retry: {count: 1, delay: 10}
324 skip_fail: false