version: 1
name: "azure-web-server"
description: Provisions an Azure networking stack (resource group, VNet, subnet, NSG, public IP, NIC) with an Ubuntu VM running a web server.
providers:
- azure::v24.10.00267
globals:
- name: subscription_id
description: azure subscription id
value: "{{ AZURE_SUBSCRIPTION_ID }}"
- name: location
description: default location for resources
value: eastus2
- name: admin_password
description: vm admin password
value: "{{ AZURE_VM_ADMIN_PASSWORD }}"
- name: global_tags
value:
provisioner: stackql
stackName: "{{ stack_name }}"
stackEnv: "{{ stack_env }}"
resources:
- name: example_resource_group
props:
- name: resource_group_name
value: "{{ stack_name }}-{{ stack_env }}-rg"
exports:
- resource_group_name
- name: example_vnet
props:
- name: vnet_name
value: "{{ stack_name }}-{{ stack_env }}-vnet"
- name: vnet_cidr_block
values:
prd:
value: "10.0.0.0/16"
sit:
value: "10.1.0.0/16"
dev:
value: "10.2.0.0/16"
exports:
- vnet_name
- vnet_cidr_block
- name: example_subnet
props:
- name: subnet_name
value: "{{ stack_name }}-{{ stack_env }}-subnet-1"
- name: subnet_cidr
values:
prd:
value: "10.0.1.0/24"
sit:
value: "10.1.1.0/24"
dev:
value: "10.2.1.0/24"
exports:
- subnet_name
- subnet_id
- name: example_public_ip
props:
- name: public_ip_name
value: "{{ stack_name }}-{{ stack_env }}-public-ip"
exports:
- public_ip_name
- public_ip_id
- public_ip_address
- name: example_nsg
props:
- name: nsg_name
value: "{{ stack_name }}-{{ stack_env }}-nsg"
- name: security_rules
value:
- name: AllowHTTP
properties:
access: Allow
protocol: Tcp
direction: Inbound
priority: 100
sourceAddressPrefix: "*"
sourcePortRange: "*"
destinationAddressPrefix: "*"
destinationPortRange: "8080"
- name: AllowSSH
properties:
access: Allow
protocol: Tcp
direction: Inbound
priority: 200
sourceAddressPrefix: "{{ vnet_cidr_block }}"
sourcePortRange: "*"
destinationAddressPrefix: "*"
destinationPortRange: "22"
exports:
- network_security_group_id
- name: example_nic
props:
- name: nic_name
value: "{{ stack_name }}-{{ stack_env }}-nic"
- name: nic_ip_config
value:
name: ipconfig1
properties:
subnet:
id: "{{ subnet_id }}"
privateIPAllocationMethod: Dynamic
publicIPAddress:
id: "{{ public_ip_id }}"
exports:
- network_interface_id
- name: example_web_server
props:
- name: vm_name
value: "{{ stack_name }}-{{ stack_env }}-vm"
- name: hardwareProfile
value:
vmSize: Standard_F1als_v7
- name: storageProfile
value:
imageReference:
publisher: Canonical
offer: ubuntu-24_04-lts
sku: server
version: latest
osDisk:
name: "{{ stack_name }}-{{ stack_env }}-vm-disk1"
createOption: FromImage
managedDisk:
storageAccountType: Standard_LRS
diskSizeGB: 30
- name: osProfile
value:
computerName: myVM-{{ stack_name }}-{{ stack_env }}
adminUsername: azureuser
adminPassword: "{{ admin_password}}"
linuxConfiguration:
disablePasswordAuthentication: false
- name: networkProfile
value:
networkInterfaces:
- id: "{{ network_interface_id }}"
exports:
- vm_name
- vm_id
- name: example_vm_ext
props:
- name: vm_ext_name
value: "{{ stack_name }}-{{ stack_env }}-microsoft.custom-script-linux"
- name: command_to_execute
value: "wget -O index.html https://raw.githubusercontent.com/stackql/stackql-deploy/main/examples/azure/azure-stack/resources/hello-stackql.html && nohup busybox httpd -f -p 8080 &"
exports:
- web_url