Site icon IT Education Center Blog – блог навчального центру DevOps – ITEDU by NETFORCE Group

Ansible: 30 модулів для Senior DevOps інженерів (Частина 1)

Одна із задач DevOps інженера — автоматизація всього, що можна. Автоматизувати доставлення, настройку та розгортання застосунків можна з Ansible. Це ПЗ, що дозволяє управляти конфігурацією, оркеструвати, централізовано встановлювати застосунки та паралельно виконувати типові завдання на групі систем.  

Щоб використовувати його на повну потужність, варто ознайомитися з модулями та їх використанням. Знайшли та переклали корисний матеріал, що допоможе розібратися у темі.

Модулі — окремі одиниці коду, які можна використовувати з командного рядка або в плейбуці, щоб змінити цільовий вузол або отримати з нього певну інформацію. Ansible виконує кожен модуль на віддаленій ноді та повертає необхідні значення. Модулі також називають плагінами завдань або бібліотек.

Є кілька найважливіших модулів Ansible, які часто використовують для автоматизації різних завдань. Їх досить багато, тож цю тему ми розділимо на три частини. 

Зараз ми розглянемо модулі для:

Нумо досліджувати!

ping

Цей модуль використовують для перевірки підключення до віддаленого хосту та часто, щоби перевірити python на ньому. Також підходить для перегляду входів у систему та прав користувача.

---
- name: ping module 
  hosts: all
  become: false
  tasks:
    - name: test connection
      ping:

В результаті отримаєте:

host-1 | SUCCESS => {
“ansible_facts”: {
“discovered_interpreter_python”: “/usr/bin/python”
},
“changed”: false,
“ping”: “pong”
}

Що важливо знати про модуль ping:

setup

Setup допомагає зібрати дані про ноди — ім’я хосту, ip-адресу, інформацію про операційну систему та інші.

Цей модуль автоматично викликає плейбук, щоб зібрати корисні змінні про віддалений хост. Користувач отримує інформацію у зручному форматі JSON, де всі значення починаються з «ansible_».

ansible host-1 -m setup -u ec2-user

Команда приведе до такого результату: 

Ви також можете фільтрувати результат за допомогою параметра filter:

ansible all -m setup -u ec2-user -a 'filter=ansible_os_family'

yum

Цей модуль знадобиться, щоб встановлювати різні пакунки або ПЗ на версіях Linux, заснованих на Red Hat. 

---
- name: Update Package on linux system
  hosts: all
  become: yes
  tasks:
  - name: Uninstall Apache
    yum:
      name: nginx
      state: absent
  - name: Install a list of packages with a list variable
    yum:
      name: "{{ packages }}"
    vars:
      packages:
      - httpd
      - httpd-tools

apt

Модуль для керування програмним забезпеченням в Linux на основі Debian.

---
- name: Update Package on debian system
  hosts: all
  become: yes
  tasks:
  - name: Run the equivalent of "apt-get update" as a separate step
    apt:
      update_cache: yes
  - name: Install latest version of "openjdk-6-jdk" 
    apt:
      name: openjdk-6-jdk
      state: latest
      install_recommends: no

package

Модуль package керує пакетами на цільовій ноді. При цьому він не вказує модуль менеджера пакунків — lyum, apt або інший. Його зручно використовувати у різнорідному середовищі машин, адже вам не треба створювати конкретне завдання для кожного менеджера пакетів. Він діє як проксі базового модуля менеджера пакетів.

---
- name: Update Packages on target system
  hosts: all
  become: yes
  tasks:
  - name: Install ntpdate
    ansible.builtin.package:
      name: ntpdate
      state: present
   
  - name: Install the latest version of Apache and MariaDB
    ansible.builtin.package:
      name:
        - httpd
        - mariadb-server
      state: latest

pip

Використовують для керування пакунками python у цільовій системі. 

---
- name: Update python packages
  hosts: all
  become: yes
  tasks:
  - name: Install multi python packages with version specifiers
    pip:
      name:
        - django>1.11.0,<1.12.0
        - bottle>0.10,<0.20,!=0.11
  - name: Install specified python requirements
    pip:
      requirements: /my_app/requirements.txt

npm

