|
|
- #!/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
|