SaltStack Vagrant Part 2
Last week we talked about creating a simple httpd service when we spin up our vagrant VM. This week I will continue to talk more about Salt.
Inside The Vagrant Virtual Machine
Salt run in /srv/
folder in our VM. Therefore our folder structure in virtual machine will look like this.
- /srv/
- pillar/ # Unlike state tree, pillar data is only available for the targeted minion specified by the matcher type.
- salt/ # All the configuration for the minion to run
- /etc/salt/
- minion #minion configuration
- master #master configuration
Running in Master-less vs Master mode
- Master-less mode
salt-call --local state.highstate
- Master mode: salt-minion need to accept the salt-key first
salt '*' state.highstate
For running vagrant, we use master-less mode, the different between master mode and master-less mode shouldn’t be large.
Objective
To create user(s) base on pillar files, uninstall httpd and install nginx
Coding
- Vagrantfile: mount the desired folder to your VM
config.vm.synced_folder "salt/root/", "/srv/salt/"
config.vm.synced_folder "salt/pillar/", "/srv/pillar/"
- /srv/pillar/users/init.sls: Sensitive user data
users:
henglim.ng:
uid: 1000
fullname: Heng Lim Ng
groups:
- wheel
- /srv/pillar/top.sls: Include any new pillar data here
base:
'*':
- users
- /srv/salt/top.sls: the list of action we want to perform in env ‘base’, according to our objective
base:
'*':
- httpd.absent
- user
- nginx
- /srv/salt/user/init.sls: make use of our pillar users
{% for username, user in pillar.get('users', {}).items() %}
{{username}}:
user.present:
- fullname: {{user.fullname}}
- shell: /bin/bash
- home: /home/{{username}}
- groups: {{user.groups}}
{% endfor %}
- /srv/salt/httpd/absent.sls: make sure we uninstalled the httpd that we have installed
httpd: # ID declaration
pkg.removed: []
/var/www/html/index.html:
file.absent: []
- /srv/salt/nginx/init.sls: yum search for
nginx
, if found, installnginx
and enable it.
nginx: # ID declaration
pkg.installed: []
service.running:
- enable: True
To Be Continue
In this post I mainly described how to make use of pillar to manage our VM user, uninstalling and installing of services using yum packages. Stay tuned for the SaltStack Vagrant Part 3.
Written on January 23, 2016