Цей модуль використовують для керування пакетами node.js. Він не входить до базових модулів Ansible. Щоб використати його у плейбуці, вкажіть community.general.npm.

---
- name: npm module
  hosts: all
  tasks:
  - name: Install "coffee-script" node.js package.
    community.general.npm:
      name: coffee-script
      path: /app/location
  - name: Install packages based on package.json.
    community.general.npm:
      path: /app/location

raw

Цей модуль дозволяє виконати команду SSH із низьким рівнем доступу. Це корисно у декількох випадках. Найпопулярніший варіант — для встановлення python у системі, у якій його немає. Інший варіант використання: для спілкування з пристроями, наприклад, маршрутизаторами, на яких не встановлено python.

В інших випадках краще використовувати модулі shell або command. Аргументи, які отримує raw, запускаються безпосередньо через налаштовану віддалену оболонку.

---
- name: raw module usage
  hosts: all
  become: yes
  tasks:
  - name: Bootstrap a host without python2 installed
    raw: dnf install -y python2 python2-dnf libselinux-python
  
  - name: Run a command that uses non-posix shell-isms (in this example /bin/sh doesn't handle redirection and wildcards together but bash does)
    raw: cat < /tmp/*txt
    args:
      executable: /bin/bash

command

Використовуйте цей модуль для того, щоб виконати команди на віддаленому вузлі. Здебільшого мова про прості команди Linux. Тут вони не обробляються через оболонку, тож змінні, як $HOSTNAME, та операції  «*», «<», «>», «|», «;» і «&» не працюватимуть. 

Для таких цілей у Windows підійде модуль win_command.

---
- name: command module
  hosts: all
  tasks:
  - name: Run command if /path/to/database does not exist (without 'args')
    command: /usr/bin/make_database.sh db_user db_name creates=/path/to/database
  - name: Run command if /path/to/database does not exist (with 'args' keyword)
    ansible.builtin.command: /usr/bin/make_database.sh db_user db_name
    args:
      creates: /path/to/database

shell

Модуль задуманий, щоб виконувати команди оболонки на цільових хостах на основі Unix. На противагу модулю command, shell приймає дуже складні команди з каналами та редиректами. 

Цей модуль підходить лише для машин на базі Linux. Для Windows є win_powershell.

---
- name: shell module
  hosts: all
  tasks:
  - name: This command will change the working directory to somedir/ and will only run when somedir/somelog.txt doesn't exist
    shell: somescript.sh >> somelog.txt
    args:
      chdir: somedir/
      creates: somelog.txt
  
  - name: This command will change the working directory to somedir/
    shell:
      cmd: ls -l | grep log
      chdir: somedir/
  
  - name: Run a command that uses non-posix shell-isms (in this example /bin/sh doesn't handle redirection and wildcards together but bash does)
    shell: cat < /tmp/*txt
    args:
      executable: /bin/bash

script

Script використовують, щоб запустити локальний сценарій на віддаленій ноді. Коли ми викликаємо модуль shell і надаємо йому локальний сценарій оболонки, спершу він передає його ноді, а потім виконує. Модулю script не потрібен python на віддаленому вузлі, а сценарій виконується через оболонку. 

Вузли на основі Windows теж підтримують цей модуль.

---
- name: script module
  hosts: all
  tasks:
  -  name: Run a script with arguments (free form)
     ansible.builtin.script: /some/local/script.sh --some-argument 1234
   
  -  name: Run a script with arguments (using 'cmd' parameter)
     ansible.builtin.script:
       cmd: /some/local/script.sh --some-argument 1234

Висновок

Тепер ви знаєте 11 модулів Ansible, що допоможуть автоматизувати різні завдання. Інші 29 розглянемо у наступних публікаціях. Якщо хочете дізнатись більше про це програмне забезпечення або покращити свої навички вже зараз — радимо звернути увагу на наш курс «Адміністрування та автоматизація за допомогою Ansible».

За три тижні навчимо встановлювати та налаштовувати оточення Ansible, створювати плейбуки з нуля та застосовувати їх на практиці, працювати з модулями й Ansible Galaxy, писати ролі, налаштовувати їх змінні, а також застосовувати в роботі Ansible AWX.

Мерщій до нових навичок! 😎

Exit mobile version