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

  1. In der index.html der Webserver den Namen des Minion einfügen.
  2. Einen Loadbalancer mit zwei Minions im Backend anlegen.

results matching ""

    No results matching ""