Используя тропосферу для формирования облаков, как добавить "распространение при запуске" в теги
Я использую модуль Python troposphere для генерации тегов в моем шаблоне формирования облака. Текущий скрипт генерирует:
"Tags": [{"Key":"Name", "Value":"MyTagName"},
{"Key":"Version", "Value":"123456"}]
Но мне нужно сгенерировать
"Tags":[{"Key":"Name", "Value":"MyTagName", "PropagateAtLaunch":"true"},
{"Key":"Version", "Value":"123456", "PropagateAtLaunch":"true"}]
Часть сценария, которая применяется:
asg = autoscaling.AutoScalingGroup("MyASG")
asg.Tags = Tags(Name = "MyTagName", Version = "123456")
t.add_resource(asg)
1 ответ:
---- обновление ---
Функция добавлена в главную ветку, я просто оставляю свой предыдущий ответ Для справки и на случай, если у вас нет доступа к последней версии troposphere (т. е. если вы не клонируете репозиторий). Вы все еще можете использовать короткую функцию в своем коде (3-й вариант), тем не менее, она будет работать.
Класс справки "Теги" (из модуля troposphere) не может генерировать списки тегов ASG (ключ / значение / распространение), только основные списки тегов (ключ / значение - например, для EC2). Вы можете использовать тропосферу .автоматическое масштабирование.Вместо этого класс Tags , который имитирует последний, с добавлением свойства "propagate".
Вы можете использовать его следующим образом:
asg.Tags = autoscaling.Tags(Name = 'MyTagName', Version = '123456')
Все ваши теги будут иметь свойство PropagateAtLaunch, равное true. Если вы хотите другое свойство PropagateAtLaunch, просто напишите так:
asg.Tags = autoscaling.Tags(Name = 'MyTagName', Version = '123456', NonPropagatedTag=('fail',False))
Тег NonPropagatedTag не будет распространяться (сюрприз!) и имеют значение "провалиться".
Предыдущий ответ:
Вы не можете использовать вспомогательный класс "Теги" (из модуля troposphere) для создания списков тегов ASG (key/value/propagate), только основные списки тегов (key/value). Быстрый взгляд на исходный код покажет вам, почему (https://github.com/cloudtools/troposphere/blob/master/troposphere/init.py)
Это оставляет вам три варианта:
Длинный и трудный путь: список тегов ASG (в тропосфере) - это просто список python из диктовок с тремя ключами: Name, Value и PropagateAtLaunch. Таким образом, ваш код будет выглядеть следующим образом:
asg.Tags= [{'Key':'Name','Value':'MyTagName','PropagateAtLaunch':'true'}, {'Key':'Version','Value':'123456','PropagateAtLaunch':'true'}]
Да, некрасиво.
Чуть короче: вместо диктов вы можете использовать автоматическое масштабирование.Помощник тэг класс, который принимает 3 параметра : ключ тег, значение тега, распространяются. Вам придется кодировать:
asg.Tags= [autoscaling.Tag('Name','MyTagName','true'), autoscaling.Tag('Version','123456','true')]
Если у вас не так много тегов или вы просто используете их в одном месте, это нормально. Но вспомогательный класс тегов так хорош...
Используйте другой вспомогательный класс, чтобы создавать специальные ПГС список тегов. Я просто сделал запрос на репозиторий GitHub для тропосферы это небольшое дополнение :
class TagsASG(troposphere.AWSHelperFn): defaultPropagateAtLaunch=True manyType=[type([]), type(())] def __init__(self, **kwargs): self.tags = [] for k, v in sorted(kwargs.iteritems()): if type(v) in self.manyType: propagate=str(v[1]).lower() v=v[0] else: propagate=str(self.defaultPropagateAtLaunch).lower() self.tags.append({ 'Key': k, 'Value': v, 'PropagateAtLaunch':propagate, }) def JSONrepr(self): return self.tags
Теперь вы можете использовать его следующим образом:
asg.Tags = TagsASG(Name = 'MyTagName', Version = '123456')
Все ваши теги будут иметь свойство PropagateAtLaunch, равное true. Если вы хотите другое свойство PropagateAtLaunch, просто напишите так:
asg.Tags = TagsASG(Name = 'MyTagName', Version = '123456', NonPropagatedTag=('fail',False))
Тег NonPropagatedTag не будет распространяться (сюрприз!) и имеют значение 'fail'.