New version of salt-formula from Saltstack
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890
  1. =====
  2. Usage
  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 back end:
  14. .. literalinclude:: tests/pillar/master_single_pillar.sls
  15. :language: yaml
  16. Salt master with reclass ENC metadata back end:
  17. .. literalinclude:: tests/pillar/master_single_reclass.sls
  18. :language: yaml
  19. Salt master with Architect ENC metadata back end:
  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. .. code-block:: yaml
  33. salt:
  34. master:
  35. enabled: true
  36. pillar:
  37. engine: salt
  38. source:
  39. engine: local
  40. ext_pillars:
  41. 1:
  42. module: cmd_json
  43. params: '"echo {\"arg\": \"val\"}"'
  44. 2:
  45. module: cmd_yaml
  46. params: /usr/local/bin/get_yml.sh
  47. Salt master with API:
  48. .. literalinclude:: tests/pillar/master_api.sls
  49. :language: yaml
  50. Salt master with defined user ACLs:
  51. .. literalinclude:: tests/pillar/master_acl.sls
  52. :language: yaml
  53. Salt master with preset minions:
  54. .. code-block:: yaml
  55. salt:
  56. master:
  57. enabled: true
  58. minions:
  59. - name: 'node1.system.location.domain.com'
  60. Salt master with pip based installation (optional):
  61. .. code-block:: yaml
  62. salt:
  63. master:
  64. enabled: true
  65. ...
  66. source:
  67. engine: pip
  68. version: 2016.3.0rc2
  69. Install formula through system package management:
  70. .. code-block:: yaml
  71. salt:
  72. master:
  73. enabled: true
  74. ...
  75. environment:
  76. prd:
  77. keystone:
  78. source: pkg
  79. name: salt-formula-keystone
  80. nova:
  81. source: pkg
  82. name: salt-formula-keystone
  83. version: 0.1+0~20160818133412.24~1.gbp6e1ebb
  84. postresql:
  85. source: pkg
  86. name: salt-formula-postgresql
  87. version: purged
  88. Formula keystone is installed latest version and the formulas
  89. without version are installed in one call to aptpkg module.
  90. If the version attribute is present sls iterates over formulas
  91. and take action to install specific version or remove it.
  92. The version attribute may have these values
  93. ``[latest|purged|removed|<VERSION>]``.
  94. Clone master branch of keystone formula as local feature branch:
  95. .. code-block:: yaml
  96. salt:
  97. master:
  98. enabled: true
  99. ...
  100. environment:
  101. dev:
  102. formula:
  103. keystone:
  104. source: git
  105. address: git@github.com:openstack/salt-formula-keystone.git
  106. revision: master
  107. branch: feature
  108. Salt master with specified formula refs (for example, for Gerrit
  109. review):
  110. .. code-block:: yaml
  111. salt:
  112. master:
  113. enabled: true
  114. ...
  115. environment:
  116. dev:
  117. formula:
  118. keystone:
  119. source: git
  120. address: https://git.openstack.org/openstack/salt-formula-keystone
  121. revision: refs/changes/56/123456/1
  122. Salt master logging configuration:
  123. .. code-block:: yaml
  124. salt:
  125. master:
  126. enabled: true
  127. log:
  128. level: warning
  129. file: '/var/log/salt/master'
  130. level_logfile: warning
  131. Salt minion logging configuration:
  132. .. code-block:: yaml
  133. salt:
  134. minion:
  135. enabled: true
  136. log:
  137. level: info
  138. file: '/var/log/salt/minion'
  139. level_logfile: warning
  140. Salt master with logging handlers:
  141. .. code-block:: yaml
  142. salt:
  143. master:
  144. enabled: true
  145. handler:
  146. handler01:
  147. engine: udp
  148. bind:
  149. host: 127.0.0.1
  150. port: 9999
  151. minion:
  152. handler:
  153. handler01:
  154. engine: udp
  155. bind:
  156. host: 127.0.0.1
  157. port: 9999
  158. handler02:
  159. engine: zmq
  160. bind:
  161. host: 127.0.0.1
  162. port: 9999
  163. Salt engine definition for saltgraph metadata collector:
  164. .. code-block:: yaml
  165. salt:
  166. master:
  167. engine:
  168. graph_metadata:
  169. engine: saltgraph
  170. host: 127.0.0.1
  171. port: 5432
  172. user: salt
  173. password: salt
  174. database: salt
  175. Salt engine definition for Architect service:
  176. .. code-block:: yaml
  177. salt:
  178. master:
  179. engine:
  180. architect:
  181. engine: architect
  182. project: project-name
  183. host: architect-api
  184. port: 8181
  185. username: salt
  186. password: password
  187. Salt engine definition for sending events from docker events:
  188. .. code-block:: yaml
  189. salt:
  190. master:
  191. engine:
  192. docker_events:
  193. docker_url: unix://var/run/docker.sock
  194. Salt master peer setup for remote certificate signing:
  195. .. code-block:: yaml
  196. salt:
  197. master:
  198. peer:
  199. ".*":
  200. - x509.sign_remote_certificate
  201. Salt master backup configuration:
  202. .. code-block:: yaml
  203. salt:
  204. master:
  205. backup: true
  206. initial_data:
  207. engine: backupninja
  208. home_dir: remote-backup-home-dir
  209. source: backup-node-host
  210. host: original-salt-master-id
  211. Configure verbosity of state output (used for :command:`salt`
  212. command):
  213. .. code-block:: yaml
  214. salt:
  215. master:
  216. state_output: changes
  217. Pass pillar render error to minion log:
  218. .. note:: When set to `False` this option is great for debuging.
  219. However it is not recomended for any production environment as it may contain
  220. templating data as passwords, and so on, that minion should not expose.
  221. .. code-block:: yaml
  222. salt:
  223. master:
  224. pillar_safe_render_error: False
  225. Enable Windows repository support:
  226. .. code-block:: yaml
  227. salt:
  228. master:
  229. win_repo:
  230. source: git
  231. address: https://github.com/saltstack/salt-winrepo-ng
  232. revision: master
  233. Configure a gitfs_remotes resource:
  234. .. code-block:: yaml
  235. salt:
  236. master:
  237. gitfs_remotes:
  238. salt_formula:
  239. url: https://github.com/salt-formulas/salt-formula-salt.git
  240. enabled: true
  241. params:
  242. base: master
  243. Read more about gitfs resource options in the official Salt documentation.
  244. Event/Reactor systems
  245. ~~~~~~~~~~~~~~~~~~~~~
  246. Salt to synchronize node pillar and modules after start:
  247. .. code-block:: yaml
  248. salt:
  249. master:
  250. reactor:
  251. salt/minion/*/start:
  252. - salt://salt/reactor/node_start.sls
  253. Trigger basic node install:
  254. .. code-block:: yaml
  255. salt:
  256. master:
  257. reactor:
  258. salt/minion/install:
  259. - salt://salt/reactor/node_install.sls
  260. Sample event to trigger the node installation:
  261. .. code-block:: bash
  262. salt-call event.send 'salt/minion/install'
  263. Run any defined orchestration pipeline:
  264. .. code-block:: yaml
  265. salt:
  266. master:
  267. reactor:
  268. salt/orchestrate/start:
  269. - salt://salt/reactor/orchestrate_start.sls
  270. Event to trigger the orchestration pipeline:
  271. .. code-block:: bash
  272. salt-call event.send 'salt/orchestrate/start' "{'orchestrate': 'salt/orchestrate/infra_install.sls'}"
  273. Synchronise modules and pillars on minion start:
  274. .. code-block:: yaml
  275. salt:
  276. master:
  277. reactor:
  278. 'salt/minion/*/start':
  279. - salt://salt/reactor/minion_start.sls
  280. Add and/or remove the minion key:
  281. .. code-block:: yaml
  282. salt:
  283. master:
  284. reactor:
  285. salt/key/create:
  286. - salt://salt/reactor/key_create.sls
  287. salt/key/remove:
  288. - salt://salt/reactor/key_remove.sls
  289. Event to trigger the key creation:
  290. .. code-block:: bash
  291. salt-call event.send 'salt/key/create' \
  292. > "{'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'}}"
  293. .. note::
  294. You can add pass additional ``orch_pre_create``, ``orch_post_create``,
  295. ``orch_pre_remove`` or ``orch_post_remove`` parameters to the event
  296. to call extra orchestrate files. This can be useful for example for
  297. registering/unregistering nodes from the monitoring alarms or dashboards.
  298. The key creation event needs to be run from other machine than the one
  299. being registered.
  300. Event to trigger the key removal:
  301. .. code-block:: bash
  302. salt-call event.send 'salt/key/remove'
  303. Control VM provisioning:
  304. .. code-block:: yaml
  305. virt:
  306. disk:
  307. three_disks:
  308. - system:
  309. size: 4096
  310. image: ubuntu.qcow
  311. - repository_snapshot:
  312. size: 8192
  313. image: snapshot.qcow
  314. - cinder-volume:
  315. size: 2048
  316. nic:
  317. control:
  318. - name: nic01
  319. bridge: br-pxe
  320. model: virtio
  321. - name: nic02
  322. bridge: br-cp
  323. model: virtio
  324. - name: nic03
  325. bridge: br-store-front
  326. model: virtio
  327. - name: nic04
  328. bridge: br-public
  329. model: virtio
  330. - name: nic05
  331. bridge: br-prv
  332. model: virtio
  333. virtualport:
  334. type: openvswitch
  335. salt:
  336. control:
  337. enabled: true
  338. virt_enabled: true
  339. size:
  340. medium_three_disks:
  341. cpu: 2
  342. ram: 4
  343. disk_profile: three_disks
  344. cluster:
  345. mycluster:
  346. domain: neco.virt.domain.com
  347. engine: virt
  348. #Option to set rng globaly
  349. rng: false
  350. node:
  351. ubuntu1:
  352. provider: node01.domain.com
  353. image: ubuntu.qcow
  354. size: medium
  355. img_dest: /var/lib/libvirt/ssdimages
  356. #Rng defined on node will have higher priority then global one
  357. rng:
  358. backend: /dev/urandom
  359. model: random
  360. rate:
  361. period: '1800'
  362. bytes: '1500'
  363. mac:
  364. nic01: AC:DE:48:AA:AA:AA
  365. nic02: AC:DE:48:AA:AA:BB
  366. To enable Redis plugin for the Salt caching subsystem, use the
  367. below pillar structure:
  368. .. code-block:: yaml
  369. salt:
  370. master:
  371. cache:
  372. plugin: redis
  373. host: localhost
  374. port: 6379
  375. db: '0'
  376. password: pass_word
  377. bank_prefix: 'MCP'
  378. bank_keys_prefix: 'MCPKEY'
  379. key_prefix: 'KEY'
  380. separator: '@'
  381. Jinja options
  382. -------------
  383. Use the following options to update default Jinja renderer options.
  384. Salt recognize Jinja options for templates and for the ``sls`` files.
  385. For full list of options, see Jinja documentation:
  386. http://jinja.pocoo.org/docs/api/#high-level-api
  387. .. code-block:: yaml
  388. salt:
  389. renderer:
  390. # for templates
  391. jinja: &jina_env
  392. # Default Jinja environment options
  393. block_start_string: '{%'
  394. block_end_string: '%}'
  395. variable_start_string: '{{'
  396. variable_end_string: '}}'
  397. comment_start_string: '{#'
  398. comment_end_string: '#}'
  399. keep_trailing_newline: False
  400. newline_sequence: '\n'
  401. # Next two are enabled by default in Salt
  402. trim_blocks: True
  403. lstrip_blocks: True
  404. # Next two are not enabled by default in Salt
  405. # but worth to consider to enable in future for salt-formulas
  406. line_statement_prefix: '%'
  407. line_comment_prefix: '##'
  408. # for .sls state files
  409. jinja_sls: *jinja_env
  410. With the ``line_statement/comment* _prefix`` options enabled following
  411. code statements are valid:
  412. .. code-block:: yaml
  413. %- set myvar = 'one'
  414. ## You can mix even with '{%'
  415. {%- set myvar = 'two' %} ## comment
  416. %- set mylist = ['one', 'two', 'three'] ## comment
  417. ## comment
  418. %- for item in mylist: ## comment
  419. {{- item }}
  420. %- endfor
  421. Encrypted pillars
  422. ~~~~~~~~~~~~~~~~~
  423. .. note:: NACL and the below configuration will be available in Salt > 2017.7.
  424. External resources:
  425. - Tutorial to configure the Salt and Reclass ``ext_pillar`` and NACL:
  426. http://apealive.net/post/2017-09-salt-nacl-ext-pillar/
  427. - SaltStack documentation:
  428. https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.nacl.html
  429. Configure salt NACL module:
  430. .. code-block:: bash
  431. pip install --upgrade libnacl===1.5.2
  432. salt-call --local nacl.keygen /etc/salt/pki/master/nacl
  433. local:
  434. saved sk_file:/etc/salt/pki/master/nacl pk_file: /etc/salt/pki/master/nacl.pub
  435. .. code-block:: yaml
  436. salt:
  437. master:
  438. pillar:
  439. reclass: *reclass
  440. nacl:
  441. index: 99
  442. nacl:
  443. box_type: sealedbox
  444. sk_file: /etc/salt/pki/master/nacl
  445. pk_file: /etc/salt/pki/master/nacl.pub
  446. #sk: None
  447. #pk: None
  448. NACL encrypt secrets:
  449. .. code-block:: bash
  450. salt-call --local nacl.enc 'my_secret_value' pk_file=/etc/salt/pki/master/nacl.pub
  451. hXTkJpC1hcKMS7yZVGESutWrkvzusXfETXkacSklIxYjfWDlMJmR37MlmthdIgjXpg4f2AlBKb8tc9Woma7q
  452. # or
  453. salt-run nacl.enc 'myotherpass'
  454. ADDFD0Rav6p6+63sojl7Htfrncp5rrDVyeE4BSPO7ipq8fZuLDIVAzQLf4PCbDqi+Fau5KD3/J/E+Pw=
  455. NACL encrypted values on pillar:
  456. Use Boxed syntax `NACL[CryptedValue=]` to encode value on pillar:
  457. .. code-block:: yaml
  458. my_pillar:
  459. my_nacl:
  460. key0: unencrypted_value
  461. key1: NACL[hXTkJpC1hcKMS7yZVGESutWrkvzusXfETXkacSklIxYjfWDlMJmR37MlmthdIgjXpg4f2AlBKb8tc9Woma7q]
  462. NACL large files:
  463. .. code-block:: bash
  464. salt-call nacl.enc_file /tmp/cert.crt out=/srv/salt/env/dev/cert.nacl
  465. # or more advanced
  466. cert=$(cat /tmp/cert.crt)
  467. salt-call --out=newline_values_only nacl.enc_pub data="$cert" > /srv/salt/env/dev/cert.nacl
  468. NACL within template/native pillars:
  469. .. code-block:: yaml
  470. pillarexample:
  471. user: root
  472. password1: {{salt.nacl.dec('DRB7Q6/X5gGSRCTpZyxS6hlbWj0llUA+uaVyvou3vJ4=')|json}}
  473. cert_key: {{salt.nacl.dec_file('/srv/salt/env/dev/certs/example.com/cert.nacl')|json}}
  474. cert_key2: {{salt.nacl.dec_file('salt:///certs/example.com/cert2.nacl')|json}}
  475. Salt Syndic
  476. -----------
  477. The master of masters:
  478. .. code-block:: yaml
  479. salt:
  480. master:
  481. enabled: true
  482. order_masters: True
  483. Lower syndicated master:
  484. .. code-block:: yaml
  485. salt:
  486. syndic:
  487. enabled: true
  488. master:
  489. host: master-of-master-host
  490. timeout: 5
  491. Syndicated master with multiple master of masters:
  492. .. code-block:: yaml
  493. salt:
  494. syndic:
  495. enabled: true
  496. masters:
  497. - host: master-of-master-host1
  498. - host: master-of-master-host2
  499. timeout: 5
  500. Salt Minion
  501. -----------
  502. Minion ID by default triggers dependency on Linux formula, as it uses fqdn
  503. configured from `linux.system.name` and `linux.system.domain` pillar.
  504. To override, provide exact minion ID you require. The same can be set for
  505. master ID rendered at ``master.conf``.
  506. .. code-block:: yaml
  507. salt:
  508. minion:
  509. id: minion1.production
  510. master:
  511. id: master.production
  512. Simplest Salt minion setup with central configuration node:
  513. .. literalinclude:: tests/pillar/minion_master.sls
  514. :language: yaml
  515. Multi-master Salt minion setup:
  516. .. literalinclude:: tests/pillar/minion_multi_master.sls
  517. :language: yaml
  518. Salt minion with salt mine options:
  519. .. literalinclude:: tests/pillar/minion_mine.sls
  520. :language: yaml
  521. Salt minion with graphing dependencies:
  522. .. literalinclude:: tests/pillar/minion_graph.sls
  523. :language: yaml
  524. Salt minion behind HTTP proxy:
  525. .. code-block:: yaml
  526. salt:
  527. minion:
  528. proxy:
  529. host: 127.0.0.1
  530. port: 3128
  531. Salt minion to specify non-default HTTP backend. The default
  532. tornado backend does not respect HTTP proxy settings set as
  533. environment variables. This is useful for cases where you need
  534. to set no_proxy lists.
  535. .. code-block:: yaml
  536. salt:
  537. minion:
  538. backend: urllib2
  539. Salt minion with PKI certificate authority (CA):
  540. .. literalinclude:: tests/pillar/minion_pki_ca.sls
  541. :language: yaml
  542. Salt minion using PKI certificate
  543. .. literalinclude:: tests/pillar/minion_pki_cert.sls
  544. :language: yaml
  545. Salt minion trust CA certificates issued by salt CA on a
  546. specific host (ie: salt-master node):
  547. .. code-block:: yaml
  548. salt:
  549. minion:
  550. trusted_ca_minions:
  551. - cfg01
  552. Salt Minion Proxy
  553. ~~~~~~~~~~~~~~~~~
  554. Salt proxy pillar:
  555. .. code-block:: yaml
  556. salt:
  557. minion:
  558. proxy_minion:
  559. master: localhost
  560. device:
  561. vsrx01.mydomain.local:
  562. enabled: true
  563. engine: napalm
  564. csr1000v.mydomain.local:
  565. enabled: true
  566. engine: napalm
  567. .. note:: This is pillar of the the real salt-minion
  568. Proxy pillar for IOS device:
  569. .. code-block:: yaml
  570. proxy:
  571. proxytype: napalm
  572. driver: ios
  573. host: csr1000v.mydomain.local
  574. username: root
  575. passwd: r00tme
  576. .. note:: This is pillar of the node thats not able to run
  577. salt-minion itself.
  578. Proxy pillar for JunOS device:
  579. .. code-block:: yaml
  580. proxy:
  581. proxytype: napalm
  582. driver: junos
  583. host: vsrx01.mydomain.local
  584. username: root
  585. passwd: r00tme
  586. optional_args:
  587. config_format: set
  588. .. note:: This pillar applies to the node that can not run
  589. salt-minion itself.
  590. Salt SSH
  591. ~~~~~~~~
  592. Salt SSH with sudoer using key:
  593. .. literalinclude:: tests/pillar/master_ssh_minion_key.sls
  594. :language: yaml
  595. Salt SSH with sudoer using password:
  596. .. literalinclude:: tests/pillar/master_ssh_minion_password.sls
  597. :language: yaml
  598. Salt SSH with root using password:
  599. .. literalinclude:: tests/pillar/master_ssh_minion_root.sls
  600. :language: yaml
  601. Salt control (cloud/kvm/docker)
  602. -------------------------------
  603. Salt cloud with local OpenStack provider:
  604. .. literalinclude:: tests/pillar/control_cloud_openstack.sls
  605. :language: yaml
  606. Salt cloud with Digital Ocean provider:
  607. .. literalinclude:: tests/pillar/control_cloud_digitalocean.sls
  608. :language: yaml
  609. Salt virt with KVM cluster:
  610. .. literalinclude:: tests/pillar/control_virt.sls
  611. :language: yaml
  612. Salt virt with custom destination for image file:
  613. .. literalinclude:: tests/pillar/control_virt_custom.sls
  614. :language: yaml
  615. Usage
  616. =====
  617. Working with salt-cloud:
  618. .. code-block:: bash
  619. salt-cloud -m /path/to/map --assume-yes
  620. Debug LIBCLOUD for salt-cloud connection:
  621. .. code-block:: bash
  622. export LIBCLOUD_DEBUG=/dev/stderr; salt-cloud --list-sizes provider_name --log-level all
  623. Read more
  624. =========
  625. * http://salt.readthedocs.org/en/latest/
  626. * https://github.com/DanielBryan/salt-state-graph
  627. * http://karlgrz.com/testing-salt-states-rapidly-with-docker/
  628. * https://mywushublog.com/2013/03/configuration-management-with-salt-stack/
  629. * http://russell.ballestrini.net/replace-the-nagios-scheduler-and-nrpe-with-salt-stack/
  630. * https://github.com/saltstack-formulas/salt-formula
  631. * http://docs.saltstack.com/en/latest/topics/tutorials/multimaster.html
  632. salt-cloud
  633. ----------
  634. * http://www.blog.sandro-mathys.ch/2013/07/setting-user-password-when-launching.html
  635. * http://cloudinit.readthedocs.org/en/latest/topics/examples.html
  636. * http://salt-cloud.readthedocs.org/en/latest/topics/install/index.html
  637. * http://docs.saltstack.com/topics/cloud/digitalocean.html
  638. * http://salt-cloud.readthedocs.org/en/latest/topics/rackspace.html
  639. * http://salt-cloud.readthedocs.org/en/latest/topics/map.html
  640. * http://docs.saltstack.com/en/latest/topics/tutorials/multimaster.html
  641. Documentation and Bugs
  642. ======================
  643. * http://salt-formulas.readthedocs.io/
  644. Learn how to install and update salt-formulas
  645. * https://github.com/salt-formulas/salt-formula-salt/issues
  646. In the unfortunate event that bugs are discovered, report the issue to the
  647. appropriate issue tracker. Use the Github issue tracker for a specific salt
  648. formula
  649. * https://launchpad.net/salt-formulas
  650. For feature requests, bug reports, or blueprints affecting the entire
  651. ecosystem, use the Launchpad salt-formulas project
  652. * https://launchpad.net/~salt-formulas-users
  653. Join the salt-formulas-users team and subscribe to mailing list if required
  654. * https://github.com/salt-formulas/salt-formula-salt
  655. Develop the salt-formulas projects in the master branch and then submit pull
  656. requests against a specific formula
  657. * #salt-formulas @ irc.freenode.net
  658. Use this IRC channel in case of any questions or feedback which is always
  659. welcome