Использование vagrant и ansible для разворачивания тестовой инфраструктуры

Управление выполнением плейбука

Вы можете использовать опцию —start-at-task, чтобы определить новую точку входа вашего плейбука. Затем Ansible пропустит все, что предшествует указанной задаче, выполнив оставшуюся часть play с заданного момента. Эта опция в качестве аргумента требует правильное имя задачи:

Чтобы выполнять только задачи, связанные с конкретными тегами, вы можете использовать опцию —tags. Например, если вы хотите выполнить только задачи, помеченные как nginx или mysql, вы можете использовать:

Если вы хотите пропустить все задачи, которые находятся под определенными тегами, используйте —skip-tags. Следующая команда будет выполнять myplaybook.yml, пропуская все задачи, помеченные как mysql :

Как доработать производительный RLS

Неоднократно в последнее время поступали задачи, когда требовалось доработать новый производительный RLS. В своей статье Ретунский Александр, программист компании АО «Корпоративные ИТ-проекты» (официальный партнер ИнфоСофт) опишет последовательность действий при доработке нового RLS, ключевые моменты и сложности, с которыми столкнулся. В Интернете статей или инструкций, которые подробно и просто описывают – как доработать производительный RLS, не так много и автор делиться своим опытом.
В данной статье не будут описаны различия и плюсы/минусы между стандартным и производительным RLS, в Интернете по этому вопросу есть много информации.

Назначение членства в группе с помощью conditional_groups

Каждая условная группа состоит из двух частей. Имя группы и условие для добавления члена в группу.

Используйте свойство для создания условного членства в группах для .

Откройте динамический список инвентаризации и добавьте следующее :

Выполните команду с помощью параметра:

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

Ключевой момент:

Условные группы позволяют наименовать конкретные группы в службе инвентаризации и заполнять их с помощью hostvars.

Что такое Ansible?

Ansible — это инструмент управления конфигурацией и оркестровки. Он работает в том же домене, что и Puppet, Chef и Saltstack. Это означает, что с помощью Ansible вы можете удаленно предоставлять целый парк удаленных серверов, устанавливать и развертывать на них программное обеспечение и отслеживать их удаленно.

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

Одной из уникальных особенностей Ansible является то, что он не устанавливает никакого программного обеспечения на управляемые машины. Управляет машинами удаленно через SSH. Чтобы управлять удаленным компьютером, вам просто нужно убедиться, что ваш открытый ключ SSH находится в файле авторизованных ключах этого компьютера.

Как использовать эту книгу

PLAY ***************************************************************************************************************************************TASK *********************************************************************************************************changed: TASK *********************************************************************************************changed: TASK ********************************************************************************************changed: TASK ********************************************************************************************************changed: TASK **************************************************************************************************changed: TASK ********************************************************************************************************************************changed: TASK **********************************************************************************************************ok: TASK ***************************************************************************************************************changed: TASK ******************************************************************************************changed: PLAY RECAP ***************************************************************************************************************************************server1                    : ok=9    changed=8    unreachable=0    failed=0   

Status: activeTo                         Action      From—                         ——      —-OpenSSH                    ALLOW       Anywhere                  OpenSSH (v6)               ALLOW       Anywhere (v6)             

Использование нескольких паролей

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

Чтобы создать новый зашифрованный файл с пользовательским идентификатором хранилища, включите параметр —vault-id вместе с меткой и расположением, где ansible-vault может найти пароль для этого хранилища. Метка может быть любой, а расположение может быть либо prompt (что означает, что команда должна предложить вам ввести пароль), либо путь к файлу паролей.

Это создаст новый идентификатор по имени dev, который использует prompt для получения пароля. Комбинируя этот метод с файлами переменных группы, вы сможете создать отдельные хранилища для каждой среды приложения:

Мы использовали dev и prod в качестве идентификаторов хранилищ, чтобы продемонстрировать, как вы можете создавать отдельные хранилища для каждой среды. Самостоятельно вы можете создать столько хранилищ, сколько захотите, и использовать любой ID.

Теперь, чтобы просмотреть, отредактировать или расшифровать эти файлы, вам необходимо предоставить тот же ID хранилища и источник пароля вместе с командой ansible-vault:

