inventory: Configure for HostVDS openstack

Using the Ansible OpenStack inventory plugin, we can automatically fetch
information about running instances in HostVDS.  We're deriving group
membership from the `groups` metadata tag.

The OpenStack API password must be specified in a `secure.yaml` file.
We're omitting this from the repository because there's no apparent way
to encrypt it.

The inventory plugin tends to prefer IPv6 addresses over IPv4 when
populating `ansible_host`, even if the control machine does not have
IPv6 connectivity.  Thus, we have to compose the relevant variables
ourselves with a Jinja2 expression.
dynamic-inventory
Dustin 2025-01-26 07:03:26 -06:00
parent f868cea05c
commit 319cc80a9f
3 changed files with 29 additions and 0 deletions

2
.gitignore vendored
View File

@ -1,5 +1,7 @@
/.inventory-cache
/.vault-secret.gpg
.fact-cache
/secure.yaml
/victoria-metrics-*.tar.gz
/victoria-metrics-*/
/tmp/

9
clouds.yaml Normal file
View File

@ -0,0 +1,9 @@
clouds:
hostvds:
region_name: us-east2
auth:
username: hostvds-b3897be3-8920-4fb0-955d-340a162da6dd
project_name: hostvds-b3897be3-8920-4fb0-955d-340a162da6dd
auth_url: https://os-api.hostvds.com/identity
user_domain_name: Default
project_domain_id: default

18
hostvds.openstack.yml Normal file
View File

@ -0,0 +1,18 @@
plugin: openstack.cloud.openstack
only_clouds:
- hostvds
cache: true
cache_plugin: jsonfile
cache_connection: .inventory-cache
compose:
ansible_user: '"root"'
ansible_host: &ipv4
(openstack.addresses[openstack.addresses|first]
| selectattr('version', 'eq', 4)
| first
).addr
ansible_ssh_host: *ipv4
keyed_groups:
- key: openstack.metadata.groups|split(',')
prefix: ''
separator: ''