За исключением списка хостов и IP-адресов в доступном yaml-файле инвентаризации, ожидается ли добавление переменных или ключей, таких как:
ИЛИ должны ли они быть помещены в другой файл, например роли (задачи). Пожалуйста, помогите мне определиться, какая информация куда идет. Мой пример файла yaml приведен ниже:
---
cred:
user: a
pass: 1
center:
dbs:
- db:
fqdn: center-db.foo.com
cn: center-db
files:
- C:\folder\Server.msi
ip: 1.1.1.1
queues:
- queue:
fqdn: center-queue.foo.com
cn: center-queue
files:
- C:\folder\Server.msi
ip: 2.2.2.2
apps:
- app:
fqdn: center-app.foo.com
cn: center-app
files:
- C:\folder\Server.msi
- C:\folder\Center-Client.msi
- C:\folder\files
ip: 3.3.3.3
clients:
- client:
db:
cn: Client-DB
app:
fqdn: Client-APP.foo.com
cn: Client-APP
files:
- C:\folder\Server.msi
- C:\folder\Client-Client.msi
ip: 4.4.4.4
Ansible позволяет различными способами структурировать инвентарные переменные и задачи. Выработайте собственное мнение о том, где разместить вещи логическим образом, основываясь на том, что ожидают различные плагины Ansible.
Лаборатория находится в защищенной VLAN, что означает, что для запуска сценариев с удаленного устройства мне нужно подключиться к машине с их IP-адресом, а не с их полным доменным именем и предоставить учетные данные.
Неверно. DNS возможен для любой среды. Возможно, делегируйте зону hiddai.lab.example.net
DNS-серверу тестовой лаборатории, и узлы будут использовать полные доменные имена в этой зоне.
Тем не менее, переменная ansible_host
может быть предоставлена для переопределения имен хостов или IP-адресов для подключаемых модулей подключения.
Не используйте IP-адреса, выделенные другим пользователям. 1.1.1.1 не ваша, это Cloudflare DNS. Используйте либо свои реальные IP-адреса, либо тестовые сети документации, например 192.0.2.0/24 198.51.100.0/24 203.0.113.0/24.
Кроме того, мне нужно решить, будет ли мой продукт установлен в защищенном виде или не в моей лаборатории (какой протокол - HTTPS или HTTP?)
Всегда безопасен, поэтому HTTPS. Лабораторная установка может быть более простой для PKI, личного простого CA, самозаверяющих сертификатов.
Ожидается ли добавление переменных или ключей, за исключением списка хостов и IP-адресов в файле yaml инвентаризации: "учетные данные", "протокол", "файлы", "тип машины" и т. д.
Нет, отдельный список хостов от данных конфигурации приложения на уровне ролей. Это позволяет проводить несколько инвентаризаций. Минимальное дублирование данных между несколькими лабораториями, промежуточными и производственными запасами.
Ограничьте инвентаризацию тем, что необходимо для подключения к хосту: имя хоста, пользователь, возможно, учетные данные, подключаемый модуль подключения. Поместите детали приложения в другое место, например group_vars.
cred:
user: a
pass: 1
Говоря об учетных данных, я считаю односимвольный пароль неприемлемо коротким. Даже не считайте это фальшивым примером. В идеале замените аутентификацию пароля чем-нибудь получше, например аутентификацией на основе ключа или сертификата. Или, по крайней мере, длинные парольные фразы, основанные на словах, такие как unluckily-pretense-busy-четверти
.
Пути к вашим файлам соответствуют Windows. Прочтите документацию Ansible по winrm и рассмотрите свои варианты аутентификации.
Хранение кредитов в инвентаре означает, что любой, у кого есть файл инвентаря, может запускать команды. Надежно закрепите файл. Подумайте о хранении кредитов в отдельных файлах ключей или в какой-нибудь секретной системе, к которой вы можете получить доступ с помощью поиска Ansible.
Ваш файл vars - это YAML, но не в структуре , ожидаемой плагином статической инвентаризации YAML Ansible . Возможно, что-то вроде этого, например inventory / lab.yml
. Я изменил некоторые значения на реальные примеры в RFC в Интернете.
---
all:
children:
windows:
# Group containing only Windows hosts allow for
# Windows-specific auth and connection variables
vars:
ansible_user: a
ansible_password: unluckily-pretense-occupy-quartered
ansible_connection: winrm
ansible_winrm_transport: credssp
children:
db:
# FQDN as inventory_hostname should resolve if in DNS
# Ansible pieces out the top label for you as special var inventory_hostname_short
hosts:
center-db.hiddai.lab.example.net:
# ansible_host overrides what to connect to
# Such as when there is no DNS
ansible_host: 203.0.113.23
children:
queue:
hosts:
center-queue.hiddai.lab.example.net:
ansible_host: 203.0.113.83
children:
app:
hosts:
center-app.hiddai.lab.example.net:
ansible_host: 203.0.113.62
children:
client:
hosts:
client-app.hiddai.lab.example.net:
ansible_host: 203.0.113.28
db: center-db
Мне неясно, что такое «центр» в этом примере: программный продукт, имя развертывания, имя клиента? Поскольку инвентарь Ansible на самом деле плоский внутри, я свернул это. При желании добавьте его обратно как переменную или группу.
Что касается данных конфигурации приложения, специфичного для хоста, рассмотрите group_vars. Они могут относиться к вашему файлу инвентаря, с именем файла, совпадающим с именем группы.
inventory / group_vars / windows.yml
---
base_dir: 'C:\folder\'
files_common:
- Server.msi
inventory / group_vars / app.yml
---
files_additional:
- files
- Center-Client.msi
inventory / group_vars / client.yml
---
files_additional:
- Client-Client.msi
Заметьте, я придумал пару переменных для файлов. Имея разные имена, вы можете позже объединить их в один список, так что {{files_common + files_additional}}
В идеале следует писать и использовать роли Ansible, которые имеют свои собственные переменные и задачи. Рассмотрите значения ролей по умолчанию, подходящие для большинства случаев использования. Например, win_package устанавливает эти пакеты msi и по умолчанию загружает их с https-сервера. Но сделайте файл исходного пакета переменной, чтобы его можно было переопределить.
И игры - это то, что сопоставляет эти модели хозяина с ролями. Я не уверен, как называть ваше приложение с использованием только общих имен, поэтому я добавил к ролям префикс «вещь». play.yml:
---
hosts: db
roles:
- thingdb
hosts: queue
roles:
- thingqueue
hosts: app
roles:
- thingapp
hosts: client
roles:
- thingclient
Запустите такой сценарий с ansible-playbook play.yml -i inventory / lab.yml
Не включено: роли. Я не знаю, чего вы хотите достичь, и этот ответ становится немного длинным.