Spec-Zone.ru › Ansible 2.8

Руководство по Google Cloud Platform

Введение

Ansible и Google совместно разработали набор автоматически генерируемых модулей Ansible, призванных охватить всю Google Cloud Platform последовательно и всесторонне.

Ansible содержит модули для управления ресурсами Google Cloud Platform, включая создание виртуальных машин, контроль сетевого доступа, работу с постоянными дисками, управление балансировщиками нагрузки и многое другое.

Эти новые модули можно найти под новой согласованной схемой имён «gcp_*» (Примечание: gcp_target_proxy и gcp_url_map — это устаревшие модули, несмотря на имя «gcp_*». Пожалуйста, используйте gcp_compute_target_proxy и gcp_compute_url_map вместо них).

Кроме того, плагин инвентаризации gcp_compute может обнаружить все виртуальные машины GCE и сделать их автоматически доступными в вашей инвентаризации Ansible.

Вы можете увидеть набор других модулей GCP, которые не соответствуют этой схеме именования. Это оригинальные модули, разработанные в первую очередь сообществом Ansible. Вы найдёте некоторое перекрытие функциональности, например, с модулем «gce» и новым модулем «gcp_compute_instance». Оба можно использовать, но могут возникнуть проблемы при их совместном использовании.

Хотя модули GCP сообщества не исчезнут, Google вкладывает усилия в новые модули «gcp_*». Google стремится обеспечить сообществу Ansible отличный опыт работы с GCP и, следовательно, рекомендует по возможности использовать эти новые модули.

Необходимые условия

Модули Google Cloud Platform (GCP) требуют установки как requests библиотек, так и google-auth библиотек.

$ pip install requests google-auth

В качестве альтернативы для RHEL/CentOS также доступен пакет python-requests, который удовлетворяет требованиям requests библиотек.

$ yum install python-requests

Учётные данные

Создать учётную запись GCP с учётными данными для Ansible очень просто. У вас есть несколько вариантов получения учётных данных — вот два наиболее распространённых варианта:

  • Учётные записи сервиса (рекомендуется): используйте JSON-учётные записи сервиса со специфическими разрешениями.
  • Учётные записи машины: используйте разрешения, связанные с виртуальной машиной GCP, на которой вы используете Ansible.

В следующих примерах мы будем использовать учётные данные учётной записи сервиса.

Для работы с модулями GCP вам сначала необходимо получить учётные данные в формате JSON:

  1. Создать учётную запись сервиса
  2. Загрузить JSON-учётные данные

После получения учётных данных существуют два способа их предоставления Ansible:

  • указанием их непосредственно как параметров модуля
  • установкой переменных окружения

Предоставление учётных данных как параметров модуля

Для модулей GCE вы можете указать учётные данные как аргументы:

  • auth_kind: тип используемой аутентификации (варианты: machineaccount, serviceaccount, application)
  • service_account_email: электронный адрес, связанный с проектом
  • service_account_file: путь к файлу JSON-учётных данных
  • project: идентификатор проекта
  • scopes: специфические разрешения, которые вы хотите использовать для действий.

Например, для создания нового IP-адреса с помощью модуля gcp_compute_address вы можете использовать следующую конфигурацию:

- name: Create IP address
  hosts: localhost
  gather_facts: no

  vars:
    service_account_file: /home/my_account.json
    project: my-project
    auth_kind: serviceaccount
    scopes:
      - https://www.googleapis.com/auth/compute

  tasks:

   - name: Allocate an IP Address
     gcp_compute_address:
         state: present
         name: 'test-address1'
         region: 'us-west1'
         project: "{{ project }}"
         auth_kind: "{{ auth_kind }}"
         service_account_file: "{{ service_account_file }}"
         scopes: "{{ scopes }}"

Предоставление учётных данных как переменных окружения

Установите следующие переменные окружения перед запуском Ansible для настройки своих учётных данных:

GCP_AUTH_KIND
GCP_SERVICE_ACCOUNT_EMAIL
GCP_SERVICE_ACCOUNT_FILE
GCP_SCOPES

Динамическая инвентаризация GCE

Лучший способ взаимодействия с узлами — использование плагина инвентаризации gcp_compute, который динамически запрашивает GCE и сообщает Ansible, какие узлы можно управлять.

Чтобы использовать этот плагин динамической инвентаризации GCE, необходимо сначала включить его, указав следующее в файле ansible.cfg:

[inventory]
enable_plugins = gcp_compute

Затем создайте файл, который заканчивается на .gcp.yml в вашем корневом каталоге.

Сценарий инвентаризации gcp_compute принимает ту же информацию об аутентификации, что и любой модуль.

Вот пример файла инвентаризации:

plugin: gcp_compute
projects:
  - graphite-playground
auth_kind: serviceaccount
service_account_file: /home/alexstephen/my_account.json

Выполнение ansible-inventory --list -i <filename>.gcp.yml создаст список виртуальных машин GCP, готовых к настройке с помощью Ansible.

Создание виртуальной машины

Полный набор модулей GCP предоставляет возможность создания широкого спектра ресурсов GCP с полной поддержкой всего API GCP.

Следующий playbook создаёт виртуальную машину GCE. Эта виртуальная машина опирается на GCP-сеть и диск. Создавая диск и сеть отдельно, мы можем указать все необходимые детали о том, как мы хотим отформатировать диск и сеть. Зарегистрировав диск/сеть в переменной, мы можем просто вставить переменную в задачу создания виртуальной машины. Модуль gcp_compute_instance рассчитает остальное.

