blob: a14d8477b65f4afe4f62b6348125df3d80ed79fd [file] [log] [blame]
Filip Pytlounb4b80592015-10-06 16:28:32 +02001
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +03002=====
3Usage
4=====
Filip Pytlounb4b80592015-10-06 16:28:32 +02005
Ales Komarek54740682017-05-15 07:16:23 +02006Salt is a new approach to infrastructure management. Easy enough to get
7running in minutes, scalable enough to manage tens of thousands of servers,
8and fast enough to communicate with them in seconds.
Filip Pytlounb4b80592015-10-06 16:28:32 +02009
Ales Komarek54740682017-05-15 07:16:23 +020010Salt delivers a dynamic communication bus for infrastructures that can be used
11for orchestration, remote execution, configuration management and much more.
Filip Pytlounb4b80592015-10-06 16:28:32 +020012
Ales Komarek54740682017-05-15 07:16:23 +020013Sample Metadata
14===============
15
Ales Komarekd768f1c2018-01-30 22:37:18 +010016Salt Master
Filip Pytlounb4b80592015-10-06 16:28:32 +020017-----------
18
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +030019Salt master with base formulas and pillar metadata back end:
Filip Pytlounb4b80592015-10-06 16:28:32 +020020
Ales Komarek8ba9c0b2016-02-21 14:59:59 +010021.. literalinclude:: tests/pillar/master_single_pillar.sls
22 :language: yaml
Filip Pytlounb4b80592015-10-06 16:28:32 +020023
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +030024Salt master with reclass ENC metadata back end:
Filip Pytlounb4b80592015-10-06 16:28:32 +020025
Ales Komarek8ba9c0b2016-02-21 14:59:59 +010026.. literalinclude:: tests/pillar/master_single_reclass.sls
27 :language: yaml
Filip Pytlounb4b80592015-10-06 16:28:32 +020028
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +030029Salt master with Architect ENC metadata back end:
Ales Komarek459407b2018-01-18 17:16:31 +010030
31.. code-block:: yaml
32
33 salt:
34 master:
35 enabled: true
36 pillar:
37 engine: architect
38 project: project-name
39 host: architect-api
40 port: 8181
41 username: salt
42 password: password
43
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +030044Salt master with multiple ``ext_pillars``:
Petr Michalec1f541c42017-08-17 13:30:37 +020045
Dzmitry Stremkouski7b15d8a2018-08-11 22:02:45 +020046.. code-block:: yaml
47
48 salt:
49 master:
50 enabled: true
51 pillar:
52 engine: salt
53 source:
54 engine: local
55 ext_pillars:
56 1:
57 module: cmd_json
58 params: '"echo {\"arg\": \"val\"}"'
59 2:
60 module: cmd_yaml
61 params: /usr/local/bin/get_yml.sh
Petr Michalec1f541c42017-08-17 13:30:37 +020062
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +030063Salt master with API:
Filip Pytlounb4b80592015-10-06 16:28:32 +020064
Ales Komarekb2c8ff62016-08-22 00:20:01 +020065.. literalinclude:: tests/pillar/master_api.sls
66 :language: yaml
Ales Komarekcdb280f2016-07-27 15:37:51 +020067
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +030068Salt master with defined user ACLs:
Ales Komarekcdb280f2016-07-27 15:37:51 +020069
Ales Komarekb2c8ff62016-08-22 00:20:01 +020070.. literalinclude:: tests/pillar/master_acl.sls
71 :language: yaml
Filip Pytlounb4b80592015-10-06 16:28:32 +020072
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +030073Salt master with preset minions:
Filip Pytlounb4b80592015-10-06 16:28:32 +020074
75.. code-block:: yaml
76
77 salt:
78 master:
79 enabled: true
Filip Pytlounb4b80592015-10-06 16:28:32 +020080 minions:
81 - name: 'node1.system.location.domain.com'
82
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +030083Salt master with pip based installation (optional):
Adam Tenglercaedd972016-05-04 16:44:00 +020084
85.. code-block:: yaml
86
87 salt:
88 master:
89 enabled: true
90 ...
91 source:
92 engine: pip
93 version: 2016.3.0rc2
94
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +030095Install formula through system package management:
Adam Tengler3eb85ad2016-05-06 02:52:40 +020096
97.. code-block:: yaml
98
99 salt:
100 master:
101 enabled: true
102 ...
103 environment:
104 prd:
Petr Michalec7a2f1d22017-05-17 22:08:32 +0200105 keystone:
Adam Tengler3eb85ad2016-05-06 02:52:40 +0200106 source: pkg
107 name: salt-formula-keystone
Petr Michalec7a2f1d22017-05-17 22:08:32 +0200108 nova:
109 source: pkg
110 name: salt-formula-keystone
111 version: 0.1+0~20160818133412.24~1.gbp6e1ebb
112 postresql:
113 source: pkg
114 name: salt-formula-postgresql
115 version: purged
116
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +0300117Formula keystone is installed latest version and the formulas
118without version are installed in one call to aptpkg module.
119If the version attribute is present sls iterates over formulas
120and take action to install specific version or remove it.
121The version attribute may have these values
122``[latest|purged|removed|<VERSION>]``.
Adam Tengler3eb85ad2016-05-06 02:52:40 +0200123
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +0300124Clone master branch of keystone formula as local feature branch:
Adam Tengler3eb85ad2016-05-06 02:52:40 +0200125
126.. code-block:: yaml
127
128 salt:
129 master:
130 enabled: true
131 ...
132 environment:
133 dev:
134 formula:
135 keystone:
136 source: git
137 address: git@github.com:openstack/salt-formula-keystone.git
138 revision: master
139 branch: feature
140
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +0300141Salt master with specified formula refs (for example, for Gerrit
142review):
Adam Tengler3eb85ad2016-05-06 02:52:40 +0200143
144.. code-block:: yaml
145
146 salt:
147 master:
148 enabled: true
149 ...
150 environment:
151 dev:
152 formula:
153 keystone:
154 source: git
155 address: https://git.openstack.org/openstack/salt-formula-keystone
156 revision: refs/changes/56/123456/1
157
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +0300158Salt master logging configuration:
Oleksii Chupryn7b7102a2018-05-11 10:32:11 +0300159
160.. code-block:: yaml
161
162 salt:
163 master:
164 enabled: true
165 log:
166 level: warning
167 file: '/var/log/salt/master'
168 level_logfile: warning
169
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +0300170Salt minion logging configuration:
Oleksii Chupryn7b7102a2018-05-11 10:32:11 +0300171
172.. code-block:: yaml
173
174 salt:
175 minion:
176 enabled: true
177 log:
178 level: info
179 file: '/var/log/salt/minion'
180 level_logfile: warning
181
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +0300182Salt master with logging handlers:
Filip Pytlounb4b80592015-10-06 16:28:32 +0200183
184.. code-block:: yaml
185
186 salt:
187 master:
188 enabled: true
Ales Komarek8ba9c0b2016-02-21 14:59:59 +0100189 handler:
190 handler01:
191 engine: udp
192 bind:
193 host: 127.0.0.1
194 port: 9999
Filip Pytlounb4b80592015-10-06 16:28:32 +0200195 minion:
Ales Komarek8ba9c0b2016-02-21 14:59:59 +0100196 handler:
197 handler01:
198 engine: udp
199 bind:
200 host: 127.0.0.1
201 port: 9999
202 handler02:
203 engine: zmq
204 bind:
205 host: 127.0.0.1
206 port: 9999
207
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +0300208Salt engine definition for saltgraph metadata collector:
Ales Komareka9fc6e72017-09-06 15:02:40 +0200209
210.. code-block:: yaml
211
212 salt:
213 master:
214 engine:
215 graph_metadata:
216 engine: saltgraph
217 host: 127.0.0.1
218 port: 5432
219 user: salt
220 password: salt
221 database: salt
222
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +0300223Salt engine definition for Architect service:
Ales Komarek459407b2018-01-18 17:16:31 +0100224
225.. code-block:: yaml
226
227 salt:
228 master:
229 engine:
230 architect:
231 engine: architect
232 project: project-name
233 host: architect-api
234 port: 8181
235 username: salt
236 password: password
237
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +0300238Salt engine definition for sending events from docker events:
Ales Komareka9fc6e72017-09-06 15:02:40 +0200239
240.. code-block:: yaml
241
242 salt:
243 master:
244 engine:
245 docker_events:
246 docker_url: unix://var/run/docker.sock
247
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +0300248Salt master peer setup for remote certificate signing:
Jakub Pavlikd4859842016-05-23 10:48:04 +0200249
250.. code-block:: yaml
251
252 salt:
253 master:
254 peer:
255 ".*":
256 - x509.sign_remote_certificate
Filip Pytlounb4b80592015-10-06 16:28:32 +0200257
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +0300258Salt master backup configuration:
Ales Komarekb2ada522017-12-07 11:31:32 +0100259
260.. code-block:: yaml
261
262 salt:
263 master:
264 backup: true
265 initial_data:
266 engine: backupninja
Jiri Broulik3e281642018-03-02 18:17:21 +0100267 home_dir: remote-backup-home-dir
Ales Komarekb2ada522017-12-07 11:31:32 +0100268 source: backup-node-host
269 host: original-salt-master-id
270
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +0300271Configure verbosity of state output (used for :command:`salt`
272command):
Tomáš Kukrál8922aef2017-05-10 10:27:04 +0200273
274.. code-block:: yaml
275
276 salt:
277 master:
Tomáš Kukrál044667b2017-05-11 10:12:15 +0200278 state_output: changes
Tomáš Kukrál8922aef2017-05-10 10:27:04 +0200279
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +0300280Pass pillar render error to minion log:
Ales Komarekd768f1c2018-01-30 22:37:18 +0100281
282.. note:: When set to `False` this option is great for debuging.
283 However it is not recomended for any production environment as it may contain
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +0300284 templating data as passwords, and so on, that minion should not expose.
Ales Komarekd768f1c2018-01-30 22:37:18 +0100285
286.. code-block:: yaml
287
288 salt:
289 master:
290 pillar_safe_render_error: False
291
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +0300292Enable Windows repository support:
Ales Komarekf44e64c2018-05-29 10:22:31 +0200293
294.. code-block:: yaml
295
296 salt:
297 master:
298 win_repo:
299 source: git
300 address: https://github.com/saltstack/salt-winrepo-ng
301 revision: master
302
Ivan Suzdal7e2a2ca2018-08-23 12:31:19 +0400303Configure a gitfs_remotes resource:
304
305.. code-block:: yaml
306
307 salt:
308 master:
309 gitfs_remotes:
310 salt_formula:
Pavel Cizinsky6b67f5f2018-12-12 12:03:18 +0100311 url: https://gerrit.mcp.mirantis.com/salt-formulas/salt.git
Ivan Suzdal7e2a2ca2018-08-23 12:31:19 +0400312 enabled: true
313 params:
314 base: master
315
316Read more about gitfs resource options in the official Salt documentation.
317
318
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +0300319Event/Reactor systems
Ales Komarekd768f1c2018-01-30 22:37:18 +0100320~~~~~~~~~~~~~~~~~~~~~
Petr Michalec1f541c42017-08-17 13:30:37 +0200321
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +0300322Salt to synchronize node pillar and modules after start:
Ales Komarek54740682017-05-15 07:16:23 +0200323
324.. code-block:: yaml
325
326 salt:
327 master:
328 reactor:
329 salt/minion/*/start:
Ales Komareke7844d12017-06-08 12:00:01 +0200330 - salt://salt/reactor/node_start.sls
Ales Komarek54740682017-05-15 07:16:23 +0200331
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +0300332Trigger basic node install:
Ales Komareke7844d12017-06-08 12:00:01 +0200333
334.. code-block:: yaml
335
336 salt:
337 master:
338 reactor:
339 salt/minion/install:
340 - salt://salt/reactor/node_install.sls
341
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +0300342Sample event to trigger the node installation:
Ales Komareke7844d12017-06-08 12:00:01 +0200343
344.. code-block:: bash
345
346 salt-call event.send 'salt/minion/install'
347
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +0300348Run any defined orchestration pipeline:
Ales Komarek5c58de32017-06-06 11:49:32 +0200349
350.. code-block:: yaml
351
352 salt:
353 master:
354 reactor:
355 salt/orchestrate/start:
356 - salt://salt/reactor/orchestrate_start.sls
357
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +0300358Event to trigger the orchestration pipeline:
Ales Komarek5c58de32017-06-06 11:49:32 +0200359
360.. code-block:: bash
361
Ales Komareke7844d12017-06-08 12:00:01 +0200362 salt-call event.send 'salt/orchestrate/start' "{'orchestrate': 'salt/orchestrate/infra_install.sls'}"
Ales Komarek5c58de32017-06-06 11:49:32 +0200363
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +0300364Synchronise modules and pillars on minion start:
Ales Komarek3ed7c432017-08-24 16:15:49 +0200365
366.. code-block:: yaml
367
368 salt:
369 master:
370 reactor:
371 'salt/minion/*/start':
372 - salt://salt/reactor/minion_start.sls
373
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +0300374Add and/or remove the minion key:
Ales Komarek5c58de32017-06-06 11:49:32 +0200375
376.. code-block:: yaml
377
378 salt:
379 master:
380 reactor:
Ales Komarek213fbe02017-08-21 16:39:05 +0200381 salt/key/create:
382 - salt://salt/reactor/key_create.sls
383 salt/key/remove:
384 - salt://salt/reactor/key_remove.sls
Ales Komarek5c58de32017-06-06 11:49:32 +0200385
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +0300386Event to trigger the key creation:
Ales Komarek5c58de32017-06-06 11:49:32 +0200387
388.. code-block:: bash
389
Adam Tengler62188962017-09-04 13:34:44 +0000390 salt-call event.send 'salt/key/create' \
391 > "{'node_id': 'id-of-minion', 'node_host': '172.16.10.100', 'orch_post_create': 'kubernetes.orchestrate.compute_install', 'post_create_pillar': {'node_name': 'id-of-minion'}}"
Ales Komarek5c58de32017-06-06 11:49:32 +0200392
Ales Komarek213fbe02017-08-21 16:39:05 +0200393.. note::
394
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +0300395 You can add pass additional ``orch_pre_create``, ``orch_post_create``,
396 ``orch_pre_remove`` or ``orch_post_remove`` parameters to the event
397 to call extra orchestrate files. This can be useful for example for
Ales Komarek213fbe02017-08-21 16:39:05 +0200398 registering/unregistering nodes from the monitoring alarms or dashboards.
399
400 The key creation event needs to be run from other machine than the one
401 being registered.
402
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +0300403Event to trigger the key removal:
Ales Komarek213fbe02017-08-21 16:39:05 +0200404
405.. code-block:: bash
406
407 salt-call event.send 'salt/key/remove'
Ales Komarek54740682017-05-15 07:16:23 +0200408
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +0300409Control VM provisioning:
Dzmitry Stremkouski7ee23402018-04-10 00:43:48 +0200410
411.. code-block:: yaml
412
Dzmitry Stremkouski97927ee2018-08-23 23:20:38 +0200413 _param:
Dzmitry Stremkouski30c7d2f2019-01-16 23:40:36 +0100414 vcp_links: &vcp_links
415 - type: phy
416 id: ens2
417 name: ens2
Dzmitry Stremkouski97927ee2018-08-23 23:20:38 +0200418 private-ipv4: &private-ipv4
419 - id: private-ipv4
420 type: ipv4
421 link: ens2
422 netmask: 255.255.255.0
423 routes:
424 - gateway: 192.168.0.1
425 netmask: 0.0.0.0
426 network: 0.0.0.0
Dzmitry Stremkouski7ee23402018-04-10 00:43:48 +0200427 virt:
428 disk:
429 three_disks:
430 - system:
431 size: 4096
432 image: ubuntu.qcow
433 - repository_snapshot:
434 size: 8192
435 image: snapshot.qcow
436 - cinder-volume:
437 size: 2048
Ondrej Smolae6bcb292018-04-13 10:56:39 +0200438 nic:
439 control:
440 - name: nic01
441 bridge: br-pxe
442 model: virtio
443 - name: nic02
444 bridge: br-cp
445 model: virtio
446 - name: nic03
447 bridge: br-store-front
448 model: virtio
449 - name: nic04
450 bridge: br-public
451 model: virtio
Dzmitry Stremkouskib8acf1f2018-06-28 12:56:23 +0200452 - name: nic05
453 bridge: br-prv
454 model: virtio
455 virtualport:
456 type: openvswitch
Ondrej Smolae6bcb292018-04-13 10:56:39 +0200457
Dzmitry Stremkouski7ee23402018-04-10 00:43:48 +0200458 salt:
459 control:
460 enabled: true
461 virt_enabled: true
462 size:
463 medium_three_disks:
464 cpu: 2
465 ram: 4
466 disk_profile: three_disks
467 cluster:
468 mycluster:
469 domain: neco.virt.domain.com
470 engine: virt
Martin Horak9e11aa22018-09-17 06:46:59 +0200471 # Cluster global settings
Ondrej Smolac7f6cfc2018-05-21 15:55:08 +0200472 rng: false
Martin Horak9e11aa22018-09-17 06:46:59 +0200473 enable_vnc: True
Andrei Danin996e2092018-09-10 21:58:23 -0700474 seed: cloud-init
Dzmitry Stremkouski97927ee2018-08-23 23:20:38 +0200475 cloud_init:
476 user_data:
477 disable_ec2_metadata: true
478 resize_rootfs: True
479 timezone: UTC
480 ssh_deletekeys: True
481 ssh_genkeytypes: ['rsa', 'dsa', 'ecdsa']
482 ssh_svcname: ssh
483 locale: en_US.UTF-8
484 disable_root: true
485 apt_preserve_sources_list: false
486 apt:
487 sources_list: ""
488 sources:
489 ubuntu.list:
490 source: ${linux:system:repo:ubuntu:source}
491 mcp_saltstack.list:
492 source: ${linux:system:repo:mcp_saltstack:source}
Dzmitry Stremkouski7ee23402018-04-10 00:43:48 +0200493 node:
494 ubuntu1:
495 provider: node01.domain.com
496 image: ubuntu.qcow
497 size: medium
498 img_dest: /var/lib/libvirt/ssdimages
Martin Horak9e11aa22018-09-17 06:46:59 +0200499 # Node settings override cluster global ones
500 enable_vnc: False
Dzmitry Stremkouski7ee23402018-04-10 00:43:48 +0200501 rng:
502 backend: /dev/urandom
503 model: random
504 rate:
505 period: '1800'
506 bytes: '1500'
Alexandru Avadanii00f187a2018-06-24 20:36:44 +0200507 # Custom per-node loader definition (e.g. for AArch64 UEFI)
508 loader:
509 readonly: yes
510 type: pflash
511 path: /usr/share/AAVMF/AAVMF_CODE.fd
512 machine: virt-2.11 # Custom per-node virt machine type
513 cpu_mode: host-passthrough
Pavel Cizinskyf03c4e82018-09-10 14:56:11 +0200514 cpuset: '1-4'
Ondrej Smolae6bcb292018-04-13 10:56:39 +0200515 mac:
516 nic01: AC:DE:48:AA:AA:AA
517 nic02: AC:DE:48:AA:AA:BB
Dzmitry Stremkouski97927ee2018-08-23 23:20:38 +0200518 # netconfig affects: hostname during boot
519 # manual interfaces configuration
520 cloud_init:
521 network_data:
Dzmitry Stremkouski30c7d2f2019-01-16 23:40:36 +0100522 links: *vcp_links
Dzmitry Stremkouski97927ee2018-08-23 23:20:38 +0200523 networks:
524 - <<: *private-ipv4
525 ip_address: 192.168.0.161
Andrei Danin996e2092018-09-10 21:58:23 -0700526 user_data:
527 salt_minion:
528 conf:
529 master: 10.1.1.1
530 ubuntu2:
531 seed: qemu-nbd
532 cloud_init:
533 enabled: false
534
535There are two methods to seed an initial Salt minion configuration to
536Libvirt VMs: mount a disk and update a filesystem or create a ConfigDrive with
537a Cloud-init config. This is controlled by the "seed" parameter on cluster and
538node levels. When set to _True_ or "qemu-nbd", the old method of mounting a disk
539will be used. When set to "cloud-init", the new method will be used. When set
540to _False_, no seeding will happen. The default value is _True_, meaning
541the "qemu-nbd" method will be used. This is done for backward compatibility
542and may be changed in future.
543
544The recommended method is to use Cloud-init.
545It's controlled by the "cloud_init" dictionary on cluster and node levels.
546Node level parameters are merged on top of cluster level parameters.
547The Salt Minion config is populated automatically based on a VM name and config
548settings of the minion who is actually executing a state. To override them,
549add the "salt_minion" section into the "user_data" section as shown above.
550It is possible to disable Cloud-init by setting "cloud_init.enabled" to _False_.
Ondrej Smolae6bcb292018-04-13 10:56:39 +0200551
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +0300552To enable Redis plugin for the Salt caching subsystem, use the
553below pillar structure:
Oleh Hryhorovca6b9172018-06-21 14:21:35 +0000554
555.. code-block:: yaml
556
557 salt:
558 master:
559 cache:
560 plugin: redis
561 host: localhost
562 port: 6379
563 db: '0'
564 password: pass_word
565 bank_prefix: 'MCP'
566 bank_keys_prefix: 'MCPKEY'
567 key_prefix: 'KEY'
568 separator: '@'
Ondrej Smolae6bcb292018-04-13 10:56:39 +0200569
Petr Michalecdf75d682018-02-07 13:43:53 +0100570Jinja options
571-------------
572
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +0300573Use the following options to update default Jinja renderer options.
574Salt recognize Jinja options for templates and for the ``sls`` files.
Petr Michalecdf75d682018-02-07 13:43:53 +0100575
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +0300576For full list of options, see Jinja documentation:
577http://jinja.pocoo.org/docs/api/#high-level-api
Petr Michalecdf75d682018-02-07 13:43:53 +0100578
579.. code-block:: yaml
580
Petr Michalecdf75d682018-02-07 13:43:53 +0100581 salt:
582 renderer:
583 # for templates
584 jinja: &jina_env
585 # Default Jinja environment options
586 block_start_string: '{%'
587 block_end_string: '%}'
588 variable_start_string: '{{'
589 variable_end_string: '}}'
590 comment_start_string: '{#'
591 comment_end_string: '#}'
592 keep_trailing_newline: False
593 newline_sequence: '\n'
594
595 # Next two are enabled by default in Salt
596 trim_blocks: True
597 lstrip_blocks: True
598
599 # Next two are not enabled by default in Salt
600 # but worth to consider to enable in future for salt-formulas
601 line_statement_prefix: '%'
602 line_comment_prefix: '##'
603
604 # for .sls state files
605 jinja_sls: *jinja_env
606
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +0300607With the ``line_statement/comment* _prefix`` options enabled following
608code statements are valid:
Petr Michalecdf75d682018-02-07 13:43:53 +0100609
610.. code-block:: yaml
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +0300611
Petr Michalecdf75d682018-02-07 13:43:53 +0100612 %- set myvar = 'one'
613
614 ## You can mix even with '{%'
615 {%- set myvar = 'two' %} ## comment
616 %- set mylist = ['one', 'two', 'three'] ## comment
617
618 ## comment
619 %- for item in mylist: ## comment
620 {{- item }}
621 %- endfor
622
Ivan Berezovskiy8aee9922019-07-15 18:21:22 +0400623Provision VM with secured image source.
624
625.. code-block:: yaml
626
627 salt:
628 control:
629 cluster:
630 mycluster:
631 domain: mydomain.com
632 engine: virt
633 node:
634 ubuntu01:
635 image_source:
636 secured: true
637 protocol: http
638 user: foo
639 password: bar
640 url_prefix: mirror.com
641 url_path: xenial/image.qcow2
642
643Provision several VMs with same secured image source.
644
645 salt:
646 control:
647 common_image_source:
648 protocol: https
649 user: foo
650 password: bar
651 url_prefix: mirror.com
652 cluster:
653 mycluster:
654 domain: mydomain.com
655 engine: virt
656 node:
657 ubuntu01:
658 image_source:
659 secured: true
660 url_path: xenial/ubuntu.qcow2
661 debian01:
662 image_source:
663 secured: true
664 url_path: stretch/debian.qcow2
665
Dzmitry Stremkouskib71ada92019-04-05 22:37:59 +0200666MCP Cluster health checks
667~~~~~~~~~~~~~~~~~~~~~~~~~
668
669Swiss army knife toolset for verifying MCP cluster health.
670
671.. note:: Health checks are tested with salt modules >= 2017.7.
672
673Install health_checks module:
674
675.. code-block:: bash
676
677 cp health_checks.py /usr/share/salt-formulas/env/_modules/health_checks.py
678 salt -C '*' saltutil.sync_all
679
680Usually exit codes are not catched and salt-call for a module
681will always return exit 0 regardless of errors in output.
682If you want control exit code for scripting, you should pass
683**--retcode-passthrough** to each salt call:
684
685.. code-block:: bash
686
687 salt-call health_checks.minions_check --retcode-passthrough
688
689Verify if minions are online.
690Use it to determine which minions are offline.
691
692.. code-block:: bash
693
694 salt-call health_checks.minions_check
695
696Verify time diff on your minions:
697
698.. code-block:: bash
699
700 salt-call health_checks.time_diff_check
701
702In case of failure, dump diff JSON:
703
704.. code-block:: bash
705
706 salt-call health_checks.time_diff_check debug=True --out=json
707
708Get JSON stats from ntpq:
709
710.. code-block:: bash
711
712 salt-call health_checks.ntp_status
713
714Verify NTP peers status on the environment:
715
716.. code-block:: bash
717
718 salt-call health_checks.ntp_check
719 salt-call health_checks.ntp_check min_peers=2 max_stratum=2
720
Dzmitry Stremkouski83b9c162019-09-25 09:41:45 +0200721List vrouter namespaces on contrail computes:
722
723.. code-block:: bash
724
725 salt -C 'I@opencontrail:compute' health_checks.list_namespaces
726
Dzmitry Stremkouskib71ada92019-04-05 22:37:59 +0200727Verify contrail nodes contrail-status output:
728
729.. code-block:: bash
730
731 salt-call health_checks.contrail_check debug=True
Dzmitry Stremkouski83b9c162019-09-25 09:41:45 +0200732 salt-call health_checks.contrail_check nodetool_expected_size=2 debug=True
Dzmitry Stremkouskib71ada92019-04-05 22:37:59 +0200733
734Verify galera cluster status:
735
736.. code-block:: bash
737
738 salt-call health_checks.galera_check debug=True
739 salt-call health_checks.galera_check cluster_size=3 debug=True
740
741Verify rabbitmq cluster status:
742
743.. code-block:: bash
744
745 salt-call health_checks.mysql_check debug=True
746
747Get rabbitmq json objects on command execution.
748
749.. warning:: This code is experimental. It is a hack to convert erlang object to JSON. May fail.
750
751.. code-block:: bash
752
753 salt-call health_checks.rabbitmq_cmd status
754 salt-call health_checks.rabbitmq_cmd cluster_status
755 salt-call health_checks.rabbitmq_cmd list_hashes
756 salt-call health_checks.rabbitmq_cmd list_ciphers
757
Dzmitry Stremkouskif1bcbb52019-04-11 15:48:24 +0200758Get rabbitmq json dict of queues on the node (vhost '/' by default)
759
760.. code-block:: bash
761
762 salt -C 's-msg01*' health_checks.rabbitmq_list_queues
763 salt -C 's-msg01*' health_checks.rabbitmq_list_queues /openstack
764
Dzmitry Stremkouskib71ada92019-04-05 22:37:59 +0200765Verify haproxy upstream status:
766
767.. code-block:: bash
768
769 salt-call health_checks.haproxy_check debug=True
770 salt-call health_checks.haproxy_check ignore_no_upstream=True
771
772Get haproxy JSON stats (native python calls to socket):
773
774.. code-block:: bash
775
776 salt-call health_checks.haproxy_status
777 salt-call health_checks.haproxy_status socket_path='/var/run/haproxy/admin.sock' stats_filter=['status']
778
779Verify disk space usage:
780
781.. code-block:: bash
782
783 salt-call health_checks.df_check
784 salt-call health_checks.df_check verify=space space_limit=90 ignore_partitions=['/']
785
786Verify disk inodes usage:
787
788.. code-block:: bash
789
790 salt-call health_checks.df_check verify=inodes
791 salt-call health_checks.df_check verify=inodes inode_limit=10
792
793Verify load average on the environment:
794
795.. code-block:: bash
796
797 salt-call health_checks.load_check
798 salt-call health_checks.load_check la1=4 la5=1 la15=1
799
800Verify ifaces rx/tx drops:
801
802.. code-block:: bash
803
804 salt-call health_checks.netdev_check
805 salt-call health_checks.netdev_check rx_drop_limit=0 tx_drop_limit=0
806
807Verify memory usage:
808
809.. code-block:: bash
810
811 salt-call health_checks.mem_check
812 salt-call health_checks.mem_check used_limit=50
813
Dzmitry Stremkouskif1bcbb52019-04-11 15:48:24 +0200814Verify ceph health status:
815
816.. code-block:: bash
817
818 salt-call health_checks.ceph_health_check
819 salt-call health_checks.ceph_health_check target=s-mon01* target_type=glob debug=True
820
821Execute arbitrary ceph command and get JSON output:
822
823.. code-block:: bash
824
825 salt -C 'cmn01*' health_checks.ceph_cmd 'osd tree'
826
827Retrieve docker registry recursively:
828
829.. code-block:: bash
830
831 salt-call health_checks.docker_registry_list s-apt01:5000
832 salt-call health_checks.docker_registry_list http://127.0.0.1:5000
833
Dzmitry Stremkouski7cd10fc2019-04-17 11:51:59 +0200834Retrieve docker containers list on target server:
835
836.. code-block:: bash
837
838 salt -C 'cid01*' health_checks.docker_ps
839 salt -C 'cid01*' health_checks.docker_ps list_all=1
840
Dzmitry Stremkouskif1bcbb52019-04-11 15:48:24 +0200841Retrieve glusterfs pool list:
842
843.. code-block:: bash
844
845 salt -C 'I@glusterfs:server and *02*' health_checks.gluster_pool_list
846
847Retrieve glusterfs volumes status:
848
849.. code-block:: bash
850
851 salt -C 'I@glusterfs:server and *02*' health_checks.gluster_volume_status
852
853Check glusterfs pool health and size:
854
855.. code-block:: bash
856
857 salt-call health_checks.gluster_pool_check
858 salt-call health_checks.gluster_pool_check expected_size=5
859
860Check glusterfs volumes bricks health and size:
861
862.. code-block:: bash
863
864 salt-call health_checks.gluster_volumes_check
865 salt-call health_checks.gluster_volumes_check expected_size=1 ignore_volumes=['/srv/volumes/aptly']
866
Dzmitry Stremkouski7cd10fc2019-04-17 11:51:59 +0200867Retrieve entropy size for host:
868
869.. code-block:: bash
870
871 salt -C 'msg02*' health_checks.get_entropy
872
873Check entropy size on all nodes:
874
875.. code-block:: bash
876
877 salt-call health_checks.entropy_check
878 salt-call health_checks.entropy_check minimum_bits=1000
879
Dzmitry Stremkouskib71ada92019-04-05 22:37:59 +0200880
Dzmitry Stremkouski2c709f22019-04-22 02:27:54 +0200881Execute zookeeper cmds via socket:
882
883.. code-block:: bash
884
885 salt -C s-ntw01* health_checks.zookeeper_cmd conf
886 salt -C s-ntw01* health_checks.zookeeper_cmd envi
887
888Retrieve zookeeper stats:
889
890.. code-block:: bash
891
892 salt -C s-ntw01* health_checks.zookeeper_stats
893
894Retrieve zookeeper leader:
895
896.. code-block:: bash
897
898 salt-call health_checks.get_zookeeper_leader
899
900Fetch contrail vrouter list from control node
901
902.. code-block:: bash
903
904 salt -C s-ntw01* health_checks.contrail_vrouter_list
905
906Fetch contrail vrouter summary from control node
907
908.. code-block:: bash
909
910 salt -C s-ntw01* health_checks.contrail_vrouter_show <vr_uuid>
911
912Fetch contrail vrouter agent connections from compute node
913
914.. code-block:: bash
915
916 salt -C cmp001* health_checks.contrail_vrouter_agent_status
917
Dzmitry Stremkouski36290202019-05-05 21:26:25 +0200918Retrieve contrail vrouter agent status from analyticsdb
919
920.. code-block:: bash
921
922 salt-call health_checks.contrail_collector_agent_status
923
924Retrieve filtered contrail vrouter agent info from analyticsdb
925
926.. code-block:: bash
927
928 salt-call health_checks.contrail_vrouter_agent_info cmp001
929
Dzmitry Stremkouskia78a04d2019-07-13 11:05:03 +0200930Retrieve contrail control peers summary
931
932.. code-block:: bash
933
934 salt -C s-ntw01* health_checks.contrail_control_peers_summary
935
936Retrieve contrail control filtered peers info
937
938.. code-block:: bash
939
940 salt -C s-ntw03* health_checks.contrail_control_peer_status
941
Dzmitry Stremkouski9d2a5562019-08-08 19:56:38 +0200942Fetch contrail nodes contrail processes uptime:
943
944.. code-block:: bash
945
946 salt -C 'I@opencontrail:compute' health_checks.contrail_process_list debug=True
947 salt -C 'I@opencontrail:control' health_checks.contrail_process_list role=controller debug=True
948
Dzmitry Stremkouski2c709f22019-04-22 02:27:54 +0200949Fetch libvirt supported machine types for compute node
950
951.. code-block:: bash
952
953 salt -C 'I@opencontrail:compute' health_checks.libvirt_capabilities
954
Dzmitry Stremkouski480c84a2019-10-17 19:33:18 +0200955Check if contrail elements are connected to each other
956
957.. code-block:: bash
958
959 salt-call health_checks.contrail_mesh_check
960 salt-call health_checks.contrail_mesh_check debug=True
961
962Check if contrail elements are connected to each other and DNS names match
963
964.. code-block:: bash
965
966 salt-call health_checks.contrail_mesh_check strict=True
967
Dzmitry Stremkouski88275d32019-07-23 19:42:42 +0200968Check keystone fernet keys are in sync
969
970.. code-block:: bash
971
972 salt-call health_checks.keystone_keys_check
973 salt-call health_checks.keystone_keys_check keys_dir='/var/lib/keystone/fernet-keys'
974
975Check keystone credential keys are in sync
976
977.. code-block:: bash
978
979 salt-call health_checks.keystone_keys_check keys_type='credential'
980
Dzmitry Stremkouski1ce1b352019-11-02 10:47:14 +0100981Retrieve cinder db release codename
982
983.. code-block:: bash
984
985 salt-call health_checks.get_cinder_db_versions db_host='192.168.0.50' db_user='cinder' \
986 db_pass='password'
987
988Retrieve glance db release codename
989
990.. code-block:: bash
991
992 salt-call health_checks.get_glance_db_versions db_host='192.168.0.50' db_user='glance' \
993 db_pass='password'
994
995Retrieve heat db release codename
996
997.. code-block:: bash
998
999 salt-call health_checks.get_heat_db_versions db_host='192.168.0.50' db_user='heat' \
1000 db_pass='password'
1001
1002Retrieve neutron db release codename
1003
1004.. code-block:: bash
1005
1006 salt-call health_checks.get_neutron_db_versions db_host='192.168.0.50' db_user='neutron' \
1007 db_pass='password'
1008
1009Retrieve keystone db release codename
1010
1011.. code-block:: bash
1012
1013 salt-call health_checks.get_keystone_db_versions db_host='192.168.0.50' db_user='keystone' \
1014 db_pass='password'
1015
1016Retrieve nova db release codename
1017
1018.. code-block:: bash
1019
1020 salt-call health_checks.get_nova_db_versions db_host='192.168.0.50' db_user='nova' \
1021 db_pass='password' db_api_user='nova' db_api_pass='api_password'
1022
1023Retrieve openstack db release codenames
1024
1025.. code-block:: bash
1026
1027 salt-call health_checks.list_db_versions
1028
Dzmitry Stremkouski2c709f22019-04-22 02:27:54 +02001029
Petr Michalecdf75d682018-02-07 13:43:53 +01001030Encrypted pillars
Ales Komarekd768f1c2018-01-30 22:37:18 +01001031~~~~~~~~~~~~~~~~~
Petr Michalec1f541c42017-08-17 13:30:37 +02001032
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +03001033.. note:: NACL and the below configuration will be available in Salt > 2017.7.
Petr Michalec1f541c42017-08-17 13:30:37 +02001034
1035External resources:
1036
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +03001037- Tutorial to configure the Salt and Reclass ``ext_pillar`` and NACL:
1038 http://apealive.net/post/2017-09-salt-nacl-ext-pillar/
1039- SaltStack documentation:
1040 https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.nacl.html
Petr Michalec1f541c42017-08-17 13:30:37 +02001041
1042Configure salt NACL module:
1043
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +03001044.. code-block:: bash
Petr Michalec1f541c42017-08-17 13:30:37 +02001045
1046 pip install --upgrade libnacl===1.5.2
1047 salt-call --local nacl.keygen /etc/salt/pki/master/nacl
1048
1049 local:
1050 saved sk_file:/etc/salt/pki/master/nacl pk_file: /etc/salt/pki/master/nacl.pub
1051
Petr Michalec1f541c42017-08-17 13:30:37 +02001052.. code-block:: yaml
1053
1054 salt:
1055 master:
1056 pillar:
1057 reclass: *reclass
1058 nacl:
1059 index: 99
1060 nacl:
1061 box_type: sealedbox
1062 sk_file: /etc/salt/pki/master/nacl
1063 pk_file: /etc/salt/pki/master/nacl.pub
1064 #sk: None
1065 #pk: None
1066
1067NACL encrypt secrets:
1068
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +03001069.. code-block:: bash
1070
Petr Michalec1f541c42017-08-17 13:30:37 +02001071 salt-call --local nacl.enc 'my_secret_value' pk_file=/etc/salt/pki/master/nacl.pub
1072 hXTkJpC1hcKMS7yZVGESutWrkvzusXfETXkacSklIxYjfWDlMJmR37MlmthdIgjXpg4f2AlBKb8tc9Woma7q
1073 # or
1074 salt-run nacl.enc 'myotherpass'
1075 ADDFD0Rav6p6+63sojl7Htfrncp5rrDVyeE4BSPO7ipq8fZuLDIVAzQLf4PCbDqi+Fau5KD3/J/E+Pw=
1076
Petr Michalec1f541c42017-08-17 13:30:37 +02001077NACL encrypted values on pillar:
1078
1079Use Boxed syntax `NACL[CryptedValue=]` to encode value on pillar:
1080
1081.. code-block:: yaml
1082
1083 my_pillar:
1084 my_nacl:
1085 key0: unencrypted_value
1086 key1: NACL[hXTkJpC1hcKMS7yZVGESutWrkvzusXfETXkacSklIxYjfWDlMJmR37MlmthdIgjXpg4f2AlBKb8tc9Woma7q]
1087
1088NACL large files:
1089
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +03001090.. code-block:: bash
1091
Petr Michalec1f541c42017-08-17 13:30:37 +02001092 salt-call nacl.enc_file /tmp/cert.crt out=/srv/salt/env/dev/cert.nacl
1093 # or more advanced
1094 cert=$(cat /tmp/cert.crt)
1095 salt-call --out=newline_values_only nacl.enc_pub data="$cert" > /srv/salt/env/dev/cert.nacl
1096
Petr Michalec1f541c42017-08-17 13:30:37 +02001097NACL within template/native pillars:
1098
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +03001099.. code-block:: yaml
1100
Petr Michalec1f541c42017-08-17 13:30:37 +02001101 pillarexample:
1102 user: root
1103 password1: {{salt.nacl.dec('DRB7Q6/X5gGSRCTpZyxS6hlbWj0llUA+uaVyvou3vJ4=')|json}}
1104 cert_key: {{salt.nacl.dec_file('/srv/salt/env/dev/certs/example.com/cert.nacl')|json}}
1105 cert_key2: {{salt.nacl.dec_file('salt:///certs/example.com/cert2.nacl')|json}}
1106
Ales Komarekd768f1c2018-01-30 22:37:18 +01001107Salt Syndic
Ales Komarek54740682017-05-15 07:16:23 +02001108-----------
1109
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +03001110The master of masters:
Ales Komarek54740682017-05-15 07:16:23 +02001111
1112.. code-block:: yaml
1113
1114 salt:
1115 master:
1116 enabled: true
1117 order_masters: True
1118
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +03001119Lower syndicated master:
Ales Komarek54740682017-05-15 07:16:23 +02001120
1121.. code-block:: yaml
1122
1123 salt:
1124 syndic:
1125 enabled: true
1126 master:
1127 host: master-of-master-host
1128 timeout: 5
1129
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +03001130Syndicated master with multiple master of masters:
Ales Komarek54740682017-05-15 07:16:23 +02001131
1132.. code-block:: yaml
1133
1134 salt:
1135 syndic:
1136 enabled: true
1137 masters:
1138 - host: master-of-master-host1
1139 - host: master-of-master-host2
1140 timeout: 5
1141
Ales Komarekd768f1c2018-01-30 22:37:18 +01001142Salt Minion
1143-----------
1144
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +03001145Minion ID by default triggers dependency on Linux formula, as it uses fqdn
1146configured from `linux.system.name` and `linux.system.domain` pillar.
1147To override, provide exact minion ID you require. The same can be set for
1148master ID rendered at ``master.conf``.
Petr Michaleccfd93e12018-06-26 18:11:44 +02001149
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +03001150 .. code-block:: yaml
Petr Michaleccfd93e12018-06-26 18:11:44 +02001151
1152 salt:
1153 minion:
1154 id: minion1.production
1155 master:
1156 id: master.production
1157
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +03001158Simplest Salt minion setup with central configuration node:
Ales Komarekd768f1c2018-01-30 22:37:18 +01001159
1160.. literalinclude:: tests/pillar/minion_master.sls
1161 :language: yaml
1162
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +03001163Multi-master Salt minion setup:
Ales Komarekd768f1c2018-01-30 22:37:18 +01001164
1165.. literalinclude:: tests/pillar/minion_multi_master.sls
1166 :language: yaml
1167
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +03001168Salt minion with salt mine options:
Ales Komarekd768f1c2018-01-30 22:37:18 +01001169
1170.. literalinclude:: tests/pillar/minion_mine.sls
1171 :language: yaml
1172
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +03001173Salt minion with graphing dependencies:
Ales Komarekd768f1c2018-01-30 22:37:18 +01001174
1175.. literalinclude:: tests/pillar/minion_graph.sls
1176 :language: yaml
1177
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +03001178Salt minion behind HTTP proxy:
Ales Komarekd768f1c2018-01-30 22:37:18 +01001179
1180.. code-block:: yaml
1181
1182 salt:
1183 minion:
1184 proxy:
1185 host: 127.0.0.1
1186 port: 3128
1187
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +03001188Salt minion to specify non-default HTTP backend. The default
1189tornado backend does not respect HTTP proxy settings set as
1190environment variables. This is useful for cases where you need
1191to set no_proxy lists.
Ales Komarekd768f1c2018-01-30 22:37:18 +01001192
1193.. code-block:: yaml
1194
1195 salt:
1196 minion:
1197 backend: urllib2
1198
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +03001199Salt minion with PKI certificate authority (CA):
Ales Komarekd768f1c2018-01-30 22:37:18 +01001200
1201.. literalinclude:: tests/pillar/minion_pki_ca.sls
1202 :language: yaml
1203
1204Salt minion using PKI certificate
1205
1206.. literalinclude:: tests/pillar/minion_pki_cert.sls
1207 :language: yaml
1208
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +03001209Salt minion trust CA certificates issued by salt CA on a
1210specific host (ie: salt-master node):
Ales Komarekd768f1c2018-01-30 22:37:18 +01001211
1212.. code-block:: yaml
1213
1214 salt:
1215 minion:
1216 trusted_ca_minions:
1217 - cfg01
1218
Ales Komarekd768f1c2018-01-30 22:37:18 +01001219Salt Minion Proxy
1220~~~~~~~~~~~~~~~~~
Jiri Broulika0f46682017-04-20 22:45:01 +02001221
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +03001222Salt proxy pillar:
Jiri Broulika0f46682017-04-20 22:45:01 +02001223
1224.. code-block:: yaml
1225
1226 salt:
1227 minion:
Jiri Broulik88275242017-05-24 17:21:17 +02001228 proxy_minion:
Jiri Broulika0f46682017-04-20 22:45:01 +02001229 master: localhost
1230 device:
1231 vsrx01.mydomain.local:
1232 enabled: true
1233 engine: napalm
1234 csr1000v.mydomain.local:
1235 enabled: true
1236 engine: napalm
1237
1238.. note:: This is pillar of the the real salt-minion
1239
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +03001240Proxy pillar for IOS device:
Jiri Broulika0f46682017-04-20 22:45:01 +02001241
1242.. code-block:: yaml
1243
1244 proxy:
1245 proxytype: napalm
1246 driver: ios
1247 host: csr1000v.mydomain.local
1248 username: root
1249 passwd: r00tme
1250
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +03001251.. note:: This is pillar of the node thats not able to run
1252 salt-minion itself.
Jiri Broulika0f46682017-04-20 22:45:01 +02001253
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +03001254Proxy pillar for JunOS device:
Jiri Broulika0f46682017-04-20 22:45:01 +02001255
1256.. code-block:: yaml
1257
1258 proxy:
1259 proxytype: napalm
1260 driver: junos
1261 host: vsrx01.mydomain.local
1262 username: root
1263 passwd: r00tme
1264 optional_args:
1265 config_format: set
1266
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +03001267.. note:: This pillar applies to the node that can not run
1268 salt-minion itself.
Ales Komarek8fb1da82016-08-21 23:52:03 +02001269
1270Salt SSH
Ales Komarekd768f1c2018-01-30 22:37:18 +01001271~~~~~~~~
Ales Komarek8fb1da82016-08-21 23:52:03 +02001272
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +03001273Salt SSH with sudoer using key:
Ales Komarek8fb1da82016-08-21 23:52:03 +02001274
1275.. literalinclude:: tests/pillar/master_ssh_minion_key.sls
1276 :language: yaml
1277
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +03001278Salt SSH with sudoer using password:
Ales Komarek8fb1da82016-08-21 23:52:03 +02001279
1280.. literalinclude:: tests/pillar/master_ssh_minion_password.sls
1281 :language: yaml
1282
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +03001283Salt SSH with root using password:
Ales Komarek8fb1da82016-08-21 23:52:03 +02001284
1285.. literalinclude:: tests/pillar/master_ssh_minion_root.sls
1286 :language: yaml
1287
Ales Komarek8ba9c0b2016-02-21 14:59:59 +01001288Salt control (cloud/kvm/docker)
1289-------------------------------
Filip Pytlounb4b80592015-10-06 16:28:32 +02001290
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +03001291Salt cloud with local OpenStack provider:
Filip Pytlounb4b80592015-10-06 16:28:32 +02001292
Ales Komarek8ba9c0b2016-02-21 14:59:59 +01001293.. literalinclude:: tests/pillar/control_cloud_openstack.sls
1294 :language: yaml
Filip Pytlounb4b80592015-10-06 16:28:32 +02001295
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +03001296Salt cloud with Digital Ocean provider:
Filip Pytlounb4b80592015-10-06 16:28:32 +02001297
Ales Komarek8ba9c0b2016-02-21 14:59:59 +01001298.. literalinclude:: tests/pillar/control_cloud_digitalocean.sls
1299 :language: yaml
Filip Pytlounb4b80592015-10-06 16:28:32 +02001300
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +03001301Salt virt with KVM cluster:
Filip Pytlounb4b80592015-10-06 16:28:32 +02001302
Ales Komarek8ba9c0b2016-02-21 14:59:59 +01001303.. literalinclude:: tests/pillar/control_virt.sls
1304 :language: yaml
Filip Pytlounb4b80592015-10-06 16:28:32 +02001305
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +03001306Salt virt with custom destination for image file:
Mateusz Los4c7cd2d2018-01-09 11:46:07 +01001307
1308.. literalinclude:: tests/pillar/control_virt_custom.sls
1309 :language: yaml
1310
Dmitry Teselkin9b3097a2018-11-21 15:45:07 +03001311Salt shared library
1312-------------------
1313
1314This formula includes 'sharedlib' execution module which is a kind
1315of 'library' of function and / or classes to be used in Jinja templates
1316or directly as execution module.
1317
1318'sharedlib' implements a loader that is able to scan nested directories
1319and import Python classes / functions from nested modules. Salt doesn't
1320allow this as it only imports top-level modules:
1321
1322https://github.com/saltstack/salt/issues/37273
1323
1324'sharedlib' implements 4 main functions:
1325
1326* 'sharedlib.list' - search and print functions / classes found in nested directories
1327* 'sharedlib.info' - print docstring of a function (if it exists)
1328* 'sharedlib.get' - get function / class object, but not execute it immediately
1329* 'sharedlib.call' - get function / class and execute / initialize it with
1330 arguments given.
1331
1332Each of the commands above also have it's own docstring so it's possible to
1333use them on a system:
1334
1335.. code-block:: text
1336
1337 # salt-call sys.doc sharedlib.list
1338 local:
1339 ----------
1340 sharedlib.list:
1341
1342 List available functions.
1343
1344 .. code-block::
1345
1346 salt-call sharedlib.list
1347
1348Usage examples:
1349
1350.. code-block:: text
1351
1352 # salt-call sharedlib.list
1353 local:
1354 ----------
1355 sharedlib.list:
1356 ----------
1357 classes:
1358 - misc.Test
1359 - misc2.Test
1360 functions:
1361 - misc.cast_dict_keys_to_int
1362
1363.. code-block:: text
1364
1365 # salt-call sharedlib.info misc.cast_dict_keys_to_int
1366 local:
1367 ----------
1368 sharedlib.info:
1369 ----------
1370 misc.cast_dict_keys_to_int:
1371
1372 Return a dictionary with keys casted to int.
1373 This usually is required when you want sort the dict later.
1374
1375 Jinja example:
1376
1377 .. code-block: jinja
1378
1379 {%- set ruleset = salt['sharedlib.call']('misc.cast_dict_keys_to_int', c.get('ruleset', {})) %}
1380
1381 .. code-block:: jinja
1382
1383 {%- set func = salt['sharedlib.get']('misc.cast_dict_keys_to_int') %}
1384 {%- for c_name, c in t.chains.items() %}
1385 {%- set ruleset = func(c.get('ruleset', {})) %}
1386 {%- for rule_id, r in ruleset | dictsort %}
1387 ...
1388 {%- endfor %}
1389
Oleksandr Shyshko17176942019-02-06 17:08:23 +02001390Procedure of Data model and Schemas validation.
1391-------------------
1392Salt formula supports several mechanisms which allows to validate data model by jsonschema validator.
1393It supports unversioned schemas which must be contained at:
1394
1395.. code-block:: text
1396 'salt://{}/schemas/{}.yaml'.format(service, role)
1397
1398and/or versioned schemas which must be contained at:
1399
1400.. code-block:: text
1401 'salt://{}/schemas/{}/{}.yaml'.format(service, version, role)
1402
1403Returns list of all defined schema files.
1404
1405.. code-block:: bash
1406 salt-call modelschema.schema_list
1407
1408Returns pillar schema for given service and role.
1409
1410.. code-block:: bash
1411
1412 salt-call modelschema.schema_get ntp server
1413 .. or ..
1414 salt-call modelschema.schema_get keystone server pike
1415
1416Validates pillar schema itself of given service and role.
1417
1418.. code-block:: bash
1419
1420 salt-call modelschema.schema_validate ntp server
1421 .. or ..
1422 salt-call modelschema.schema_validate keystone server pike
1423
1424Validates pillar metadata by schema for given service and role.
1425
1426.. code-block:: bash
1427
1428 salt-call modelschema.model_validate ntp server
1429 .. or ..
1430 salt-call modelschema.model_validate keystone server pike
1431
1432Validates pillar metadata by schema for given service and role.
1433
1434.. code-block:: bash
1435 salt-run modelschema.data_validate {'a': 'b'} {'a': 'b'}
1436
1437Generate pillar schema skeleton for given service. Method iterates throught
1438test pillars and generates schema scaffold structure in JSON format that
1439can be passed to service like http://jsonschema.net/ to get the basic
1440schema for the individual roles of the service.
1441
1442.. code-block:: bash
1443
1444 salt-call modelschema.schema_from_tests ntp
1445 .. or ..
1446 salt-call modelschema.schema_from_tests keystone pike
1447
1448You can read more about it here:
1449 http://json-schema.org/implementations.html
1450 https://github.com/Julian/jsonschema
Dmitry Teselkin9b3097a2018-11-21 15:45:07 +03001451
Filip Pytlounb4b80592015-10-06 16:28:32 +02001452Usage
1453=====
1454
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +03001455Working with salt-cloud:
Filip Pytlounb4b80592015-10-06 16:28:32 +02001456
1457.. code-block:: bash
1458
1459 salt-cloud -m /path/to/map --assume-yes
1460
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +03001461Debug LIBCLOUD for salt-cloud connection:
Filip Pytlounb4b80592015-10-06 16:28:32 +02001462
1463.. code-block:: bash
1464
1465 export LIBCLOUD_DEBUG=/dev/stderr; salt-cloud --list-sizes provider_name --log-level all
1466
OlgaGusarenkof1fd82e2018-07-31 01:20:49 +03001467Read more
1468=========
Filip Pytlounb4b80592015-10-06 16:28:32 +02001469
1470* http://salt.readthedocs.org/en/latest/
1471* https://github.com/DanielBryan/salt-state-graph
1472* http://karlgrz.com/testing-salt-states-rapidly-with-docker/
1473* https://mywushublog.com/2013/03/configuration-management-with-salt-stack/
1474* http://russell.ballestrini.net/replace-the-nagios-scheduler-and-nrpe-with-salt-stack/
1475* https://github.com/saltstack-formulas/salt-formula
1476* http://docs.saltstack.com/en/latest/topics/tutorials/multimaster.html
1477
1478salt-cloud
1479----------
1480
1481* http://www.blog.sandro-mathys.ch/2013/07/setting-user-password-when-launching.html
1482* http://cloudinit.readthedocs.org/en/latest/topics/examples.html
1483* http://salt-cloud.readthedocs.org/en/latest/topics/install/index.html
1484* http://docs.saltstack.com/topics/cloud/digitalocean.html
1485* http://salt-cloud.readthedocs.org/en/latest/topics/rackspace.html
1486* http://salt-cloud.readthedocs.org/en/latest/topics/map.html
1487* http://docs.saltstack.com/en/latest/topics/tutorials/multimaster.html