Python script with Json output as inventory

279 views
Skip to first unread message

Idan null

unread,
Jun 14, 2016, 6:24:43 PM6/14/16
to Ansible Project
Hello to everyone :)
I'm quite new to Ansible.
I have used the Python API for ansible to connect to a few servers I have,
I want to get the inventory list for the python script from MySQL server, so as far as I understood the list should be in Json format (this is because each host have different ports)
But when I run the script I get a error that ansible couldn't connect to the server:

This is the error i'm getting:
UP ***********
FAILED *******
DOWN *********
{
  "_meta": {
    "hostvars": {
      "10.24.20.126": {
        "ansible_host": "10.24.20.126" >>> Failed to connect to the host via ssh.

This is the full json I'm sending to the host_list variable in the python script
js = {"group": {"hosts": ["10.24.20.126", "10.24.20.127"], "vars": {"ansible_user": "user", "ansible_port": 22}}, "_meta": {"hostvars": {"10.24.20.126": {"ansible_host": "10.24.20.126", "ansible_user": "user", "ansible_port": "22"}, "10.24.20.127": {"host_specific_var": "foo"}}}}

And this is the error i'm getting:

UP ***********
FAILED *******
DOWN *********
{
  "_meta": {
    "hostvars": {
      "10.24.20.126": {
        "ansible_host": "10.24.20.126" >>> Failed to connect to the host via ssh.


This ansible can connect to this server if i ping it using ansible (ansible -m ping 10.24.20.126)

10.24.20.126 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

the python script I took from here:

And I just send into the host_list variable the JSON.

Any thought of why my script doesn't work ?

Thank you evreyone

Matt Martz

unread,
Jun 14, 2016, 6:37:49 PM6/14/16
to ansible...@googlegroups.com
host_list cannot accept a JSON string. It expects either a CSV string of hosts, the path to an INI formatted file, or a path to a script that can be executed to return the JSON you are trying to pass directly to host_list.
--
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 post to this group, send email to ansible...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/33aa946b-feaa-42f2-8465-567f507b1ced%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


--
Matt Martz
@sivel
sivel.net

Idan null

unread,
Jun 14, 2016, 8:07:53 PM6/14/16
to Ansible Project
So if my python script will run a python script that return JSON will it work ?
I mean if i do something like that:
$ python Ansible.py -i inv.py
And the inv.py will return JSON
Or it have to be 
$ ansible -m ping -i inv.py

All this hassle is because I got different servers with different ports to access to the SSH, there is no way in the host_list in the python script to pass port for each host?

To unsubscribe from this group and stop receiving emails from it, send an email to ansible-project+unsubscribe@googlegroups.com.
To post to this group, send email to ansible-project@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages