Hey Racke,

I've changed the output to a list now so we can put the json format to bed 
hopefully now:

$ ansible --version
ansible 2.9.15
  config file = /home/ubuntu/ansible.cfg
  configured module search path = 
[u'/home/ubuntu/.ansible/plugins/modules', 
u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.17 (default, Sep 30 2020, 13:38:04) [GCC 7.5.0]

$ ./dynamic3.sh
{
  "all": {
    "hosts": [
ip-172-31-10-247.eu-west-1.compute.internal,
  ] }
}

on ansible version - v2.9.15 I get this output:

$ ansible -i dynamic3.sh all -m ping -u ubuntu
[WARNING]:  * Failed to parse /home/ubuntu/dynamic3.sh with script plugin: 
failed to parse executable inventory script results from 
/home/ubuntu/dynamic3.sh: No JSON
object could be decoded
[WARNING]:  * Failed to parse /home/ubuntu/dynamic3.sh with ini plugin: 
/home/ubuntu/dynamic3.sh:2: Expected key=value host variable assignment, 
got: {
[WARNING]: Unable to parse /home/ubuntu/dynamic3.sh as an inventory source
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note 
that the implicit localhost does not match 'all'

But the same script on ansible version v2.9.6

$ ansible --version
ansible 2.9.6
  config file = /home/ubuntu/ansible.cfg
  configured module search path = 
[u'/home/ubuntu/.ansible/plugins/modules', 
u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.17 (default, Sep 30 2020, 13:38:04) [GCC 7.5.0]

$ ./dynamic.sh
{
  "all": {
    "hosts": [
ip-172-31-10-247.eu-west-1.compute.internal,
  ] }
}

$ ansible -i dynamic.sh all -m ping -u ubuntu
[DEPRECATION WARNING]: Distribution Ubuntu 18.04 on host 
ip-172-31-10-247.eu-west-1.compute.internal should use
/usr/bin/python3, but is using /usr/bin/python for backward compatibility 
with prior Ansible releases. A future
Ansible release will default to using the discovered platform python for 
this host. See
https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html
 
for more information. This
feature will be removed in version 2.12. Deprecation warnings can be 
disabled by setting deprecation_warnings=False
in ansible.cfg.
ip-172-31-10-247.eu-west-1.compute.internal | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}

and it works? Is anyone able to tell me the difference? You help would be 
greatly appreciated.

On Tuesday, 3 November 2020 at 10:19:24 UTC [email protected] wrote:

> On 11/3/20 11:03 AM, [email protected] wrote:
> > Thanks Vladimir,
> > 
> > When I take out the trailing comma on line 7 I get a different error:
> > 
> > $ ./dynamic1.sh
> > {
> >   "all": {
> >       "hosts": {
> > "ip-172-31-39-30.eu-west-1.compute.internal": null,
> > "ip-172-31-44-224.eu-west-1.compute.internal": null,
> > "ip-172-31-42-6.eu-west-1.compute.internal": null,
> > "ip-172-31-32-68.eu-west-1.compute.internal": null
> >     }
> >   }
> > }
>
> hosts should be a list, not a dict, e.g.
>
> {
> "group": {
> "hosts": [
> "192.168.28.71",
> "192.168.28.72"
> ],
> "vars": {
> "ansible_ssh_user": "johndoe",
> "ansible_ssh_private_key_file": "~/.ssh/mykey",
> "example_variable": "value"
> }
> },
> "_meta": {
> "hostvars": {
> "192.168.28.71": {
> "host_specific_var": "bar"
> },
> "192.168.28.72": {
> "host_specific_var": "foo"
> }
> }
> }
> }
>
> Example from: 
> https://www.jeffgeerling.com/blog/creating-custom-dynamic-inventories-ansible
>
> Regards
> Racke
>
> > $ ansible -i ./dynamic1.sh all -m ping -u ubuntu
> > [WARNING]:  * Failed to parse /home/ubuntu/dynamic1.sh with script 
> plugin: You defined a group 'all' with bad data for
> > the host list:  {u'hosts': {u'ip-172-31-32-68
> > .eu-west-1.compute.internal': None, 
> u'ip-172-31-39-30.eu-west-1.compute.internal': None,
> > u'ip-172-31-42-6.eu-west-1.compute.internal': None, 
> u'ip-172-31-44-224.eu-
> > west-1.compute.internal': None}}
> > [WARNING]:  * Failed to parse /home/ubuntu/dynamic1.sh with ini plugin: 
> /home/ubuntu/dynamic1.sh:3: Expected key=value
> > host variable assignment, got: {
> > [WARNING]: Unable to parse /home/ubuntu/dynamic1.sh as an inventory 
> source
> > [WARNING]: No inventory was parsed, only implicit localhost is available
> > { | UNREACHABLE! => {
> >     "changed": false,
> >     "msg": "Failed to connect to the host via ssh: ssh: Could not 
> resolve hostname {: Temporary failure in name resolution",
> >     "unreachable": true
> > }
> > 
> > 
> > Ansible still doesn't accept the dynamic script's output. Ansible cli 
> will accept the file output being used with or
> > without the last "," so it's odd for me. I'm supplying the list of hosts 
> in a format that Ansible will run against based
> > on the file (output of the script), but ansible won't take the same 
> output from the script.
> > 
> > 
> > 
> > On Tuesday, 3 November 2020 at 09:37:11 UTC [email protected] wrote:
> > 
> > On Tue, 3 Nov 2020 01:07:29 -0800 (PST)
> > "[email protected]" <[email protected]> wrote:
> > 
> > > {
> > > "all": {
> > > "hosts": {
> > > "ip-172-31-39-30.eu-west-1.compute.internal": null,
> > > "ip-172-31-44-224.eu-west-1.compute.internal": null,
> > > "ip-172-31-42-6.eu-west-1.compute.internal": null,
> > > "ip-172-31-32-68.eu-west-1.compute.internal": null,
> > > }
> > > }
> > > }
> > > ...
> > > Expecting property name enclosed in double quotes: line 8 column 5 
> (char
> > > 242)
> > > [WARNING]: * Failed to parse /home/ubuntu/dynamic1.sh with ini plugin:
> > > /home/ubuntu/dynamic1.sh:2: Expected key=value host variable 
> assignment,
> > > got: {
> > 
> > It's wrong JSON syntax. Remove the comma at the end of line 7.
> > 
> > -- 
> > Vladimir Botka
> > 
> > -- 
> > 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] <mailto:
> [email protected]>.
> > To view this discussion on the web visit
> > 
> https://groups.google.com/d/msgid/ansible-project/3eabca68-7bce-43eb-ac7e-0fd7d1a13e1cn%40googlegroups.com
> > <
> https://groups.google.com/d/msgid/ansible-project/3eabca68-7bce-43eb-ac7e-0fd7d1a13e1cn%40googlegroups.com?utm_medium=email&utm_source=footer
> >.
>
>
> -- 
> Ecommerce and Linux consulting + Perl and web application programming.
> Debian and Sympa administration. Provisioning with Ansible.
>

-- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/cc313b05-03aa-42e0-a400-31800ac7c0bcn%40googlegroups.com.

Reply via email to