Часто в плейбуках нужно выполнить много однотипных задач. Например, установить набор программ или добавить несколько пользователей:
- hosts: all
tasks:
- name: install redis server
ansible.builtin.apt:
name: redis-server
state: latest
become: yes
- name: install postgresql
ansible.builtin.apt:
name: postgresql
state: latest
become: yes
- name: add user testuser1
ansible.builtin.user:
name: testuser1
state: present
groups: wheel
- name: add user testuser2
ansible.builtin.user:
name: testuser2
state: present
groups: root
Мы видим, что с помощью apt сначала устанавливается redis-server, а затем postgresql. В реальном примере список может содержать десятки пакетов. Чтобы упростить этот процесс, Ansible предоставляет механизм под названием циклы. С его помощью можно установить все пакеты в одной таске. Назовем ее install packages
:
- hosts: all
tasks:
- name: install packages
ansible.builtin.apt:
name: "{{ item }}"
state: latest
loop:
- redis-server
- postgresql
become: yes
Здесь используется переменная {{ item }}
и добавлен ключ loop
. Внутри него содержится список элементов, которые будут по очереди подставлены вместо переменной item
.
Циклы - очень мощный механизм. Его можно использовать не только с модулем apt
, но и с любым другим модулем. Этот модуль будет последовательно отрабатывать таску для каждого элемента.
Правда в случае модуля apt все немного проще. Ему достаточно передать массив в name:
- ansible.builtin.apt:
state: latest
name:
- redis-server
- postgresql
Еще один вариант использования loop
:
- hosts: all
tasks:
- name: install packages
ansible.builtin.apt:
name: "{{ item }}"
state: latest
loop:
- redis-server
- postgresql
become: yes
- name: add test users
ansible.builtin.user:
name: "{{ item.name }}"
state: present
groups: "{{ item.groups }}"
loop:
- { name: testuser1, groups: wheel }
- { name: testuser2, groups: root }
Отличие заключается в том, что для добавления пользователя нужны несколько параметров: имя пользователя и группа (возможно, их будет еще больше). Изменения небольшие: мы так же указываем список loop
, но внутри него каждый элемент - это хеш, в котором описаны нужные значения. Доступ к значениям item
осуществляется через точку.
Самостоятельная работа
Создание пользователя на сервере — довольно распространенная задача для админов. В этом задании воспользуемся циклами и создадим пользователей с настроенными для них git-алиасами.
- Создайте переменную
users
и пропишите в ней имена пользователейjaime
,sansa
,robert
- Используйте эту переменную, чтобы создать на виртуальных серверах пользователей с помощью цикла.
Используйте цикл с пользователями, чтобы создать конфигурационный файл для Git. Этот файл должен находиться в домашней директории каждого пользователя, пример: /home/jaime/.gitconfig
[alias] co = checkout ci = commit st = status br = branch hist = log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short type = cat-file -t dump = cat-file -p commend = commit --amend [core] excludesFile = ~/.gitignore_global editor = vim [user] email = sansa@test.com name = sansa [credential] helper = store
Соответственно
user.name
иuser.email
должны формироваться из имени пользователяДобавьте таски для загрузки публичного ключа для каждого пользователя. Ключи на сервере должны находиться по пути
/home/<username>/.ssh/authorized_keys
. Ваш публичный ключ должен находиться в директории files/ в рабочей директорииВыполните плейбук
Зайдите по ssh под любым из пользователей и проверьте, что конфиг Git применился. Если все сделано верно, то должны работать алиасы гита git st
, git hist
, конфиг содержит имя пользователя и почту. Перед использованием этих команд, убедитесь, что инициализировали репозиторий и выполняете команды внутри него.
Дополнительные материалы
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.