Ansible, безкоштовний проект Red Hat на основі Python з відкритим вихідним кодом, є популярною платформою керування конфігураціями та ІТ-автоматизації.
Він багатоплатформний і може працювати з більшістю сучасних операційних систем, включаючи Linux, Windows і Mac. Він підтримує декларативну мову, написану YAML або YAML Ain’t Markup Language, для опису конфігурації системи.
Ansible разом з іншими сучасними платформами керування конфігураціями здійснив революцію в автоматизації ІТ та галузевих стандартах. Інструменти керування конфігурацією стали частиною набору інструментів DevOps і є невід’ємною частиною життєвого циклу будь-якого сучасного ІТ-процесу. Це застосовно для будь-якого сучасного інфраструктурного середовища, незалежно від того, чи воно побудоване на локальному, гібридному чи хмарному середовищі. Не лише для DevOps, Ansible також може допомогти автоматизувати багато повсякденних завдань, які виконує системний адміністратор.
Одна з переваг використання Ansible полягає в тому, що він не використовує агентів і не потребує багато чого для початку, окрім доступу SSH до цільової машини та підтримуваної версії Python, яка вже встановлена за замовчуванням у більшості сучасних операційних систем. Крім того, оскільки це легкий інструмент, його можна розгортати та використовувати разом із застарілими інноваційними системами.
Використання Ansible
Оркестровка
Ansible є інструментом вибору для оркестрування різноманітних завдань системного адміністрування та розгортання. Playbooks дозволяють використовувати однакові робочі процеси оркестровки в різних проектах, а дані конфігурації на основі YAML дозволяють зберігати та керувати версіями вашої інфраструктури в сховищі Git або будь-якій підтримуваній платформі контролю версій.
Розгортання програми
Незалежно від того, чи це проста програма з кількома рядками коду чи багаторівневе розгортання великої ваги, Ansible дає змогу автоматизувати життєвий цикл розгортання додатка від кінця до кінця.
Безпека та відповідність
Ansible також може допомогти забезпечити захист ваших систем відповідно до вказівок вашої організації та галузевих стандартів. Він може працювати на тисячах серверів, проводити аудит і виправляти ці діри в безпеці, даючи адміністратору повний контроль над середовищем.
Давайте тепер розглянемо деякі з поширених завдань системного адміністратора, які можна автоматизувати за допомогою Ansible.
Копіювати файли з локальної або віддаленої системи
Як системний адміністратор зазвичай копіює файли з одного каталогу в інший. Файли конфігурації часто потрібно копіювати на віддалені сервери, або іноді нам потрібно перемістити файли з одного віддаленого місця в інше.
Модуль копіювання Ansible може допомогти вам виконати ці завдання в посібнику.
Для системного адміністратора це звичайне завдання знати стан керованих серверів і виконувати заздалегідь визначені дії згідно з політикою організації. Одним із таких завдань є визначення часу роботи сервера. За допомогою Ansible ми можемо легко отримати значення часу безвідмовної роботи та надрукувати їх разом. Нижче наведено приклад копіювання конфігурації ntp з локального на віддалений сервер за допомогою модуля копіювання:
--- - hosts: all gather_facts: no become: yes tasks: - name: Copy a new ntp configuration file and back up the original, if it differs copy: src: ./ntp.conf dest: /etc/ntp.conf owner: root group: root mode: '0644' backup: yes
Налаштуйте додаткові завдання cron
Налаштування запланованих завдань для виконання рутинних завдань є частиною керування будь-яким сервером. Ви можете запланувати автоматичне резервне копіювання, виправлення, аудит тощо на певний час доби або місяця автоматично, залишаючи продуктивний час для вашого використання.
cron є одним із таких інструментів у Linux, який підтримує планування, і Ansible може допомогти вам додати або змінити ці завдання. Як приклад, наведений нижче посібник демонструє, як можна легко встановити завдання rsync як root на деяких або всіх ваших серверах за допомогою Ansible.
--- - hosts: all gather_facts: no become: yes tasks: - name: Deploy cron job cron: name: "Set rsync job" user: root minute: "5" hour: "4" job: "rsync -avz /path/to/folder1 /path/to/folder1 2>&1"
Управління дисками та файловими системами
Ansible можна використовувати для керування дисками, макетами розділів, файловими системами та монтуваннями, включаючи /etc/fstab на серверах Linux. Інший модуль Ansible робить це можливим. Ось приклад створення розділу на диску об’ємом 100 ГБ, форматування його за допомогою файлової системи ext4, створення нового каталогу для монтування розділу та монтування його в заданому каталозі. Запис у /etc/fstab також створюється за допомогою тимчасового або постійного монтування залежно від параметрів модуля.
--- - hosts: all gather_facts: no become: yes tasks: - name: Create a partition parted: device: /dev/sdb number: 1 part_end: "100%" state: present - name: Format new partition filesystem: fstype: ext4 dev: /dev/sdb1 - name: Create mount directory file: path: /data state: directory - name: Mount partition mount: path: /data src: /dev/sdb1 fstype: ext4 state: mounted
Збирайте журнали сервера
Зберігання журналів у зручному місці іноді важливо для безпеки, аудиту та аналізу. Ansible дозволяє збирати журнали з різних серверів у вашому корпоративному середовищі та легко зберігати їх у визначеному вами місці. Ось підручник, як цього досягти:
--- - hosts: all gather_facts: no become: yes tasks: - name: Find logs find: paths: /var/log/ patterns: '*.log' recurse: yes register: _logs - name: Fetch logs fetch: src: "{{ item.path }}" dest: /tmp/logs with_items: "{{ _logs.files }}"
Встановити або видалити пакети та програмне забезпечення
Пакети часто потрібно встановлювати за запитами користувачів або як частину початкових збірок сервера. Нам також може знадобитися видалити певні пакунки, які більше не потрібні або мають деякі критичні помилки тощо. Ansible дозволяє легко встановлювати або видаляти пакунки без необхідності переходити на кожен сервер і запускати команди вручну. Ось приклад, який демонструє інсталяцію та видалення кожного пакета для серверів Linux на основі Ubuntu та RHEL/CentOS.
--- - hosts: ubuntu gather_facts: no tasks: - name: Install lsof utility apt: pkg: lsof state: latest sudo: yes - name: Remove ARP Scan utility apt: pkg: arp-scan state: absent sudo: yes --- - hosts: centos gather_facts: no tasks: - name: Install lsof utility yum: pkg: lsof state: latest sudo: yes - name: Remove ARP Scan utility yum: pkg: arp-scan state: absent sudo: yes
Керування користувачами
Користувачі та групи утворюють базову структуру, навколо якої системи на базі Unix/Linux керують доступом і дозволами. У великій організації керування користувачами та групами може бути серйозною проблемою, незважаючи на автоматизацію для підтримки середовища.
Завдяки Ansible системний адміністратор має чудовий інструмент для створення, зміни та видалення користувачів і груп із усіма різними можливостями, які підтримуються ОС.
Ось простий приклад, який показує створення та видалення користувачів і груп за допомогою Ansible. Після запуску цієї ігри на цільових серверах буде створено групу A та групу B із заданими GID, тоді як user1 буде видалено, якщо він присутній. Новий користувач без оболонки буде створено як user2 із вказаним UID, призначеними групами та заблокованим паролем.
--- - hosts: all gather_facts: no become: yes tasks: - group: gid: 12310 name: groupA state: present - group: gid: 12311 name: groupB state: present - user: name: user1 state: absent - user: name: user2 uid: 12427 shell: /bin/false password_lock: yes groups: groupA, groupB
Управління службами
Сервіси — це демони процесів, які працюють у фоновому режимі та обслуговують певні служби, як-от sshd, що забезпечує з’єднання SSH тощо. Використовуючи Ansible, ви можете керувати системними та користувацькими службами, наприклад запускати, зупиняти та перезапускати їх. Ось зразок підручника, щоб продемонструвати це:
--- - hosts: all gather_facts: no become: yes tasks: - name: Restart ssh daemon service: name: ssh state: restarted - name: Restart sssd daemon service: name: sssd state: stopped - name: Restart httpd daemon service: name: httpd state: started
У наведеному вище прикладі служба SSH буде перезапущена, а потім зупиниться служба SSSD. Демон httpd запускається ближче до кінця. Оскільки Ansible є ідемпотентним, будь-яка служба, яка вже запущена або зупинена, не буде змінена, тоді як перезапуск завжди змінює стан служби. Не забудьте перевірити назву служби, оскільки різні дистрибутиви Linux використовують інші назви навіть для тієї самої служби, наприклад ssh і sshd.
Резюме 👨💻
Ansible полегшує життя системного адміністратора, дозволяючи виконувати повторювані та трудомісткі завдання в автоматизований спосіб і зменшуючи людські помилки та зусилля. Крім того, це дозволить зберігати конфігураційні дані в центральному сховищі коду, наприклад Git, дозволяючи кільком користувачам співпрацювати та переглядати кожну дію.
Щоб дізнатися більше про Ansible та його широкий набір модулів, зверніться до нього документація.