Spec-Zone.ru › Ansible 2.11

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

Spec-Zone.ru

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