Spec-Zone.ru › Ansible 2.10

Руководство по 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–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.10/scenario_guides/guide_scaleway.html

Spec-Zone.ru

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