Ansible для лучшей автоматизации
Продолжаем наше путешествие по просторам мира автоматизации. В этот раз решил рассказать об управлении инфраструктурой. Однажды на проекте мы решили попробовать настроить Selenoid. Время шло, количество тестов росло и стало понятно, что одного инстанса Selenoid уже не хватает. Первый инстанс я настроил ручками через docker compose.
Но с ростом количества машин выяснилось, что настраивать все таким способом не очень удобно. Поэтому выбор пал на Ansible. С его помощью можно очень легко все развернуть. Ниже смотрим пример.
Устанавливаем ansible:
pip install ansible
Создаем папку с проектом:
mkdir selenoid
Внутри создаем файл hosts, в котором надо прописать адреса машин:
[all:vars]
ansible_python_interpreter=/usr/bin/python3
ansible_user=ubuntu
[ggr]
172.28.28.17
[selenoid-nodes]
172.28.27.12
172.28.27.13
172.28.27.56
На 3х нодах у нас будет selenoid, а на четвертой ggr.
Для того, чтобы развернуть selenoid и ggr, можно написать свои плейбуки, но лучше использовать готовые роли gridrouter-docker и selenoid-ansible.
Установить роли можно с помощью ansible-galaxy:
ansible-galaxy install --roles-path ./roles git+https://github.com/SergeyPirogov/gridrouter-docker.git
ansible-galaxy install --roles-path ./roles git+https://github.com/SergeyPirogov/selenoid-ansible.git
Теперь можно использовать роли. Создаем cluster.yml плейбук:
---
- hosts: ggr
vars:
grid_router_version: 1.5.0
grid_router_path: "{{ ansible_env.HOME }}/grid-router"
grid_router_qouta_path: "{{ ansible_env.HOME }}/grid-router/quota"
grid_router_port: 4445
grid_router_regions:
- name: "cluster"
hosts:
- name: 172.28.27.12
port: 4444
browser_count: 4
- name: 172.28.27.13
port: 4444
browser_count: 4
- name: 172.28.27.56
port: 4444
browser_count: 4
grid_router_browsers:
- name: "chrome"
defaultVersion: "62.0"
versions:
- "62.0"
- "63.0"
roles:
- gridrouter-docker
- hosts: selenoid-nodes
vars:
selenoid_version: 1.5.2
selenoid_cm_version: 1.4.0
selenoid_docker_api_version: 1.35
selenoid_limit: 4
selenoid_tmpfs: 128
selenoid_config_dir: "{{ ansible_env.HOME }}/selenoid"
selenoid_listen_port: 4444
selenoid_browsers_last_versions: 3
selenoid_browsers:
- chrome
roles:
- selenoid-ansible
Этот плейбук развернет ggr и три инстанса selenoid. Для большей красоты нужно еще поставить telegraf. Создаем telegraf.conf файл. Пример можно смотреть здесь: Теперь создаем telegraf.yml:
---
- hosts: selenoid-nodes
tasks:
- name: Copy telegraf config
copy:
src: telegraf.conf
dest: "{{ ansible_env.HOME }}/telegraf"
- name: Selenoid | Check selenoid container exist
shell: 'docker ps -aq --filter "name={{ item }}"'
with_items:
- 'telegraf'
register: found_containers
- name: Selenoid | Remove selenoid container if exist
shell: 'docker stop {{ item.item }} && docker rm -fv {{ item.item }}'
with_items: '{{ found_containers.results }}'
when: item.stdout
- name: Start telegraf
docker_container:
image: telegraf:latest
name: telegraf
state: started
links:
- selenoid
volumes:
- "{{ ansible_env.HOME }}/telegraf:/etc/telegraf/telegraf.conf:ro"
env:
INFLUXDB_URI: "http://172.28.28.17:8086"
HOST_IP: "{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}"
Здесь мы указываем, какой образ telegraf брать, а также куда складывать. В данном примере указан influx. Дальше билдаем Grafana из этого репозитория. Вжух и теперь вы можете легко развернуть selenoid кластер. Становится достаточно просто увеличить количество инстансов и поменять конфиг.