![]()
Info
Hashicorp Packer
Packer is a tool that lets you create identical machine images for multiple platforms from a single source template. Packer can create golden images to use in image pipelines.
General
Repositories
- Packer: The official repository
- Packer Integration: A curated collection of official, partner, and community Packer Integrations.
Articles
- AWS - Building Amazon Machine Images (AMIs) for EC2 Mac instances with Packer
- Youtube - HashiCorp Packer Tutorial: Building Custom Images for AWS, Azure, and Docker
- DevOpsCube - Packer Tutorial For Beginners - Automate AMI Creation
OS Provisioning Collections
Info
The collections about provisioning script to build virtual machine in Cloud environment, e.g: Azure, AWS by Packer
Azure
Windows Server 2019
The packer script which provide and implementation the windows server in Azure Cloud, access via winrm and self configuration for powershell script
More information about Packer:
You can took the script to put on provisioner in Build Azure Agent with .NET Core by Powershell
packer {
required_plugins {
azure = {
source = "github.com/hashicorp/azure"
version = "~> 1"
}
}
}
variable "os_type" {
type = string
description = "Type of VM to be used for Provisioning Image"
default = "Windows"
}
variable "image_publisher" {
type = string
description = "Which Image Publisher to use for provisioning Image"
default = "MicrosoftWindowsServer"
}
variable "image_offer" {
type = string
description = "Which Image Offer to use for Provisioning Image"
default = "WindowsServer"
}
variable "image_sku" {
type = string
description = "Which Image SKU to use for provisioning Image"
default = "2019-Datacenter"
}
variable "image_version" {
type = string
description = "Which Image Version to use for provisioning Image"
default = "latest"
}
variable "managed_image_name" {
type = string
description = "Name of the image"
}
variable "managed_image_resource_group_name" {
type = string
description = "Resource Group Which stores the image"
}
variable "location" {
type = string
description = "Location of the image"
}
variable "vm_size" {
type = string
description = "Size of the VM using for provisioning Image"
default = "Standard_B2ms"
}
variable "azure_tags" {
type = map(string)
description = "Tags of image"
default = {
managed = "packer"
environment = "dev"
}
}
variable "communicator" {
type = string
description = "Which Communication Type to use for connection into VM"
default = "winrm"
}
variable "winrm_configuration" {
type = object({
winrm_insecure = bool
winrm_timeout = string
winrm_use_ssl = bool
winrm_username = string
})
description = "Configuration for winrm to use"
default = {
winrm_insecure = true
winrm_timeout = "5m"
winrm_use_ssl = true
winrm_username = "infrauser"
}
}
variable "url_org" {
type = string
description = "URL of organization where give access for pool"
sensitive = true
}
variable "auth_type" {
type = string
description = "authentication type for pool"
default = "pat"
}
variable "azure_pat" {
type = string
description = "Azure PAT"
sensitive = true
}
variable "pool_name" {
type = string
description = "Name of agent pool"
}
variable "workdir" {
type = string
description = "work directory for pool"
default = "C:\\agent\\"
}
variable "agent_name" {
type = string
description = "Name of agent"
}
locals {
script_content = "${templatefile("${abspath(path.root)}/data/setup-automation-agent.tpl", {
url = var.url_org,
auth = var.auth_type,
token = var.azure_pat,
pool = var.pool_name,
agent = var.agent_name,
workdir = var.workdir
})}"
}
source "azure-arm" "windows-machine" {
use_azure_cli_auth = true
os_type = var.os_type
image_publisher = var.image_publisher
image_offer = var.image_offer
image_sku = var.image_sku
image_version = var.image_version
managed_image_name = var.managed_image_name
managed_image_resource_group_name = var.managed_image_resource_group_name
location = var.location
vm_size = var.vm_size
azure_tags = var.azure_tags
communicator = var.communicator
winrm_insecure = var.winrm_configuration.winrm_insecure
winrm_timeout = var.winrm_configuration.winrm_timeout
winrm_use_ssl = var.winrm_configuration.winrm_use_ssl
winrm_username = var.winrm_configuration.winrm_username
}
build {
sources = ["sources.azure-arm.windows-machine"]
provisioner "powershell" {
inline = [local.script_content]
}
}
```)
# Provisioning Collections
## Windows Server 2019
*The packer script which provide and implementation the windows server in Azure Cloud, access via `winrm` and self configuration for `powershell` script*
More information about Packer:
- [Azure Provider Packer](https://developer.hashicorp.com/packer/integrations/hashicorp/azure)
- [DevOps Training Session 12: Cloud - Packer](https://hackmd.io/0kn1HkeETeSsFOdMdGODhQ)
- [Azure DevOps Agents Provisioning](https://hackmd.io/@XeusNguyen/S1BrSRPW6#Window)
You can took the script to put on `provisioner` in [[Awesome Powershell scripts#build-azure-agent-with-net-core-by-powershell|Build Azure Agent with .NET Core by Powershell]]
```json
packer {
required_plugins {
azure = {
source = "github.com/hashicorp/azure"
version = "~> 1"
}
}
}
variable "os_type" {
type = string
description = "Type of VM to be used for Provisioning Image"
default = "Windows"
}
variable "image_publisher" {
type = string
description = "Which Image Publisher to use for provisioning Image"
default = "MicrosoftWindowsServer"
}
variable "image_offer" {
type = string
description = "Which Image Offer to use for Provisioning Image"
default = "WindowsServer"
}
variable "image_sku" {
type = string
description = "Which Image SKU to use for provisioning Image"
default = "2019-Datacenter"
}
variable "image_version" {
type = string
description = "Which Image Version to use for provisioning Image"
default = "latest"
}
variable "managed_image_name" {
type = string
description = "Name of the image"
}
variable "managed_image_resource_group_name" {
type = string
description = "Resource Group Which stores the image"
}
variable "location" {
type = string
description = "Location of the image"
}
variable "vm_size" {
type = string
description = "Size of the VM using for provisioning Image"
default = "Standard_B2ms"
}
variable "azure_tags" {
type = map(string)
description = "Tags of image"
default = {
managed = "packer"
environment = "dev"
}
}
variable "communicator" {
type = string
description = "Which Communication Type to use for connection into VM"
default = "winrm"
}
variable "winrm_configuration" {
type = object({
winrm_insecure = bool
winrm_timeout = string
winrm_use_ssl = bool
winrm_username = string
})
description = "Configuration for winrm to use"
default = {
winrm_insecure = true
winrm_timeout = "5m"
winrm_use_ssl = true
winrm_username = "infrauser"
}
}
variable "url_org" {
type = string
description = "URL of organization where give access for pool"
sensitive = true
}
variable "auth_type" {
type = string
description = "authentication type for pool"
default = "pat"
}
variable "azure_pat" {
type = string
description = "Azure PAT"
sensitive = true
}
variable "pool_name" {
type = string
description = "Name of agent pool"
}
variable "workdir" {
type = string
description = "work directory for pool"
default = "C:\\agent\\"
}
variable "agent_name" {
type = string
description = "Name of agent"
}
locals {
script_content = "${templatefile("${abspath(path.root)}/data/setup-automation-agent.tpl", {
url = var.url_org,
auth = var.auth_type,
token = var.azure_pat,
pool = var.pool_name,
agent = var.agent_name,
workdir = var.workdir
})}"
}
source "azure-arm" "windows-machine" {
use_azure_cli_auth = true
os_type = var.os_type
image_publisher = var.image_publisher
image_offer = var.image_offer
image_sku = var.image_sku
image_version = var.image_version
managed_image_name = var.managed_image_name
managed_image_resource_group_name = var.managed_image_resource_group_name
location = var.location
vm_size = var.vm_size
azure_tags = var.azure_tags
communicator = var.communicator
winrm_insecure = var.winrm_configuration.winrm_insecure
winrm_timeout = var.winrm_configuration.winrm_timeout
winrm_use_ssl = var.winrm_configuration.winrm_use_ssl
winrm_username = var.winrm_configuration.winrm_username
}
build {
sources = ["sources.azure-arm.windows-machine"]
provisioner "powershell" {
inline = [local.script_content]
}
}