Skip to main content

Saltstack Refresh Course 2: Salt State

Shenzhen, China

Setting up a Webserver​

I want to define a webserver state using a Salt state file and apply it to my minion server:

ApplicationApache
File/var/www/html/index.html
Userswebadmin
SSH KeyFor webadmin user

Init.sls​

Every minion that with a name that starts with "salt-minion" should have the apache state applied to it. We can then continue and and create said state in:

/srv/salt/base/apache/init.sls

install_apache:
pkg.installed:
- pkgs:
- apache2

index_html:
file.managed:
- name: /var/www/html/index.html
- source: salt://apache/templates/index.html
- user: www-data
- group: www-data
- mode: 644

apache_service:
service.running:
- name: apache2
- enable: True

Note that the Apache package for Ubuntu is called apache2. For CentOS you would have to use the package name httpd instead.

File Management​

This state file defines an index page that we want to use with Apache that we can now create in:

/srv/salt/base/apache/templates/index.html

<!DOCTYPE html>

<html lang="en">
<head>
<meta charset="utf-8" />

<title>Salty Dayz, Sailor!</title>
<meta name="description" content="Salt Apache Template" />
</head>

<body>
<h1>Salty Dayz, Sailor!</h1>
</body>
</html>

Run your State​

We can now apply this state to our minion server with:

salt 'salt-minion*' state.sls apache

salt-minion:
----------
ID: install_apache
Function: pkg.installed
Result: True
Comment: All specified packages are already installed
Started: 10:05:29.993312
Duration: 37.941 ms
Changes:
----------
ID: index_html
Function: file.managed
Name: /var/www/html/index.html
Result: True
Comment: File /var/www/html/index.html updated
Started: 10:05:30.033993
Duration: 39.989 ms
Changes:
----------
diff:
---
+++
@@ -1,4 +1,14 @@
<!doctype html>
+
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+
+ <title>Salty Dayz, Sailor!</title>
+ <meta name="description" content="Salt Apache Template">
+</head>
+
<body>
- <h1>Ubuntu Rocks.</h1>
+ <h1>Salty Dayz, Sailor!</h1>
</body>
+</html>
group:
www-data
user:
www-data
----------
ID: apache_service
Function: service.running
Name: apache2
Result: True
Comment: The service apache2 is already running
Started: 10:05:30.074597
Duration: 38.561 ms
Changes:

Summary for salt-minion
------------
Succeeded: 3 (changed=1)
Failed: 0
------------
Total states run: 3
Total run time: 116.491 ms

Verify that the website is online by first getting your minions IP address:

salt 'salt-minion*' grains.get ipv4

salt-minion:
- 127.0.0.1
- 172.17.0.1
- 172.18.0.1
- 192.168.2.111

And then accessing the Apache service with your web browser http://192.168.2.111:80.