67 lines
2.3 KiB
YAML
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 }}"
|