О теме доклада

Расскажу, как зародилась тема доклада – когда мы начали использовать Ansible в продакшене, я стал интересоваться, как люди используют Ansible в своей работе.

На конференции Infostart Event 2019 года я пообщался об этом со многими специалистами – с Антоном Дорошкевичем, с Олегом Филипповым, и выяснил, что многие компании считают нецелесообразным применять Ansible, не видят в этом выгоды или боятся этого инструмента.

Поэтому цель доклада – объяснить, что Ansible можно использовать, это хороший и простой инструмент, который очень полезен и удобен в работе.

Ansible позволяет управлять любыми серверами, в том числе, на Windows. Эта тема очень большая – всю я ее не раскрою. Моя цель – познакомить людей с Ansible, чтобы им захотелось попробовать этот инструмент.

Для более подробного изучения этой темы рекомендую ссылку на видеоучебник по Ansible и на статьи по использованию Ansible для 1С на Инфостарте – «Установка 1С используя Ansible» и «Ansible роли для 1С».

Скрипты плейбука, о котором я буду рассказывать, приведены в моем репозитории на GitHub – вы можете развернуть себе эту систему через Vagrantfile и попробовать поиграться с Ansible.

Модули Ansible и их использование

Ansible позволяет использовать модули, которые расширяют стандартные функции программы. Вот основные из них:

  • Cloud: подерживает облачные технологии, в частности Amazon EC2/ECS/S3, Azure, Cloudstack, Digital Ocean, Docker, LXC, OpenStack, Rackspace, VMware и другие.
  • Clustering: поддерживает автоматизацию, развертывание, масштабирование и координацию в условиях кластера. Совместим с Consul, ZooKeeper, Kubernetes.
  • Command: предназначен для выполнения консольных команд и скриптов.
  • Database: модуль для работы с базами данных. Поддерживает MySQL, PostgreSQL, Vertica, MongoDB, Redis, Riak.
  • File: модуль для выполнения различных операций с файлами, такими как копирование, синхронизация, изменение, проверка, архивирование.
  • Inventory: модуль для работы с именами хостов или их ip-адресами.
  • Messaging: поддержка RabbitMQ.
  • Monitoring: совместимость с различными системами мониторинга — DataDog, Nagios, Zabbix и прочими.
  • Network: поддержка сетевого аппаратного обеспечения, Cisco IOS/NXOS, Juniper JunOS, OpenSwitch, Cumulus Linux, Mikrotik RouterOS.
  • Notification: с помощью данного модуля можно отсылать сообщения в Campfire, HipChat, Jabber, Pushbullet, Slack, через email/sms.
  • Packaging: работа с менеджерами пакетов apt, FreeBSD Ports, Gentoo, homebrew, pacman, opkg, Red Hat software channels, yum, xbps, zypper.
  • Source Control: модуль, обеспечивающий работу с системами контроля версий git, mercurial, subversion.
  • System: работа с компонентами Linux/Unix систем — cron, iptables, LVM, SELinux, sshd, zfs.
  • Utilities: реализуют внутреннюю логику плейбуков.
  • Web Infrastructure: работа с Apache, Django, JBoss, JIRA.
  • Windows: работа с некоторыми компонентами Windows, в частности с IIS, Windows Firewall, системным реестром.

Как работает Ansible?

Ansible упрощает процесс ИТ-автоматизации, захватывая массив ИТ-ресурсов и обеспечивая поддержку многоуровневых развертываний с 1 дня. Ansible консолидирует ресурсы нескольких систем, чтобы управлять ими с единой платформы, без переключений в каждую отдельную систему. Управление кодом, жизненным циклом и изменениями можно осуществлять с помощью инвентаризации, сценариев воспроизведения и ролей.

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

Использование Ansible сокращает время настройки и количество развертываний в день до нуля. Простой в освоении и безагентный подход к управлению конфигурацией делает Ansible лучшим решением для ИТ-администраторов.

Модули Ansible для программ NetApp ONTAP и Element OS позволяют еще больше автоматизировать инфраструктуру. Модули Ansible позволяют заказчикам NetApp упростить развертывание инфраструктуры и приложений в день 0 и автоматизировать создание томов.

Установка RedHat Codeready Studio на ОС RedHat Enterprise Linux 8.4 (RHEL 8.4)

Red Hat CodeReady Studio — это бесплатная для участников программы RedHat Developer open source интегрированная среда (IDE), предоставляет широкий набор функционала разработки для нескольких платформ Red Hat, которые включают контейнеры CodeReady (развертывание через OpenShift4), Quarkus, JAX-RS, внедрение зависимостей контекстов (CDI) и инструменты Red Hat Fuse. Студия включает последние версии Eclipse и Web Tools Project (WTP), предоставляет инструменты для JEE и веб-разработки, такие как: инструменты Java EE, JSF и JSP; инструменты JPA; серверные инструменты; веб-сервисы и инструменты WSDL; инструменты HTML , CSS и JavaScript; инструменты XML , XML Schema и DTD. Студия Code Ready Studio также поддерживает популярные технологии, такие как Enterprise Application Platform (EAP 7.3) — платформа корпоративных приложений Red Hat, Hibernate и Wildfly 21, и обеспечивает встроенное усиление для Kubernetes, OpenShift (включая S2i), docker и клиента REST для микропрофайлов.

Настройка системы

В данном разделе мы рассмотрим процессы, которые больше подходят для категории настройки системы. 

1. Добавить задание в cron.

Выполняется с помощью модуля cron:

— name: Add Job for Run Command
  cron:
    name: Start Script
    job: «/scripts/command.sh»
    user: root
    minute: «0»
    hour: «*/6»
    day: «*»
    month: «*»
    weekday: «*»

* в данном примере мы создадим задание для запуска команды /scripts/command.sh каждый день, каждые 6 часов.

О cron: https://docs.ansible.com/ansible/latest/collections/ansible/builtin/cron_module.html.

2. Добавить публичный ключ хоста в known_hosts.

Делается с помощью known_hosts. Пример из официальной документации:

— name: Tell the host about our servers it might want to ssh to
  known_hosts:
    path: /etc/ssh/ssh_known_hosts
    name: foo.com.invalid
    key: «{{ lookup(‘file’, ‘pubkeys/foo.com.invalid’) }}»

* в данном примере мы добавим ключ из файла pubkeys/foo.com.invalid в /etc/ssh/ssh_known_hosts.

О known_hosts: https://docs.ansible.com/ansible/latest/collections/ansible/builtin/known_hosts_module.html.

3. Создание новых SSH-ключей для сервера.

Создание ключей реализуется с помощью модуля openssh_keypair:

— name: Generate New SSH Host Keys
  openssh_keypair:
    path: «/etc/ssh/ssh_host_` item`.`type `_key»
    owner: root
    state: present
    type: «` item`.`type `»
    size: «` item`.`size `»
    force: yes
  loop:
    — { type: dsa, size: 1024 }
    — { type: ecdsa, size: 521 }
    — { type: ed25519, size: 2048 }
    — { type: rsa, size: 2048 }

* в данном примере мы создадим 4 ключа разных типов: dsa, ecdsa, ed25519, rsa. Так как у каждого из них свои требования к размеру, перечень представлен в виде двумерного массива. Ключи будут созданы в каталоге /etc/ssh/.

О openssh_keypair: https://docs.ansible.com/ansible/latest/collections/community/crypto/openssh_keypair_module.html.

4. Работа с SSH authorized_key.

Данный файл содержит публичный ключ для подключения по SSH. Работа с ним через Ansible выполняется с помощью модуля authorized_key.

Пример добавления ключа:

— name: Set authorized key took from file
  authorized_key:
    user: root
    state: present
    key: ‘` item `’
  with_file:
    — files/key.pub

* в данном примере мы берем содержимое файла files/key.pub и устанавливаем его для пользователя root.

Об authorized_key: https://docs.ansible.com/ansible/2.4/authorized_key_module.html.

5. Создание системной учетной записи.

Для этого есть модуль user. У него много опций, но для создания системной учетной записи нам достаточно:

— name: Create User Consul
  user:
    name: consul
    system: yes
    comment: «Consul Agent»

* в данном примере будет создана учетная запись consul.

О user: https://docs.ansible.com/ansible/latest/collections/ansible/builtin/user_module.html.

6. Работа с systemd.

Для данной настройки есть одноименный модуль systemd. Рассмотрим варианты его использования.

а) перечитать конфигурацию (необходимо делать каждый раз, когда мы меняем настройки юнита):

— name: systemd reload
  systemd:
    daemon_reload: yes

б) разрешить сервис (автозапуск):

— name: mysql enable
  systemd:
    name: mysql
    enabled: yes

* для сервиса mysql.

в) перезапустить сервис:

— name: mysql reload
  systemd:
    name: mysql
    state: restarted

* для сервиса mysql.

О systemd: https://docs.ansible.com/ansible/latest/collections/ansible/builtin/systemd_module.html.

7. Настройка брандмауэра.

Выполняется разными модулями в зависимости от используемой системы управления netfilter:

  • firewalld
  • iptables
  • ufw

Рассмотрим небольшие примеры.

а) firewalld:

— name: permit traffic in default zone for https service
  firewalld:
    service: https
    permanent: yes
    state: enabled

Подробнее: https://docs.ansible.com/ansible/latest/collections/ansible/posix/firewalld_module.html.

б) iptables:

— name: Block specific IP
  iptables:
    chain: INPUT
    source: 8.8.8.8
    jump: DROP

Подробнее: https://docs.ansible.com/ansible/latest/collections/ansible/builtin/iptables_module.html.

в) UFW.

Добавить 80 порт:

— name: Allow all access to tcp port 80
  ufw:
    rule: allow
    port: ’80’
    proto: tcp

Добавить порты с циклом:

— name: Allow Ports in Firewall
  ufw:
    rule: allow
    port: «` item`.`port `»
    proto: «` item`.`proto `»
    comment: «` item`.`comment `»
  loop:
    — { port: 5432, proto: tcp, comment: ‘PostgreSQL’ }

Подробнее: https://docs.ansible.com/ansible/latest/collections/community/general/ufw_module.html.

4: Запуск плейбука LEMP

Перед развертыванием тестового приложения Laravel на удаленных серверах нам необходимо настроить среду LEMP, которая будет обслуживать это приложение. Плейбук server-setup.yml включает в себя роли Ansible, необходимые для настройки этого стека. Чтобы проверить его содержимое, запустите эту команду:

Вот обзор всех ролей, включенных в этот плейбук:

  • setup: содержит задачи, необходимые для создания нового системного пользователя и передачи ему привилегий sudo, а также для включения брандмауэра ufw.
  • mariadb: устанавливает сервер MariaDB и создает базу данных приложения и пользователя для нее.
  • php: устанавливает модули php-fpm и PHP, необходимые для запуска приложения Laravel.
  • nginx: устанавливает веб-сервер Nginx и открывает трафик через порт 80.
  • composer: устанавливает Composer глобально.

Обратите внимание, в каждой роли мы создали несколько тегов. Это упростит повторный запуск отдельных частей этого плейбука, если в этом возникнет необходимость

Например, если вы вносите изменения в файл шаблона Nginx, вы сможете запустить только роль Nginx.

Следующая команда выполнит этот плейбук на всех серверах из вашего файла инвентаря. Флаг –ask-vault-pass необходим только в том случае, если вы использовали ansible-vault для шифрования файлов переменных на предыдущем этапе.

Вы получите такой вывод:

Ваши ноды теперь готовы обслуживать приложения PHP с помощью Nginx+PHP-FPM и базы данных MariaDB. На следующем этапе мы развернем тестовое приложение Laravel с помощью плейбука laravel-deploy.yml.

HTTPS Certificate Validation

As part of the TLS protocol, the certificate is validated to ensure the host
matches the subject and the client trusts the issuer of the server certificate.
When using a self-signed certificate or setting
these security mechanisms are
bypassed. While self signed certificates will always need the flag,
certificates that have been issued from a certificate authority can still be
validated.

One of the more common ways of setting up a HTTPS listener in a domain
environment is to use Active Directory Certificate Service (AD CS). AD CS is
used to generate signed certificates from a Certificate Signing Request (CSR).
If the WinRM HTTPS listener is using a certificate that has been signed by
another authority, like AD CS, then Ansible can be set up to trust that
issuer as part of the TLS handshake.

To get Ansible to trust a Certificate Authority (CA) like AD CS, the issuer
certificate of the CA can be exported as a PEM encoded certificate. This
certificate can then be copied locally to the Ansible controller and used as a
source of certificate validation, otherwise known as a CA chain.

The CA chain can contain a single or multiple issuer certificates and each
entry is contained on a new line. To then use the custom CA chain as part of
the validation process
, set to the path of the
file. If this variable is not set, the default CA chain is used instead which
is located in the install path of the Python package
certifi.

Файл инвентаря Ansible

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

Чтобы просмотреть содержимое инвентаря Ansible по умолчанию, откройте файл /etc/ansible/hosts с помощью редактора на локальном компьютере или на Ansible Control Node:

Примечание: Некоторые установки Ansible не создают файл инвентаря по умолчанию. Если в вашей системе файл не существует, вы можете создать файл /etc/ansible/hosts самостоятельно или указать собственный путь к инвентарю с помощью параметра -i при запуске команд и плейбуков.

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

Подгруппа server:vars устанавливает параметр хоста ansible_python_interpreter, который будет действителен для всех хостов, включенных в группу servers. Этот параметр гарантирует, что удаленный сервер использует исполняемый файл Python 3 /usr/bin/python3, а не /usr/bin/python (Python 2.7), которого нет в последних версиях Ubuntu.

Чтобы завершить настройку файла инвентаря, замените условные IP-адреса в файле IP-адресами ваших серверов. Когда вы закончите, сохраните и закройте файл (Ctrl + X, затем y, чтобы сохранить изменения, а затем Enter).

Теперь, когда ваш файл инвентаря готов, пришло время проверить подключение к вашим нодам.

Краткий обзор Ansible

Ansible – это современный инструмент управления конфигурацией, который облегчает задачу настройки и обслуживания удаленных серверов благодаря своему простому дизайну.

Сценарии оркестровки Ansible пишутся на YAML, дружественном и удобном стандарте сериализации данных, который не привязан к конкретному языку программирования. Это позволяет пользователям создавать сложные сценарии оркестровки более интуитивно (по сравнению с аналогичными инструментами этой же категории).

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

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

  • Идемпотентность. Ansible отслеживает состояние ресурсов в управляемых системах, чтобы избежать повторения задач, которые уже были выполнены ранее. Если пакет уже установлен, Ansible не будет пытаться установить его снова. Цель Ansible состоит в том, чтобы после каждой оркестровки система достигала (или сохраняла) желаемого состояния, даже если вы запускаете этот процесс несколько раз. Это называется идемпотентное поведение, оно присуще всем подобным инструментам. При запуске плейбука вы увидите состояние каждой выполняемой задачи и отчет о том, внесла ли задача изменение в системе.
  • Поддержка переменных, условных выражений и циклов. При написании сценариев автоматизации Ansible вы можете использовать переменные, условные выражения и циклы, что позволяет сделать вашу автоматизацию более универсальной и эффективной.
  • Системные факты. Ansible собирает подробную информацию об управляемых нодах (включая сетевые интерфейсы и операционную систему) и предоставляет ее в виде глобальных переменных, которые называются системными фактами. Факты можно использовать в плейбуках, чтобы сделать процесс автоматизации более адаптивным: благодаря этому Ansible будет вести себя по-разному в зависимости от системы.
  • Система шаблонов. Ansible использует систему шаблонов Jinja2 Python для динамических выражений и доступа к переменным. Шаблоны упрощают настройку конфигурационных файлов и сервисов. Например, вы можете создать шаблон для настройки нового виртуального хоста в Apache и применить его на нескольких серверах.
  • Поддержка расширений и модулей. Ansible поставляется с сотнями встроенных модулей, что упрощает написание общих задач (таких как установка пакетов через apt и синхронизация файлов с помощью rsync), а также работу с популярным программным обеспечением, таким как системы баз данных (MySQL, PostgreSQL, MongoDB и другие) и инструменты управления зависимостями (PHP composer, гемы Ruby, npm). Кроме того, Ansible поддерживает плагины и модули, что позволяет добавить пользовательские функции, которые по умолчанию отсутствуют. Найти сторонние модули и плагины можно на портале Ansible Galaxy.

Playbooks

Специальные команды хороши, когда вы хотите быстро что-то сделать на нескольких хостах, но настоящая сила Ansible в его Playbooks. Playbooks — это файлы YAML, в которых вы определяете наборы задач для достижения таких целей, как подготовка, настройка, развертывание и управление вашей инфраструктурой.

Пример Playbook

Давайте посмотрим на то, как выглядит типичный playbook, прежде чем мы перейдем к деталям.

В playbook есть раздел hosts, в котором вы указываете хосты из файла инвентаризации. В этом случае название группы «funnier». Затем есть раздел задач с двумя задачами, которые устанавливают Nginx и Python 3. Наконец, есть раздел обработчиков, где Nginx запускается после его установки.

Запуск Playbooks

Вы запускаете playbook с помощью команды . Вам все еще нужно предоставить файл инвентаря и книгу воспроизведения, которую вы хотите запустить. Сохраните playbook в файл с именем «playbook.yml» в вашем рабочем каталоге. Давайте попробуем:

О нет. Что случилось? Ansible выдает приличное сообщение об ошибке здесь: «Не удалось заблокировать apt для исключительной операции». Многие playbooks требуют привилегий sudo. Этот playbook не является исключением. Чтобы запустить playbook с правами sudo, просто добавьте флаг :

Ansible является идемпотентом, что означает, что если что-то уже находится в желаемом состоянии, то Ansible оставит это в покое. В выводе вы можете увидеть, какие задачи были успешными или неудачными, а какие были изменены.

Давайте снова запустим ту же playbook. Ничто не должно быть изменено:

Создание группы безопасности сети и сетевой карты

Группа безопасности сети определяет, какой трафик пропускается или не пропускается на виртуальную машину.

Чтобы открыть порты WinRM и HTTP, добавьте следующие задачи в сборник схем Ansible :

Основные моменты:

  • Виртуальный сетевой интерфейс (сетевая карта) подключает виртуальную машину к виртуальной сети, общедоступному IP-адресу и группе безопасности сети.
  • Модуль создает группу безопасности сети Azure, чтобы пропускать трафик WinRM с сервера Ansible на удаленный узел, открывая порты и .

Создание виртуальной машины

Теперь мы создадим виртуальную машину, которая использует все ресурсы, созданные, как описано в предыдущих разделах этой статьи.

Добавьте следующие задачи в сборник схем Ansible :

Значение параметра  — это переменная Ansible, которая содержит пароль для виртуальной машины Windows. Чтобы безопасно присвоить значение этой переменной, добавьте запись в начало сборника схем.

Основные моменты:

Не сохраняйте конфиденциальные данные в формате обычного текста. Используйте var_prompts для присвоения значений переменным во время выполнения. Добавьте no_log: true, чтобы пароли не сохранялись в журналах.

Создание виртуальных машин Azure

Войдите на портал Azure.

Откройте Cloud Shell.

Создайте группу ресурсов Azure для хранения виртуальных машин, используемых в этом руководстве.

Важно!
Имя группы ресурсов Azure, создаваемой на этом этапе, должно содержать только строчные символы. В противном случае создание динамического списка завершится ошибкой.

Создайте две виртуальные машины Linux в Azure одним из следующих способов:

Ansible сборник тренировочных заданий — статья, создание базовой виртуальной машины Linux в azure с помощью Ansible и создание базовой Windows виртуальной машины в azure с помощью Ansible показано, как создать виртуальную машину из Ansible сборник тренировочных заданий.

Azure CLI

Выполните каждую из следующих команд в Cloud Shell, чтобы создать две виртуальные машины:

Замените своим паролем.

What is WinRM?

WinRM is a management protocol used by Windows to remotely communicate with
another server. It is a SOAP-based protocol that communicates over HTTP/HTTPS, and is
included in all recent Windows operating systems. Since Windows
Server 2012, WinRM has been enabled by default, but in most cases extra
configuration is required to use WinRM with Ansible.

Ansible uses the pywinrm package to
communicate with Windows servers
over WinRM. It is not installed by default
with the Ansible package, but can be installed by running the following:

pip install "pywinrm>=0.3.0"

Note

on distributions with multiple python versions, use pip2 or pip2.x,
where x matches the python minor version Ansible is running under.

Ansible – это просто

На слайде показаны примеры yaml-скриптов из плейбука.

Например, если нам нужно включить в CentOS репозиторий EPEL, мы в самом Linux выполним команду
yum install epel-release

В Ansible мы вместо этого выполняем вот этот вот скрипт справа. Выполнится то же самое – это одинаковые действия. Но в случае с Ansible, нам достаточно это один раз написать, а потом просто вызывать повторно. Если структура скрипта сложная – много связанных действий, можно поставить комментарий, чтобы не запутаться.

Для настройки ОС у нас есть отдельная роль – там описаны все пакеты, настройки и т.д. После этого мы вообще никогда не паримся, что у нас какой-нибудь необходимый пакет не установлен либо какие-то другие утилиты, которыми нам удобно пользоваться.

Или, например, вам при настройке Linux нужно открыть порты. Второй пример на слайде с именем «Enable port for consul firewalld 5433» показывает, как открыть порт. Не нужно запоминать длинную команду и вводить ее вручную, достаточно один раз прописать открытие порта в Ansible, и порт будет открыт.

Здесь мы централизованно храним все в одном месте, а еще используем Git, поэтому имеем историю версий.

Третий пример на слайде – скрипт с именем «ansible create directory». Здесь мы видим создание директорий – под каким пользователем она будет создана, и т.д. Если директория будет удалена, и мы запустим плейбук заново, она снова создастся с такими же правами и настройками.

Для запуска плейбука на основной машине, с которой вы управляете, нужно вызвать команду
ansible-playbook playbook_os.yml -l pgsrv01

Здесь pgsrv01 – это имя сервера, на котором мы хотим это установить. Если не указывать конкретный сервер, Ansible пройдется по всем доступным хостам и проверит, установлены ли все пакеты.

В чем заключается идемпотентность? Если пакет установлен, он его не будет заново переустанавливать. Мы можем перезапускать плейбук много раз, но состояние системы не изменится. Если мы установили PostgreSQL и запускаем опять этот же плейбук с установкой PostgreSQL, заново устанавливаться ничего не будет, Ansible это увидит.

На слайде показано, где задается описание всей этой инфраструктуры. Оно задается в файле-инвентори hosts.

Здесь мы видим группу PostgreSQL. В нее входят настройки для хостов pgsrv01 и pgsrv02, где задается ip-адрес, порт и ключ подключения.

Дальше видим группу ConsulOne и настройки для хоста consul.

Конкретно эти настройки хостов актуальны для работы хостов на VirtualBox, когда для каждой виртуальной машины на локальной машине пробрасывается порт, на котором слушается SSH. Вы видите, что все виртуальные запущены на локалхосте (127.0.0.1).

Vagrantfile, с помощью которого можно развернуть эти хосты, я выложил на GitHub – вы сможете его скачать и все это попробовать.

Как видите, мы можем серверы группировать в разные группы, описывать там подключения по-разному. Мы можем описать всю свою инфраструктуру, а потом в плейбуке в поле hosts ввести не all, а PostgreSQL (применять на всю группу PostgreSQL). Либо вместо all указать, что эти скрипты должны примениться на конкретном сервере – pgsrv02.

Часть 4: Создание и запуск сценария для хоста Windows 10

В этом последнем разделе мы создадим playbook и создадим задачу, которая установит Chocolatey на удаленный хост. Chocolatey — это менеджер пакетов для системы Windows. Игра определяется следующим образом:

# vim chocolatey.yml
---
- hosts: winhost
  gather_facts: no
  tasks:
   - name: Install Chocolatey on Windows10
     win_chocolatey: name=procexp  state=present

Сохраните и закройте файл yml. Затем запустите playbook, как показано

# ansible-playbook chocolatey.yml

Результатом является указатель, что все прошло хорошо. На этом мы завершаем тему о том, как управлять хостом Windows с помощью Ansible.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: