Re: [ansible-project] Loop files that will be used as variables

2023-06-18 Thread Vladimir Botka
On Wed, 14 Jun 2023 04:07:38 -0700 (PDT)
"dudu.c...@gmail.com"  wrote:

> *My J2 file* 
> 
> select * from {{ item.id}} where {{ item.color}} 
> 
> *My input files*
> 
> *File-1.yml :*
> Id: 1
> color: blue 
> 
>  *File-2**.yml** :*
> Id: 2
> color: red 
> 
> *My Playbook – that is not working. *
> - hosts: localhost
>   become: true
>   gather_facts: yes
>   tasks:
> - name: 
>   template:
> src: /opt/input.sql.j2
> dest: /opt//{{item.id}}.sql
>   with_items:
> - file-1.yaml
> 
> - file-2.yaml
> 
> *The output files I wish to have *
> 
> 1.sql 
> select * from 1 where blue 
> 
> 2.sql 
> select * from 2 where red

Given the files

  shell> cat file-1.yaml 
  id: 1
  color: blue

  shell> cat file-2.yaml 
  id: 2
  color: red

Read the files in the loop. Test it

  shell> cat pb.yml 
  - hosts: localhost
tasks:
  - debug:
  var: i
loop:
  - file-1.yaml
  - file-2.yaml
vars:
  i: "{{ lookup('file', item )|from_yaml }}"

gives (abridged)

  TASK [debug]
  
  ok: [localhost] => (item=file-1.yaml) => ansible_loop_var: item
i:
  color: blue
  id: 1
item: file-1.yaml
  ok: [localhost] => (item=file-2.yaml) => 
ansible_loop_var: item
i:
  color: red
  id: 2
item: file-2.yaml

The variable *item* keeps the name of the current file in the loop.
You have to use the variable *i* both in the template file

  shell> cat input.sql.j2
  select * from {{ i.id }} where {{ i.color }}

and in the *template* task. The play

  shell> cat pb.yml 
  - hosts: localhost
tasks:
  - template:
  src: input.sql.j2
  dest: "/tmp/{{ i.id }}.sql"
loop:
  - file-1.yaml
  - file-2.yaml
vars:
  i: "{{ lookup('file', item )|from_yaml }}"

creates the files

  shell> cat /tmp/1.sql 
  select * from 1 where blue

  shell> cat /tmp/2.sql 
  select * from 2 where red


-- 
Vladimir Botka

-- 
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 ansible-project+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/20230618085129.7afc8696%40gmail.com.


pgpSCcKQC7ffv.pgp
Description: OpenPGP digital signature


Re: [ansible-project] Loop files that will be used as variables

2023-06-18 Thread Dick Visser
On Sun, 18 Jun 2023 at 07:43, dudu.c...@gmail.com 
wrote:

> Sorry  - But i didnt fully understand your question
>
> My input files are static  - The problem that i'm trying to solve is how
> to loop "vars_file" for the same task
>

What are you trying to achieve with the playbook?



>
> ב-יום רביעי, 14 ביוני 2023 בשעה 22:01:56 UTC+3, Will McDonald כתב/ה:
>
>> I think this answer might give you a pointer in the right direction:
>> https://stackoverflow.com/a/52237675
>>
>> It should work, but there could be a better/simpler way to do this. Do
>> you control the generation of the files that provide your source variables?
>>
>> What's the *actual *problem you need to solve? (Obviously dynamically
>> generating and presumably running some SQL but can you step back a level or
>> two and describe the actual goal?)
>>
>>
>> On Wed, 14 Jun 2023 at 12:07, dudu.c...@gmail.com 
>> wrote:
>>
>>> Hi ,
>>>
>>>
>>> I’m using the template module that takes a J2 template and update the
>>> relevant fields.
>>>
>>> My problem is When I want to create a file per file input should be used
>>> as variable – I’m actually need to understand how to loop file that should
>>> be used as var files
>>>
>>>
>>> *My J2 file*
>>>
>>> select * from {{ item.id}} where {{ item.color}}
>>>
>>>
>>>
>>> *My input files*
>>>
>>> *File-1.yml :*
>>>
>>> Id: 1
>>> color: blue
>>>
>>>
>>>
>>>  *File-2**.yml** :*
>>>
>>> Id: 2
>>> color: red
>>>
>>>
>>>
>>> *My Playbook – that is not working. *
>>>
>>>
>>>
>>> - hosts: localhost
>>>   become: true
>>>   gather_facts: yes
>>>   tasks:
>>> - name:
>>>   template:
>>> src: /opt/input.sql.j2
>>> dest: /opt//{{item.id}}.sql
>>>   with_items:
>>> - file-1.yaml
>>>
>>> - file-2.yaml
>>>
>>>
>>>
>>>
>>>
>>> *The output files I wish to have *
>>>
>>> 1.sql
>>>
>>> select * from 1 where blue
>>>
>>>
>>>
>>> 2.sql
>>>
>>> select * from 2 where red
>>>
>>> --
>>> 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 ansible-proje...@googlegroups.com.
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/ansible-project/50d4e830-9330-43be-95dc-68795a311d9an%40googlegroups.com
>>> 
>>> .
>>>
>> --
> 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 ansible-project+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/ansible-project/809b9f8d-9440-43f0-8a4c-64baab6eb0a9n%40googlegroups.com
> 
> .
>

-- 
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 ansible-project+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/CAF8BbLac4DokB9T5eKrdjwLLjHUmKffzvSUi_%2BcthzxVTc7p-w%40mail.gmail.com.