Category Archives: CMS – Puppet, Ansible, Chef

Вопросы, касающиеся установки, настройки и работы CMS (Configuration Manament System – система управления конфигурациями) Puppet, Ansible и Chef

Ansible: with_fileglob – копирование нескольких шаблонов из директории

10 September 2018
 

 Необходимо скопировать пачку файлов – задач для supervisord. В Ansible используем with_fileblob: … – name: “Copy supervisor tasks” template: src: “{{ item }}” dest: “/etc/supervisor/conf.d/{{ item | basename | regex_replace(‘.j2’,”) }}” owner: “root” group: “root” mode: 0644 with_fileglob: – templates/*.j2 … С помощью фильтра basename – получаем имя файла из {{ item }}, а с… Read More »

AWS: миграция RTFM 3.0 (final) – CloudFormation и Ansible роли

25 August 2018
 

 Прошёл почти год, как я начал миграцию v2, закончил на посте Ansible: миграция RTFM 2.11 – хост Services – установка PHP, PHP-FPM. Основной её идеей на тот момент было максимально использовать возможности AWS и Ansible – чисто из интереса и для практики, т.к. на предыдущем месте работы её было совсем мало (там в основном был Azure… Read More »

RabbitMQ: Ansible и Hostname mismatch: node believes its host is different.

8 August 2018
 

 Имеется Ansible плейбук, где среди прочего выполняется установка и настройка RabbitMQ. При запуске задачи с использованием плагина rabbitmq_vhost возникает ошибка: Решение – добавить в вызов rabbitmq_vhost имя ноды с указанием имени хоста, в примере ниже это будет node: “rabbit@{{ set_hostname }}”: … – name: Add RabbitMQ vhosts rabbitmq_vhost: node: “rabbit@{{ set_hostname }}” name: “{{ item.value.vhost… Read More »

Prometehus: MySQL exporter

7 August 2018
 

 Ещё одна задача по мониторингу – проверять доступ к серверу баз данных. Краткая заметка просто для примера. Используем prometheus/mysqld_exporter. Подключаемся к серверу БД, добавляем пользователя: Задаём ему права доступа: Запускаем експортер: Проверяем метрики: Добавляем в Ansible шаблон Compose файла: … mysql_exporter: image: prom/mysqld-exporter networks: – prometheus-client ports: – 9104:9104 environment: – DATA_SOURCE_NAME={{ mysql_monitoring_user }}:{{ mysql_monitoring_pass }}@({{… Read More »

AWS: CloudFormation – создание EFS + Ansible роль

1 August 2018
 

 Задача – добавить ресурсы AWS Elastic File System в существующий CloudFormation стек. В CloudFormation для этого имеется ресурс AWS::EFS::FileSystem, который и используем. Шаблон для CloudFormation уже создан, и в примерах ниже будут отсылки к его ресурсам. Опции EFS Перед тем, как создавать EFS – немного рассмотрим доступные опции. EFS имеет два основных доступных параметра – Performance… Read More »

Grafana: добавление CloudWatch data-sorce

18 July 2018
 

 Для получения метрик из AWS CloudWatch для связки Grafana/Prometheus можно использовать два подхода: собирать метрики в Prometheus с помощью cloudwatch_exporter добавить новый data-source в Grafana, и рисовать графики используя его Ниже описывается процесс добавления data-source в Grafana и графиков AWS Load Balancer. IAM пользователь Добавляем IAM пользователя с Programmatic access: В Permissions выбираем Attach existing policies… Read More »

Ansible: проверить конфигурацию NGINX перед рестартом

13 July 2018
 

 Имеется роль nginx, в которой выполняется его настройка и копирование файлов. Последней задачей роли выполняется nginx restart. Проблема заключается в том, что попытка перезапуска NGINX выполняется в любом случае, и если в файле шаблона виртуалхоста есть ошибка – то NGINX не запустится. Что бы выполнить проверку – nginx -t – добавляем задачу с вызовом модуля… Read More »

Ansible: использование ansible_date_time для получения даты/времени

12 July 2018
 

 Имеется задача по созданию архива, в имени которого хочется добавлять дату и время его создания. Для получения даты-времени можно использовать ansible_date_time. Проверяем. Добавлем задачу, которая выведет всё содержимое: – name: Test date debug: msg: “{{ ansible_date_time }}” Запускаем: Теперь – попробуем получить отдельные значения, например date: – name: Test date debug: msg: “{{ ansible_date_time.date }}”… Read More »

Ansible: использование with_dict на примере модуля rabbitmq_user

11 July 2018
 

 Требуется создать пользователей и пароли для RabbitMQ, используя плагин rabbitmq_user. При этом хочется не создавать несколько переменных и несколько задач, а всё выполнить в одном цикле, но у каждой переменной должно быть несколько полей и значений. Используем with_dict и словарь в переменных. В файле roles/roles/rabbitmq/vars/main.yml добавляем: rabbitmq_users: user1: password: “pass1” vhost: “/” configure_priv: .* read_priv:… Read More »

Jenkins: Credentials Binding Plugin и использование нескольких Secret file в Jenkins pipeline

3 July 2018
 

 Задача – запустить ansible-playbook, которому необходимо передать RSA ключ для EC2 и файл с паролем для ansible-vault, т.к. в задачах плейбука используются зашифрованные переменные. Для этого используем Jenkins credentials, где сохраним два файла, а потом через Credentials Binding Plugin – передадим их в контейнер с задачей. Secret file в Credentials Сначала добавляем файлы в Jenkins. Переходим… Read More »