Spec-Zone.ru › Ansible 2.7

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

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

Создать учётную запись 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
  connection: local
  gather_facts: no

  vars:
    service_account_file: /home/my_account.json
    project: my-project
    auth_kind: serviceaccount
    scopes:
      - 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
filters:
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
  connection: local
  vars:
      project: my-project
      auth_kind: serviceaccount
      service_account_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={{ instance.address }} port=22 delay=10 timeout=60

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


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

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

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

© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.7/scenario_guides/guide_gce.html

Spec-Zone.ru

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