Вебинар на тему знакомство с ansible. популярные практики...
TRANSCRIPT
Devops.Events
Вебинар на тему:Знакомство с Ansible.
Популярные практики и ошибки
Спикер: Павел Егоров - DevOps инженер в DataRobot
Кто я?
Павел Егоров
• DevOps инженер• приверженец автоматизации• люблю Ansible• люблю когда работа делает
себя сама
Devops.Events
Плюсы и минусы Ansible
Плюсы:• простота• SSH• модульность• agentless• open source
Минусы:• agentless• ручная работа• нет контроля
Devops.Events
Из чего состоит Ansible?
• плейбуки• роли• инвентари• групповые переменные• переменные хостов
Devops.Events
Playbook
---
- name: "Install LAMP server" hosts: lamp user: ubuntu gather_facts: true vars_files: - ../vars/lamp.yml roles: - role: apache tags: webserver
- role: mysql tags: database
- role: php tags: php
Devops.Events
Role
• defaults• handlers• meta• tasks• templates• files
Devops.Events
Role: defaults
Хранит переменные по-умолчанию
---
apache_log_path: /mnt/logs/apacheapache_data_path: /mnt/apache/dataapache_port: 8080
Devops.Events
Role: handlers
Хранит обработчики
---
- name: "Restart Apache" sudo: yes service: name: apache state: restarted
Devops.Events
Role: meta
Хранит зависимости от других ролей
---
dependencies: - { role: java } - { role: basic }
Devops.Events
Role: tasks
Делает всю работу---
- name: "Install Apache" sudo: yes apt: name: apache state: present update_cache: yes
- name: "Configure Apache" template: src: apache.conf.j2
Devops.Events
Role: templates
Хранит шаблоны создаваемых файловListen {{ apache_port }}<VirtualHost *:{{ apache_port }}> DocumentRoot "{{ apache_site_data }}" ServerName {{ site_name }}
# Other directives here</VirtualHost>
Devops.Events
Inventory
Хранит группы серверов[lamp]10.20.30.40
[elasticsearch-cluster-1]10.20.40.4110.20.40.4210.20.40.43
Devops.Events
Group/Host vars
Group vars - для групп хостов
Host vars - для отдельных хостов
Devops.Events
Patterns & Anti-patterns
Devops.Events
Anti-pattern: Писать все задачи в плейбук без разбивки на роли
- name: "Install LAMP server" hosts: lamp user: ubuntu gather_facts: true vars_files: - ../vars/lamp.yml tasks: - name: "install apache" ... - name: "configure mysql" ... - name: "install php" ... - name: "install mysql" ... - name: "kill Sarah Connor"
Devops.Events
Pattern:
Использовать в плейбуке роли и теги, делать его модульным
- name: "Install LAMP server" hosts: lamp user: ubuntu gather_facts: true vars_files: - ../vars/lamp.yml roles: - role: apache tags: webserver
- role: mysql tags: database
Devops.Events
Anti-pattern:
Описывать задачи в одну строку:
Devops.Events
- lineinfile: dest=/opt/jboss-as/bin/standalone.conf regexp='^(.*)Xms(\d+)m(.*)$' line='\1Xms${xms}m\3' ba
Такая строка даже не поместилась в слайд, как видите
Pattern:
При описании задачи записывать каждый параметр в отдельную строку
- lineinfile:
dest: /opt/jboss-as/bin/standalone.conf
regexp: '^(.*)Xms(\d+)m(.*)$'
line: '\1Xms${xms}m\3'
backrefs: yes
Devops.Events
Anti-pattern:
Использовать один inventory файл для всей инфраструктуры
Devops.Events
Pattern:Создавать отдельные файлы инвентаря для различных окружений и частей системы:
Devops.Events
Ansible-lint и код-ревью
• Ansible-linthttps://github.com/willthames/ansible-lint• Yaml-lint
https://github.com/Pryz/yaml-lint
Devops.Events