Управление серверами Vscale через Ansible

от автора

Проект Vscale был запущен всего полгода назад, и сейчас он очень активно развивается. Интенсивное развитие во многом стало возможным благодаря сообществу: огромный вклад в развитие сервиса вносят пользователи, которые создают библиотеки для работы с API и делятся ими с широкой аудиторией на GitHub. В числе интересных разработок — клиенты на Go, Ruby, Java, а также плагин для Docker Machine.

Со своей стороны мы хотели бы предложить сообществу еще один полезный инструмент: модуль для системы управления конфигурациями Ansible, с помощью которого можно развертывать виртуальную инфраструктуру на базе Vscale.

Возможности модуля

Установив наш модуль, вы сможете написать сценарий для автоматического развёртывания виртуальной инфраструктуры на базе Vscale. С его помощью можно выполнять следующие операции:

  • создание и удаление серверов;
  • переустановка операционной системы на сервере;
  • апгрейд конфигурации;
  • включение, выключение и перезагрузка серверов.

В этой статье мы рассмотрим несколько примеров его использования. Все его возможности детально описаны в документации к модулю.

Загрузка и первичная настройка

Прежде чем начинать работу с модулем, нужно выполнить несколько подготовительных операций. Сначала сгенерируем в панели управления токен для доступа к API.
Затем добавим переменную окружения VS_API_KEY и укажем полученный токен в качестве её значения:

$ export VS_API_KEY=5c22a088f3b37c933e7480399f1e09258d6977bcd1eb2401de29e8001c9bedc36 

Cоздадим директории для SSH-ключей и библиотек:

$ mkdir -p vscale-ansible/{credentials,group_vars} 

После этого сгенерируем SSH-ключ для доступа к серверам. Если вам требуется добавить уже имеющийся SSH-ключ, просто укажите путь к нему в конфигурационном файле (см. ниже):

$ ssh-keygen -f ./vscale-ansible/credentials/ansible 

Откроем конфигурационный файл vscale-ansible/ansible.cfg и пропишем следующие настройки:

sudo_user = root remote_user = root host_key_checking = False private_key_file = ./credentials/ansible [ssh_connection] control_path = %(directory)s/%%h-%%r 

Создадим также файл vscale-ansible/inventory, в котором будут указаны имена управляемых с помощью Ansible хостов:

[fe-servers] fe-[01:02]  [local] localhost 

После этого можно загружать модуль:

$ git clone https://github.com/vscale/ansible-vscale-modules.git ./library 

Для удобства дальнейшей работы определим несколько переменных в файле vscale-ansible/group_vars/all.yml:

--- vscale_token: "{{ lookup('env', 'VS_API_KEY')}}" key: "{{ lookup('file', 'credentials/ansible.pub') }}" 

Тестовый сценарий: создание сервера

Попробуем написать сценарий, с помощью которого в Vscale будет создан новый сервер с нужными нам характеристиками. Создадим в текстовом редакторе файл createserver.yml и добавим следующие строки:

---  - name: Add SSH key   connection: local   gather_facts: no   hosts:     fe-servers   tasks:     - name: Add SSH key to Vscale account       run_once: true       vscale_ssh:         token: "{{ vscale_token }}"         name: "Ansible"         public_key: "{{ key }}"         state: present 

В этом фрагменте мы описали процедуру добавления SSH-ключа, воспользовавшись двумя определёнными ранее переменными (token и public_key).
Далее описываем параметры сервера, который требуется создать:

- name: Create scalet for inventory hosts       vscale_scalets:         token: "{{ vscale_token }}"         name: "{{ inventory_hostname }}"         plan: small         location: spb0         image: ubuntu_14.04_64_002_master         key_name: "Ansible"         collect_facts: "yes"         power_state: "started"         state: present       register: server - set_fact:         ansible_ssh_host: "{{ server['scalet']['public_address']['address'] }}" 

Далее установим на нашем сервере Nginx:

- name: Install NGINX and fill disk   remote_user: root   hosts:     - fe-servers   tasks:     - name: Install NGINX       apt:         pkg: nginx         update_cache: yes         state: latest     - name: Filling disk       command: dd if=/dev/zero of=/large.file bs=100M count=150 creates=/large.file 

В этом фрагменте мы не только описали стандартную процедуру установки Nginx, но и заполнили диск. Мы сделали это намеренно, чтобы вы смогли протестировать следующую часть нашего сценария:

- name: Check free disk space   remote_user: root   hosts:     - fe-servers   tasks:     - name: Gather facts       setup:  - name: Upgrade server if disk has than 3Gb left   hosts:     - fe-servers   connection: local   tasks:     - name: Upgrade       vscale_scalets:         token: "{{ vscale_token }}"         name: "{{ inventory_hostname }}"         plan: medium         upgrade: yes         state: present       when: "{{ (ansible_mounts[0].size_available)/2**30 < 3*(2**30) }}" 

В ней мы запускаем проверку свободного места на диске. Если свободный объём диска составляет меньше 3 Gb, конфигурация сервера будет автоматически обновлена до более производительной.

Вот и всё. Сохраним внесённые изменения и выполним команду:

$ ansible-playbook -i inventory createserver.yml 

Описанный сценарий для тестирования вы можете найти в нашем репозитории.

Установка ПО на серверах

Мы только что рассмотрели пример сценария, который просто создаёт новый сервер. Попробуем теперь автоматизировать процесс установки ПО.

Это можно сделать с помощью готовых сценариев и ролей — берите и пользуйтесь:

Если вы не ещё не установили модуль по приведенной выше инструкции, то можете просто клонировать репозиторий со сценариями, а затем подключить наш модуль с помощью команды git submodule:

$ git clone https://github.com/vscale/ansible-playbooks.git $ cd ansible-playbooks $ git submodule init $ git submodule update 

У этого способа есть определённые преимущества: если мы подключаем какой-то репозиторий в виде подмодуля, он всегда остаётся в рабочем, консистентном состоянии. Даже если мы обновим репозиторий в основной ветке и в нём что-то “сломается”, ваш подмодуль после обновления не будет изменён.

Не забудьте сгенерировать SSH-ключ и добавить путь до него в конфигурационный файл 🙂

Структура и синтаксис сценариев довольно просты, и вы наверняка сможете написать что-нибудь своё — документация API вам в помощь.

Заключение

Приглашаем всех попробовать наш модуль Ansible и надеемся, что он окажется для вас полезным. Будем рады любым замечаниям и предложениям по его дальнейшему усовершенствованию.
А ещё мы призываем всех, кто пишет клиентские библиотеки для Vscale, не вариться в собственном соку, а знакомить сообщество с результатами своего труда. О наиболее интересных разработках мы обязательно напишем, а самых активных и талантливых — премируем.

ссылка на оригинал статьи https://habrahabr.ru/post/274207/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *