Skip to content

Instantly share code, notes, and snippets.

@kmpm
Created February 18, 2024 18:02
Show Gist options
  • Save kmpm/05d462d863cdeeb758bb3fe3dafa6799 to your computer and use it in GitHub Desktop.
Save kmpm/05d462d863cdeeb758bb3fe3dafa6799 to your computer and use it in GitHub Desktop.
Incus inventory for ansible
#!/usr/bin/env python3
import json
import httpx
target_host = "localhost"
socket_path = "/var/lib/incus/unix.socket"
transport = httpx.HTTPTransport(uds=socket_path)
client = httpx.Client(transport=transport)
response = client.get(f'http://{target_host}/1.0/instances?recursion=2')
assert response.status_code == 200
inventory={
'incus_hosts':{'hosts':[], 'vars': {'ansible_user': 'ansible'}},
'_meta':{
'hostvars':{}
}
}
for instance in response.json()['metadata']:
name = instance['name']
addresses = instance['state']['network']['eth0']['addresses']
adr = next(filter(lambda a: a['family'] == 'inet' and a['scope'] == 'global', addresses))
inventory['incus_hosts']['hosts'].append(adr['address'])
print(json.dumps(inventory))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment