Используя данные зерна в пользовательском зерне стека соли
Я хотел бы написать, что фактически является "виртуальным зерном", которое определяет какое-то значение на основе значения других зерен, используя пользовательское зерно. В частности, я хочу предоставить значения зерна env, которые сообщают мне, в какой виртуальной среде работает хост. Варианты будут aws или ни один из них в настоящее время, но в будущем будут включать центр обработки данных и офис. Я буду использовать эту информацию для определения настроек, например, какой SMTP-ретранслятор использовать и т. Д.
Моя первая попытка состояла в том, чтобы использовать диктат __grains__, но, по-видимому, он пуст при обращении к пользовательскому фрагменту.
def find_env():
if __grains__['os'] == 'Amazon':
return {'env':['aws']}
return {'env': []}
это приводит к исключению:
KeyError: 'os'
Я понимаю, что мог бы статически назначать зерна на миньоне или в командной строке, но я чувствую, что любой бит информации, который может быть получен автоматически, должен быть.
Есть ли способ доступа к существующим данным зерна при записи пользовательских зерен или другой способ автоматической классификации хостов, чтобы я мог настроить для них состояние?
1 ответ
Я бы предложил использовать состояния, чтобы назначить значения зерна в зависимости от ситуации. Например, что-то вроде:
top.sls
base:
'kernel:Linux':
- match: grain
- linux
linux.sls
env:
grains.present:
{% if grains ['os'] == 'Amazon' %}
- value: aws
{% else %}
- value: somethingelse
{% endif %}
Есть другие более чистые способы сделать это, но это должно помочь вам.