|
#!/bin/sh
|
|
|
|
# Author: Pekka Helenius (~Fincer), 2018
|
|
#
|
|
# - This script creates two different apache configurations for two minions: minion_1 & minion_2
|
|
# - This script is meant to be run on Salt master
|
|
#
|
|
# Default site contents for all minions is: Nothing interesting here
|
|
# minion_2 gets contents of 'uname -a' command into the index.html page
|
|
#
|
|
|
|
if [ $(id -u) -eq 0 ]; then
|
|
|
|
mkdir -p /srv/{pillar,salt/apache}
|
|
|
|
if [ ! -f /srv/pillar/top.sls ]; then
|
|
tee /srv/pillar/top.sls <<PILLAR_TOP
|
|
base:
|
|
PILLAR_TOP
|
|
fi
|
|
|
|
if [ $(grep "\- apache" /srv/pillar/top.sls | wc -l) -eq 0 ]; then
|
|
tee -a /srv/pillar/top.sls <<PILLAR_TOP_ADD
|
|
'*':
|
|
- apache_site_data
|
|
PILLAR_TOP_ADD
|
|
fi
|
|
|
|
tee /srv/pillar/apache_site_data.sls <<SITE_DATA
|
|
{% if grains['id'] == 'minion_2' %}
|
|
site_data: '{{ salt['cmd.run']('uname -a') }}'
|
|
{% endif %}
|
|
SITE_DATA
|
|
|
|
tee /srv/salt/apache/samplesite.conf <<SAMPLE_SITE
|
|
<VirtualHost *:80>
|
|
ServerName {{ servername }}
|
|
ServerAlias {{ serveralias }}
|
|
ServerAdmin webmaster@localhost
|
|
DocumentRoot {{ ('/var/www/html/' + grains['id'] + '/') }}
|
|
ErrorLog ${APACHE_LOG_DIR}/error.log
|
|
CustomLog ${APACHE_LOG_DIR}/access.log combined
|
|
</VirtualHost>
|
|
SAMPLE_SITE
|
|
|
|
tee /srv/salt/apache/sampleindex.html <<SAMPLE_HTML
|
|
{{ pillar.get('site_data','Nothing interesting here') }}
|
|
SAMPLE_HTML
|
|
|
|
tee /srv/salt/apache/init.sls <<APACHE_DATA
|
|
|
|
{% set servername = grains['os'].lower() + '.' + grains['id'] + '.com' %}
|
|
{% set serveralias = 'www.' + grains['os'].lower() + '.' + grains['id'] + '.com' %}
|
|
|
|
apache_install:
|
|
pkg.installed:
|
|
- pkgs:
|
|
- apache2
|
|
- curl
|
|
|
|
sample_page_conf:
|
|
file.managed:
|
|
- name: /etc/apache2/sites-available/{{ grains['id'] }}.conf
|
|
- source: salt://apache/samplesite.conf
|
|
- mode: 0644
|
|
- user: root
|
|
- group: root
|
|
- template: jinja
|
|
- context:
|
|
servername: {{ servername }}
|
|
serveralias: {{ serveralias }}
|
|
- require:
|
|
- pkg: apache_install
|
|
|
|
enable_sample_page:
|
|
cmd.run:
|
|
- name: 'a2ensite {{ grains['id'] }}.conf'
|
|
- require:
|
|
- file: sample_page_conf
|
|
|
|
sample_page_content:
|
|
file.managed:
|
|
- mode: 0644
|
|
- user: root
|
|
- group: root
|
|
- makedirs: True
|
|
- template: jinja
|
|
- name: {{ ('/var/www/html/' + grains['id'] + '/index.html') }}
|
|
- source: salt://apache/sampleindex.html
|
|
- require:
|
|
- cmd: enable_sample_page
|
|
|
|
add_vhost_domain:
|
|
file.append:
|
|
- name: /etc/hosts
|
|
- text: 127.0.0.1 {{ servername }}
|
|
- require:
|
|
- file: sample_page_content
|
|
|
|
restart_httpd:
|
|
service.running:
|
|
- name: apache2.service
|
|
- watch:
|
|
- file: add_vhost_domain
|
|
- cmd: enable_sample_page
|
|
|
|
test_page:
|
|
cmd.run:
|
|
- name: 'curl -s {{ servername }}'
|
|
- require:
|
|
- service: restart_httpd
|
|
|
|
APACHE_DATA
|
|
|
|
if [ ! -f /srv/pillar/apache_site_data.sls ] || \
|
|
[ ! -f /srv/salt/apache/init.sls ] || \
|
|
[ ! -f /srv/pillar/top.sls ] || \
|
|
[ ! -f /srv/salt/apache/samplesite.conf ] || \
|
|
[ ! -f /srv/salt/apache/sampleindex.html ]; then
|
|
echo "Salt files missing. Aborting."
|
|
exit 1
|
|
else
|
|
echo -e "\e[1m\n**Salt -- pillar.items output**\n\e[0m"
|
|
salt '*' pillar.items
|
|
echo -e "\e[1m\n**Salt -- state.apply output**\n\e[0m"
|
|
salt '*' state.apply apache
|
|
fi
|
|
else
|
|
echo "Run this script as root (or with sudo)"
|
|
fi
|