SaltStack: свойства (вычисляемые значения) для данных из SLS-файлов?

мы запускаем несколько виртуальных сред Python на наших миньонах, управляемых salt.

имя системы строится по этой схеме:

project_customer_stage

пример:

supercms_favoritcustomer_p

данные столп:

systems:
  - customer: favoritcustomer
    project: supercms
    stage: p
  - customer: favoritcustomer
    project: supercms
    stage: q 

для каждого virtualenv у нас есть один пользователь linux. До сих пор мы вычисляем такие значения, как "home":

{% for system in pillar.systems %}
  {% set system_name = system.project + '_' + system.customer + '_' + system.stage %}
  {% set system_home = '/home/' + system_name %}
  ...

но это излишне.

как мы могли избежать копирования + вставки {% set system_home = ...%}?

мне нравится, как объектно-ориентированное программирование работает:

  • вы можете определить свойство для домашнего каталога
  • Если вам нужен другой домашней директории в специальном случае, то вы могли бы подкласс базового класса и переопределить способ базового класса работает.

в соли у вас есть YAML и templating ... Обе хорошие вещи. Но в моем случае ОП был бы хорош.

1 ответов


вы также можете динамически генерировать данные столба. Рассмотрим следующий пример для файла pillar:

{% import_yaml "systems.yml" as systems %}

systems:
{% for system in systems %}
{% set name = system['name'] | default(system.project + '_' + system.customer + '_' + system.stage) %}
{% set home = system['home'] | default('/home/' + name) %}
  - name: {{ name }}
    customer: {{ system['customer'] }}
    project: {{ system['project'] }}
    stage: {{ system['stage'] }}
    home: {{ home }}
{% endfor %}

это определение столба загружает данные YAML из systems.yml файл, для которого соль будет искать в вашем