Содержание 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 требуется предварительная настройка, а именно:
-
Для начала понадобится установить Ansible:
$ apt-get install software-properties-common $ apt-add-repository ppa:ansible/ansible $ apt-get update $ apt-get install ansible
-
Так же, как уже оговаривалось, потребуется работающий 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