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