New version of salt-formula from Saltstack
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

README.rst 17KB

9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737
  1. ============
  2. Salt Formula
  3. ============
  4. Salt is a new approach to infrastructure management. Easy enough to get
  5. running in minutes, scalable enough to manage tens of thousands of servers,
  6. and fast enough to communicate with them in seconds.
  7. Salt delivers a dynamic communication bus for infrastructures that can be used
  8. for orchestration, remote execution, configuration management and much more.
  9. Sample Metadata
  10. ===============
  11. Salt Master
  12. -----------
  13. Salt master with base formulas and pillar metadata backend
  14. .. literalinclude:: tests/pillar/master_single_pillar.sls
  15. :language: yaml
  16. Salt master with reclass ENC metadata backend
  17. .. literalinclude:: tests/pillar/master_single_reclass.sls
  18. :language: yaml
  19. Salt master with Architect ENC metadata backend
  20. .. code-block:: yaml
  21. salt:
  22. master:
  23. enabled: true
  24. pillar:
  25. engine: architect
  26. project: project-name
  27. host: architect-api
  28. port: 8181
  29. username: salt
  30. password: password
  31. Salt master with multiple ext_pillars
  32. .. literalinclude:: tests/pillar/master_single_extpillars.sls
  33. :language: yaml
  34. Salt master with API
  35. .. literalinclude:: tests/pillar/master_api.sls
  36. :language: yaml
  37. Salt master with defined user ACLs
  38. .. literalinclude:: tests/pillar/master_acl.sls
  39. :language: yaml
  40. Salt master with preset minions
  41. .. code-block:: yaml
  42. salt:
  43. master:
  44. enabled: true
  45. minions:
  46. - name: 'node1.system.location.domain.com'
  47. Salt master with pip based installation (optional)
  48. .. code-block:: yaml
  49. salt:
  50. master:
  51. enabled: true
  52. ...
  53. source:
  54. engine: pip
  55. version: 2016.3.0rc2
  56. Install formula through system package management
  57. .. code-block:: yaml
  58. salt:
  59. master:
  60. enabled: true
  61. ...
  62. environment:
  63. prd:
  64. keystone:
  65. source: pkg
  66. name: salt-formula-keystone
  67. nova:
  68. source: pkg
  69. name: salt-formula-keystone
  70. version: 0.1+0~20160818133412.24~1.gbp6e1ebb
  71. postresql:
  72. source: pkg
  73. name: salt-formula-postgresql
  74. version: purged
  75. Formula keystone is installed latest version and the formulas without version are installed in one call to aptpkg module.
  76. If the version attribute is present sls iterates over formulas and take action to install specific version or remove it.
  77. The version attribute may have these values ``[latest|purged|removed|<VERSION>]``.
  78. Clone master branch of keystone formula as local feature branch
  79. .. code-block:: yaml
  80. salt:
  81. master:
  82. enabled: true
  83. ...
  84. environment:
  85. dev:
  86. formula:
  87. keystone:
  88. source: git
  89. address: git@github.com:openstack/salt-formula-keystone.git
  90. revision: master
  91. branch: feature
  92. Salt master with specified formula refs (for example for Gerrit review)
  93. .. code-block:: yaml
  94. salt:
  95. master:
  96. enabled: true
  97. ...
  98. environment:
  99. dev:
  100. formula:
  101. keystone:
  102. source: git
  103. address: https://git.openstack.org/openstack/salt-formula-keystone
  104. revision: refs/changes/56/123456/1
  105. Salt master with logging handlers
  106. .. code-block:: yaml
  107. salt:
  108. master:
  109. enabled: true
  110. handler:
  111. handler01:
  112. engine: udp
  113. bind:
  114. host: 127.0.0.1
  115. port: 9999
  116. minion:
  117. handler:
  118. handler01:
  119. engine: udp
  120. bind:
  121. host: 127.0.0.1
  122. port: 9999
  123. handler02:
  124. engine: zmq
  125. bind:
  126. host: 127.0.0.1
  127. port: 9999
  128. Salt engine definition for saltgraph metadata collector
  129. .. code-block:: yaml
  130. salt:
  131. master:
  132. engine:
  133. graph_metadata:
  134. engine: saltgraph
  135. host: 127.0.0.1
  136. port: 5432
  137. user: salt
  138. password: salt
  139. database: salt
  140. Salt engine definition for Architect service
  141. .. code-block:: yaml
  142. salt:
  143. master:
  144. engine:
  145. architect:
  146. engine: architect
  147. project: project-name
  148. host: architect-api
  149. port: 8181
  150. username: salt
  151. password: password
  152. Salt engine definition for sending events from docker events
  153. .. code-block:: yaml
  154. salt:
  155. master:
  156. engine:
  157. docker_events:
  158. docker_url: unix://var/run/docker.sock
  159. Salt master peer setup for remote certificate signing
  160. .. code-block:: yaml
  161. salt:
  162. master:
  163. peer:
  164. ".*":
  165. - x509.sign_remote_certificate
  166. Salt master backup configuration
  167. .. code-block:: yaml
  168. salt:
  169. master:
  170. backup: true
  171. initial_data:
  172. engine: backupninja
  173. source: backup-node-host
  174. host: original-salt-master-id
  175. Configure verbosity of state output (used for `salt` command)
  176. .. code-block:: yaml
  177. salt:
  178. master:
  179. state_output: changes
  180. Pass pillar render error to minion log
  181. .. note:: When set to `False` this option is great for debuging.
  182. However it is not recomended for any production environment as it may contain
  183. templating data as passwords, etc... , that minion should not expose.
  184. .. code-block:: yaml
  185. salt:
  186. master:
  187. pillar_safe_render_error: False
  188. Event/Reactor Systems
  189. ~~~~~~~~~~~~~~~~~~~~~
  190. Salt synchronise node pillar and modules after start
  191. .. code-block:: yaml
  192. salt:
  193. master:
  194. reactor:
  195. salt/minion/*/start:
  196. - salt://salt/reactor/node_start.sls
  197. Trigger basic node install
  198. .. code-block:: yaml
  199. salt:
  200. master:
  201. reactor:
  202. salt/minion/install:
  203. - salt://salt/reactor/node_install.sls
  204. Sample event to trigger the node installation
  205. .. code-block:: bash
  206. salt-call event.send 'salt/minion/install'
  207. Run any defined orchestration pipeline
  208. .. code-block:: yaml
  209. salt:
  210. master:
  211. reactor:
  212. salt/orchestrate/start:
  213. - salt://salt/reactor/orchestrate_start.sls
  214. Event to trigger the orchestration pipeline
  215. .. code-block:: bash
  216. salt-call event.send 'salt/orchestrate/start' "{'orchestrate': 'salt/orchestrate/infra_install.sls'}"
  217. Synchronise modules and pillars on minion start.
  218. .. code-block:: yaml
  219. salt:
  220. master:
  221. reactor:
  222. 'salt/minion/*/start':
  223. - salt://salt/reactor/minion_start.sls
  224. Add and/or remove the minion key
  225. .. code-block:: yaml
  226. salt:
  227. master:
  228. reactor:
  229. salt/key/create:
  230. - salt://salt/reactor/key_create.sls
  231. salt/key/remove:
  232. - salt://salt/reactor/key_remove.sls
  233. Event to trigger the key creation
  234. .. code-block:: bash
  235. salt-call event.send 'salt/key/create' \
  236. > "{'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'}}"
  237. .. note::
  238. You can add pass additional `orch_pre_create`, `orch_post_create`,
  239. `orch_pre_remove` or `orch_post_remove` parameters to the event to call
  240. extra orchestrate files. This can be useful for example for
  241. registering/unregistering nodes from the monitoring alarms or dashboards.
  242. The key creation event needs to be run from other machine than the one
  243. being registered.
  244. Event to trigger the key removal
  245. .. code-block:: bash
  246. salt-call event.send 'salt/key/remove'
  247. Jinja options
  248. -------------
  249. Use following options to update default jinja renderer options. Salt recognize Jinja options for templates and for sls files.
  250. For full list of options check jinja documentation: http://jinja.pocoo.org/docs/api/#high-level-api.
  251. .. code-block:: yaml
  252. salt:
  253. renderer:
  254. # for templates
  255. jinja: &jina_env
  256. # Default Jinja environment options
  257. block_start_string: '{%'
  258. block_end_string: '%}'
  259. variable_start_string: '{{'
  260. variable_end_string: '}}'
  261. comment_start_string: '{#'
  262. comment_end_string: '#}'
  263. keep_trailing_newline: False
  264. newline_sequence: '\n'
  265. # Next two are enabled by default in Salt
  266. trim_blocks: True
  267. lstrip_blocks: True
  268. # Next two are not enabled by default in Salt
  269. # but worth to consider to enable in future for salt-formulas
  270. line_statement_prefix: '%'
  271. line_comment_prefix: '##'
  272. # for .sls state files
  273. jinja_sls: *jinja_env
  274. With the line_statement/comment* _prefix options enabled following code statements are valid:
  275. .. code-block:: yaml
  276. %- set myvar = 'one'
  277. ## You can mix even with '{%'
  278. {%- set myvar = 'two' %} ## comment
  279. %- set mylist = ['one', 'two', 'three'] ## comment
  280. ## comment
  281. %- for item in mylist: ## comment
  282. {{- item }}
  283. %- endfor
  284. Encrypted pillars
  285. ~~~~~~~~~~~~~~~~~
  286. Note: NACL + below configuration will be available in Salt > 2017.7.
  287. External resources:
  288. - Tutorial to configure salt + reclass ext_pillar and nacl: http://apealive.net/post/2017-09-salt-nacl-ext-pillar/
  289. - Saltstack documentation: https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.nacl.html
  290. Configure salt NACL module:
  291. .. code-block:: shell
  292. pip install --upgrade libnacl===1.5.2
  293. salt-call --local nacl.keygen /etc/salt/pki/master/nacl
  294. local:
  295. saved sk_file:/etc/salt/pki/master/nacl pk_file: /etc/salt/pki/master/nacl.pub
  296. .. code-block:: yaml
  297. salt:
  298. master:
  299. pillar:
  300. reclass: *reclass
  301. nacl:
  302. index: 99
  303. nacl:
  304. box_type: sealedbox
  305. sk_file: /etc/salt/pki/master/nacl
  306. pk_file: /etc/salt/pki/master/nacl.pub
  307. #sk: None
  308. #pk: None
  309. NACL encrypt secrets:
  310. salt-call --local nacl.enc 'my_secret_value' pk_file=/etc/salt/pki/master/nacl.pub
  311. hXTkJpC1hcKMS7yZVGESutWrkvzusXfETXkacSklIxYjfWDlMJmR37MlmthdIgjXpg4f2AlBKb8tc9Woma7q
  312. # or
  313. salt-run nacl.enc 'myotherpass'
  314. ADDFD0Rav6p6+63sojl7Htfrncp5rrDVyeE4BSPO7ipq8fZuLDIVAzQLf4PCbDqi+Fau5KD3/J/E+Pw=
  315. NACL encrypted values on pillar:
  316. Use Boxed syntax `NACL[CryptedValue=]` to encode value on pillar:
  317. .. code-block:: yaml
  318. my_pillar:
  319. my_nacl:
  320. key0: unencrypted_value
  321. key1: NACL[hXTkJpC1hcKMS7yZVGESutWrkvzusXfETXkacSklIxYjfWDlMJmR37MlmthdIgjXpg4f2AlBKb8tc9Woma7q]
  322. NACL large files:
  323. .. code-block:: shell
  324. salt-call nacl.enc_file /tmp/cert.crt out=/srv/salt/env/dev/cert.nacl
  325. # or more advanced
  326. cert=$(cat /tmp/cert.crt)
  327. salt-call --out=newline_values_only nacl.enc_pub data="$cert" > /srv/salt/env/dev/cert.nacl
  328. NACL within template/native pillars:
  329. pillarexample:
  330. user: root
  331. password1: {{salt.nacl.dec('DRB7Q6/X5gGSRCTpZyxS6hlbWj0llUA+uaVyvou3vJ4=')|json}}
  332. cert_key: {{salt.nacl.dec_file('/srv/salt/env/dev/certs/example.com/cert.nacl')|json}}
  333. cert_key2: {{salt.nacl.dec_file('salt:///certs/example.com/cert2.nacl')|json}}
  334. Salt Syndic
  335. -----------
  336. The master of masters
  337. .. code-block:: yaml
  338. salt:
  339. master:
  340. enabled: true
  341. order_masters: True
  342. Lower syndicated master
  343. .. code-block:: yaml
  344. salt:
  345. syndic:
  346. enabled: true
  347. master:
  348. host: master-of-master-host
  349. timeout: 5
  350. Syndicated master with multiple master of masters
  351. .. code-block:: yaml
  352. salt:
  353. syndic:
  354. enabled: true
  355. masters:
  356. - host: master-of-master-host1
  357. - host: master-of-master-host2
  358. timeout: 5
  359. Salt Minion
  360. -----------
  361. Simplest Salt minion setup with central configuration node
  362. .. code-block:: yaml
  363. .. literalinclude:: tests/pillar/minion_master.sls
  364. :language: yaml
  365. Multi-master Salt minion setup
  366. .. literalinclude:: tests/pillar/minion_multi_master.sls
  367. :language: yaml
  368. Salt minion with salt mine options
  369. .. literalinclude:: tests/pillar/minion_mine.sls
  370. :language: yaml
  371. Salt minion with graphing dependencies
  372. .. literalinclude:: tests/pillar/minion_graph.sls
  373. :language: yaml
  374. Salt minion behind HTTP proxy
  375. .. code-block:: yaml
  376. salt:
  377. minion:
  378. proxy:
  379. host: 127.0.0.1
  380. port: 3128
  381. Salt minion to specify non-default HTTP backend. The default tornado backend
  382. does not respect HTTP proxy settings set as environment variables. This is
  383. useful for cases where you need to set no_proxy lists.
  384. .. code-block:: yaml
  385. salt:
  386. minion:
  387. backend: urllib2
  388. Salt minion with PKI certificate authority (CA)
  389. .. literalinclude:: tests/pillar/minion_pki_ca.sls
  390. :language: yaml
  391. Salt minion using PKI certificate
  392. .. literalinclude:: tests/pillar/minion_pki_cert.sls
  393. :language: yaml
  394. Salt minion trust CA certificates issued by salt CA on a specific host (ie: salt-master node)
  395. .. code-block:: yaml
  396. salt:
  397. minion:
  398. trusted_ca_minions:
  399. - cfg01
  400. Salt Minion Proxy
  401. ~~~~~~~~~~~~~~~~~
  402. Salt proxy pillar
  403. .. code-block:: yaml
  404. salt:
  405. minion:
  406. proxy_minion:
  407. master: localhost
  408. device:
  409. vsrx01.mydomain.local:
  410. enabled: true
  411. engine: napalm
  412. csr1000v.mydomain.local:
  413. enabled: true
  414. engine: napalm
  415. .. note:: This is pillar of the the real salt-minion
  416. Proxy pillar for IOS device
  417. .. code-block:: yaml
  418. proxy:
  419. proxytype: napalm
  420. driver: ios
  421. host: csr1000v.mydomain.local
  422. username: root
  423. passwd: r00tme
  424. .. note:: This is pillar of the node thats not able to run salt-minion itself
  425. Proxy pillar for JunOS device
  426. .. code-block:: yaml
  427. proxy:
  428. proxytype: napalm
  429. driver: junos
  430. host: vsrx01.mydomain.local
  431. username: root
  432. passwd: r00tme
  433. optional_args:
  434. config_format: set
  435. .. note:: This is pillar of the node thats not able to run salt-minion itself
  436. Salt SSH
  437. ~~~~~~~~
  438. Salt SSH with sudoer using key
  439. .. literalinclude:: tests/pillar/master_ssh_minion_key.sls
  440. :language: yaml
  441. Salt SSH with sudoer using password
  442. .. literalinclude:: tests/pillar/master_ssh_minion_password.sls
  443. :language: yaml
  444. Salt SSH with root using password
  445. .. literalinclude:: tests/pillar/master_ssh_minion_root.sls
  446. :language: yaml
  447. Salt control (cloud/kvm/docker)
  448. -------------------------------
  449. Salt cloud with local OpenStack provider
  450. .. literalinclude:: tests/pillar/control_cloud_openstack.sls
  451. :language: yaml
  452. Salt cloud with Digital Ocean provider
  453. .. literalinclude:: tests/pillar/control_cloud_digitalocean.sls
  454. :language: yaml
  455. Salt virt with KVM cluster
  456. .. literalinclude:: tests/pillar/control_virt.sls
  457. :language: yaml
  458. salt virt with custom destination for image file
  459. .. literalinclude:: tests/pillar/control_virt_custom.sls
  460. :language: yaml
  461. Usage
  462. =====
  463. Working with salt-cloud
  464. .. code-block:: bash
  465. salt-cloud -m /path/to/map --assume-yes
  466. Debug LIBCLOUD for salt-cloud connection
  467. .. code-block:: bash
  468. export LIBCLOUD_DEBUG=/dev/stderr; salt-cloud --list-sizes provider_name --log-level all
  469. References
  470. ==========
  471. * http://salt.readthedocs.org/en/latest/
  472. * https://github.com/DanielBryan/salt-state-graph
  473. * http://karlgrz.com/testing-salt-states-rapidly-with-docker/
  474. * https://mywushublog.com/2013/03/configuration-management-with-salt-stack/
  475. * http://russell.ballestrini.net/replace-the-nagios-scheduler-and-nrpe-with-salt-stack/
  476. * https://github.com/saltstack-formulas/salt-formula
  477. * http://docs.saltstack.com/en/latest/topics/tutorials/multimaster.html
  478. salt-cloud
  479. ----------
  480. * http://www.blog.sandro-mathys.ch/2013/07/setting-user-password-when-launching.html
  481. * http://cloudinit.readthedocs.org/en/latest/topics/examples.html
  482. * http://salt-cloud.readthedocs.org/en/latest/topics/install/index.html
  483. * http://docs.saltstack.com/topics/cloud/digitalocean.html
  484. * http://salt-cloud.readthedocs.org/en/latest/topics/rackspace.html
  485. * http://salt-cloud.readthedocs.org/en/latest/topics/map.html
  486. * http://docs.saltstack.com/en/latest/topics/tutorials/multimaster.html
  487. Documentation and Bugs
  488. ======================
  489. To learn how to install and update salt-formulas, consult the documentation
  490. available online at:
  491. http://salt-formulas.readthedocs.io/
  492. In the unfortunate event that bugs are discovered, they should be reported to
  493. the appropriate issue tracker. Use Github issue tracker for specific salt
  494. formula:
  495. https://github.com/salt-formulas/salt-formula-salt/issues
  496. For feature requests, bug reports or blueprints affecting entire ecosystem,
  497. use Launchpad salt-formulas project:
  498. https://launchpad.net/salt-formulas
  499. You can also join salt-formulas-users team and subscribe to mailing list:
  500. https://launchpad.net/~salt-formulas-users
  501. Developers wishing to work on the salt-formulas projects should always base
  502. their work on master branch and submit pull request against specific formula.
  503. https://github.com/salt-formulas/salt-formula-salt
  504. Any questions or feedback is always welcome so feel free to join our IRC
  505. channel:
  506. #salt-formulas @ irc.freenode.net