Руководство по 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 с помощью Scaleway REST API. Для использования модулей и сценария инвентаризации вам потребуется токен 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:
# SCW_API_KEY='XXX' ansible-playbook ./test/legacy/scaleway_ssh_playbook.yml
- 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.
# SCW_TOKEN='XXX' ansible-playbook ./test/legacy/scaleway_compute.yml
- 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 Compute, будет создана группа, основанная на каждом теге.
Хранилище объектов Scaleway S3
Хранилище объектов позволяет хранить любые типы объектов (документы, изображения, видео и т. д.). Поскольку API Scaleway совместим с S3, Ansible поддерживает его напрямую через модули: s3_bucket — Управление ведрами S3 в AWS, DigitalOcean, Ceph, Walrus и FakeS3, aws_s3 — управление объектами в S3.
Вы можете найти много примеров в ./test/legacy/roles/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–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.8/scenario_guides/guide_scaleway.html