====
Salt
====
Salt is a new approach to infrastructure management. Easy enough to get running in minutes, scalable enough to manage tens of thousands of servers, and fast enough to communicate with them in seconds.
Salt delivers a dynamic communication bus for infrastructures that can be used for orchestration, remote execution, configuration management and much more.
Sample pillars
==============
Salt master
-----------
Salt master with base environment and pillar metadata source
.. code-block:: yaml
salt:
master:
enabled: true
command_timeout: 5
worker_threads: 2
pillar:
engine: salt
source:
engine: git
address: 'git@repo.domain.com:salt/pillar-demo.git'
branch: 'master'
base_environment: prd
environment:
prd:
enabled: true
formula:
linux:
source: git
address: 'git@repo.domain.com:salt/formula-linux.git'
branch: 'master'
salt:
source: git
address: 'git@repo.domain.com:salt/formula-salt.git'
branch: 'master'
openssh:
source: git
address: 'git@repo.domain.com:salt/formula-openssh.git'
branch: 'master'
Simple Salt master with base environment and custom states
.. code-block:: yaml
salt:
master:
...
environment:
base:
states:
- name: gitlab
source: git
address: 'git@repo.domain.cz:salt/state-gitlab.git'
branch: 'master'
formulas:
...
Salt master with reclass ENC
.. code-block:: yaml
salt:
master:
enabled: true
...
pillar:
engine: reclass
data_dir: /srv/salt/reclass
Salt master with windows repository
.. code-block:: yaml
salt:
master:
enabled: true
...
windows_repo:
type: git
address: 'git@repo.domain.com:salt/win-packages.git'
Salt master with API
.. code-block:: yaml
salt:
master:
...
api:
enabled: true
port: 8000
Salt master with preset minions
.. code-block:: yaml
salt:
master:
enabled: true
...
minions:
- name: 'node1.system.location.domain.com'
Salt master syndicate master of masters
.. code-block:: yaml
salt:
master:
enabled: true
...
syndic:
mode: master
Salt master syndicate (client) master
.. code-block:: yaml
salt:
master:
enabled: true
...
syndicate:
mode: client
host: master-master
Salt master with custom handlers
.. code-block:: yaml
salt:
master:
enabled: true
command_timeout: 5
worker_threads: 2
environments:
- name: base
states:
- source: git
address: 'git@repo.domain.com:salt/state-ubuntu.git'
branch: 'master'
pillar:
source: git
address: 'git@repo.domain.com:salt/pillar-demo.git'
branch: 'master'
handlers:
name: logstash
type: udp
bind:
host: 127.0.0.1
port: 9999
minion:
handlers:
- engine: udp
bind:
host: 127.0.0.1
port: 9999
- engine: zmq
bind:
host: 127.0.0.1
port: 9999
Salt minion
-----------
Simplest Salt minion
.. code-block:: yaml
salt:
minion:
enabled: true
master:
host: master.domain.com
Multi-master Salt minion
.. code-block:: yaml
salt:
minion:
enabled: true
masters:
- host: master1.domain.com
- host: master2.domain.com
Salt minion with salt mine options
.. code-block:: yaml
salt:
minion:
enabled: true
master:
host: master.domain.com
mine:
interval: 60
module:
grains.items: []
network.interfaces: []
Salt minion with graphing dependencies
.. code-block:: yaml
salt:
minion:
enabled: true
graph_states: true
master:
host: master.domain.com
Salt control (cloud/virt)
-------------------------
Salt cloud with local OpenStack insecure (ignoring SSL cert errors) provider
.. code-block:: yaml
salt:
control:
enabled: true
provider:
openstack_account:
engine: openstack
insecure: true
region: RegionOne
identity_url: 'https://10.0.0.2:35357'
tenant: devops
user: user
password: 'password'
fixed_networks:
- 123d3332-18be-4d1d-8d4d-5f5a54456554e
floating_networks:
- public
ignore_cidr: 192.168.0.0/16
Salt cloud with Digital Ocean provider
.. code-block:: yaml
salt:
control:
enabled: true
provider:
dony1:
engine: digital_ocean
region: New York 1
client_key: xxxxxxx
api_key: xxxxxxx
Salt cloud with cluster definition
.. code-block:: yaml
salt:
control:
enabled: true
cluster:
devops_ase:
config:
engine: salt
host: 147.32.120.1
node:
proxy1.ase.cepsos.cz:
provider: cepsos_devops
image: Ubuntu12.04 x86_64
size: m1.medium
node1.ase.cepsos.cz:
provider: cepsos_devops
image: Ubuntu12.04 x86_64
size: m1.medium
node2.ase.cepsos.cz:
provider: cepsos_devops
image: Ubuntu12.04 x86_64
size: m1.medium
node3.ase.cepsos.cz:
provider: cepsos_devops
image: Ubuntu12.04 x86_64
size: m1.medium
Usage
=====
Working with salt-cloud
.. code-block:: bash
salt-cloud -m /path/to/map --assume-yes
Debug LIBCLOUD for salt-cloud connection
.. code-block:: bash
export LIBCLOUD_DEBUG=/dev/stderr; salt-cloud --list-sizes provider_name --log-level all
Read more
=========
* http://salt.readthedocs.org/en/latest/
* https://github.com/DanielBryan/salt-state-graph
* http://karlgrz.com/testing-salt-states-rapidly-with-docker/
* https://mywushublog.com/2013/03/configuration-management-with-salt-stack/
* http://russell.ballestrini.net/replace-the-nagios-scheduler-and-nrpe-with-salt-stack/
* https://github.com/saltstack-formulas/salt-formula
* http://docs.saltstack.com/en/latest/topics/tutorials/multimaster.html
salt-cloud
----------
* http://www.blog.sandro-mathys.ch/2013/07/setting-user-password-when-launching.html
* http://cloudinit.readthedocs.org/en/latest/topics/examples.html
* http://salt-cloud.readthedocs.org/en/latest/topics/install/index.html
* http://docs.saltstack.com/topics/cloud/digitalocean.html
* http://salt-cloud.readthedocs.org/en/latest/topics/rackspace.html
* http://salt-cloud.readthedocs.org/en/latest/topics/map.html
* http://docs.saltstack.com/en/latest/topics/tutorials/multimaster.html