salt.states.cloud ドキュメントでは、「cloud.tagged」Salt 状態の使用について説明されていますが、実装されていないようです。
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'
これにより、作成時にタグが適用されますが、インスタンスが既に存在する場合は更新されません。また、cloud.present で EBS ボリュームにタグを付ける方法がわかりません。
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)