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
файл, для которого соль будет искать в вашем