Iterate with variable and items lists in With_Items

25 views
Skip to first unread message

SysAdmin EM

unread,
Nov 11, 2022, 3:06:29 PM11/11/22
to ansible...@googlegroups.com
Hello, I hope you can understand what I need, my english is not good, i still learning.

I have a variable

easyrsa_clients:
  - name: '{{ client }}'

and this tasks:

- name: "Copy files
     copy:
       src: '{{ item.src }}'
       dest: '{{ item.dest }}'
     with_items:
     - { src: '{{ easyrsa_dest }}/easyrsa/pki/private/{{ item.name }}.key', dest: '{{ easyrsa_dest }}/keys' }
     - { src: '{{ easyrsa_dest }}/easyrsa/issued/{{ item.name }}.crt', dest: '{{ easyrsa_dest }}/keys' }

I need to be able to interact with the value of the variable easyrsa_clients within the parameter with_item.

I think I should use easyrsa_clients.item.name but I don’t know.

Any ideas??

Regards

Todd Lewis

unread,
Nov 11, 2022, 9:24:39 PM11/11/22
to ansible...@googlegroups.com, SysAdmin EM, uto...@gmail.com
You can't use "item" inside "with_items:" because "item" is being defined by "with_items:".

Why don't you just use "client":
- name: "Copy files
     copy:
       src: '{{ item.src }}'
       dest: '{{ item.dest }}'
     with_items:
     - { src: '{{ easyrsa_dest }}/easyrsa/pki/private/{{ client }}.key', dest: '{{ easyrsa_dest }}/keys' }
     - { src: '{{ easyrsa_dest }}/easyrsa/issued/{{ client }}.crt', dest: '{{ easyrsa_dest }}/keys' }
or "easyrsa_clients.name"?

Or is there more to the problem that you've shown us?
--
You received this message because you are subscribed to the Google Groups "Ansible Project" group.

SysAdmin EM

unread,
Nov 11, 2022, 9:49:09 PM11/11/22
to Todd Lewis, ansible...@googlegroups.com
Hello Todd, i try with easyrsa_clients.name but i see this error:

TASK [Probando salida] *****************************************************************************************************************************
fatal: [localhost]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'list object' has no attribute 'name'\n\nThe error appears to be in '/etc/ansible/openvpn/create_access_prod/playbook/list-test.yaml': line 6, column 7, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n  tasks:\n    - name: \"Probando salida\"\n      ^ here\n"}

PLAY RECAP *****************************************************************************************************************************************
localhost                  : ok=0    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0  

How can I use the name key in a with_items?

Todd Lewis

unread,
Nov 12, 2022, 6:17:46 AM11/12/22
to ansible...@googlegroups.com
Oh, right, because "easyrsa_clients" is a list, not a dict.
So try it with either

     - { src: '{{ easyrsa_dest }}/easyrsa/pki/private/{{ client }}.key', dest: '{{ easyrsa_dest }}/keys' }
     - { src: '{{ easyrsa_dest }}/easyrsa/issued/{{ client }}.crt', dest: '{{ easyrsa_dest }}/keys' }
or
     - { src: '{{ easyrsa_dest }}/easyrsa/pki/private/{{ easyrsa_clients[0]["name"] }}.key', dest: '{{ easyrsa_dest }}/keys' }
     - { src: '{{ easyrsa_dest }}/easyrsa/issued/{{ easyrsa_clients[0]["name"] }}.crt', dest: '{{ easyrsa_dest }}/keys' }

or
     - { src: '{{ easyrsa_dest }}/easyrsa/pki/private/{{ easyrsa_clients[0].name }}.key', dest: '{{ easyrsa_dest }}/keys' }
     - { src: '{{ easyrsa_dest }}/easyrsa/issued/{{ easyrsa_clients[0].name }}.crt', dest: '{{ easyrsa_dest }}/keys' }
But I suspect you have bigger plans. Why is easyrsa_clients a list? Do you intend to add other clients later? In which case, the above isn't going to work. you need something that will handle a fully articulated set of the data. That's what I alluded to when I (mis)typed "Or is there more to the problem than you've shown us?"

Do let us know how you get on.
-- 
Todd

Rowe, Walter P. (Fed)

unread,
Nov 14, 2022, 9:37:02 AM11/14/22
to ansible...@googlegroups.com
Make easyrsa_clients a dict if you really need a dict (remove the dash).

easyrsa_clients:
  name: '{{ client }}'


     - { src: '{{ easyrsa_dest }}/easyrsa/pki/private/{{ easyrsa_clients["name"] }}.key', dest: '{{ easyrsa_dest }}/keys' }
     - { src: '{{ easyrsa_dest }}/easyrsa/issued/{{ easyrsa_clients["name"] }}.crt', dest: '{{ easyrsa_dest }}/keys' }
I agree with Todd .. just use "client" if you have no other need to use easyrsa_client.

Walter
--
Walter Rowe, Division Chief
Infrastructure Services, OISM
Mobile: 202.355.4123

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/ea20a296-7113-11a8-9c44-17cd7f05065a%40gmail.com.

SysAdmin EM

unread,
Nov 14, 2022, 10:45:04 AM11/14/22
to ansible...@googlegroups.com
Hello!! thanks for the help.

You’re right, it’s a list, not a dictionary.

The idea was to generate a variable in the form of a list for cases that I need to create accesses to the VPN to more than one user, with your explanation I could understand my error.
Thank you very much.

Reply all
Reply to author
Forward
0 new messages