Spec-Zone.ru › Ansible

Руководство по 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API