Size: a a a

2019 December 24

KP

Kirill Proskurin in Saltstack
создай словарь в питоне в виде твоего пилара и поиграйся с for ... in и прочим
источник

KP

Kirill Proskurin in Saltstack
ХИНТ .items() возвращает немного не то что ты ожидаешь
источник

KG

Konstantin Gimpel in Saltstack
мне кажется что в  функуи передается kwargs и я думал передать таким образом
источник

R

Roman in Saltstack
А добавляете ли вы в свои формулы обработку случаев когда нужные пиллары отсутствуют? И если добавляете как реализуете? Простое "обертывание" всего в  {% if 'somename' in pillar -%} ... {% endif %} в  или может какие-то другие варианты?

На мой взгляд, это особенно актуально при выполнении highstate. Например создан новый хост, и к нему должен быть применене набор формул, какие-то простые для общей настройки хоста -  например поставить несколько утилит, настроить локаль, таймзону и т.п., а какие-то специфичные допустим настройка БД.  В случае если в формуле настройки БД нет обработки отстуствующего пиллара, то все будет падать на этапе рендеринга на мастере и общие формулы не будут применены, что конечно неудобно.
источник

KP

Kirill Proskurin in Saltstack
Если данные обязательны то можно сделать проверку и raise из джинжи. Если опциональны то я все храню в словарях и делаю просто pillar.get(pillar, {})
источник

R

Roman in Saltstack
С pillar.get(pillar, {}) понятно, я так же делаю, но обычно имеются вложенные ключи и если дальше идет работа с этими ключами, то надо везде так же использовать .get() притом особого смысла в полученных данных не будет, это будет набор пустых словарей.

А можно подробнее про raise? не увидел такого в доке на джинджу. Хотя это не похоже на то что мне надо, но все равно полезно ознакомиться.

Пока склоняюсь к обертыванию всего if-ами, хотя бы в init.sls не очень красииво, но можно вывести ясное сообщение с ошибкой. На подобии такого:

{% if 'postgresql' in pillar -%}
include:
 - .server
 - .cluster
 - .manage

{% else -%}
{{ sls }}_postgresql_pillar_not_defined:
 test.fail_without_changes:
   - name: "'postgresql' pillar is not defined."

{% endif -%}
источник

GG

George Gaál in Saltstack
Я тоже пока не пришел к единому мнению, но проблема реально имеет место быть. Пиллары у нас все обязательны. Поэтому хорошо, что падает, но плохо, что с не очень вменяемым сообщением от ошибке
источник

R

Roman in Saltstack
Мне, порой, удобно сначала базовую настройку хоста произвести, а потом уже пиллары создавать для всяких сервисов.
источник

KP

Kirill Proskurin in Saltstack
Roman
С pillar.get(pillar, {}) понятно, я так же делаю, но обычно имеются вложенные ключи и если дальше идет работа с этими ключами, то надо везде так же использовать .get() притом особого смысла в полученных данных не будет, это будет набор пустых словарей.

А можно подробнее про raise? не увидел такого в доке на джинджу. Хотя это не похоже на то что мне надо, но все равно полезно ознакомиться.

Пока склоняюсь к обертыванию всего if-ами, хотя бы в init.sls не очень красииво, но можно вывести ясное сообщение с ошибкой. На подобии такого:

{% if 'postgresql' in pillar -%}
include:
 - .server
 - .cluster
 - .manage

{% else -%}
{{ sls }}_postgresql_pillar_not_defined:
 test.fail_without_changes:
   - name: "'postgresql' pillar is not defined."

{% endif -%}
{% if bootstraped_nodes|length in [1, 2] %}
{{  raise('Galera bootstraped_nodes grain is not 0 or 3') }}
{% endif %}
источник

KG

Konstantin Gimpel in Saltstack
Kirill Proskurin
ХИНТ .items() возвращает немного не то что ты ожидаешь
Мне кажется так как раз правильно потому что я обращаюсь один раз к пилару
источник

KG

Konstantin Gimpel in Saltstack
получаю полный item в ответ
источник

KG

Konstantin Gimpel in Saltstack
templates:
 template-name-01:
     url: http://download.com/template-01.txt
     hash: 0123456789
 template-name-02:
     url: http://download.com/template-02.txt
     hash: 9876543210
источник

KG

Konstantin Gimpel in Saltstack
{% for item in templates.items() %}
 name: {{ item[0] }}
 url: {{ item[1].url }}
 hash: {{ item[1].hash }}
{% endfor %}
источник

R

Roman in Saltstack
Konstantin Gimpel
Мне кажется так как раз правильно потому что я обращаюсь один раз к пилару
источник

KG

Konstantin Gimpel in Saltstack
Но я не уверен в правильности []
источник

KG

Konstantin Gimpel in Saltstack
конечно можно сделать что то вроде:
источник

KG

Konstantin Gimpel in Saltstack
{% for item in templates %}
 name: {{ item }}
 url: {{ templates[item].url }}
 hash: {{ templates[item].hash }}
{% endfor %}
источник

R

Roman in Saltstack
просто посмотрите как итерировать словари в питоне
источник

KG

Konstantin Gimpel in Saltstack
Konstantin Gimpel
{% for item in templates %}
 name: {{ item }}
 url: {{ templates[item].url }}
 hash: {{ templates[item].hash }}
{% endfor %}
но в этом случае есть избыточность от которой хочется уйти
источник

KG

Konstantin Gimpel in Saltstack
Roman
просто посмотрите как итерировать словари в питоне
можете дать пример того что имеете ввиду
источник