Spec-Zone.ru › Ansible 2.6

Руководство по 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 может обнаруживать все виртуальные машины 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, какие узлы можно управлять.

Чтобы использовать плагин инвентаризации gcp_compute, создайте файл с расширением .gcp.yml в корневой директории. Сценарий инвентаризации gcp_compute принимает те же данные об аутентификации, что и любой модуль.

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

plugin: gcp_compute
projects:
  - google.com: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.6/scenario_guides/guide_gce.html

Spec-Zone.ru

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