doh, thats the only thing it took I was missing! If I double quoted
{{item}} like you just did, then it works.
To give some more background on the problem, I couldn't simply template the
vars since each of my different host inventories may have a different
number of variables it needed. So my aim was to do something like this,
Create a tag on an EC2 instance with a comma separated list I would use to
loop through, for each item it would assign a value from parameter store
that matches with the item name:
TAG:
Key Value
list_of_vars = a,b,c
in param store I have a parameter of "a" "b" and "c" with a secret value
assigned. This way all I have to do is update the tag with more variables,
and each host can have whatever I want as long as there is a matching param
store. Its working now, this is great, thanks to everyone.
The only other way I could think of would have to say "for this inventory
file, use this var template" and I don't think there is any good way to do
that.
On Friday, August 4, 2023 at 3:02:18 AM UTC-4 Will McDonald wrote:
> I don't 100% understand your ultimate aim here. It might be easier to
> understand if you break it down into smaller steps and include some sample
> inputs and desired output?
>
> A sanitised version of what's in my_instance, item_list , and what you
> would like out at the end might help?
>
> IF I understand what you're trying to do, using your loop item as the key
> for your set_fact. For me, with appropriate quoting this seems to work...
>
> $ cat wtf.yml
> - hosts: localhost
> become: no
> gather_facts: no
>
> vars:
> varlist:
> - value1
> - value2
> - valueC
>
> tasks:
> - name: Use item as the fact key for set_fact in a loop
> set_fact:
> "{{ item }}": value
> loop: "{{ varlist }}"
>
> - name: Check the values assigned to the facts
> debug:
> var: "{{ item }}"
> loop: "{{ varlist }}"
>
> $ ansible-playbook wtf.yml
> PLAY [localhost]
> *************************************************************************************************************************
> TASK [Use item as the fact key for set_fact in a loop]
> ***********************************************************************************
> ok: [localhost] => (item=value1)
> ok: [localhost] => (item=value2)
> ok: [localhost] => (item=valueC)
>
> TASK [Check the values assigned to the facts]
> ********************************************************************************************
> ok: [localhost] => (item=value1) => {
> "ansible_loop_var": "item",
> "item": "value1",
> "value1": "value"
> }
> ok: [localhost] => (item=value2) => {
> "ansible_loop_var": "item",
> "item": "value2",
> "value2": "value"
> }
> ok: [localhost] => (item=valueC) => {
> "ansible_loop_var": "item",
> "item": "valueC",
> "valueC": "value"
> }
>
> PLAY RECAP
> *******************************************************************************************************************************
> localhost : ok=2 changed=0 unreachable=0
> failed=0 skipped=0 rescued=0 ignored=0
>
> On Thu, 3 Aug 2023 at 23:02, solarflow 99 <[email protected]> wrote:
>
>> I wonder if something like this can be done, the problem i'm seeing is
>> that the fact name has to be static, and could not use {{ item }}:
>>
>> - name: Set each tag to facts
>> set_fact:
>> list_of_vars: "{{ my_instance.instances |
>> map(attribute='tags.list_of_vars') | list | join('\n') }}"
>>
>> - name: Split "list_of_vars" variable into a comma separated list
>> set_fact:
>> item_list: "{{ list_of_vars.split(',') }}"
>>
>> - name: lookup SSM Parameter Store secrets
>> set_fact:
>> * {{ item }}:* "{{ lookup('amazon.aws.ssm_parameter',
>> puppet_env+'_'+env+'_{{ item }}', region=ansible_ec2_placement_region) }}"
>> with_items: "{{ item_list }}"
>>
>>
>> This would give me a fact for each comma separated var I put in the tag,
>> if only it worked. Is there a better way to do something like this?
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Ansible Project" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/ansible-project/b3642db8-15e2-406b-96ba-e49e0d4d50d8n%40googlegroups.com
>>
>> <https://groups.google.com/d/msgid/ansible-project/b3642db8-15e2-406b-96ba-e49e0d4d50d8n%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>
--
You received this message because you are subscribed to the Google Groups
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/da99c78a-7c44-4952-b93d-e572d664482an%40googlegroups.com.