terraform: Azure Marketplace image support (#2651)

* terraform: add Azure marketplace variable

Signed-off-by: Moritz Sanft <58110325+msanft@users.noreply.github.com>

* config: add Azure marketplace variable

Signed-off-by: Moritz Sanft <58110325+msanft@users.noreply.github.com>

* cli: use Terraform variables from config

Signed-off-by: Moritz Sanft <58110325+msanft@users.noreply.github.com>

* terraform: pass down marketplace variable

* image: pad Azure images to 1GiB

* terraform: add version attribute to marketplace image

* semver: allow versions to be exported without prefix

* cli: boolean var to use marketplace images

* config: remove dive key

* dev-docs: add instructions on how to use marketplace images

* terraform: fix unit test

* terraform: only fetch image for non-marketplace images

* mpimage: refactor image selection

Signed-off-by: Moritz Sanft <58110325+msanft@users.noreply.github.com>

* [remove] increase minor version for image build

Signed-off-by: Moritz Sanft <58110325+msanft@users.noreply.github.com>

* terraform: ignore changes to source_image_reference on upgrade

* operator: add support for parsing Azure marketplace images

Signed-off-by: Moritz Sanft <58110325+msanft@users.noreply.github.com>

* upgrade: fix imagefetcher call

* docs: add info about azure marketplace

* image: ensure more than 1GiB in size

* image: test to pad to 2GiB

* version: change back to v2.14.0-pre

* image: GPT-conformant image size padding

* [remove] increase version

* mpimage: inline prefix func

Signed-off-by: Moritz Sanft <58110325+msanft@users.noreply.github.com>

* ci: add marketplace image e2e test

Signed-off-by: Moritz Sanft <58110325+msanft@users.noreply.github.com>

* [remove] register workflow

* ci: fix workflow name

* ci: only allow azure test

* cli: add marketplace image input to interface

* cli: fix argument passing

* version: roll back to v2.14.0

* ci: add force-flag support

* Update docs/docs/overview/license.md

* Update dev-docs/workflows/marketplace-images.md

Co-authored-by: Moritz Eckert <m1gh7ym0@gmail.com>

---------

Signed-off-by: Moritz Sanft <58110325+msanft@users.noreply.github.com>
Co-authored-by: Moritz Eckert <m1gh7ym0@gmail.com>
Co-authored-by: Thomas Tendyck <51411342+thomasten@users.noreply.github.com>
This commit is contained in:
Moritz Sanft 2023-12-08 14:40:31 +01:00 committed by GitHub
parent e113253262
commit c15e4efef6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
40 changed files with 607 additions and 34 deletions

View file

@ -46,9 +46,10 @@ resource "azurerm_linux_virtual_machine_scale_set" "scale_set" {
disable_password_authentication = false
upgrade_mode = "Manual"
secure_boot_enabled = var.secure_boot
source_image_id = var.image_id
tags = local.tags
zones = var.zones
# specify the image id only if a non-marketplace image is used
source_image_id = var.marketplace_image != null ? null : var.image_id
tags = local.tags
zones = var.zones
identity {
type = "UserAssigned"
identity_ids = [var.user_assigned_identity]
@ -72,6 +73,26 @@ resource "azurerm_linux_virtual_machine_scale_set" "scale_set" {
}
}
# Specify marketplace plan and image if set
dynamic "plan" {
for_each = var.marketplace_image != null ? [1] : [] # if a marketplace image is set
content {
name = var.marketplace_image.name
publisher = var.marketplace_image.publisher
product = var.marketplace_image.product
}
}
dynamic "source_image_reference" {
for_each = var.marketplace_image != null ? [1] : [] # if a marketplace image is set
content {
publisher = var.marketplace_image.publisher
offer = var.marketplace_image.product
sku = var.marketplace_image.name
version = var.marketplace_image.version
}
}
data_disk {
storage_account_type = var.state_disk_type
disk_size_gb = var.state_disk_size
@ -94,9 +115,10 @@ resource "azurerm_linux_virtual_machine_scale_set" "scale_set" {
lifecycle {
ignore_changes = [
name, # required. Allow legacy scale sets to keep their old names
instances, # required. autoscaling modifies the instance count externally
source_image_id, # required. update procedure modifies the image id externally
name, # required. Allow legacy scale sets to keep their old names
instances, # required. autoscaling modifies the instance count externally
source_image_id, # required. update procedure modifies the image id externally
source_image_reference, # required. update procedure modifies the image reference externally
]
}
}

View file

@ -96,3 +96,14 @@ variable "secure_boot" {
default = false
description = "Whether to deploy the cluster nodes with secure boot."
}
variable "marketplace_image" {
type = object({
name = string
publisher = string
product = string
version = string
})
default = null
description = "Marketplace image to use for the cluster nodes."
}