Ansible: 30 модулів для Senior DevOps інженерів (Частина 3)
До того, щоб створювати ПЗ майбутнього залишилося всього 7 модулів Ansible. Знаючи всі 30, ви зможете автоматизувати програмні продукти, а саме — їхнє доставлення, настройку та розгортання застосунків.
Це — завершальний матеріал цієї серії. Ми вже переклали та розглянули більшість модулів у попередніх матеріалах: тут і тут. Тож нагадайте собі, якщо треба, або прочитайте, якщо пропустили.
В цій частині розглянемо ті, що слід використовувати для:
- обробки сервісу,
- керування користувачами та групами,
- управління cron,
- друку повідомлень під час виконання плейбуку,
- для включення змінних і ролей.
Поїхали!
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
Модуль для керування користувачами на вузлах. Він використовує useradd, якщо користувача потрібно створити, usermod, щоб змінити та userdel, щоб видалити. Ви можете визначити id, групу, оболонку, пароль та інше. Для 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 підійде для керування групами на цільових нодах. Працює подібно до user: використовує 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
Використовують, щоб керувати записами 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
Цей модуль використовують для друку оператора під час виконання плейбуку. Він може стати в пригоді для налагодження змінних або виразів. Додайте атрибут 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.
---
- 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'
include_role
Цей модуль динамічно завантажує та виконує вказану роль як завдання:
---
- 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
Висновок
Тепер ви знаєте 30 модулів Ansible, які допоможуть автоматизувати різні завдання. Управляйте конфігурацією, оркеструйте, централізовано встановлюйте застосунки та одночасно виконуйте типові завдання на групі систем. І буде вам щастя у DevOps!
А щоб закріпити матеріал та відкрити ще більше можливостей цього ПЗ — радимо наш курс «Адміністрування та автоматизація за допомогою Ansible». Зробіть навички роботи з цим інструментом своєю перевагою.