Spec-Zone.ru › Ansible 2.8

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

Spec-Zone.ru

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