[ansible-project ] getting unsafe ansible text when I trying to parse ansible register variable

Hi Groups ,

I am trying to parse the list variable but I am getting ansible unsafe text I need to match the vm name and get the corresponding vm group from the registered variable vm_groups.
tasks:

  • name: “Gather DRS info about given Cluster”
    community.vmware.vmware_drs_group_info:
    hostname: “{{ vcenter.hostname }}”
    username: “{{ vcenter.username }}”
    password: “{{ vcenter.password }}”
    validate_certs: “{{ vcenter.validate_certs }}”
    cluster_name: “{{ vcenter_env.cluster }}”
    delegate_to: localhost
    register: group_info

  • name: set fact specific group_info VM groups

ansible.builtin.set_fact:
match_vm_group: “{{ item.drs_group_info[vcenter_env.cluster] | regex_search(vm_name) }}”
when: “{{ item.drs_group_info[vcenter_env.cluster] | regex_search( vm_name ) }}”
loop: “{{ group_info }}”

name: set fact specific VM group
ansible.builtin.set_fact:
vm_groups: “{{ group_info.drs_group_info[vcenter_env.cluster] | selectattr(‘type’, ‘==’, “vm” ) | list }}”

“vm_groups”: "“[{‘group_name’: VM2-on-dev’, ‘vms’: [‘deep-test’, ‘NED-DEV601-X’], ‘type’: ‘vm’}, {‘group_name’: ‘VM2-on-uat’, ‘vms’: [‘NED-TST601-X’], ‘type’: ‘vm’}
}

I appreciate your quick help .

Thanks
Deepak

Please show us “group_info” and “vm_name”:

- name: Show registered var group_info and vm_name
  ansible.builtin.debug:
    msg:
      - "group_info: {{ group_info }}"
      - "vm_name: {{ vm_name }}"

It would be helpful to include the job log for the relevant section of your playbook as well. You say you are trying to parse “the list variable” but you don’t say what that variable is or show what it contains. Please help us help you.

Adding to Todd’s request for more details … also look at json_query vs selectattr if you are just filtering a JSON list on attribute value.

Walter

Hi Todd,

Please find output below ansible task

- name: Show registered var group_info and vm_name
  ansible.builtin.debug:
    msg:
      - "group_info: {{ group_info }}"
      - "vm_name: {{ vm_name }}"

TASK [Show registered var group_info and vm_name] **************************************************************
ok: [NED-TST1x] => {
    "msg": [
        "group_info: {'failed': False, 'drs_group_info': {'NED-Cluster': [{'group_name': 'NED-HOST001-HG', 'hosts': ['ned-host612-hyp'], 'type': 'host'}, {'group_name': 'VM2-on-dev', 'vms': ['deep-test', 'NED-DEV601-X'], 'type': 'vm'}, {'group_name': 'VM2-on-uat', 'vms': ['NED-TST601-X'], 'type': 'vm'}]}, 'changed': False}",
        "vm_name: NED-TST601-X"
    ]
}


Thanks & Regards
Deepak Kumar

Look at your quoting here …

name: set fact specific VM group
ansible.builtin.set_fact:
vm_groups: “{{ group_info.drs_group_info[vcenter_env.cluster] | selectattr(‘type’, ‘==’, “vm” ) | list }}”

That first and last quote are a “smart quotes” (leaning quotes). Your quotes around “vm” are double quotes.

  1. You can’t have smart quotes. Change to normal double quotes.
  2. You can’t have double quotes inside double quotes. Change “vm” to ‘vm’.

name: set fact specific VM group
ansible.builtin.set_fact:
vm_groups: “{{ group_info.drs_group_info[vcenter_env.cluster] | selectattr(‘type’, ‘==’, ‘vm’ ) | list }}”

Walter

Dear Walter,

Thank you very much for the timely help. I am all set with getting the correct group name out of the drs information .

Thanks
Deepak Kumar