Need help on json query call in ansible

Hi Ansible Guru’s

I am using the CSV file as below for nfs volume migration as we have 1000 servers with 100 volumes. Hence, i would like to make to host inventory using add_host file instead using inventory file. However, the loop is failing when i use add_host module. Hence, i tried using json_query as suggested by vladimar, and it is working for debug output but same is not working for mount module as i would like to update /etc/fstab and mount the volumes using this playbook. would you suggest the logic?

Playbook and CSV details:

Hi Ansible Guru's

I am using the CSV file as below for nfs volume migration as we have 1000 servers with 100 volumes. Hence, i would like
to make to host inventory using add_host file instead using inventory file. However, the loop is failing when i use
add_host module. Hence, i tried using json_query as suggested by vladimar, and it is working for debug output but same
is not working for mount module as i would like to update /etc/fstab and mount the volumes using this playbook. would
you suggest the logic?

var1 and var2 are lists, and not strings which are expected by the mount module.

Try var1[0] and var2[0] instead.

Regards
         Racke

Thanks Racke, it’s working for if host has single volume but same is failing if the host has multiple volumes. Basically, loop is getting failed. Please suggest if there any alternative ways

cat mounts.csv

host,remote_path,mnt_path,python
host1,nfsflr01:/volahcstg_www_masup_stg_data_01,/myasup/stg/data,/usr/bin/python2.6
host1,nfsflr02:/volahcstg_www_masup_stg_app_01,/myasup/stg/app,/usr/bin/python2.6
host2,nfsflr01:/volahcstg_www_masup_stg_data_01,/myasup/stg/data,/usr/bin/python2.6
host2,nfsflr02:/volahcstg_www_masup_stg_app_01,/myasup/stg/app,/usr/bin/python2.6

Result:

TASK [Grouping host and volume information] *****************************************************************************************************************************
task path: /suresh/suresh_playbooks/mounts.yml:12
creating host via ‘add_host’: hostname=host1
changed: [localhost] => (item=[u’host1’, [{u’python’: u’/usr/bin/python2.6’, u’host’: u’host1’, u’mnt_path’: u’/myasup/stg/data’, u’remote_path’: u’nfsflr01:/volahcstg_www_masup_stg_data_01’}, {u’python’: u’/usr/bin/python2.6’, u’host’: u’host1’, u’mnt_path’: u’/myasup/stg/app’, u’remote_path’: u’nfsflr02:/volahcstg_www_masup_stg_app_01’}]]) => {
“add_host”: {
“groups”: [
“nfsgroup”
],
“host_name”: “host1”,
“host_vars”: {
“ansible_python_interpreter”: “/usr/bin/python2.6”,
“var1”: [
“nfsflr01:/volahcstg_www_masup_stg_data_01”,
“nfsflr02:/volahcstg_www_masup_stg_app_01”
],
“var2”: [
“/myasup/stg/data”,
“/myasup/stg/app”
]
}
},
“ansible_loop_var”: “item”,
“changed”: true,
“item”: [
“host1”,
[
{
“host”: “host1”,
“mnt_path”: “/myasup/stg/data”,
“python”: “/usr/bin/python2.6”,
“remote_path”: “nfsflr01:/volahcstg_www_masup_stg_data_01”
},
{
“host”: “host1”,
“mnt_path”: “/myasup/stg/app”,
“python”: “/usr/bin/python2.6”,
“remote_path”: “nfsflr02:/volahcstg_www_masup_stg_app_01”
}
]
]
}
creating host via ‘add_host’: hostname=host2
changed: [localhost] => (item=[u’host2’, [{u’python’: u’/usr/bin/python2.6’, u’host’: u’host2’, u’mnt_path’: u’/myasup/stg/data’, u’remote_path’: u’nfsflr01:/volahcstg_www_masup_stg_data_01’}, {u’python’: u’/usr/bin/python2.6’, u’host’: u’host2’, u’mnt_path’: u’/myasup/stg/app’, u’remote_path’: u’nfsflr02:/volahcstg_www_masup_stg_app_01’}]]) => {
“add_host”: {
“groups”: [
“nfsgroup”
],
“host_name”: “host2”,
“host_vars”: {
“ansible_python_interpreter”: “/usr/bin/python2.6”,
“var1”: [
“nfsflr01:/volahcstg_www_masup_stg_data_01”,
“nfsflr02:/volahcstg_www_masup_stg_app_01”
],
“var2”: [
“/myasup/stg/data”,
“/myasup/stg/app”
]
}
},
“ansible_loop_var”: “item”,
“changed”: true,
“item”: [
“host2”,
[
{
“host”: “host2”,
“mnt_path”: “/myasup/stg/data”,
“python”: “/usr/bin/python2.6”,
“remote_path”: “nfsflr01:/volahcstg_www_masup_stg_data_01”
},
{
“host”: “host2”,
“mnt_path”: “/myasup/stg/app”,
“python”: “/usr/bin/python2.6”,
“remote_path”: “nfsflr02:/volahcstg_www_masup_stg_app_01”
}
]
]
}
META: ran handlers
META: ran handlers

