Pular para o conteúdo principal

Exemplo Azure

Nesse exemplo vamos utilizar o ansible para configurar para configurar um centos na azure.

O projeto se encontra em azure-ansible

  • Hardening usando uma collection pronta
  • Update do sistema operacional
  • Resolv.conf
  • MOTD
  • Instalação do docker
  • NTP

A proposta é não utilizar scripts, somente playbooks do ansible. Não vou explicar playbooks do ansible, mas como podemos utilizar.

Existe o plugin do ansible, mas no caso deste projeto vamos copiar os playbooks para dentro da vm do source e rodar os playbooks de dentro da máquina para configurá-la, por isso o uso de localhost.

Para que o playbook execute é necessário ter o ansible instalado e as collections necessárias. Por isso foi separado um provisioner shell para primeiro deixar tudo preparado para depois somente executar o playbook.

Source Azure

No caso do source para a azure é necessário atentar-se a alguns detalhes

uma vez que use_azure_cli_auth = true, previamente você precisa executar o comando az login. Isso irá facilitar não ter que passar os seguintes parâmetros que deixei comentado caso necessário.

  • client_id = var.client_id
  • client_secret = var.client_secret
  • tenant_id = var.tenant_id
  • subscription_id = var.subscription_id

Observe que para esses parâmetros preferi pegar eles de variáveis e estas usam valores exportados anteriormente. Isso já ajudará no caso de pipelines.

exemplo:

variable "client_secret" {
description = "AZURE Client Secret"
type = string
default = env("AZURE_CLIENT_SECRET")
}

Nesse caso seria necessário exportar.

export ARM_CLIENT_ID=xxxxx-xxxx-xxxx-xxx-xxx
export ARM_CLIENT_SECRET=xxxxx-xxxx-xxxx-xxx-xxx
export ARM_SUBSCRIPTION_ID=xxxxx-xxxx-xxxx-xxx-xxx
export ARM_TENANT_ID=xxxxx-xxxx-xxxx-xxx-xxx

As clouds nomeiam as regiões e vms de forma diferente. Por isso criei um map para ambos e somente passamos 1 valor e automaticamente ele já irá buscar o nome correto. Fica a dica. Isso é muito bom para vários sources ao mesmo tempo.

Um outro detalhe é que escolhi uma imagem que não é community, ou seja, free, logo é necessário passar o plan também.

source "azure-arm" "azure" {

# client_id = var.client_id
# client_secret = var.client_secret
# tenant_id = var.tenant_id
# subscription_id = var.subscription_id

use_azure_cli_auth = true

plan_info {
plan_publisher = var.image_publisher
plan_product = var.image_offer
plan_name = var.image_sku
}

os_type = "Linux"
image_publisher = var.image_publisher
image_offer = var.image_offer
image_sku = var.image_sku

managed_image_resource_group_name = "packer"
managed_image_name = local.full_image_name

azure_tags = var.vm_tags

# Veja os maps em locals e conditions nas variáveis.

location = local.map_regions[var.region]["azure"]
vm_size = var.instance_sizes["azure"]
}

Rodando o projeto

packer init . --upgrade
packer build "./vars/centos7.pkr.hcl" .