Dateien dynamisieren
Beispiel: If-Else-Bedingungen
apache:
pkg.installed:
{% if grains['os'] == 'RedHat' %}
- name: httpd
{% elif grains['os'] == 'Ubuntu' %}
- name: apache2
{% endif %}
Jinja in beliebigen "externen" Dateien verwenden
Beispiel: Schleifen
{% for usr in 'moe','larry','curly' %}
{{ usr }}:
group:
- present
user:
- present
- gid_from_name: True
- require:
- group: {{ usr }}
{% endfor %}
Beispiel: Im State Werte definieren und in Jinja verwenden:
/tmp/test.conf:
file.managed:
- source: salt://test.conf
- user: root
- group: root
- mode: 644
- template: jinja
- defaults:
custom_var: "default value"
other_var: 123
{% if grains['os'] == 'Ubuntu' %}
- context:
custom_var: "override"
{% endif %}
test.conf
Inhalt von custom_var = {{ custom_var }}
Bedingungen testen
{% if 1 == salt['cmd.retcode']('test -f /tmp/woo.test') %}
ack:
file.touch:
- name: /tmp/woo.test
{% endif %}
Bedingungen testen und abbrechen
{% if not grains.id in salt['pillar.get']('master:nodegroups:webserver', []) %}
always-fails:
test.fail_without_changes:
- name: Requirement not met
- failhard: True
{% endif %}
Beispiel Java installieren
{% if grains['os'] == 'CentOS' %}
{% set name='java-1.8.0-openjdk-headless' %}
{% else %}
{% set name='default-jre-headless' %}
{% endif %}
{% if 0 != salt['cmd.retcode']('which java') %}
{{ name }}:
pkg.installed: []
{% endif %}
unnötige Leerzeilen vermeiden
Jinja interpretiert alle Zeilen, die {{ ... }}
oder {% ... %}
enthalten. Wenn eine Zeile nur "Jinja-Code" enthält, wird dieser durch eine leere Zeile ersetzt. Unnötige Leerzeilen vermeiden Sie durch {%- ... -%}
. Beispiel:
{#- Set default hostname and listen port. -#}
{#- In prod env settings are taken vom minions custom grains. -#}
{%- set main_uri = grains['main_uri'] if grains['main_uri'] is defined else 'example.dev' -%}
{%- set http_port = grains['http_port'] if grains['http_port'] is defined else '80' -%}
#
# This file is maintened by salstack and was build dynamically using jinja
# Do not edit. All changes will be overwritten
#
# Route /installer to extra path
# Apache calls this Alias
my.{{ main_uri }}:{{ http_port }}/installer {
root /var/www/project/pub/
fastcgi / /run/php/php7.0-fpm.sock php
log /var/log/caddy/installer-access.log
errors /var/log/caddy/installer-error.log
{%- if main_uri == 'exmaple.com' -%}
{#- Use predefined ssl cert rather then lets encrypt -#}
tls /etc/caddy/_exmaple.crt /etc/caddy/prikey.pem
{%- endif -%}
}
Aufgabe
- In der
index.html
der Webserver den Namen des Minion einfügen. - Einen Loadbalancer mit zwei Minions im Backend anlegen.