From 84121b31491bdc540780972019f7eedce5ca38b5 Mon Sep 17 00:00:00 2001 From: Kevin Thompson Date: Sun, 11 May 2025 00:12:52 -0500 Subject: [PATCH] Call custom script. I'm tired of fucking with Linode's collection.. --- .../linode/library/linode_inventory.py | 39 +++++++++++++++++++ roles/inventory/linode/tasks/main.yaml | 1 + 2 files changed, 40 insertions(+) create mode 100644 roles/inventory/linode/library/linode_inventory.py diff --git a/roles/inventory/linode/library/linode_inventory.py b/roles/inventory/linode/library/linode_inventory.py new file mode 100644 index 0000000..f21ab4b --- /dev/null +++ b/roles/inventory/linode/library/linode_inventory.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python3 + +from ansible.module_utils.basic import AnsibleModule +import os +import requests + +def main(): + module = AnsibleModule(argument_spec={}) + + token = os.getenv("LINODE_TOKEN") + if not token: + module.fail_json(msg="LINODE_TOKEN is not set") + + response = requests.get("https://api.linode.com/v4/linode/instances", headers={ + "Authorization": f"Bearer {token}", + "Content-Type": "application/json" + }) + + if response.status_code != 200: + module.fail_json(msg=f"Linode API error: {response.status_code}", details=response.text) + + linodes = response.json().get("data", []) + results = { + "changed": False, + "linodes": [ + { + "name": l["label"], + "ip": l["ipv4"][0] if l["ipv4"] else None, + "region": l["region"], + "tags": l["tags"], + "type": l["type"] + } for l in linodes + ] + } + + module.exit_json(**results) + +if __name__ == "__main__": + main() diff --git a/roles/inventory/linode/tasks/main.yaml b/roles/inventory/linode/tasks/main.yaml index 11a01f4..0cec889 100644 --- a/roles/inventory/linode/tasks/main.yaml +++ b/roles/inventory/linode/tasks/main.yaml @@ -17,3 +17,4 @@ content: | [all] {{ linode_inventory }} +