devops
reliable
research
Hello btb again with Xeus-Cooking with DevOps
HCL-verion.
variable "os_type" {
type = string
default = "Linux"
}
variable "publisher" {
type = string
default = "Canonical"
}
variable "offer" {
type = string
default = "UbuntuServer"
}
variable "sku" {
type = string
default = "18.04-LTS"
}
variable "version" {
type = string
default = "latest"
}
variable "render_image_name" {
type = string
}
variable "resource_group_name" {
type = string
}
variable "build_resource_group_name" {
type = string
}
variable "location" {
type = string
default = "southeastasia"
}
variable "vm_size" {
type = string
default = "Standard_B1s"
}
variable "tags" {
type = map(string)
default = {
managed = "packer"
environment = "dev"
}
}
variable "communicator" {
type = string
default = "ssh"
}
source "azure-arm" "linux-docker" {
use_azure_cli_auth = true
os_type = var.os_type
image_publisher = var.publisher
image_offer = var.offer
image_sku = var.sku
image_version = var.version
managed_image_name = var.render_image_name
managed_image_resource_group_name = var.resource_group_name
build_resource_group_name = var.build_resource_group_name
vm_size = var.vm_size
azure_tags = var.tags
communicator = var.communicator
}
build {
sources = ["source.azure-arm.linux-docker"]
provisioner "shell" {
scripts = ["${abspath(path.root)}/script/setup-az.sh", "${abspath(path.root)}/script/setup-docker.sh"]
}
}
{
"variables": {
"name": "linux-docker",
"managed_image_resource_group_name": "",
"managed_image_name": "linux-docker",
"client_id":"",
"subscription_id":"",
"os_type": "Linux",
"image_publisher": "Canonical",
"image_offer": "UbuntuServer",
"image_sku": "18.04-LTS",
"communicator": "ssh",
"managed_by": "packer",
"environment": "",
"location": "southeastasia",
"vm_size": "Standard_B1s"
},
"builders": [{
"name": "{{user `name`}}",
"type": "azure-arm",
"use_azure_cli_auth": true,
"managed_image_resource_group_name": "{{user `managed_image_resource_group_name`}}",
"managed_image_name": "{{user `managed_image_name`}}",
"os_type": "{{user `os_type`}}",
"image_publisher": "{{user `image_publisher`}}",
"image_offer": "{{user `image_offer`}}",
"image_sku": "{{user `image_sku`}}",
"communicator": "{{user `communicator`}}",
"azure_tags": {
"managed_by": "{{user `managed_by`}}",
"environment": "{{user `environment`}}"
},
"location": "{{user `location`}}",
"vm_size": "{{user `vm_size`}}"
}
],
"provisioners": [{
"type": "shell",
"scripts": [
"{{template_dir}}/script/setup-az.sh",
"{{template_dir}}/script/setup-docker.sh"
]
}]
}
init-validate-build
and it complete with your image to deploy on cloud## packer-pipelines.yaml
trigger: none
pool:
name: linuxAgent
stages:
- stage: setup_packer_and_identity_for_packer
jobs:
- job: install_packer
steps:
- task: CmdLine@2
displayName: Install
inputs:
script: |
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
sudo apt-get update && sudo apt-get install packer
- job: authentication_packer
steps:
- task: CmdLine@2
displayName: Authenticate
inputs:
script: |
az login --identity
- stage: validate_for_packer
dependsOn: [setup_packer_and_identity_for_packer]
condition: succeeded('setup_packer_and_identity_for_packer')
jobs:
- job: validate_for_packer
steps:
- task: CmdLine@2
displayName: Validate
inputs:
workingDirectory: "packer/"
script: |
packer init linux-docker.pkr.hcl
packer validate linux-docker.pkr.hcl
env:
PKR_VAR_render_image_name: $(renderImageName)
PKR_VAR_resource_group_name: $(resourceGroup)
PKR_VAR_build_resource_group_name: $(buildResourceGroupName)
- stage: build_for_packer
dependsOn: [validate_for_packer]
condition: succeeded('validate_for_packer')
jobs:
- job: build_for_packer
steps:
- task: CmdLine@2
displayName: Build
inputs:
workingDirectory: "packer/"
script: |
packer build -force linux-docker.pkr.hcl
env:
PKR_VAR_render_image_name: $(renderImageName)
PKR_VAR_resource_group_name: $(resourceGroup)
PKR_VAR_build_resource_group_name: $(buildResourceGroupName)
## data.tf
data "azurerm_image" "main" {
name = var.source_image_name
resource_group_name = var.resource_group_root_name
}
## variables.tf
variable "source_image_name" {
type = string
}
## vmss.tf
source_image_id = var.source_image_id
## /dev/main.tf
module "vmss" {
source = "../modules/vmss"
resource_group_name = azurerm_resource_group.main.name
resource_group_location = azurerm_resource_group.main.location
source_image_id = data.azurerm_image.main.id
ssh_public_key_name = data.azurerm_ssh_public_key.main.public_key
container_registry_name = data.azurerm_container_registry.main.name
user_identity_id = module.iam.user_identity_id
subnet_id = module.network.subnet_id
application_security_group_ids = module.network.application_security_group_ids
load_balancer_backend_address_pool_ids = module.balancer.load_balancer_backend_address_pool_ids
storage_account_name = module.storage.storage_account_name
storage_container_name = module.storage.storage_container_name
storage_blob_name = module.storage.storage_blob_name
environment = var.environment
tags = var.tags
depends_on = [
module.storage
]
}