Руководство по 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:
После получения учетных данных есть два способа предоставить их 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