Назад | Перейти на главную страницу

использование данных зерна в настраиваемом зерне стека соли

Я хотел бы написать, что фактически является «виртуальным зерном», которое определяет некоторую ценность на основе ценности других зерен, используя индивидуальную зернистость. В частности, я хочу предоставить значения степени зернистости, 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 %}

Есть и другие более чистые способы сделать это, но это должно помочь вам.