- name: Create an instance
  hosts: localhost
  gather_facts: no
  vars:
      gcp_project: my-project
      gcp_cred_kind: serviceaccount
      gcp_cred_file: /home/my_account.json
      zone: "us-central1-a"
      region: "us-central1"

  tasks:
   - name: create a disk
     gcp_compute_disk:
         name: 'disk-instance'
         size_gb: 50
         source_image: 'projects/ubuntu-os-cloud/global/images/family/ubuntu-1604-lts'
         zone: "{{ zone }}"
         project: "{{ gcp_project }}"
         auth_kind: "{{ gcp_cred_kind }}"
         service_account_file: "{{ gcp_cred_file }}"
         scopes:
           - https://www.googleapis.com/auth/compute
         state: present
     register: disk
   - name: create a network
     gcp_compute_network:
         name: 'network-instance'
         project: "{{ gcp_project }}"
         auth_kind: "{{ gcp_cred_kind }}"
         service_account_file: "{{ gcp_cred_file }}"
         scopes:
           - https://www.googleapis.com/auth/compute
         state: present
     register: network
   - name: create a address
     gcp_compute_address:
         name: 'address-instance'
         region: "{{ region }}"
         project: "{{ gcp_project }}"
         auth_kind: "{{ gcp_cred_kind }}"
         service_account_file: "{{ gcp_cred_file }}"
         scopes:
           - https://www.googleapis.com/auth/compute
         state: present
     register: address
   - name: create a instance
     gcp_compute_instance:
         state: present
         name: test-vm
         machine_type: n1-standard-1
         disks:
           - auto_delete: true
             boot: true
             source: "{{ disk }}"
         network_interfaces:
             - network: "{{ network }}"
               access_configs:
                 - name: 'External NAT'
                   nat_ip: "{{ address }}"
                   type: 'ONE_TO_ONE_NAT'
         zone: "{{ zone }}"
         project: "{{ gcp_project }}"
         auth_kind: "{{ gcp_cred_kind }}"
         service_account_file: "{{ gcp_cred_file }}"
         scopes:
           - https://www.googleapis.com/auth/compute
     register: instance

    - name: Wait for SSH to come up
      wait_for: host={{ address.address }} port=22 delay=10 timeout=60

    - name: Add host to groupname
      add_host: hostname={{ address.address }} groupname=new_instances


- name: Manage new instances
  hosts: new_instances
  connection: ssh
  sudo: True
  roles:
    - base_configuration
    - production_server

Обратите внимание, что использование модуля «add_host» выше создаёт временную группу в оперативной памяти. Это означает, что игра в том же playbook может затем управлять машинами в группе «new_instances», если это необходимо. В этот момент возможна любая произвольная конфигурация.

Дополнительную информацию о Google Cloud можно найти на веб-сайте Google Cloud.

Руководства по миграции

gce.py -> gcp_compute_instance.py

Начиная с Ansible 2.8, мы рекомендуем всем перейти с модуля gce на модуль gcp_compute_instance. Модуль gcp_compute_instance имеет лучшую поддержку всех функций GCP, меньше зависимостей, большую гибкость и лучше поддерживает системы аутентификации GCP.

Модуль gcp_compute_instance поддерживает все функции модуля gce (и многое другое!). Ниже приведена таблица соответствия полей gce к полям gcp_compute_instance.

gce.py gcp_compute_instance.py Примечания
state state/status Состояние в gce имеет несколько значений: «present», «absent», «stopped», «started», «terminated». Состояние в gcp_compute_instance используется для описания существования виртуальной машины (present) или ее отсутствия (absent). Статус используется для описания состояния виртуальной машины «started», «stopped» или «terminated».
image disks[].initialize_params.source_image Вам необходимо создать один диск, используя параметр disks[], и установить его в качестве загрузочного диска (disks[].boot = true)
image_family disks[].initialize_params.source_image См. выше.
external_projects disks[].initialize_params.source_image Имя source_image будет включать имя проекта.
instance_names Используйте цикл или несколько задач. Использование циклов — более ориентированный на Ansible способ создания нескольких виртуальных машин и предоставляет максимальную гибкость.
service_account_email service_accounts[].email Это электронный адрес учётной записи сервиса, который вы хотите связать с виртуальной машиной. Это не электронный адрес учётной записи сервиса, который используется для учётных данных, необходимых для создания виртуальной машины.
service_account_permissions service_accounts[].scopes Это разрешения, которые вы хотите предоставить виртуальной машине.
pem_file Не поддерживается. Мы рекомендуем использовать JSON-учётные данные учётной записи сервиса вместо файлов PEM.
credentials_file service_account_file
project_id project
name name Это поле не принимает массив имён. Используйте цикл для создания нескольких виртуальных машин.
num_instances Используйте цикл Для максимальной гибкости мы рекомендуем пользователям использовать функции Ansible для создания нескольких виртуальных машин, а не доверять модулю эту задачу.
network network_interfaces[].network
subnetwork network_interfaces[].subnetwork
persistent_boot_disk disks[].type = ‘PERSISTENT’
disks disks[]
ip_forward can_ip_forward
external_ip network_interfaces[].access_configs.nat_ip Это поле принимает несколько типов значений. Вы можете создать IP-адрес с gcp_compute_address и разместить здесь имя/выходной результат адреса. Вы также можете поместить строковое значение имени IP-адреса GCP или фактический IP-адрес.
disks_auto_delete disks[].auto_delete
preemptible scheduling.preemptible
disk_size disks[].initialize_params.disk_size_gb

Пример playbook представлен ниже:

gcp_compute_instance:
    name: "{{ item }}"
    machine_type: n1-standard-1
    ... # any other settings
    zone: us-central1-a
    project: "my-project"
    auth_kind: "service_account_file"
    service_account_file: "~/my_account.json"
    state: present
with_items:
  - instance-1
  - instance-2

© 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_gce.html

Spec-Zone.ru

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