Какие общие переменные следует упоминать в yaml-файле, доступном для инвентаризации?

  • Я пытаюсь построить конвейер для установки мой продукт.
  • Мой продукт установлен в лаборатории с как минимум 8 компьютерами (локальная лаборатория).
  • У меня есть несколько локальных лабораторий, несколько лабораторий в облаке
  • Каждая машина имеет роль , например: машина Center-DB, машина Center-Queue или машина Center-App , средний компьютер и клиентский компьютер и т. д. Итак, некоторые лабораторные работы: 1 центр - 1 средний - 1 клиент. или 3 центра (приложение, БД, очередь) - 2 промежуточных узла - 3 клиента
  • На некоторых машинах есть одна служба , такая как DB, а на некоторых несколько, например: DB, IIS и брокер сообщений
  • Лаборатория находится в защищенной VLAN, что означает, что для запуска сценариев с удаленного компьютера мне нужно подключиться к машине с их IP-адресом, а не с их полным доменным именем, и предоставить учетные данные.
  • Учетные данные одинаковы для всех машин.
  • Кроме того, в установочном файле есть опция, чтобы установить продукт защищенным (с сертификатом и портом 443) или незащищенным.
  • В процессе установки мне нужно сначала скопировать на каждую машину его определенные установочные файлы , а затем установить их с определенными аргументами.

За исключением списка хостов и 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
0
задан 23 June 2021 в 10:34
1 ответ

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

Не включено: роли. Я не знаю, чего вы хотите достичь, и этот ответ становится немного длинным.

1
ответ дан 28 July 2021 в 14:06

Теги

Похожие вопросы