我正在尝试找出一种基于我在AWS中使用的标签在Ansible中分配变量的方法。我正在试验template <size_t N>
void copyWithBoundaryCheck(char (&destination)[N])
{
printf( "Correct parameter of size %zu\n", N );
};
,但它返回的信息比我需要的还要多。似乎应该有一种更简单的方法来做到这一点,我只是没想到它。
例如,如果我有一个名为ec2_remote_tags
的标记使用动态广告资源创建function
组,并且我想将变量tag_function_api
分配给值function
。有效方法的任何想法吗?
答案 0 :(得分:2)
我设法制作了带有值列表的标签:
- hosts: localhost
tasks:
- ec2_remote_facts:
region: eu-west-1
register: ec2_facts
# get all possible tag names
- set_fact: tags="{{ item.keys() }}"
with_items: "{{ ec2_facts.instances | map(attribute='tags') | list }}"
register: tmp_tags
# get flattened list of tags (for some reason lookup() returns string, so we use with_)
- assert: that=true
with_flattened: "{{ tmp_tags.results | map(attribute='ansible_facts.tags') | list }}"
register: tmp_tags
# get unique tag names
- set_fact: tags="{{ tmp_tags.results | map(attribute='item') | list | unique }}"
- set_fact: my_tags="{{ {} }}"
# get all possible values for a given tag
- set_fact:
my_tags: "{{ my_tags | combine( {''+item: ec2_facts.instances | map(attribute='tags.'+item) | select('defined') | list | unique}) }}"
with_items: "{{ tags }}"
- debug: var=my_tags
答案 1 :(得分:0)
能够根据我在此处找到的更多信息来实现此目的:https://groups.google.com/forum/#!topic/ansible-project/ES2CjMPps3M
以下代码对我们有用:
- name: Retrieve all tags on an instance
ec2_tag:
region: '{{ ec2_region }}'
resource: '{{ ec2_id }}'
state: list
aws_access_key: "{{ ANSIBLE_IAM_KEY }}"
aws_secret_key: "{{ ANSIBLE_IAM_SECRET }}"
register: ec2_facts
- name: register variables based on tag
set_fact:
tt_function: "{{ ec2_facts.tags.Function }}"
tt_release: "{{ ec2_facts.tags.Release }}"
tt_client: "{{ ec2_facts.tags.Client }}"
答案 2 :(得分:0)
如果您使用的是Ansible的ec2.py
动态清单脚本,它将所有标签以ec2_tag_<tag name> = <tag value>
的形式用作主机变量。还将所有EC2主机添加到组ec2
中。
因此,如果您的EC2实例具有标签AwesomeVariable = "Greatness"
,并且您希望将该值分配给Ansible主机变量stupendous
,则可以执行以下操作:
- name: Register variables based on tags
set_fact:
stupendous: "{{ ec2_tag_AwesomeVariable }}"
when: "'ec2' in group_names"
运行此命令后,您可以将变量stupendous
用于EC2主机,并为其变量AwesomeVariable
设置值。