Руководство по Scaleway
Введение
Scaleway — поставщик облачных услуг, поддерживаемый Ansible, версии 2.6 или выше, через плагин динамического инвентаризации и модули. Эти модули:
- scaleway_sshkey — модуль управления ключами SSH Scaleway: добавляет открытый ключ SSH из файла или значения в инфраструктуру Packet. Каждое созданное впоследствии устройство будет иметь этот открытый ключ, установленный в .ssh/authorized_keys.
- scaleway_compute — модуль управления вычислительными ресурсами Scaleway: управляет серверами на Scaleway. Вы можете использовать этот модуль для создания, перезапуска и удаления серверов.
- scaleway_volume — модуль управления томами Scaleway: управляет томами на Scaleway.
Примечание
Это руководство предполагает, что вы знакомы с Ansible и его принципом работы. Если нет, ознакомьтесь с документацией Ansible, прежде чем начинать.
Требования
Модули Scaleway и скрипт инвентаризации подключаются к API Scaleway с использованием API Scaleway REST. Для использования модулей и скрипта инвентаризации вам потребуется токен API Scaleway. Вы можете сгенерировать токен API через консоль Scaleway здесь. Самый простой способ аутентификации — установить токен API Scaleway в переменной окружения:
$ export SCW_TOKEN=00000000-1111-2222-3333-444444444444
Если вам некомфортно экспортировать свой токен API, вы можете передать его как параметр модулям с помощью аргумента api_token.
Если вы хотите использовать новую пару ключей SSH в этом руководстве, вы можете сгенерировать ее в ./id_rsa и ./id_rsa.pub следующим образом:
$ ssh-keygen -t rsa -f ./id_rsa
Если вы хотите использовать существующую пару ключей, просто скопируйте закрытый и открытый ключи в директорию с playbook.
Как добавить ключ SSH?
Подключение к узлам Scaleway Compute использует Secure Shell. Ключи SSH хранятся на уровне учетной записи, что означает, что вы можете повторно использовать один и тот же ключ SSH на нескольких узлах. Первый шаг в конфигурации ресурсов Scaleway Compute — настройка хотя бы одного ключа SSH.
scaleway_sshkey — модуль управления ключами SSH Scaleway — модуль, который управляет ключами SSH в вашей учетной записи Scaleway. Вы можете добавить ключ SSH в свою учетную запись, включив следующую задачу в playbook:
- name: "Add SSH key"
scaleway_sshkey:
ssh_pub_key: "ssh-rsa AAAA..."
state: "present"
Параметр ssh_pub_key содержит ваш открытый ключ SSH в виде строки. Вот пример внутри playbook:
- name: Test SSH key lifecycle on a Scaleway account
hosts: localhost
gather_facts: no
environment:
SCW_API_KEY: ""
tasks:
- scaleway_sshkey:
ssh_pub_key: "ssh-rsa AAAAB...424242 developer@example.com"
state: present
register: result
- assert:
that:
- result is success and result is changed
Как создать вычислительный экземпляр?
Теперь, когда у нас настроен ключ SSH, следующий шаг — запустить сервер! scaleway_compute — модуль управления вычислительными экземплярами Scaleway — модуль, который может создавать, обновлять и удалять вычислительные экземпляры Scaleway:
- name: Create a server
scaleway_compute:
name: foobar
state: present
image: 00000000-1111-2222-3333-444444444444
organization: 00000000-1111-2222-3333-444444444444
region: ams1
commercial_type: START1-S
Вот подробности параметров для показанного выше примера:
-
name— имя экземпляра (то, что будет отображаться в вашей веб-консоли). -
image— UUID образа системы, который вы хотите использовать. Список всех образов доступен для каждой доступной зоны. -
organization— организация, к которой прикреплена ваша учетная запись. -
region— доступная зона, в которой находится ваш экземпляр (в данном примере, par1 и ams1). -
commercial_type— название коммерческого предложения. Вы можете проверить страницу цен Scaleway, чтобы найти подходящий для вас экземпляр.
Посмотрите на этот короткий playbook, чтобы увидеть рабочий пример, используя scaleway_compute.
- name: Test compute instance lifecycle on a Scaleway account
hosts: localhost
gather_facts: no
environment:
SCW_API_KEY: ""
tasks:
- name: Create a server
register: server_creation_task
scaleway_compute:
name: foobar
state: present
image: 00000000-1111-2222-3333-444444444444
organization: 00000000-1111-2222-3333-444444444444
region: ams1
commercial_type: START1-S
wait: true
- debug: var=server_creation_task
- assert:
that:
- server_creation_task is success
- server_creation_task is changed
- name: Run it
scaleway_compute:
name: foobar
state: running
image: 00000000-1111-2222-3333-444444444444
organization: 00000000-1111-2222-3333-444444444444
region: ams1
commercial_type: START1-S
wait: true
tags:
- web_server
register: server_run_task
- debug: var=server_run_task
- assert:
that:
- server_run_task is success
- server_run_task is changed
Сценарий динамической инвентаризации
Ansible поставляется с scaleway — источником инвентаризации Scaleway. Теперь вы можете получить полную инвентаризацию ваших ресурсов Scaleway через этот плагин и отфильтровать их по различным параметрам (regions и tags в настоящее время поддерживаются).
Давайте создадим пример! Предположим, что мы хотим получить все узлы, у которых есть тег web_server. Создайте файл с именем scaleway_inventory.yml со следующим содержимым:
plugin: scaleway regions: - ams1 - par1 tags: - web_server
Эта инвентаризация означает, что мы хотим все узлы, которые имеют тег web_server в зонах ams1 и par1. После настройки этого файла вы можете получить информацию с помощью следующей команды:
$ ansible-inventory --list -i scaleway_inventory.yml
Выход будет:
{
"_meta": {
"hostvars": {
"dd8e3ae9-0c7c-459e-bc7b-aba8bfa1bb8d": {
"ansible_verbosity": 6,
"arch": "x86_64",
"commercial_type": "START1-S",
"hostname": "foobar",
"ipv4": "192.0.2.1",
"organization": "00000000-1111-2222-3333-444444444444",
"state": "running",
"tags": [
"web_server"
]
}
}
},
"all": {
"children": [
"ams1",
"par1",
"ungrouped",
"web_server"
]
},
"ams1": {},
"par1": {
"hosts": [
"dd8e3ae9-0c7c-459e-bc7b-aba8bfa1bb8d"
]
},
"ungrouped": {},
"web_server": {
"hosts": [
"dd8e3ae9-0c7c-459e-bc7b-aba8bfa1bb8d"
]
}
}
Как видите, мы получаем различные группы узлов. par1 и ams1 — группы, основанные на местоположении. web_server — группа, основанная на теге.
В случае, если параметр фильтра не определен, плагин предполагает, что требуется все возможные значения. Это означает, что для каждого тега, который существует на ваших вычислительных узлах Scaleway, будет создана группа на основе каждого тега.
Хранилище объектов Scaleway S3
Хранилище объектов позволяет хранить любые типы объектов (документы, изображения, видео и т. д.). Поскольку API Scaleway совместим с S3, Ansible поддерживает его напрямую через модули: s3_bucket — Управление корзинами S3 в AWS, DigitalOcean, Ceph, Walrus и FakeS3, aws_s3 — управление объектами в S3.
Вы можете найти много примеров в интеграционных тестах scaleway_s3.
- hosts: myserver
vars:
scaleway_region: nl-ams
s3_url: https://s3.nl-ams.scw.cloud
environment:
# AWS_ACCESS_KEY matches your scaleway organization id available at https://cloud.scaleway.com/#/account
AWS_ACCESS_KEY: 00000000-1111-2222-3333-444444444444
# AWS_SECRET_KEY matches a secret token that you can retrieve at https://cloud.scaleway.com/#/credentials
AWS_SECRET_KEY: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
module_defaults:
group/aws:
s3_url: '{{ s3_url }}'
region: '{{ scaleway_region }}'
tasks:
# use a fact instead of a variable, otherwise template is evaluate each time variable is used
- set_fact:
bucket_name: "{{ 99999999 | random | to_uuid }}"
# "requester_pays:" is mandatory because Scaleway doesn't implement related API
# another way is to use aws_s3 and "mode: create" !
- s3_bucket:
name: '{{ bucket_name }}'
requester_pays:
- name: Another way to create the bucket
aws_s3:
bucket: '{{ bucket_name }}'
mode: create
encrypt: false
register: bucket_creation_check
- name: add something in the bucket
aws_s3:
mode: put
bucket: '{{ bucket_name }}'
src: /tmp/test.txt # needs to be created before
object: test.txt
encrypt: false # server side encryption must be disabled
© 2012–2018 Michael DeHaan
© 2018–2021 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.11/scenario_guides/guide_scaleway.html