Мы запускаем несколько виртуальных сред Python на наших миньонах, управляемых солью.
Название системы построено по этой схеме:
project_customer_stage
Пример:
supercms_favoritcustomer_p
Данные столба:
systems:
- customer: favoritcustomer
project: supercms
stage: p
- customer: favoritcustomer
project: supercms
stage: q
Для каждого virtualenv у нас есть один пользователь Linux. До сих пор мы вычисляли значения типа «дом» следующим образом:
{% for system in pillar.systems %}
{% set system_name = system.project + '_' + system.customer + '_' + system.stage %}
{% set system_home = '/home/' + system_name %}
...
Но это избыточно.
Как мы можем избежать копирования+вставки {% set system_home = ...%}
?
Мне нравится, как работает объектно-ориентированное программирование:
- Вы можете определить свойство для домашнего каталога
- Если вам нужен другой домашний каталог в особом случае, вы можете подклассировать базовый класс и перезаписать способ работы базового класса.
В Salt есть YAML и шаблоны... И то, и другое приятно. Но в моем случае ООП было бы неплохо.