Files

67 lines
2.3 KiB
YAML

apiVersion: quai.dev/v1beta1
kind: Blueprint
metadata:
name: linux-vm
title: Linux virtual machine
description: A VM in the Terraform repository, sized from t-shirt sizes. The vRA classic, now a pull request.
icon: server
category: Compute
version: 2.0.0
owners: [team:platform]
tags: [terraform, vm]
spec:
inputs:
type: object
required: [environment, name, os, size]
additionalProperties: false
properties:
environment: { type: string, title: Environment, enum: [dev, test, prod], default: dev }
name: { type: string, title: VM name, pattern: "^[a-z][a-z0-9-]{1,30}$" }
os:
type: string
title: Operating system
enum: [ubuntu-24.04, rhel-9]
default: ubuntu-24.04
size:
type: string
title: Size
description: small = 2 vCPU / 4 GB, medium = 4 / 16, large = 16 / 64
enum: [small, medium, large]
default: small
diskGb: { type: integer, title: System disk (GB), minimum: 20, maximum: 2048, default: 50 }
vlan: { type: integer, title: VLAN, enum: [110, 120, 130], default: 110 }
ui:
order: [environment, name, os, size, diskGb, vlan]
fields:
os: { immutable: true }
resources:
- id: vm
type: { name: vm } # a type in this repository
params:
env: ${{ inputs.environment }}
name: ${{ inputs.name }}
values:
template: ${{ inputs.os }}
cpu: "${{ inputs.size == 'small' ? 2 : inputs.size == 'medium' ? 4 : 16 }}"
memory_gb: "${{ inputs.size == 'small' ? 4 : inputs.size == 'medium' ? 16 : 64 }}"
disks: [{ size_gb: "${{ inputs.diskGb }}", tier: standard }]
network: { vlan: "${{ inputs.vlan }}" }
backup: ${{ inputs.environment == 'prod' }}
approval:
rules:
- name: large-vm-cost
when: inputs.size == 'large'
approvers: [group:finops]
actions:
- name: resize
title: Resize
icon: maximize
description: Change the VM size. The VM restarts to apply it.
inputs:
- { name: size, title: New size, type: enum, options: [small, medium, large], required: true }
apply:
vm:
values:
cpu: "${{ action.size == 'small' ? 2 : action.size == 'medium' ? 4 : 16 }}"
memory_gb: "${{ action.size == 'small' ? 4 : action.size == 'medium' ? 16 : 64 }}"