Пометка инстансов EC2 с помощью Saltstack

Я новичок в использовании соленого стека и пытаюсь заставить соленое облако помечать мои экземпляры EC2 во время подготовки. Я предполагаю, что это нужно сделать в cloud.profiles. Я искал документацию и конкретные примеры попыток создания тегов для экземпляров EC2 при их подготовке. Я обнаружил, что пометить экземпляры после создания можно из командной строки с помощью:
salt-cloud -a set_tags mymachine tag1=somestuff tag2='Other stuff' Однако я хотел бы, чтобы эти действия выполнялись автоматически при создании экземпляра.

С другой стороны, я не нашел документацию по соли наиболее полезной. Если есть учебник или пошаговое руководство, которое поможет мне лучше ознакомиться с соляным стеком, я был бы признателен за вклад.

Спасибо,


person isuschlue    schedule 13.01.2014    source источник


Ответы (2)


Облачный модуль ec2.py ищет «теги» в профиле.

Следующий пример взят из вышеуказанного документа.

mysql_profile:
  provider: ec2
  size: 1024MB
  tags:
    tag1: somestuff
    tag2: "others stuff" 
  [...]
person Dan Garthwaite    schedule 13.01.2014
comment
Это крупицы соли, а не теги AWS - person Anthony Hayward; 30.06.2015
comment
А, я неправильно понял вопрос. Я посмотрю на это. - person Dan Garthwaite; 30.06.2015
comment
Похоже, что по крайней мере в новейшей версии соли есть код для этого, ища «теги» dict в профиле. Начиная со строки 3469 в файле cloud/clouds/ec2.py. - person Dan Garthwaite; 30.06.2015
comment
@AnthonyHayward Я пересмотрел свой ответ. Пожалуйста, просмотрите. Ссылка на источник: github.com/saltstack/ соль/блоб/разработка/соль/облако/облака/ - person Dan Garthwaite; 30.06.2015
comment
Спасибо. Я также исправил свой ответ, кажется, вы можете поместить тег в состояние cloud.present. - person Anthony Hayward; 01.07.2015
comment
Имейте в виду, что это будет работать при подготовке новых миньонов. Модули солевого облака не имеют состояния, и никакие изменения, внесенные в SLS, не будут применены при следующем запуске соли. - person nnsense; 18.11.2019

Документы salt.states.cloud говорят об использовании состояния соли «cloud.tagged», но, похоже, оно не реализовано.

http://docs.saltstack.com/en/latest/ref/states/all/salt.states.cloud.html#using-states-instead-of-maps-to-deploy-clouds

При создании экземпляра кажется, что вы можете использовать свойство тега следующим образом:

my-server-name:
    cloud.present:
        - name: 'my-server-name'
        #...other properties
        - tag:
            'Env': 'auto-test'

Это применяет теги при создании, но не будет обновлять их, если экземпляр уже существует. Кроме того, я не знаю, как пометить том EBS в cloud.present.

Вы можете использовать библиотеку Python boto, чтобы повторно пометить экземпляры, созданные SaltStack, и пометить тома EBS. Пример кода ниже — работает для инстансов и томов EBS.

def find_instance(instanceName, region):
    boto_ec2 = boto.ec2.connect_to_region(region)
    instances = boto_ec2.get_only_instances()
    for instance in instances:
        if instance.tags.get("Name", None) == instanceName:
            return instance
    return None



def ensure_instance_tags(instance, region, tags):
    newTags = {}    

    for tagName in tags:
        if instance.tags.get(tagName, None) != tags[tagName]:
            newTags[tagName] = tags[tagName]

    if bool(newTags):
        sys.stdout.write("Updating tags for instance " + instance.id + "\n")
        boto_ec2 = boto.ec2.connect_to_region(region)
        boto_ec2.create_tags(instance.id, newTags)
person Anthony Hayward    schedule 30.06.2015