Как установить и настроить ansible на ubuntu 18.04

Установка на ubuntu linux

Содержание Playbook

initial_server_setup.yml—- hosts: all  remote_user: root  gather_facts: false  vars:    create_user: sammy    copy_local_key: «{{ lookup(‘file’, lookup(‘env’,’HOME’) + ‘/.ssh/id_rsa.pub’) }}»    sys_packages:   tasks:    — name: Make sure we have a ‘wheel’ group      group:        name: wheel        state: present    — name: Allow ‘wheel’ group to have passwordless sudo      lineinfile:        path: /etc/sudoers        state: present        regexp: ‘^%wheel’        line: ‘%wheel ALL=(ALL) NOPASSWD: ALL’        validate: ‘/usr/sbin/visudo -cf %s’    — name: Create a new regular user with sudo privileges      user:        name: «` create_user `»        groups: wheel        shell: /bin/bash    — name: Set authorized key for remote user      authorized_key:        user: «` create_user `»        state: present        key: «` copy_local_key `»    — name: Disable password authentication for root      lineinfile:        path: /etc/ssh/sshd_config        state: present        regexp: ‘^PermitRootLogin’        line: ‘PermitRootLogin prohibit-password’    — name: Update apt      apt: update_cache=yes    — name: Install required system packages      apt: name=` sys_packages ` state=latest    — name: UFW — Allow SSH connections      ufw:        rule: allow        name: OpenSSH    — name: UFW — Deny all other incoming traffic by default      ufw:        state: enabled        policy: deny        direction: incoming

Начальная настройка и тестовый запуск Ansible

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

Настройка инвентарного файла

В данном файле хранится информация о хостах и/или группах хостов. Также в нем могет храниться переменные, определенные для конкретной группы хостов или конкретного компьютера.

Есть два варианта написания инвентарного файла — в формате yml или ini. Рассмотрим оба.

1. Файл формата ini.

Даннай формат используется по умолчанию. Откроем на редактирование файл с серверами, которыми хотим управлять:

vi /etc/ansible/hosts

и приведем его к следующему виду:

192.168.1.100
192.168.1.101

* в данном примере создана группа серверов test_servers, в которую добавлены два сервера с IP-адресами 192.168.1.100 и 192.168.1.101.

2. Файл формата yml.

Создадим отдельный каталог:

mkdir /etc/ansible/inventory

И создадим файл:

vi /etc/ansible/inventory/test_servers.yml

test_servers:
  vars:
    ansible_python_interpreter: /usr/bin/python3
  hosts:
    server01:
      ansible_ssh_host: 192.168.1.100
      ansible_ssh_port: 22
    server02:
      ansible_ssh_host: 192.168.1.101
      ansible_ssh_port: 22

* в данном примере также создана группа серверов test_servers, в которую добавлены два сервера server01 и server02 с IP-адресами 192.168.1.100 и 192.168.1.101. Адреса не обязательно писать, если имя машины разрешается с помощью DNS

Также не обязательно указывать порты, если они стандартные (22).
** обратите внимание, что мы также добавили переменную ansible_python_interpreter с указанием пути для запуска python

Настройка ansible

Открываем конфигурационный файл ansible:

vi /etc/ansible/ansible.cfg

Снимаем комментарий с опции host_key_checking, приведя ее к виду:

host_key_checking = False

* данная настройка позволит нашему серверу управления автоматически принимать ssh fingerprint, избавляя нас от необходимости постоянно вводить yes, когда мы впервые конфигурируем новый сервер.

Также в секцию defaults добавим:


interpreter_python = auto_silent

* данная опция указывает, чтобы ansible автоматически искал python на целевом хосте без показа предупреждений.

Тестовый запуск

Теперь выполним проверку доступности добавленных серверов:

ansible -m ping test_servers -u root -kK

* данная команда проверит доступность по сети двух серверов из группы test_servers от учетной записи root. 

Будет запрошен пароль от учетной записи (в нашем случае, root). После будет запрошен пароль суперпользователя на серверах.

На экране должно появиться, примерно, следующее:

192.168.1.100 | SUCCESS => {
    «ansible_facts»: {
        «discovered_interpreter_python»: «/usr/bin/python3»
    },
    «changed»: false,
    «ping»: «pong»
}
192.168.1.101 | SUCCESS => {
    «ansible_facts»: {
        «discovered_interpreter_python»: «/usr/bin/python»
    },
    «changed»: false,
    «ping»: «pong»
}

Наш сервер управления готов к работе.

Проверка соединения Ansible при помощи Win_Ping

Для проверки соединения из Ansible, вы можете использовать команду win_ping, которая использует соединение с WinRM для подключения к серверу. Она проверяет, все ли в соединении с WinRM работает так, как ожидается.

Создайте файл inventory.yml, в котором перечислены хосты, соединения с которыми вы хотите проверить. Файл inventory.yml, который создал я, имеет только один хост для проверки и выглядит следующим образом:

Для проверки соединения с хостами, указанными в инвентаризационном файле, используйте приведенную ниже команду. Команда выполняет проверку проверки WinRM соединения.

Если все верно настроили, вы должны увидеть сообщение SUCCESS.

Теперь мы можем использовать автоматизацию Ansible для управления Windows Server.

Если не заработало

Если на экране появится ошибка, введите с сервера ansible следующую команду:

ssh root@192.168.1.100

* в данном случае, мы пытаемся подключиться к серверу 192.168.1.100 по SSH от пользователя root.

Если подключиться к серверу 192.168.1.100 вышеописанной командой не удалось, возможно введен неправильный пароль или доступ по SSH от root запрещен. В этом случае, создайте служебную учетную запись на сервере 192.168.1.100 и используйте ее для подключения по SSH. Например, на удаленном сервере вводим:

useradd ansible

passwd ansible

* в даном примере мы создали учетную запись ansible и задали ей пароль.

Теперь вводим нашу команду для проверки:

ansible -m ping test_servers -u ansible -kK

* обратите внимание, что мы выполняем теперь запрос от пользователя ansible

Основы автоматизации конфигурации Windows Server с помощью Ansible

В качестве моего управляющего сервера Ansible я использую сервер Ubuntu 16.04. Управляющий сервер – это место, с которого с помощью Ansible мы будем запускать наши модули, сценарии, задачи и т.п. В моем стенде этот сервер с Ansible Tower. Для использования Ansible и работе с этой системой из командной строки нам просто потребуется установить несколько небольших утилит. Поскольку я использую сервер с Tower, то мне не требуется устанавливать Ansible, так как он входит в состав установки Tower. Однако я все же пройду по всем простым шагам, нужным для установки Ansible.

Предварительные действия:

  • Прежде всего, обновите сервер Ubuntu последними патчами.
  • Установите pip
  • Установите pywinrm
  • Установите ansible

Обзор системы Ansible

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

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

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

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

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

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

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

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

Ansible поставляется с сотнями встроенных модулей, упрощающих автоматизацию стандартных задач администрирования, таких как установка пакетов с помощью и синхронизация файлов через , а также работа с популярными программами, например системами базы данных (MySQL, PostgreSQL, MongoDB и др.) и инструментами управления зависимостями (PHP ​​​​​, Ruby ​​, Node ​​​ и др.)​​​. Помимо этого существует ряд способов расширения системы Ansible. Это плагины и модули, которые необходимы для обеспечения пользовательских функций, не включенных по умолчанию.

Вы также можете использовать модули и плагины сторонних организаций, представленные на портале Ansible Galaxy.

Ansible use case

Let’s explore an Ansible use case for system monitoring. We can create playbooks for various sysadmin-related monitoring tasks, including:

  • Filesystem usage monitoring and email an alert if disk space is more than 90% utilized
  • Application and port availability
  • Database availability by connecting and querying the database
  • URL availability by using the uri module and email alerts if the return code is greater than 200. You can also use retries and delay features in the uri module to be doubly sure
  • Service availability, report if service is down, and attempt to restart it
  • Check component versions to keep an up-to-date inventory
  • Monitor system uptime and send email alert if a system is not accessible

Prerequisites

Перед установкой Ansible ознакомьтесь с требованиями к управляющему узлу.Перед использованием Ansible ознакомьтесь с требованиями к управляемым узлам (конечным устройствам,которые вы хотите автоматизировать).Управляющие узлы и управляемые узлы имеют разные минимальные требования.

Требования к узлам управления

В качестве управляющего узла (компьютера, на котором работает Ansible) вы можете использовать любой компьютер с установленным Python 2 (версия 2.7) или Python 3 (версия 3.5 и выше). ansible-core 2.11 и Ansible 4.0.0 сделают Python 3.8 программной зависимостью для управляющего узла, но будут работать с вышеупомянутыми требованиями. Для ansible-core 2.12 и Ansible 5.0.0 потребуется Python 3.8 или новее для работы на узле управления. Начиная с версии ansible-core 2.11, проект будет упакован только для Python 3.8 и новее. Сюда входят Red Hat, Debian, CentOS, macOS, любые BSD и так далее. Windows не поддерживается для узла управления, подробнее об этом читайте в блоге Мэтта Дэвиса .

Warning

Обратите внимание,что некоторые плагины,работающие на узле управления,имеют дополнительные требования.Эти требования должны быть перечислены в документации к плагину. При выборе узла управления помните,что любая система управления выигрывает,если она работает рядом с управляемыми машинами.Если вы используете Ansible для управления машинами в облаке,рассмотрите возможность использования машины внутри этого облака в качестве узла управления.В большинстве случаев Ansible будет работать лучше с машины в облаке,чем с машины в открытом Интернете

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

Warning

Ansible 2.11 сделает Python 3.8 мягкой зависимостью для узла управления,но будет функционировать с вышеупомянутыми требованиями.Ansible 2.12 потребует Python 3.8 или новее для работы на узле управления.Начиная с Ansible 2.11,проект будет упакован только для Python 3.8 и новее.

Управляемые требования к узлам

Хотя вам не нужен демон на ваших управляемых узлах, вам нужен способ для Ansible общаться с ними. Для большинства управляемых узлов Ansible устанавливает соединение по SSH и передает модули с помощью SFTP. Если SSH работает, но SFTP недоступен на некоторых из ваших управляемых узлов, вы можете переключиться на SCP в . Для любого компьютера или устройства, на котором может работать Python, вам также понадобится Python 2 (версия 2.6 или новее) или Python 3 (версия 3.5 или новее).

Warning

Обратите внимание,что некоторые модули имеют дополнительные требования,которые должны быть выполнены на «целевой» машине (управляемом узле).Эти требования должны быть перечислены в документации к модулю. Note

Note

  • Если у вас включен SELinux на удаленных узлах, вы также захотите установить на них libselinux-python перед использованием каких-либо функций, связанных с копированием / файлом / шаблоном в Ansible. Вы можете использовать или в Ansible, чтобы установить этот пакет в удаленных системах, в которых его нет.
  • По умолчанию перед запуском первого модуля Python в плейбуке на хосте Ansible пытается найти подходящий интерпретатор Python на этом хосте. Вы можете переопределить поведение обнаружения, установив переменную инвентаризации для определенного интерпретатора и другими способами. Подробнее см. в .
  • Ansible и модуль не зависят от установки Python на стороне клиента для запуска. Технически вы можете использовать Ansible для установки совместимой версии Python с помощью , который затем позволяет вам использовать все остальное. Например, если вам нужно загрузить Python 2 в систему на основе RHEL, вы можете установить его следующим образом:

    $ ansible myhost --become -m raw -a "yum install -y python2"
    

Установка и обновление Ansible с помощью pip

Ansible можно установить во многих системах с помощью , менеджера пакетов Python.

Предварительные требования: установка

Если еще не доступен в вашей системе, выполните следующие команды, чтобы установить его:

$ curl https:bootstrap.pypa.ioget-pip.py -o get-pip.py
$ python get-pip.py 

Возможно, вам потребуется выполнить некоторую дополнительную настройку, прежде чем вы сможете запустить Ansible. См. Документацию Python по для получения дополнительной информации.

Установка Ansible с помощью

Note

Если у вас установлен Ansible 2.9 или более ранняя версия или Ansible 3, см. .

После установки вы можете установить Ansible :

$ python -m pip install 

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

$ python -m pip install 

Если вы хотите установить Ansible глобально,выполните следующие команды:

$ sudo python get-pip.py
$ sudo python -m pip install ansible

Note

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

Note

В более старых версиях по умолчанию используется http://pypi.python.org/simple , который больше не работает. Перед установкой Ansible убедитесь, что у вас установлена ​​последняя версия .Если у вас установлена ​​более старая версия , вы можете выполнить обновление, следуя .

Установка Ansible в виртуальной среде с помощью

Note

Если у вас установлен Ansible 2.9 или более ранняя версия или Ansible 3, см. .

Ansible также может быть установлен внутри нового или существующего :

$ python -m virtualenv ansible  
$ source ansible/bin/activate   
$ python -m pip install ansible

Обновление с версии 2.9 или более ранней до 2.10

Начиная с версии 2.10,Ansible состоит из двух пакетов.Когда вы переходите с версии 2.9 и старше на версию 2.10 или более позднюю,вам необходимо удалить старую версию Ansible (2.9 или более раннюю)перед обновлением.Если вы не удалите старую версию Ansible,вы увидите следующее сообщение,и изменения не будут выполнены:

Cannot install ansible-base with a pre-existing ansible==2.x installation.

Installing ansible-base with ansible-2.9 or older currently installed with
pip is known to cause problems. Please uninstall ansible and install the new
version:

pip uninstall ansible
pip install ansible-base

...

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

$ pip uninstall ansible
$ pip install ansible

Обновление с Ansible 3 или ansible-core 2.10

существует только в версии 2.10 и в Ansible 3. В версии 2.11 и новее пакет называется . Перед установкой или Ansible 4 необходимо удалить , если вы установили Ansible 3 или 2.10.

Чтобы перейти на :

pip uninstall ansible-base
pip install ansible-core

Чтобы перейти на версию Ansible 4:

pip uninstall ansible-base
pip install ansible

2012–2018 Michael DeHaan 2018–2021 Red Hat, Inc.Licensed under the GNU General Public License version 3.https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html

Ansible

  • Листинг установленных коллекций

    Чтобы получить список установленных коллекций, запустите ansible-galaxy. По умолчанию ansible-galaxy использует https://galaxy.ansible.com в качестве сервера, указанного в файле ansible.cfg в разделе

  • Configuring Ansible

    Файл конфигурации В этом разделе описывается, как управлять настройками Ansible.

  • Установка Ansible на определенные операционные системы

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

  • Implicit ‘localhost’

    Когда вы пытаетесь сослаться на локальный хост и не имеете определенного инвентаря, Ansible создаст неявный инвентарь для такого случая (или local_action), когда

Step 4: Testing the Connection

The final step is making sure the Ansible control node connects to the remote hosts and run commands.

1. To test the connection with the hosts, use the following command in the terminal on your control node:

2. Under normal circumstances, this will be the non-root user we already set up in Step 1. If for any reason you need to test the connection as the default root user, you can include the argument with the command:

Running the command produces an output similar to the following:

3. If you’re connecting to the remote hosts for the first time, Ansible will ask you to confirm that the hosts are authentic. Once prompted, type ‘yes’ and hit Enter to confirm the authenticity.

When all the remote hosts reply with a ‘pong’ back, you are ready to start running commands through the Ansible control node.

Conclusion

After following the steps in this guide, you’ve successfully installed Ansible on Ubuntu 20.04.

You are now ready to use Ansible to execute commands and playbooks on remote servers.

Шаг 2 — Настройка файла инвентаризации

Чтобы иметь возможность подключаться к нескольким хостам, вам нужен файл, в котором будут записаны сведения об узлах. Этот файл называется Inventory file.

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

Ansible поставляется с файлом Inventory по умолчанию, доступным по адресу . Откройте его с помощью редактора Nano.

$ sudo nano /etc/ansible/hosts

Вставьте следующий код в конец файла.

server1 ansible_host=203.0.113.111
server2 ansible_host=203.0.113.112
server3 ansible_host=203.0.113.113


ansible_python_interpreter=/usr/bin/python3

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

Группа задает параметр для всех хостов в инвентаре. Это гарантирует, что Ansible использует исполняемый файл Python 3 вместо Python 2, который был удален из последних версий Ubuntu.

Когда вы закончите, сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено подтвердить ваши изменения.

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

Вы можете проверить свой инвентарный список с помощью следующей команды.

$ ansible-inventory --list -y
all:
  children:
    servers:
      hosts:
        server1:
          ansible_host: 203.0.113.111
          ansible_python_interpreter: /usr/bin/python3
        server2:
          ansible_host: 203.0.113.112
          ansible_python_interpreter: /usr/bin/python3
        server3:
          ansible_host: 203.0.113.113
          ansible_python_interpreter: /usr/bin/python3
    ungrouped: {}

Организация серверов в группы и подгруппы

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

203.0.113.111
203.0.113.112


203.0.113.113
server_hostname


203.0.113.111
203.0.113.113


203.0.113.112
server_hostname

Подключение без пароля

В нашем примере аутентификация на узлах выполняется с помощью пароля. Это не очень удобно и безопасно. Рассмотрим вариант использования ssh ключа.

На компьютере с ansible сгенерируем пару ключей следующей командой:

ssh-keygen -t ed25519

После нажатия Enter система попросит ввести параметры размещения ключа и пароль. Ничего не меняем, нажимая ввод и соглашаясь со значениями по умолчанию.

Мы увидим что-то на подобие:

Generating public/private ed25519 key pair.
Enter file in which to save the key (/root/.ssh/id_ed25519): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_ed25519
Your public key has been saved in /root/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:FTDGR6Gz92WI33/ywMSImcqfx2IRQjrD20tE/qzqZ5Y root@ansible.dmosk.ru
The key’s randomart image is:
+—-+
|       .+o+.     |
|       .+o..     |
|     . =o..      |
|      = ++.= +   |
|       *S+*.o =  |
|      ..oo+o *   |
|       .o+ oo +  |
|        E.o.o .o.|
|     .o= .oo   o+|
+———+

* обратите внимание, что мы сгенерировали ключи под пользователем root и из местоположение в каталоге /root/.ssh. Теперь скопируем публичный ключ на все серверы, к которым будем подключаться:

Теперь скопируем публичный ключ на все серверы, к которым будем подключаться:

ssh-copy-id -i /root/.ssh/id_ed25519.pub root@192.168.1.100

ssh-copy-id -i /root/.ssh/id_ed25519.pub root@192.168.1.101

* в нашем примере мы копируем наш ключ для пользователя root на удаленной системе.

Готово. Попробуем подключиться по SSH без пароля к любому из серверов:

ssh root@192.168.1.100

Мы должны подключиться к серверу без запроса пароля.

Теперь можно попробовать запустить наш ансибл без ввода паролей:

ansible -m ping test_servers -u root

Команда должна выполниться без запросов пароля.

Установка Ansible AWX

Для штатной установки AWX предлагается использовать непосредственно сам ansible и docker-контейнеры, используем рекомендоманный стек, для Ubuntu 16.04 требуется предварительная настройка, а именно:

  1. Для начала понадобится установить Ansible:
    $ apt-get install software-properties-common
    $ apt-add-repository ppa:ansible/ansible
    $ apt-get update
    $ apt-get install ansible
    
  2. Так же, как уже оговаривалось, потребуется работающий Docker:
    $ apt-get install docker.io python-docker
    

После устанвки зависимостей можно установить и сам AWX:

$ git clone https://github.com/ansible/awx.git
$ cd awx/installer/

В файле inventory рекомендуется заменить дефолтные значения для:

default_admin_password=password
awx_secret_key=awxsecret
postgres_data_dir=/tmp/pgdocker
pg_password=awxpass

После конфигурации inventory запускаем деплой:

$ ansible-playbook -i inventory install.yml

Если ошибок не было, выглядить все должно примерно так:

$ docker ps
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                                NAMES
e91e5c8789c1        ansible/awx_task:latest   "/tini -- /bin/sh -c "   26 minutes ago      Up 26 minutes       8052/tcp                             awx_task
131ae613e680        ansible/awx_web:latest    "/tini -- /bin/sh -c "   26 minutes ago      Up 26 minutes       0.0.0.0:80->8052/tcp                 awx_web
0778435febca        memcached:alpine          "docker-entrypoint.sh"   28 minutes ago      Up 28 minutes       11211/tcp                            memcached
360a885ac3c3        rabbitmq:3                "docker-entrypoint.sh"   28 minutes ago      Up 28 minutes       4369/tcp, 5671-5672/tcp, 25672/tcp   rabbitmq
7d806924aae9        postgres:9.6              "docker-entrypoint.sh"   28 minutes ago      Up 28 minutes       5432/tcp                             postgres

Перед авторизацией в веб-интерфейсе необходимо дождаться в логах контейнера awx_task строк такого вида:

$ docker logs -f awx_task
...
>>> 
>>> Default organization added.
Demo Credential, Inventory, and Job Template added.
Successfully registered instance awx
(changed: True)
Creating instance group tower
Added instance awx to tower
(changed: True)

Дальше можно зайти в веб-интерфейс и аутентифицироваться используя логин и пароль заданные в inventory.

More about inventory

Inventory is the list of nodes that can be managed by Ansible. You can specify individual managed hosts or create a group of hosts in the inventory file. For each managed host, you can assign variables that can be used by the playbook while executing tasks on that particular host. The default inventory file is , but it is recommended that you create your own inventory file and call it during the playbook’s execution using the command option. Inventory files can be in INI or YAML format. You can either maintain a static inventory file or a dynamic list of hosts.

Example:

Ansible use case

Let’s explore an Ansible use case for system monitoring. We can create playbooks for various sysadmin-related monitoring tasks, including:

  • Filesystem usage monitoring and email an alert if disk space is more than 90% utilized
  • Application and port availability
  • Database availability by connecting and querying the database
  • URL availability by using the uri module and email alerts if the return code is greater than 200. You can also use retries and delay features in the uri module to be doubly sure
  • Service availability, report if service is down, and attempt to restart it
  • Check component versions to keep an up-to-date inventory
  • Monitor system uptime and send email alert if a system is not accessible

What Ansible can do for you

Our use case:

First, let’s talk about the deployment architecture we actually want to have.Please keep in mind that this is just an example of how to use Ansible connectors, which I think will help you set up your own deployment.

The following figure shows:

  • A machine that can initiate a deployment
  • Machines to be deployed
  • How they are connected

The idea here is to be able to administrate the deployment of all hosts from the same tool (Ansible) and the same var files (Ansible inventory).

The tricky part

The tricky part here is that, as of today, Windows and Linux remain two very different OSs, with a lot of specificities. In particular :

  • They traditionally use different remote access protocols
    • Linux: SSH
    • Windows: PSRP / WinRM
  • They are not structured the same way, therefore Ansible module made for Linux-like OSs are generally not compatible with Windows
  • They do not offer the same command line interpreters as a workaround when no Ansible module exists to implement your use case
    • Linux: Bash, Zsh, etc
    • Windows: PowerShell

How we can solve this : Ansible connectors

Our problem here is that we need to tell Ansible :

  • To connect to Linux using the SSH protocol
  • To connect to Windows using the PSRP protocol (PowerShell Remoting Protocol)

Well, Ansible has a mechanism to deal with heterogeneous targets connections: Ansible connectors.Connectors are libraries, often written in Python, that Ansible will use to establish a connection to the target host.The best part here is that Ansible handles the choice of the connector as well as the per-host configuration of a connector with its inventory. This means that you can use all of the power that Ansible gives you to customize the Ansible connector to use for a host or a group of hosts.

In our case we will use the following connectors:

  • SSH
  • PSRP

Note: For windows hosts, we could also use the WinRM Ansible connector. In this case, I chose the PSRP connector instead because it offers the possibility to use a SOCKS5 proxy, which is really helpful to manage Windows hosts that are located behind a bastion.

Network considerations

Since the machine that will use Ansible need access to all targets, you need to ensure its ability to establish :

  • Connections to Linux machines with SSH
  • Connections to Windows machines with PSRP over WinRM

If you have to go through a bastion host located between your deployment machines and your targets, you can use for example:

  • Windows targets: use a SOCKS5 proxy
  • Linux targets: use the ProxyJump option of SSH

In both case, and whatever your tunneling / proxying implementation is, you will have to carefully configure your network to accept the appropriate traffic:

  • Between the deployment machine and the bastion
  • Between the bastion and the target

And this configuration may differ on Linux and Windows hosts.

Запуск ansible-base из исходного кода (разработка) ¶

В Ansible 2.10 и позже репозиторий ansible/ansible содержит код для основных функций и функций, таких как копирование кода модуля на управляемые узлы. Этот код также известен как .

Примечание

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

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

Примечание

Если вы хотите использовать Ansible Tower в качестве узла управления, не используйте исходную установку Ansible. Используйте менеджер пакетов ОС (например, или ) или , чтобы установить стабильную версию.

Чтобы установить из исходного кода, клонируйте репозиторий git:

 $ git clone https://github.com/ansible/ansible.git$ cd ./ansible

Once клонировал репозиторий , настройте среду Ansible:

Используя Bash:

 $ source ./hacking/env-setup

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

 $ source ./hacking/env-setup.fish

Если вы хотите подавить ложные предупреждения/ошибки, используйте:

 $ source ./hacking/env-setup -q 

Если у вас нет установлен в вашей версии Python, установите его:

 $ curl https://bootstrap.pypa.io/get-pip.py  -o get-pip.py $ python get-pip.py --user 

Ansible также использует t следующие модули Python, которые необходимо установить 1:

 $ python -m pip install --user -r ./requirements.txt 

Чтобы обновить проверки , используйте pull-with-rebase, чтобы любые локальные изменения воспроизводились.

 $ git pull --rebase 
 $ git pull --rebase  # то же самое, что и выше $ git submodule update --init --recursive 

После запуска сценария env-setup вы будете запускаться из оформления заказа, и файл инвентаризации по умолчанию будет быть . При желании вы можете указать файл инвентаря (см. Как создать инвентарь), отличный от :

 $ echo "127.0.0. 1 "> ~/ansible_hosts $ export ANSIBLE_INVENTORY = ~/ansible_hosts 

Подробнее о файле инвентаря можно прочитать в разделе” Как создать свой инвентарь “.

Теперь давайте проверим все с помощью команды ping:

 $ ansible all -m ping --ask-pass 
Понравилась статья? Поделиться с друзьями:
Быть в курсе нового
Добавить комментарий

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