fact_inventory
Название роли
joe-speedboat.fact_inventory
Описание
Эта роль Ansible позволяет собирать важные данные из различных ресурсов конечных точек, предоставляя ценную информацию для управления вашей инфраструктурой. Вам нужно развернуть виртуальные машины, создать обзор ваших ресурсов или визуализировать сетевые топологии? Эта роль упрощает процесс, собирая факты с различных конечных точек.
Возможности
- Независимость от ресурсов: Работает с разнообразными ресурсами конечных точек, такими как VMware vCenter, AWS, Azure и другими.
- Простая конфигурация: Простая настройка с использованием переменных YAML для указания ресурсов, из которых нужно собирать данные.
- Структурированные данные: Собирает структурированные данные, включая центры обработки данных, кластеры, хосты, виртуальные машины, хранилища данных, сети и многое другое.
- Вывод в формате JSON: Генерирует хорошо отформатированный файл JSON с собранными данными, подходящий для дальнейшего анализа или визуализации.
Требования
- Ansible >= 2.11
- Python >= 3.6 (на целевом хосте)
- Пакеты Python:
- pip
- setuptools
- vsphere-automation-sdk-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" ]
И это довольно удивительно... с минимальными усилиями.
ansible-galaxy install joe-speedboat/ansible.fact_inventory