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». Зробіть навички роботи з цим інструментом своєю перевагою.

Залишити відповідь

Дякуємо, що поділились