Руководство по Scaleway
Введение
Scaleway — облачный провайдер, поддерживаемый коллекцией community.general с помощью набора плагинов и модулей. К ним относятся:
- community.general.scaleway_compute: управляет серверами в Scaleway. С помощью этого модуля можно создавать, перезапускать и удалять серверы.
- community.general.scaleway_compute_private_network
- community.general.scaleway_container
- community.general.scaleway_container_info
- community.general.scaleway_container_namespace_info
- community.general.scaleway_container_namespace
- community.general.scaleway_container_registry_info
- community.general.scaleway_container_registry
- community.general.scaleway_database_backup
- community.general.scaleway_function
- community.general.scaleway_function_info
- community.general.scaleway_function_namespace_info
- community.general.scaleway_function_namespace
- community.general.scaleway_image_info
- community.general.scaleway_ip
- community.general.scaleway_ip_info
- community.general.scaleway_lb
- community.general.scaleway_organization_info
- community.general.scaleway_private_network
- community.general.scaleway_security_group
- community.general.scaleway_security_group_info
- community.general.scaleway_security_group_rule
- community.general.scaleway_server_info
- community.general.scaleway_snapshot_info
- community.general.scaleway_sshkey: добавляет открытый ключ SSH из файла или значения в инфраструктуру Packet. На каждом устройстве, созданном впоследствии, этот открытый ключ будет установлен в .ssh/authorized_keys.
- community.general.scaleway_user_data
- community.general.scaleway_volume: управляет томами в Scaleway.
- community.general.scaleway_volume_info
Плагины:
- community.general.scaleway: плагин инвентаризации
Примечание
Предполагается, что вы знакомы с Ansible и принципами его работы. Если это не так, перед началом ознакомьтесь с разделом Документация Ansible.
Требования
Модули Scaleway и скрипт инвентаризации подключаются к API Scaleway с помощью REST API Scaleway. Для использования модулей и скрипта инвентаризации вам потребуется токен 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
Если вы хотите использовать существующую пару ключей, просто скопируйте закрытый и открытый ключи в каталог плейбука.
Как добавить ключ SSH?
Для подключения к узлам Scaleway Compute используется Secure Shell. Ключи SSH хранятся на уровне учетной записи, поэтому один и тот же ключ SSH можно использовать на нескольких узлах. Чтобы настроить ресурсы Scaleway Compute, сначала нужно настроить хотя бы один ключ SSH.
community.general.scaleway_sshkey — это модуль для управления ключами SSH в вашей учетной записи Scaleway. Добавить ключ SSH в учетную запись можно, включив в плейбук следующую задачу:
- name: "Add SSH key"
community.general.scaleway_sshkey:
ssh_pub_key: "ssh-rsa AAAA..."
state: "present"
Параметр ssh_pub_key содержит ваш открытый ключ SSH в виде строки. Вот пример его использования в плейбуке:
- name: Test SSH key lifecycle on a Scaleway account
hosts: localhost
gather_facts: false
environment:
SCW_API_KEY: ""
tasks:
- community.general.scaleway_sshkey:
ssh_pub_key: "ssh-rsa AAAAB...424242 developer@example.com"
state: present
register: result
- ansible.builtin.assert:
that:
- result is success and result is changed
Как создать экземпляр Compute?
Теперь, когда ключ SSH настроен, можно переходить к запуску сервера! community.general.scaleway_compute — это модуль для создания, обновления и удаления экземпляров Scaleway Compute:
- name: Create a server
community.general.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 можно выбрать подходящий экземпляр.
Ознакомьтесь с этим коротким плейбуком, чтобы увидеть рабочий пример использования scaleway_compute:
- name: Test compute instance lifecycle on a Scaleway account
hosts: localhost
gather_facts: false
environment:
SCW_API_KEY: ""
tasks:
- name: Create a server
register: server_creation_task
community.general.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
- ansible.builtin.debug:
var: server_creation_task
- ansible.builtin.assert:
that:
- server_creation_task is success
- server_creation_task is changed
- name: Run it
community.general.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
- ansible.builtin.debug:
var: server_run_task
- ansible.builtin.assert:
that:
- server_run_task is success
- server_run_task is changed
Плагин динамической инвентаризации
Ansible включает community.general.scaleway. Этот плагин позволяет получить полный список ресурсов Scaleway и отфильтровать его по различным параметрам (сейчас поддерживаются regions и tags).
Рассмотрим пример! Допустим, нам нужно получить все узлы с тегом web_server. Создайте файл с именем scaleway_inventory.yml и следующим содержимым:
plugin: community.general.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 поддерживает его непосредственно с помощью модулей amazon.aws: amazon.aws.s3_bucket, amazon.aws.s3_object.
Множество примеров можно найти в интеграционных тестах 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/amazon.aws.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
- ansible.builtin.set_fact:
bucket_name: "{{ 99999999 | random | to_uuid }}"
# "requester_pays:" is mandatory because Scaleway does not implement related API
# another way is to use amazon.aws.s3_object and "mode: create" !
- amazon.aws.s3_bucket:
name: '{{ bucket_name }}'
requester_pays:
- name: Another way to create the bucket
amazon.aws.s3_object:
bucket: '{{ bucket_name }}'
mode: create
encrypt: false
register: bucket_creation_check
- name: add something in the bucket
amazon.aws.s3_object:
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–2025 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/projects/ansible/latest/collections/community/general/docsite/guide_scaleway.html