Платформа vRealize Automation позволяет не только организовать работу облака, но и работать с ним, описывая инфраструктуру как код (Incfastructure as Code – IaC). Одним из самых распространённых инструментов, реализующих данную модель и уже интегрированным с vRA, является Terraform. Начинаем разбираться в совместной работе Terraform и vRA 8.
Если у нас быстрый старт, то сразу рабочий пример конфигурационного файла Terraform для создания сервера на vRA 8 (на основе опубликованного в каталоге шаблона):
# main.tf
provider "vra" {
url = var.url
refresh_token = var.refresh_token
insecure = var.insecure
}
data "vra_project" "this" {
name = var.project_name
}
data "vra_catalog_item" "this" {
name = var.catalog_item_name
expand_versions = true
}
resource "vra_deployment" "this" {
name = var.deployment_name
description = var.description
catalog_item_id = data.vra_catalog_item.this.id
catalog_item_version = var.catalog_item_version
project_id = data.vra_project.this.id
inputs = {
vmSize = var.flavor
imageName = var.image
}
timeouts {
create = "60m"
delete = "20m"
}
}
Для правильного заполнения всех полей в inputs запросите информацию о названиях полей и их значениях у администратора. Можете получить полное описание полей и самостоятельно – через REST API запрос к vRA: https://<vRA-HOSTNAME>/catalog/api/items/{catalog_item_id}.
Для работы требуется провайдер vra, он будет установлен при выполнении terraform init (вручную можно скачать по ссылке https://releases.hashicorp.com/terraform-provider-vra/)
# variables.tf
variable "url" {}
variable "refresh_token" {}
variable "insecure" {}
variable "project_name" {}
variable "catalog_item_name" {}
variable "catalog_item_version" {}
variable "deployment_name" {}
variable "flavor" {}
variable "image" {}
variable "description" {}
# terraform.tfvars
refresh_token = "ys34567...LnfxhN"
url = "https://vra8.zabedu.ru"
insecure = "true"
project_name = "Project_AS"
catalog_item_name = "Get new VM"
catalog_item_version = "2.4"
deployment_name = "Terraform test"
flavor = "medium"
image = "CentOS_7"
description = "Test deployment (terraform)"
Перед началом работы с vRA необходимо получить refresh-token, он действителен 90 дней. Токен возвращается POST запросом: https://<vRA-HOSTNAME>/csp/gateway/am/api/login?access_token. Параметры запроса и примеры получения токена найдёте в документации: https://code.vmware.com/docs/12597/GUID-AC1E4407-6139-412A-B4AA-1F102942EA94.html.
Готовый скрипт получения refresh-токена (для самых ленивых, python3):
# get_refresh_token.py
import requests
import json
from getpass import getpass
username = input("vRA user: ")
password = getpass()
body = {
"username": username,
"password": password
}
json_data = json.dumps(body)
vra_url = "https://vra8.zabedu.ru/csp/gateway/am/api/login?access_token"
headers = {'Content-type': 'application/json'}
response = requests.post(vra_url, verify = False, data = json_data, headers=headers)
response_json = response.json()
file_name = "refresh_token.txt"
f = open(file_name, "w")
f.write(response_json["refresh_token"])
f.close
Формы запросов на портале vRA часто содержат дополнительные проверки вводимых данных. Используя программные вызовы, Вы самостоятельно контролируете корректность всех передаваемых значений. Не забывайте что:
- Имена деплойментов vRA 8 не могут дублироваться;
- Имена виртуальных машин должны быть уникальными и соответствовать Вашим внутренним стандартам и согласованному с администраторами формату;
- Набор полей шаблона может быть изменён администраторами vRealize Automation (особенно на начальных этапах внедрения vRA);
- Передача неправильных данных может привести к различным ошибкам как при развёртывании деплоймента, так и в процессе его работы.
Все конфигурационные файлы и код из данной статьи доступны для загрузки на https://github.com/isas2.