Инициализируем новую роль:
ansible-galaxy init Bind
* мы назвали нашу роль Bind.
Открываем основной файл для задачи:
vi Bind/tasks/main.yml
Добавляем:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
--- - name: Include vars for os family include_vars: file: "{{ ansible_os_family }}.yml" - name: Install Bind on RedHat Family yum: name: bind state: present when: ansible_os_family == "RedHat" notify: - bind systemd - name: Install Bind on Debian Family apt: name: "{{ item }}" state: present loop: - bind9 - dnsutils when: ansible_os_family == "Debian" notify: - bind systemd |
* в зависимости от типа операционной системы мы подгрузим разные переменные (так как в разных системах имя для bind разное), после чего устанавливаем bind с помощью yum (для систем на базе Red Hat) или apt (Debian). Обратите внимание, что для систем Debian мы выполняем установку двух пакетов, для перечисления которых используем цикл.
Создаем файл с переменными для debian:
vi Bind/vars/Debian.yml
1 2 |
--- service_name : bind9 |
* с переменной service_name и значением bind9.
Также создаем файл с переменными в роли Bind для систем на базе Red Hat:
vi Bind/vars/RedHat.yml
1 2 |
--- service_name : named |
* во втором файле значение для переменной service_name будет named.
Редактируем файл для handlers:
vi Bind/handlers/main.yml
1 2 3 4 5 6 7 |
--- - name: bind systemd systemd: name: "{{ service_name }}" enabled: yes state: started |
* после установки bind необходимо разрешить автозапуск сервиса и стартовать его. Имя сервиса подставляется из переменной и зависит от типа операционной системы Linux.
Создаем файл для плейбука:
vi start_role.yml
1 2 3 4 5 6 7 8 9 |
--- - hosts: test_servers user: ansible become: true become_method: su become_user: root roles: - Bind |
* в данном примере мы запускаем выполнение роли Bind на серверы из группы test_servers.
Запускаем созданный плейбук:
ansible-playbook start_role.yml -kK