stackql-deploy 2.0.9

Infrastructure-as-code framework for declarative cloud resource management using StackQL
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::v26.07.00420
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