fact_inventory

Название роли

joe-speedboat.fact_inventory

Описание

Эта роль Ansible позволяет собирать важные данные из различных ресурсов конечных точек, предоставляя ценную информацию для управления вашей инфраструктурой. Вам нужно развернуть виртуальные машины, создать обзор ваших ресурсов или визуализировать сетевые топологии? Эта роль упрощает процесс, собирая факты с различных конечных точек.

Возможности

  • Независимость от ресурсов: Работает с разнообразными ресурсами конечных точек, такими как VMware vCenter, AWS, Azure и другими.
  • Простая конфигурация: Простая настройка с использованием переменных YAML для указания ресурсов, из которых нужно собирать данные.
  • Структурированные данные: Собирает структурированные данные, включая центры обработки данных, кластеры, хосты, виртуальные машины, хранилища данных, сети и многое другое.
  • Вывод в формате JSON: Генерирует хорошо отформатированный файл JSON с собранными данными, подходящий для дальнейшего анализа или визуализации.

Требования

  • Ansible >= 2.11
  • Python >= 3.6 (на целевом хосте)
  • Пакеты Python:
  • Коллекция Ansible:
    • community.vmware

Переменные роли

Доступны следующие переменные для настройки:

  • inventory_file: Путь к файлу инвентаря. По умолчанию /tmp/fact_inventory.json.
  • debug_vars: Логическое значение для включения режима отладки. По умолчанию True.
  • inventory_targets: Список целевых объектов для сбора данных. Каждый объект должен быть словарем со следующими ключами:
    • resource_name: Имя ресурса.
    • type: Тип ресурса (например, "vsphere").
    • validate_certs: Логическое значение для включения проверки сертификатов.
    • vcenter_api_url: URL API vCenter.
    • vcenter_username: Имя пользователя для API vCenter.
    • vcenter_password: Пароль для API vCenter.
    • datacenter_regex: Регулярное выражение для фильтрации центров обработки данных.
    • cluster_regex: Регулярное выражение для фильтрации кластеров.
    • host_regex: Регулярное выражение для фильтрации хостов.
    • datastore_regex: Регулярное выражение для фильтрации хранилищ данных.
    • network_regex: Регулярное выражение для фильтрации сетей.
    • vm_folder_regex: Регулярное выражение для фильтрации папок виртуальных машин.

Зависимости

Нет.

Лицензия

GPLv3

Использование

Чтобы использовать эту роль, необходимо указать переменные в списке inventory_targets в вашем плейбуке или в файле defaults/main.yml. Каждый элемент в списке представляет собой целевой объект, из которого нужно собирать факты.

Переменные datacenter_regex, cluster_regex, host_regex, datastore_regex, network_regex и vm_folder_regex позволяют фильтровать результаты из API vSphere. Эти переменные принимают регулярные выражения. Например, если вы хотите собирать факты только из центров обработки данных, имена которых начинаются с "dc", вы можете установить datacenter_regex в '^dc'.

Тестирование

Перед запуском тестов необходимо создать файл vars.yml в директории tests с вашей конкретной конфигурацией. Вы можете сделать это, скопировав файл vars_example.yml:

cp tests/vars_example.yml tests/vars.yml

Затем заполните файл vars.yml вашими конкретными значениями, включая регулярные выражения для фильтрации.

Для запуска тестов выполните следующую команду:

ansible-playbook tests/test.yml -i tests/inventory

Эта команда запустит плейбук test.yml, используя файл инвентаря, расположенный в директории tests.

CGI-скрипт для опций Rundeck

С помощью Rundeck и JSON вы можете создавать отличные меню задач. Но для этого вам нужно сначала настроить CGI-сервер и использовать его с JSON-файлом ресурсов, созданным этой ролью. Вот как настроить lighttpd с CGI на Rocky Linux 8:

dnf install lighttpd
systemctl enable lighttpd

cp -av /etc/lighttpd/modules.conf /etc/lighttpd/modules.conf.orig
cp -av /etc/lighttpd/lighttpd.conf /etc/lighttpd/lighttpd.conf.orig
cp -av /etc/lighttpd/conf.d/cgi.conf /etc/lighttpd/conf.d/cgi.conf.orig

sed -i 's@.*\(include.*conf.d/cgi.conf"\).*@\1@' /etc/lighttpd/modules.conf
sed -i 's@.*server\.use-ipv6.*@server\.use-ipv6 = "disable"@' /etc/lighttpd/lighttpd.conf
sed -i 's@.*server\.bind.*@server\.bind = "localhost"@' /etc/lighttpd/lighttpd.conf
sed -i 's@.*server\.port.*@server\.port = 8888@' /etc/lighttpd/lighttpd.conf
semanage port -a -t http_port_t -p tcp 8888
systemctl restart lighttpd
systemctl status lighttpd

lsof -i -P -n | grep light

test -f /usr/bin/python && ln -s /usr/bin/python3 /usr/bin/python

mkdir -p /var/www/lighttpd/cgi-bin

vi /var/www/lighttpd/cgi-bin/test.cgi
------------------
#!/usr/bin/env python3

print("Content-Type: text/html")  # HTML следует за
print()  # пустая строка, конец заголовков
print("<html>")
print("<head><title>Hello CGI</title></head>")
print("<body>")
print("<h1>Hello World</h1>")
print("</body>")
print("</html>")
----------------------
chmod +x /var/www/lighttpd/cgi-bin/test.cgi

curl http://127.0.0.1:8888/cgi-bin/test.cgi

В этих ролях я предоставил CGI, который можно использовать для обслуживания этих опций, он находится в tests/cgi-bin/option.py, просто скопируйте его в каталог cgi-bin, обновите расположение JSON-файла и вызовите его. Обратите внимание, что этот CGI в данный момент является лишь доказательством концепции, сделанным быстро и "грязно".

cp tests/cgi-bin/option.py /var/www/lighttpd/cgi-bin/option.cgi
chmod +x /var/www/lighttpd/cgi-bin/option.cgi
vi /var/www/lighttpd/cgi-bin/option.cgi # обновите расположение JSON-файла

Затем вы можете вызвать его внутри Rundeck:

[ "Datacenter1" ]
[ "Cluster1" ]
[ "LUN_01_VM_Replica", "LUN_02_VM_Replicas" ]

И это довольно удивительно... с минимальными усилиями.

О проекте

Create JSON Ressource file of various vSphere endpoints

Установить
ansible-galaxy install joe-speedboat/ansible.fact_inventory
Лицензия
gpl-3.0
Загрузки
3316
Владелец
I don't do Linux for 20 years because I love Unix or consoles. OpenSource is what I love and want to do. moving together ... that fascinates me ...