Initial commit of Ansible inventory playbooks
This commit is contained in:
32
esxi_inventory_playbook.yml
Normal file
32
esxi_inventory_playbook.yml
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
---
|
||||||
|
- name: Gather VM inventory from ESXi hypervisor
|
||||||
|
hosts: localhost
|
||||||
|
gather_facts: false
|
||||||
|
vars:
|
||||||
|
esxi_hostname: "your_esxi_host_ip" # Replace with your ESXi host IP or hostname
|
||||||
|
esxi_username: "root" # Replace with your ESXi username
|
||||||
|
esxi_password: "your_password" # Replace with your ESXi password (use ansible-vault for security)
|
||||||
|
validate_certs: false # Set to true if you have valid certs
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: Gather information about all VMs on the ESXi host
|
||||||
|
community.vmware.vmware_vm_info:
|
||||||
|
hostname: "{{ esxi_hostname }}"
|
||||||
|
username: "{{ esxi_username }}"
|
||||||
|
password: "{{ esxi_password }}"
|
||||||
|
validate_certs: "{{ validate_certs }}"
|
||||||
|
register: vm_info
|
||||||
|
|
||||||
|
- name: Display the VM inventory
|
||||||
|
debug:
|
||||||
|
var: vm_info
|
||||||
|
|
||||||
|
- name: Save VM inventory to file
|
||||||
|
copy:
|
||||||
|
content: "{{ vm_info | to_nice_json }}"
|
||||||
|
dest: /root/esxi_vm_inventory.json
|
||||||
|
|
||||||
|
# Notes:
|
||||||
|
# - Install the community.vmware collection: ansible-galaxy collection install community.vmware
|
||||||
|
# - Ensure pyvmomi is installed on the control machine: pip install pyvmomi
|
||||||
|
# - For production, secure passwords with ansible-vault or use environment variables.
|
||||||
72
fetch_sdp_inventory.yml
Normal file
72
fetch_sdp_inventory.yml
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
---
|
||||||
|
- name: Fetch Machine Inventory from ServiceDesk Plus
|
||||||
|
hosts: localhost
|
||||||
|
connection: local
|
||||||
|
vars:
|
||||||
|
sdp_url: "https://your-servicedesk-instance.com" # Replace with your ServiceDesk Plus URL
|
||||||
|
technician_key: "YOUR_TECHNICIAN_KEY" # Replace with your API key
|
||||||
|
output_file: "sdp_inventory.json" # File to save the inventory
|
||||||
|
row_count: 100 # Number of records per page
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: Fetch initial page and total count
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: "{{ sdp_url }}/api/v3/assets?TECHNICIAN_KEY={{ technician_key }}"
|
||||||
|
method: POST
|
||||||
|
body_format: json
|
||||||
|
body: '{{ input_data | to_json }}'
|
||||||
|
return_content: yes
|
||||||
|
status_code: 200
|
||||||
|
vars:
|
||||||
|
input_data:
|
||||||
|
list_info:
|
||||||
|
row_count: "{{ row_count }}"
|
||||||
|
start_index: 1
|
||||||
|
sort_field: "name"
|
||||||
|
sort_order: "asc"
|
||||||
|
get_total_count: true
|
||||||
|
register: initial_response
|
||||||
|
|
||||||
|
- name: Set facts for total count and initial assets
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
total_count: "{{ initial_response.json.list_info.total_count | int }}"
|
||||||
|
all_assets: "{{ initial_response.json.assets | default([]) }}"
|
||||||
|
|
||||||
|
- name: Calculate number of pages
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
pages: "{{ ((total_count + row_count - 1) / row_count) | int }}"
|
||||||
|
|
||||||
|
- name: Fetch remaining pages
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: "{{ sdp_url }}/api/v3/assets?TECHNICIAN_KEY={{ technician_key }}"
|
||||||
|
method: POST
|
||||||
|
body_format: json
|
||||||
|
body: '{{ input_data | to_json }}'
|
||||||
|
return_content: yes
|
||||||
|
status_code: 200
|
||||||
|
vars:
|
||||||
|
input_data:
|
||||||
|
list_info:
|
||||||
|
row_count: "{{ row_count }}"
|
||||||
|
start_index: "{{ (item - 1) * row_count + 1 }}"
|
||||||
|
sort_field: "name"
|
||||||
|
sort_order: "asc"
|
||||||
|
get_total_count: true
|
||||||
|
loop: "{{ range(2, pages | int + 1) | list }}"
|
||||||
|
register: page_responses
|
||||||
|
when: pages > 1
|
||||||
|
|
||||||
|
- name: Append remaining assets to all_assets
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
all_assets: "{{ all_assets + item.json.assets | default([]) }}"
|
||||||
|
loop: "{{ page_responses.results }}"
|
||||||
|
when: pages > 1
|
||||||
|
|
||||||
|
- name: Save full inventory to file
|
||||||
|
ansible.builtin.copy:
|
||||||
|
content: "{{ {'assets': all_assets} | to_json }}"
|
||||||
|
dest: "{{ output_file }}"
|
||||||
|
|
||||||
|
- name: Display result
|
||||||
|
ansible.builtin.debug:
|
||||||
|
msg: "Full machine inventory fetched and saved to {{ output_file }}"
|
||||||
32
get_esxi_inventory.yml
Normal file
32
get_esxi_inventory.yml
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
---
|
||||||
|
- name: Gather VM inventory from ESXi hypervisor
|
||||||
|
hosts: localhost
|
||||||
|
gather_facts: false
|
||||||
|
vars:
|
||||||
|
esxi_hostname: "your_esxi_host_ip" # Replace with your ESXi host IP or hostname
|
||||||
|
esxi_username: "root" # Replace with your ESXi username
|
||||||
|
esxi_password: "your_password" # Replace with your ESXi password (use ansible-vault for security)
|
||||||
|
validate_certs: false # Set to true if you have valid certs
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: Gather information about all VMs on the ESXi host
|
||||||
|
community.vmware.vmware_vm_info:
|
||||||
|
hostname: "{{ esxi_hostname }}"
|
||||||
|
username: "{{ esxi_username }}"
|
||||||
|
password: "{{ esxi_password }}"
|
||||||
|
validate_certs: "{{ validate_certs }}"
|
||||||
|
register: vm_info
|
||||||
|
|
||||||
|
- name: Display the VM inventory
|
||||||
|
debug:
|
||||||
|
var: vm_info
|
||||||
|
|
||||||
|
- name: Save VM inventory to file
|
||||||
|
copy:
|
||||||
|
content: "{{ vm_info | to_nice_json }}"
|
||||||
|
dest: /root/esxi_vm_inventory.json
|
||||||
|
|
||||||
|
# Notes:
|
||||||
|
# - Install the community.vmware collection: ansible-galaxy collection install community.vmware
|
||||||
|
# - Ensure pyvmomi is installed on the control machine: pip install pyvmomi
|
||||||
|
# - For production, secure passwords with ansible-vault or use environment variables.
|
||||||
38
get_rhel_insights_inventory.yml
Normal file
38
get_rhel_insights_inventory.yml
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
---
|
||||||
|
- name: Gather system inventory from Red Hat Insights API
|
||||||
|
hosts: localhost
|
||||||
|
gather_facts: false
|
||||||
|
vars:
|
||||||
|
insights_api_url: "https://console.redhat.com/api/inventory/v1/hosts" # Red Hat Insights Inventory API endpoint
|
||||||
|
insights_api_token: "your_access_token" # Replace with your Red Hat API access token (offline token from console.redhat.com)
|
||||||
|
# Optional parameters for filtering
|
||||||
|
per_page: 50
|
||||||
|
page: 1
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: Query Red Hat Insights API for host inventory
|
||||||
|
uri:
|
||||||
|
url: "{{ insights_api_url }}?per_page={{ per_page }}&page={{ page }}"
|
||||||
|
method: GET
|
||||||
|
headers:
|
||||||
|
Authorization: "Bearer {{ insights_api_token }}"
|
||||||
|
Accept: "application/json"
|
||||||
|
return_content: true
|
||||||
|
validate_certs: true # Set to false if needed, but not recommended
|
||||||
|
register: api_response
|
||||||
|
|
||||||
|
- name: Display the inventory response
|
||||||
|
debug:
|
||||||
|
var: api_response.json
|
||||||
|
|
||||||
|
- name: Save inventory to file
|
||||||
|
copy:
|
||||||
|
content: "{{ api_response.json | to_nice_json }}"
|
||||||
|
dest: /root/rhel_insights_inventory.json
|
||||||
|
|
||||||
|
# Notes:
|
||||||
|
# - Obtain an offline API token from https://console.redhat.com/openshift/token
|
||||||
|
# - Ensure your systems are registered with Red Hat Insights for them to appear in the inventory.
|
||||||
|
# - For production, secure the token with ansible-vault or environment variables.
|
||||||
|
# - Install any required modules if needed (uri is built-in).
|
||||||
|
# - This fetches a paginated list of hosts; adjust 'per_page' and 'page' or loop for full inventory.
|
||||||
64
get_rhel_insights_inventory_all_pages.yml
Normal file
64
get_rhel_insights_inventory_all_pages.yml
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
---
|
||||||
|
- name: Gather all pages of system inventory from Red Hat Insights API
|
||||||
|
hosts: localhost
|
||||||
|
gather_facts: false
|
||||||
|
vars:
|
||||||
|
insights_api_url: "https://console.redhat.com/api/inventory/v1/hosts" # Red Hat Insights Inventory API endpoint
|
||||||
|
insights_api_token: "your_access_token" # Replace with your Red Hat API access token (offline token from console.redhat.com)
|
||||||
|
per_page: 50 # Number of items per page (adjust as needed)
|
||||||
|
all_hosts: [] # Accumulator for all host data
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: Fetch the first page to get total count
|
||||||
|
uri:
|
||||||
|
url: "{{ insights_api_url }}?per_page={{ per_page }}&page=1"
|
||||||
|
method: GET
|
||||||
|
headers:
|
||||||
|
Authorization: "Bearer {{ insights_api_token }}"
|
||||||
|
Accept: "application/json"
|
||||||
|
return_content: true
|
||||||
|
validate_certs: true
|
||||||
|
register: first_page_response
|
||||||
|
|
||||||
|
- name: Accumulate first page results
|
||||||
|
set_fact:
|
||||||
|
all_hosts: "{{ all_hosts + first_page_response.json.results }}"
|
||||||
|
|
||||||
|
- name: Calculate total pages
|
||||||
|
set_fact:
|
||||||
|
total_pages: "{{ ((first_page_response.json.total | float / per_page) | round(0, 'ceil')) | int }}"
|
||||||
|
|
||||||
|
- name: Fetch remaining pages
|
||||||
|
uri:
|
||||||
|
url: "{{ insights_api_url }}?per_page={{ per_page }}&page={{ item }}"
|
||||||
|
method: GET
|
||||||
|
headers:
|
||||||
|
Authorization: "Bearer {{ insights_api_token }}"
|
||||||
|
Accept: "application/json"
|
||||||
|
return_content: true
|
||||||
|
validate_certs: true
|
||||||
|
register: page_response
|
||||||
|
loop: "{{ range(2, total_pages + 1) | list }}"
|
||||||
|
when: total_pages > 1
|
||||||
|
|
||||||
|
- name: Accumulate all remaining page results
|
||||||
|
set_fact:
|
||||||
|
all_hosts: "{{ all_hosts + item.json.results }}"
|
||||||
|
loop: "{{ page_response.results }}"
|
||||||
|
when: total_pages > 1
|
||||||
|
|
||||||
|
- name: Display the full inventory
|
||||||
|
debug:
|
||||||
|
var: all_hosts
|
||||||
|
|
||||||
|
- name: Save full inventory to file
|
||||||
|
copy:
|
||||||
|
content: "{{ {'hosts': all_hosts} | to_nice_json }}" # Wrap in a dict for better structure
|
||||||
|
dest: /root/rhel_insights_inventory_all.json
|
||||||
|
|
||||||
|
# Notes:
|
||||||
|
# - Obtain an offline API token from https://console.redhat.com/openshift/token
|
||||||
|
# - Ensure your systems are registered with Red Hat Insights.
|
||||||
|
# - For production, secure the token with ansible-vault.
|
||||||
|
# - This handles pagination by calculating total pages from the first response and fetching accordingly.
|
||||||
|
# - Assumes the API response includes 'total' and 'results' fields.
|
||||||
37
get_rhv_inventory.yml
Normal file
37
get_rhv_inventory.yml
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
---
|
||||||
|
- name: Gather VM inventory from Red Hat Virtualization (RHV)
|
||||||
|
hosts: localhost
|
||||||
|
gather_facts: false
|
||||||
|
vars:
|
||||||
|
rhv_url: "https://your_rhv_manager_fqdn/ovirt-engine/api" # Replace with your RHV Manager URL
|
||||||
|
rhv_username: "admin@internal" # Replace with your RHV username
|
||||||
|
rhv_password: "your_password" # Replace with your RHV password (use ansible-vault for security)
|
||||||
|
rhv_insecure: true # Set to false if you have valid certs
|
||||||
|
rhv_ca_file: "/path/to/ca.crt" # Optional: Path to CA certificate file
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: Gather information about all VMs in RHV
|
||||||
|
ovirt.ovirt.ovirt_vm_info:
|
||||||
|
auth:
|
||||||
|
url: "{{ rhv_url }}"
|
||||||
|
username: "{{ rhv_username }}"
|
||||||
|
password: "{{ rhv_password }}"
|
||||||
|
insecure: "{{ rhv_insecure }}"
|
||||||
|
ca_file: "{{ rhv_ca_file | default(omit) }}"
|
||||||
|
pattern: "name=*"
|
||||||
|
register: vm_info
|
||||||
|
|
||||||
|
- name: Display the VM inventory
|
||||||
|
debug:
|
||||||
|
var: vm_info
|
||||||
|
|
||||||
|
- name: Save VM inventory to file
|
||||||
|
copy:
|
||||||
|
content: "{{ vm_info | to_nice_json }}"
|
||||||
|
dest: /root/rhv_vm_inventory.json
|
||||||
|
|
||||||
|
# Notes:
|
||||||
|
# - Install the ovirt.ovirt collection: ansible-galaxy collection install ovirt.ovirt
|
||||||
|
# - Ensure required Python libraries are installed: pip install ovirt-engine-sdk-python
|
||||||
|
# - For production, secure passwords with ansible-vault or use environment variables.
|
||||||
|
# - This assumes you have access to the RHV Manager API.
|
||||||
41
host_discovery.yml
Normal file
41
host_discovery.yml
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
---
|
||||||
|
- name: Host Discovery with Nmap Probing Port 22
|
||||||
|
hosts: localhost
|
||||||
|
connection: local
|
||||||
|
vars:
|
||||||
|
networks:
|
||||||
|
- 192.168.1.0/24 # Add your networks here
|
||||||
|
output_file: discovered_hosts.json
|
||||||
|
tasks:
|
||||||
|
- name: Install nmap if not present
|
||||||
|
become: true
|
||||||
|
ansible.builtin.apt:
|
||||||
|
name: nmap
|
||||||
|
state: present
|
||||||
|
update_cache: true
|
||||||
|
- name: Perform Nmap scan on each network
|
||||||
|
ansible.builtin.shell:
|
||||||
|
cmd: nmap -sT -p 22 -Pn --open -R -oG - {{ item }}
|
||||||
|
register: scans
|
||||||
|
loop: "{{ networks }}"
|
||||||
|
changed_when: false
|
||||||
|
- name: Combine all scan outputs
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
all_output: "{{ scans.results | map(attribute='stdout') | join('\n') }}"
|
||||||
|
- name: Extract host lines
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
host_lines: "{{ all_output.splitlines() | select('search', '^Host:') | list }}"
|
||||||
|
- name: Parse hosts into list
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
hosts_list: "{{ hosts_list | default([]) + [{'ip': ip, 'hostname': hostname}] }}"
|
||||||
|
loop: "{{ host_lines }}"
|
||||||
|
vars:
|
||||||
|
line: "{{ item }}"
|
||||||
|
host_part: "{{ line.split('\t')[0] }}"
|
||||||
|
parts: "{{ host_part.split(' ') }}"
|
||||||
|
ip: "{{ parts[1] }}"
|
||||||
|
hostname: "{{ parts[2] | replace('(', '') | replace(')', '') }}"
|
||||||
|
- name: Save to JSON file
|
||||||
|
ansible.builtin.copy:
|
||||||
|
content: "{{ {'hosts': hosts_list} | to_nice_json }}"
|
||||||
|
dest: "{{ output_file }}"
|
||||||
51
proxmox_inventory.yml
Normal file
51
proxmox_inventory.yml
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
---
|
||||||
|
- name: Gather Full Machine Inventory from Proxmox Nodes
|
||||||
|
hosts: proxmox_nodes
|
||||||
|
become: true
|
||||||
|
gather_facts: true
|
||||||
|
tasks:
|
||||||
|
- name: Gather VM list
|
||||||
|
command: qm list
|
||||||
|
register: vm_list
|
||||||
|
|
||||||
|
- name: Gather Container list
|
||||||
|
command: pct list
|
||||||
|
register: ct_list
|
||||||
|
|
||||||
|
- name: Gather storage status
|
||||||
|
command: pvesm status
|
||||||
|
register: storage_status
|
||||||
|
|
||||||
|
- name: Gather node status
|
||||||
|
command: pvesh get /nodes/$(hostname)/status
|
||||||
|
register: node_status
|
||||||
|
|
||||||
|
- name: Gather hardware info
|
||||||
|
command: pveversion -v
|
||||||
|
register: hardware_info
|
||||||
|
|
||||||
|
- name: Save inventory to file
|
||||||
|
copy:
|
||||||
|
content: |
|
||||||
|
Node: {{ inventory_hostname }}
|
||||||
|
Ansible Facts: {{ ansible_facts | to_nice_yaml }}
|
||||||
|
|
||||||
|
VMs:
|
||||||
|
{{ vm_list.stdout }}
|
||||||
|
|
||||||
|
Containers:
|
||||||
|
{{ ct_list.stdout }}
|
||||||
|
|
||||||
|
Storage Status:
|
||||||
|
{{ storage_status.stdout }}
|
||||||
|
|
||||||
|
Node Status:
|
||||||
|
{{ node_status.stdout | from_json | to_nice_yaml }}
|
||||||
|
|
||||||
|
Hardware Info:
|
||||||
|
{{ hardware_info.stdout }}
|
||||||
|
dest: /tmp/proxmox_inventory_{{ inventory_hostname }}.txt
|
||||||
|
|
||||||
|
- name: Debug
|
||||||
|
debug:
|
||||||
|
msg: "Inventory saved to /tmp/proxmox_inventory_{{ inventory_hostname }}.txt"
|
||||||
Reference in New Issue
Block a user