TASK [debug output] *****************************************************************************************************************************************************
task path: /suresh/suresh_playbooks/mounts.yml:25
ok: [host1] => {
“msg”: [
“host1”,
[
“nfsflr01:/volahcstg_www_masup_stg_data_01”,
“nfsflr02:/volahcstg_www_masup_stg_app_01”
],
[
“/myasup/stg/data”,
“/myasup/stg/app”
]
]
}
ok: [host2] => {
“msg”: [
“host2”,
[
“nfsflr01:/volahcstg_www_masup_stg_data_01”,
“nfsflr02:/volahcstg_www_masup_stg_app_01”
],
[
“/myasup/stg/data”,
“/myasup/stg/app”
]
]
}

TASK [mounting the volume in the fstab file] ****************************************************************************************************************************
changed: [host1 → host1] => {
“changed”: true,
“dump”: “0”,
“fstab”: “/etc/fstab”,
“fstype”: “nfs”,
“invocation”: {
“module_args”: {
“backup”: false,
“boot”: true,
“dump”: “0”,
“fstab”: null,
“fstype”: “nfs”,
“opts”: “vers=3,rw,nosuid,bg,hard,rsize=32768,wsize=32768,nointr,tcp,timeo=600”,
“passno”: “0”,
“path”: “/myasup/stg/data”,
“src”: “nfsflr01:/volahcstg_www_masup_stg_data_01”,
“state”: “mounted”
}
},
“name”: “/myasup/stg/data”,
“opts”: “vers=3,rw,nosuid,bg,hard,rsize=32768,wsize=32768,nointr,tcp,timeo=600”,
“passno”: “0”,
“src”: “nfsflr01:/volahcstg_www_masup_stg_data_01”
}
(0, ‘’, ‘’)
changed: [host2 → host2] => {
“changed”: true,
“dump”: “0”,
“fstab”: “/etc/fstab”,
“fstype”: “nfs”,
“invocation”: {
“module_args”: {
“backup”: false,
“boot”: true,
“dump”: “0”,
“fstab”: null,
“fstype”: “nfs”,
“opts”: “vers=3,rw,nosuid,bg,hard,rsize=32768,wsize=32768,nointr,tcp,timeo=600”,
“passno”: “0”,
“path”: “/myasup/stg/data”,
“src”: “nfsflr01:/volahcstg_www_masup_stg_data_01”,
“state”: “mounted”
}
},
“name”: “/myasup/stg/data”,
“opts”: “vers=3,rw,nosuid,bg,hard,rsize=32768,wsize=32768,nointr,tcp,timeo=600”,
“passno”: “0”,
“src”: “nfsflr01:/volahcstg_www_masup_stg_data_01”
}
META: ran handlers
META: ran handlers

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

Can anyone help me on this request or please suggest if there any alternative solution for my requirement?

Regards,
Suresh