do-ansible-inventory is a tool that generates an Ansible inventory file with your DigitalOcean Droplets. It is an alternative to dynamic inventories as you can run do-ansible-inventory once and receive a static inventory file that you can use anywhere, copy, or modify.
- Download the latest release from the releases page.
- Extract the downloaded archive and place the binary
do-ansible-inventorywherever you like. Preferably to any directory in your$PATHsuch as~/binif it exists or/usr/local/binso you can easily access it.
To use do-ansible-inventory, run:
do-ansible-inventory
By default, without setting any options, do-ansible-inventory will attempt to look up the currently configured doctl access token and generate an ansible inventory with:
- All of your Droplets as Ansible hosts
- Each DigitalOcean region as an Ansible group containing any Droplets in that region
- Each Droplet tag as a group containing any Droplets with that tag
If you do not have doctl installed or would like to explicitly specify the access token, run do-ansible-inventory --access-token ACCESS_TOKEN or use the DIGITALOCEAN_ACCESS_TOKEN environment variable.
The resulting inventory will be printed to the console. You can save it to a file instead by passing --out inventory or redirecting the output like so: do-ansible-inventory > inventory.
-t TOKEN,--access-token TOKEN- DigitalOcean API Token - if unset, do-ansible-inventory attempts to use doctl's stored token of its current default context. Alternatively, use the environment variableDIGITALOCEAN_ACCESS_TOKEN--ssh-user USER- sets theansible_userproperty on the hosts (Droplets)--ssh-port PORT- sets theansible_portproperty on the hosts (Droplets)--tag TAG- limits the inventory to only Droplets with the specified tag--ignore HOSTNAME- pass a Droplet's hostname to exclude it from the inventory. This option can be used multiple times--group-by-region- create groups for each DigitalOcean region. Default behavior.--group-by-tag- create groups for each Droplet tag. Default behavior.--no-group-by-region- Do not create groups for each DigitalOcean region.--no-group-by-tag- Do not create groups for each Droplet tag.--out FILE- write the inventory to the specified file
Running:
$ do-ansible-inventory --out ./inventory
will output:
β’ no access token provided, attempting to look up doctl's access token
β’ using doctl access token context=default
β’ processing droplet=speedtest-ams2.digitalocean.com
β’ processing droplet=speedtest-nyc2.digitalocean.com
β’ processing droplet=speedtest-sfo1.digitalocean.com
β’ processing droplet=speedtest-ams3.digitalocean.com
β’ processing droplet=speedtest-blr1.digitalocean.com
β’ processing droplet=speedtest-fra1.digitalocean.com
β’ processing droplet=speedtest-lon1.digitalocean.com
β’ processing droplet=speedtest-nyc1.digitalocean.com
β’ processing droplet=speedtest-nyc3.digitalocean.com
β’ processing droplet=speedtest-sfo2.digitalocean.com
β’ processing droplet=speedtest-sgp1.digitalocean.com
β’ processing droplet=speedtest-tor1.digitalocean.com
β’ building region group region=ams1
β’ building region group region=ams2
β’ building region group region=ams3
β’ building region group region=blr1
β’ building region group region=fra1
β’ building region group region=lon1
β’ building region group region=nyc1
β’ building region group region=nyc2
β’ building region group region=nyc3
β’ building region group region=sfo1
β’ building region group region=sfo2
β’ building region group region=sfo3
β’ building region group region=sgp1
β’ building region group region=tor1
β’ building tag group tag=speedtests
β’ done!
with the resulting file inventory containing:
speedtest-ams2.digitalocean.com ansible_host=188.226.175.227
speedtest-nyc2.digitalocean.com ansible_host=192.241.184.88
speedtest-sfo1.digitalocean.com ansible_host=107.170.223.15
speedtest-ams3.digitalocean.com ansible_host=178.62.216.76
speedtest-blr1.digitalocean.com ansible_host=139.59.80.215
speedtest-fra1.digitalocean.com ansible_host=46.101.218.147
speedtest-lon1.digitalocean.com ansible_host=46.101.44.214
speedtest-nyc1.digitalocean.com ansible_host=165.227.194.167
speedtest-nyc3.digitalocean.com ansible_host=174.138.51.137
speedtest-sfo2.digitalocean.com ansible_host=165.227.29.84
speedtest-sgp1.digitalocean.com ansible_host=159.89.192.182
speedtest-tor1.digitalocean.com ansible_host=159.203.57.38
[ams1]
[ams2]
speedtest-ams2.digitalocean.com
[ams3]
speedtest-ams3.digitalocean.com
[blr1]
speedtest-blr1.digitalocean.com
[fra1]
speedtest-fra1.digitalocean.com
[lon1]
speedtest-lon1.digitalocean.com
[nyc1]
speedtest-nyc1.digitalocean.com
[nyc2]
speedtest-nyc2.digitalocean.com
[nyc3]
speedtest-nyc3.digitalocean.com
[sfo1]
speedtest-sfo1.digitalocean.com
[sfo2]
speedtest-sfo2.digitalocean.com
[sfo3]
[sgp1]
speedtest-sgp1.digitalocean.com
[tor1]
[speedtests]
speedtest-ams2.digitalocean.com
speedtest-nyc2.digitalocean.com
speedtest-sfo1.digitalocean.com
speedtest-ams3.digitalocean.com
speedtest-blr1.digitalocean.com
speedtest-fra1.digitalocean.com
speedtest-lon1.digitalocean.com
speedtest-nyc1.digitalocean.com
speedtest-nyc3.digitalocean.com
speedtest-sfo2.digitalocean.com
speedtest-sgp1.digitalocean.com
speedtest-tor1.digitalocean.com
usage: do-ansible-inventory [<flags>]
Flags:
-t, --access-token=ACCESS-TOKEN
DigitalOcean API Token - if unset, attempts to use doctl's stored token of its current default context. env var:
DIGITALOCEAN_ACCESS_TOKEN
--ssh-user=SSH-USER default ssh user
--ssh-port=SSH-PORT default ssh port
--tag=TAG filter droplets by tag
--ignore=IGNORE ... ignore a Droplet by name, can be specified multiple times
--group-by-region group hosts by region, defaults to true
--group-by-tag group hosts by their Droplet tags, defaults to true
--out=OUT write the ansible inventory to this file