salt.roster.ansible

Read in an Ansible inventory file or script.

Flat inventory files should be in the regular ansible inventory format.

# /tmp/example_roster
[servers]
salt.gtmanfred.com ansible_ssh_user=gtmanfred ansible_ssh_host=127.0.0.1 ansible_ssh_port=22 ansible_ssh_pass='password' ansible_sudo_pass='password'

[desktop]
home ansible_ssh_user=gtmanfred ansible_ssh_host=12.34.56.78 ansible_ssh_port=23 ansible_ssh_pass='password' ansible_sudo_pass='password'

[computers:children]
desktop
servers

[computers:vars]
http_port=80

then salt-ssh can be used to hit any of them

[~]# salt-ssh --roster=ansible --roster-file=/tmp/example_roster -N all test.ping
salt.gtmanfred.com:
    True
home:
    True
[~]# salt-ssh --roster=ansible --roster-file=/tmp/example_roster -N desktop test.ping
home:
    True
[~]# salt-ssh --roster=ansible --roster-file=/tmp/example_roster -N computers test.ping
salt.gtmanfred.com:
    True
home:
    True
[~]# salt-ssh --roster=ansible --roster-file=/tmp/example_roster salt.gtmanfred.com test.ping
salt.gtmanfred.com:
    True

There is also the option of specifying a dynamic inventory, and generating it on the fly

#!/bin/bash
# filename: /etc/salt/hosts
echo '{
    "servers": [
        "salt.gtmanfred.com"
    ],
    "desktop": [
        "home"
    ],
    "computers": {
        "hosts": [],
        "children": [
            "desktop",
            "servers"
        ],
        "vars": {
            "http_port": 80
        }
    },
    "_meta": {
        "hostvars": {
            "salt.gtmanfred.com": {
                "ansible_ssh_user": "gtmanfred",
                "ansible_ssh_host": "127.0.0.1",
                "ansible_sudo_pass": "password",
                "ansible_ssh_pass": "password",
                "ansible_ssh_port": 22
            },
            "home": {
                "ansible_ssh_user": "gtmanfred",
                "ansible_ssh_host": "12.34.56.78",
                "ansible_sudo_pass": "password",
                "ansible_ssh_pass": "password",
                "ansible_ssh_port": 23
            }
        }
    }
}'

This is the format that an inventory script needs to output to work with ansible, and thus here.

[~]# salt-ssh --roster=ansible --roster-file /etc/salt/hosts salt.gtmanfred.com test.ping
salt.gtmanfred.com:
        True

Note

A dynamic inventory script must have the executable bit set. In the above example, chmod +x /etc/salt/hosts.

Any of the [groups] or direct hostnames will return. The 'all' is special, and returns everything.

salt.roster.ansible.targets(tgt, tgt_type='glob', **kwargs)

Return the targets from the ansible inventory_file Default: /etc/salt/roster