sbaerlocher / freeformz.ansible

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Ansible Bits

Install via: ansible-galaxy collection install freeformz.ansible

Tailscale Inventory Plugin

Requires a tailscale api key.

Creates groups for each tag, each os (when os_groups = true - Defaults to true), and online/offline status (when include_online_offline_groups == true - Defaults to true).

Tags in Tailscale start with tag:. This prefix is stripped when strip_tag == true (the default), otherwise it is converted to tag_.

See ansible-doc -t inventory freeformz.ansible.tailscale for more documentation and all the options.

Run ansible-inventory --list to see the output. If you are playing with options, you can use this command to see how they affect the inventory.

Data from the Tailscale Tailnet Get Devices API is converted from camelCase to snake_case and provided in the inventory.

Example

This is a watered down version of the config of my personal home lab tailscale + ansible setup.

ansible.cfg

[inventory]
enable_plugins = freeformz.ansible.tailscale

[defaults]
inventory = ./inventory/tailscale.yaml

./inventory/tailscale.yaml

plugin: freeformz.ansible.tailscale # must be freeformz.ansible.tailscale
ansible_host: ipv4                  # ipv4, ipv6, dns, or host_name - Depends on how you referred to the hosts before this
api_key: "<a tailscale api key>"    # a Tailscale API Key - https://tailscale.com/kb/1101/api/
tailnet: freeformz.github           # The name of your tailnet - What you see at the top left of https://login.tailscale.com/admin/machines

ansible-inventory --list

{
    "_meta": {
        "hostvars": {
            "edwards-boxen": {
                "addresses": [
                    "1.2.3.4",
                    "aaaa:bbbb:cccc:dddd:eeee:ffff:gggg:hhhh"
                ],
                "advertised_routes": [],
                "ansible_host": "1.2.3.4",
                "authorized": true,
                "blocks_incoming_connections": false,
                "client_connectivity": {
                    "client_supports": {
                        "hair_pinning": false,
                        "ipv6": true,
                        "pcp": true,
                        "pmp": true,
                        "udp": true,
                        "upnp": true
                    },
                    "derp": "",
                    "endpoints": [
                        "<redacted>"
                    ],
                    "latency": {
                        "_dallas": {
                            "latency_ms": 197.155708
                        },
                        "_san _francisco": {
                            "latency_ms": 99.882166,
                            "preferred": true
                        },
                        "_seattle": {
                            "latency_ms": 99.97449999999999
                        }
                    },
                    "mapping_varies_by_dest_ip": true
                },
                "client_version": "1.28.0-t80313cdee-gd26dd4a68",
                "created": "2021-08-06T21:32:18Z",
                "enabled_routes": [],
                "expires": "2023-01-28T21:47:09Z",
                "ipv4": "1.2.3.4",
                "ipv6": "aaaa:bbbb:cccc:dddd:eeee:ffff:gggg:hhhh",
                "is_external": false,
                "key_expiry_disabled": false,
                "last_seen": "2022-08-10T03:38:41Z",
                "machine_key": "mkey:<redacted>",
                "name": "edwards-iphone.freeformz.github",
                "node_key": "nodekey:<redacted>",
                "os": "iOS",
                "status": "online",
                "update_available": false,
                "user": "freeformz@github",
                "tags": [
                    "..."
                ]
            },
        },
    },
    "all": {
        "children": [
            "ios",
            "linux",
            "offline",
            "online",
            "ungrouped"
            "atag",
        ]
    },
    "atag": {
        "hosts": [
            "a",
            "b",
            "c"
        ]
    },
    "ios": {
        "hosts": [
            "edwards-boxen"
        ]
    },
    "linux": {
        "hosts": [
            "..."
        ]
    },
    "offline": {
        "hosts": [
            "..."
        ]
    },
    "online": {
        "hosts": [
            "edwards-boxen",
            "..."
        ]
    },
    "ungrouped": {
        "hosts": [
            "..."
        ]
    },
}

About

License:MIT License


Languages

Language:Python 100.0%