Spec-Zone.ru › Ansible 2.10

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

Введение

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

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

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

Кроме того, плагин инвентаризации gcp_compute может обнаруживать все виртуальные машины Google Compute Engine (GCE) и автоматически добавлять их в вашу инвентаризацию Ansible.

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

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

Требования

Модули 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.

Следующий плейбук создаёт виртуальную машину 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 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: null # use default
               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
  become: True
  roles:
    - base_configuration
    - production_server

Обратите внимание, что использование модуля «add_host» выше создаёт временную группу в памяти. Это означает, что плей в том же плейбуке может затем управлять машинами в группе «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

Пример плейбука приведён ниже:

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
loop:
  - 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.10/scenario_guides/guide_gce.html

Spec-Zone.ru

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