В первой части этой серии мы обсудили модули проверки подключения, установки некоторых пакетов и выполнения ряда команд на целевых узлах. Во второй части изучили различные модули, используемые для обработки файлов, управляющие файлами на целевых узлах.
В этой части серии мы узнаем о модуле, который используется при обработке сервиса (модуль service), модулях управления пользователями и группами (модуль user и модуль group), модуле управления cron (модуль cron), модуле печати сообщений во время выполнения плейбука (модуль debug) и модулях, включающих переменные и роли (модуль include_vars и модуль include_role).
Начнём…
Модуль service
Модуль service используется для управления сервисом на целевых узлах, можно запускать/останавливать/перезапускать/перезагружать сервис через этот модуль. Для целевого устройства на базе Windows можно использовать модуль win_service.
---
- name: service module
hosts: all
tasks:
- name: Start service httpd, if not started
service:
name: httpd
state: started
- name: Stop service httpd, if started
service:
name: httpd
state: stopped
- name: Restart service httpd, in all cases
service:
name: httpd
state: restarted
- name: Reload service httpd, in all cases
service:
name: httpd
state: reloaded
Модуль user
Модуль user используется для управления пользователями на целевых узлах. На сервисной панели пользовательский модуль использует команды useradd для добавления, usermod для изменения и userdel для удаления пользователей. Можно определить идентификатор пользователя, группу, оболочку, пароль и т.д. Для целевого устройства на базе Windows можно использовать модуль win_user.
---
- name: user module
hosts: all
tasks:
- name: Add the user 'johnd' with a specific uid and group of 'admin'
user:
name: johnd
comment: John Doe
uid: 1040
group: admin
- name: Add the user 'james' with a bash shell, appending the group 'admins' and 'developers' to the user's groups
user:
name: james
shell: /bin/bash
groups: admins,developers
append: yes
- name: Remove the user 'johnd'
user:
name: johnd
state: absent
remove: yes
- name: Create a 2048-bit SSH key for user jsmith in ~jsmith/.ssh/id_rsa
user:
name: jsmith
generate_ssh_key: yes
ssh_key_bits: 2048
ssh_key_file: .ssh/id_rsa
- name: Added a consultant whose account you want to expire
user:
name: james18
shell: /bin/zsh
groups: developers
expires: 1422403387
Модуль group
Модуль group используется при управлении группами на целевых узлах. На серверном уровне этот модуль использует groupadd для создания, groupmod для изменения и groupdel для удаления групп. Для целевого устройства на базе Windows можно использовать модуль win_group.
---
- name: group module
hosts: all
tasks:
- name: Ensure group "somegroup" exists
group:
name: somegroup
state: present
- name: Ensure group "docker" exists with correct gid
group:
name: docker
state: present
gid: 1750
- name: deleting a group
group:
name: groupA
state: absent
Модуль cron
Модуль cron используется для управления записями crontab и определения переменных среды.
---
- name: cron module
hosts: all
tasks:
- name: Ensure a job that runs at 2 and 5 exists. Creates an entry like "0 5,2 * * sh script.sh"
cron:
name: "check dirs"
minute: "0"
hour: "5,2"
job: "sh script.sh"
- name: 'Delete a job from the crontab'
cron:
name: "an old job"
state: absent
- name: Creates an entry like "APP_HOME=/srv/app" and insert it after PATH declaration
cron:
name: APP_HOME
env: yes
job: /srv/app
insertafter: PATH
Модуль debug
Модуль debug используется для вывода инструкции во время выполнения плейбука и может быть полезен при отладке переменных или выражений. Можно использовать свойство msg для отображения пользовательского сообщения и свойство var для отображения переменной.
---
- name: debug module
hosts: all
tasks:
- name: Print a simple statement
debug:
msg: "Hello World! A custom message"
- name: Get uptime information
shell: /usr/bin/uptime
register: result
- name: Print return information from the previous task
debug:
var: result
verbosity: 2
Модуль include_vars
Модуль include_vars может использоваться для динамической загрузки переменной из файла или каталога во время выполнения задачи. Следует иметь в виду, что любая переменная, установленная с помощью set_fact, не будет перезаписана с помощью include_vars.
---
- name: include_vars module
hosts: all
tasks:
- name: include a variable file
include_vars:
file: name_vars.yml
- name: include a variable file conditionally
include_vars:
file: vars-Debian.yml
when: ansible_os_family == 'Debian'
- name: Include all .yaml files in vars directory except bastion.yaml
include_vars:
dir: vars
ignore_files:
- 'bastion.yaml'
extensions:
- 'yaml'
Курс «Ansible: Infrastructure as Code»
Модуль include_roles
Этот модуль динамически загружает и выполняет указанную роль в качестве задачи.
---
- name: include_roles module
hosts: all
tasks:
- name: include role myrole
include_role:
name: myrole
- name: Run tasks/other.yaml instead of main.yaml
include_role:
name: myrole
tasks_from: other
- name: Pass variables to role
include_role:
name: myrole
vars:
rolevar1: value from task
- name: Conditional role
include_role:
name: myrole
when: not idontwanttorun
В этой серии мы рассмотрели самые важные модули Ansible. С их помощью вы можете настроить IT-инфраструктуру, а также автоматизировать вашу IT-среду.