If your just trying to get the syntax of the json right, there are easier
ways to test. heres the above as an inventory script.
#!/usr/bin/env python
import json
inv = {
"company": {
"hosts": [
"server",
"sensor"
]
},
"_meta": {
"hostvars": {
"server": {
"ansible_ssh_host" : "7.7.7.7",
"ansible_ssh_port" : 44
},
"sensor": {
"ansible_ssh_host" : "7.7.7.7",
"ansible_ssh_port" : "33"
}
}
}
}
print(json.dumps(inv))
heres the output of some test commands with (with ansible 2.0rc8, but it
should work the same with 1.9x)
$ ansible -i leon.py all --list-hosts
hosts (2):
server
sensor
$ ansible -i leon.py sensor -m debug -a var=vars
sensor | SUCCESS => {
"vars": {
"ansible_ssh_host": "7.7.7.7",
"ansible_ssh_port": "33",
"group_names": [
"company"
],
"inventory_hostname": "sensor",
"inventory_hostname_short": "sensor"
}
}
On Tuesday, December 29, 2015 at 2:24:31 PM UTC-8, Leon Pinkney wrote:
>
> Hi All,
>
> I have been using Ansible for a few months now and have started to create
> some custom python scripts to enable me to implement tasks I haven't
> otherwise been able to do within standard playbooks.
>
> My inventory file is starting to grow and since all of the information in
> it is currently available from a DB, I started to look at dynamic inventory.
>
> I wanted to start by understanding the JSON required to build an
> inventory, so came up with the following code in an effort to understand
> it. I realise that this is not a complete solution, it is purely for me to
> understand the required format of the data.
>
> inv = {
> "company": {
> "hosts": [
> "server",
> "sensor"
> ]
> },
> "_meta": {
> "hostvars": {
> "server": {
> "ansible_ssh_host" : "7.7.7.7",
> "ansible_ssh_port" : "44"
> },
> "sensor": {
> "ansible_ssh_host" : "7.7.7.7",
> "ansible_ssh_port" : "33"
> }
> }
> }
> }
> inv = json.dumps(inv)
>
> inventory = ansible.inventory.Inventory(inv)
>
> If I print inv, it comes out like so...
>
> {"company": {"hosts": ["server", "sensor"]}, "_meta": {"hostvars":
> {"sensor": {"ansible_ssh_host": "7.7.7.7", "ansible_ssh_port": "44"},
> "server": {"ansible_ssh_host": "7.7.7.7", "ansible_ssh_port": "33"}}}}
>
> When I execute this code however, I get the following error.
>
> Traceback (most recent call last):
> File "test_inventory.py", line 33, in <module>
> inventory = ansible.inventory.Inventory(inv)
> File
> "/usr/local/lib/python2.7/dist-packages/ansible/inventory/__init__.py",
> line 93, in __init__
> all.add_host(Host(tokens[0], tokens[1]))
> File "/usr/local/lib/python2.7/dist-packages/ansible/inventory/host.py",
> line 32, in __init__
> self.set_variable('ansible_ssh_port', int(port))
> ValueError: invalid literal for int() with base 10: '"22"}'
>
> I've tried removing the string quotes from the port number, but the
> problem persists. If I remove the ansible_ssh_port lines, I get no errors.
>
> Can anyone offer any advice? I'm current running Ansible version 1.9.4
> which I understand is the latest.
>
> Thanks!
>
--
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 [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/79b0a731-a278-4e2a-8c3c-7c044b8f5295%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.