Reattempting Linode dynamic inventories.
This commit is contained in:
@@ -1,9 +1,96 @@
|
||||
---
|
||||
- name: Generate Linode inventory file
|
||||
- name: Update Linode Dynamic Inventory
|
||||
hosts: localhost
|
||||
gather_facts: true
|
||||
connection: local
|
||||
|
||||
vars:
|
||||
# Override these variables as needed
|
||||
linode_api_token: "{{ lookup('env', 'LINODE_API_TOKEN') }}"
|
||||
linode_inventory_output_dir: "/tmp/linode_inventory"
|
||||
inventory_format: "json" # or "ini"
|
||||
awx_integration: true
|
||||
cleanup_temp_files: false
|
||||
|
||||
# Optional filters
|
||||
include_only_running: false
|
||||
specific_regions: [] # e.g., ['us-east', 'us-west']
|
||||
specific_tags: [] # e.g., ['production', 'web']
|
||||
|
||||
pre_tasks:
|
||||
- name: Check for Linode API token
|
||||
ansible.builtin.fail:
|
||||
msg: "LINODE_API_TOKEN environment variable or linode_api_token variable must be set"
|
||||
when:
|
||||
- linode_api_token is undefined or linode_api_token == ""
|
||||
- lookup('env', 'LINODE_API_TOKEN') == ""
|
||||
|
||||
- name: Display configuration
|
||||
ansible.builtin.debug:
|
||||
msg: |
|
||||
Linode Inventory Configuration:
|
||||
Output directory: {{ linode_inventory_output_dir }}
|
||||
Output format: {{ inventory_format }}
|
||||
AWX integration: {{ awx_integration }}
|
||||
Include only running: {{ include_only_running }}
|
||||
|
||||
roles:
|
||||
- role: linode_inventory
|
||||
vars:
|
||||
linode_api_token: "{{ linode_api_token }}"
|
||||
|
||||
post_tasks:
|
||||
- name: Display next steps
|
||||
ansible.builtin.debug:
|
||||
msg: |
|
||||
Inventory update complete!
|
||||
|
||||
Next steps for AWX integration:
|
||||
1. Copy the inventory script to your SCM repository
|
||||
2. Create a custom inventory source in AWX
|
||||
3. Point it to the linode_inventory.py script
|
||||
4. Set up the Linode API credential
|
||||
|
||||
Files created:
|
||||
- JSON inventory: {{ linode_inventory_output_dir }}/{{ linode_inventory_output_file }}
|
||||
{% if inventory_format == "ini" %}
|
||||
- INI inventory: {{ linode_inventory_output_dir }}/linode_static_inventory.ini
|
||||
{% endif %}
|
||||
|
||||
# Optional: Run against discovered Linode hosts
|
||||
- name: Example task against discovered Linode hosts
|
||||
hosts: localhost
|
||||
gather_facts: false
|
||||
roles:
|
||||
- roles/inventory/linode
|
||||
vars:
|
||||
linode_token: "{{ lookup('env', 'LINODE_TOKEN') }}"
|
||||
tasks:
|
||||
- name: Load dynamic inventory
|
||||
ansible.builtin.include_vars:
|
||||
file: "{{ linode_inventory_output_dir | default('/tmp/linode_inventory') }}/{{ linode_inventory_output_file | default('linode_inventory.json') }}"
|
||||
name: dynamic_inventory
|
||||
|
||||
- name: Add discovered hosts to in-memory inventory
|
||||
ansible.builtin.add_host:
|
||||
name: "{{ item.key }}"
|
||||
groups: "{{ group_names | default(['discovered_linodes']) }}"
|
||||
ansible_host: "{{ item.value.ansible_host }}"
|
||||
linode_id: "{{ item.value.linode_id }}"
|
||||
linode_region: "{{ item.value.linode_region }}"
|
||||
linode_type: "{{ item.value.linode_type }}"
|
||||
linode_status: "{{ item.value.linode_status }}"
|
||||
loop: "{{ dynamic_inventory._meta.hostvars | dict2items }}"
|
||||
when: item.value.linode_status == "running"
|
||||
|
||||
- name: Test connection to discovered Linode hosts
|
||||
hosts: discovered_linodes
|
||||
gather_facts: false
|
||||
vars:
|
||||
ansible_user: root
|
||||
ansible_ssh_common_args: '-o StrictHostKeyChecking=no -o ConnectTimeout=10'
|
||||
tasks:
|
||||
- name: Test connectivity
|
||||
ansible.builtin.ping:
|
||||
register: ping_result
|
||||
ignore_errors: true
|
||||
|
||||
- name: Display connectivity status
|
||||
ansible.builtin.debug:
|
||||
msg: "{{ inventory_hostname }} ({{ ansible_host }}): {{ 'REACHABLE' if ping_result is succeeded else 'UNREACHABLE' }}"
|
||||
|
Reference in New Issue
Block a user