Skip to content

Templating

A Deployment is built based on a DeploymentTemplate which includes one or more ResourceGroupTemplates. Templates are written in YAML.

Editor

VSCode

We provide schemas for template verification. They can be found here:

Template URL
DeploymentTemplate https://duneframework.com/tooling/schemas/deploymenttemplate.json
ResourceGroupTemplate https://duneframework.com/tooling/schemas/resourcegrouptemplate.json

In order to use the schemas for easier templating in VSCode, install redhat.vscode-yaml extension. Then open your settings file and add the following configuration:

{
  "yaml.schemas": {
      "https://duneframework.com/tooling/schemas/deploymenttemplate.json": ["*.dunedpt.yaml", "*.dunedpt.yml"],
      "https://duneframework.com/tooling/schemas/resourcegrouptemplate.json": ["*.dunergt.yaml", "*.dunergt.yml"]
  }
}

When the filename matches one of the above extensions, the file will automatically be verified against the schema.

Note

Generally speaking the template should verify against the schema. But it can be the case that the schema is not up-to-date or is misconfigured. In that case open an issue on our service desk.

Note

Currently there is only one schema per ResourceGroupTemplate and DeploymentTemplate. So schemaVersion property in template is ignored.

Deployment Template

DeploymentTemplates are based on one or more ResourceGroups and function as a container. Their parameters will be prompted to the user in Dune UI when creating a deployment. The parameter default values are prefilled in the prompt, but can be changed by the user.

Exact specifications can be found here.

ResourceGroup Template

ResourceGroupTemplates and their parameters are being called in the deployment templates. They are meant to be reused. It makes sense to keep them as flexible as possible. Parameters are best to contain default values and only be overriden by deployments if needed.

For example a ResourceGroupTemplate for a SQL server might contain a list of features to be installed and the collation used. Since most SQL server installations use the default collation it makes sense to have it defined as a parameter so in the future it can still be used by Deployments which need another collation.

Exact specifications can be found here.

Parameters

Parameters which are defined in DeploymentTemplates will require user input in the new Deployment wizard. Parameters are passed to the ResourceGroup using "{{parameter.foo}}" format. Quotes are needed if parameter is solely used. For example:

---
schemaVersion: 1
name: singlevm
displayName: Single VM
version: 0.1.0
description: Single VM with Firefox
parameters:
  - name: foo
    type: string
resourceGroups:
  - name: singlevm
    displayName: Single VM
    template: singlevm
    templateVersion: 0.1.0
    templateParameters:
      param: "{{parameter.foo}}"

The can also be used on multiple ResourceGroups. For example:

---
schemaVersion: 1
name: singlevm
displayName: Single VM
version: 0.1.0
description: Single VM with Firefox
parameters:
  - name: foo
    type: string
resourceGroups:
  - name: singlevm0
    displayName: Single VM
    template: singlevm
    templateVersion: 0.1.0
    templateParameters:
      param: "{{parameter.foo}}"
  - name: singlevm1
    displayName: Single VM
    template: singlevm
    templateVersion: 0.1.0
    templateParameters:
      param: "{{parameter.foo}}"

Parameters can also already be defined in the DeploymentTemplates. For example:

---
schemaVersion: 1
name: singlevm
displayName: Single VM
version: 0.1.0
description: Single VM with Firefox
resourceGroups:
  - name: singlevm
    displayName: Single VM
    template: singlevm
    templateVersion: 0.1.0
    templateParameters:
      param: bar

Variables

Variables can be overwritten on multiple levels and most of the variables have an impact on how the template is being deployed. For more information see here.

Resources

Currently its possible to create the following resources:

Name Specifications
ComputeNode Link
ServiceAccount Link
RbacResourceGroup Link

Examples

Single VM

Single VM with a single package installed.

Deployment Template:

---
schemaVersion: 1
name: singlevm
displayName: Single VM
version: 0.1.0
description: Single VM with Firefox
resourceGroups:
  - name: singlevm
    displayName: Single VM
    template: singlevm
    templateVersion: 0.1.0

ResourceGroup Template:

---
schemaVersion: 1
name: singlevm
displayName: Single VM
version: 0.1.0
description: Single VM
resources:
  - type: computeNode
    computeType: virtualMachine
    name: vmsingle
    image: win2022
    size: standard_d5s_v5
    domain: foo.intra
    config:
      - name: wf-install-package
        type: workflow
        variables:
          provider: chocolatey
          name:
          - firefox

Web Server

This time we add a parameter for both cpu and memory of the web server.

Deployment Template:

---
schemaVersion: 1
name: webserver
displayName: Web Server
version: 0.1.0
description: Web Server (nginx)
parameters:
  - name: cpu
    description: Web Server vCPU count
    type: number
  - name: memory
    description: "Web Server Memory Count in MB (default: 16GB)"
    type: string
    default: 16GB
resourceGroups:
  - name: webweb
    displayName: Web Server (nginx)
    template: web
    templateVersion: 0.1.0
    templateParameters:
      cpu: "{{parameters.cpu}}"
      memory: "{{parameters.memory}}"

ResourceGroup Template:

---
schemaVersion: 1
name: web
displayName: Web Server (nginx)
version: 0.1.0
description: Web Server (nginx)
parameters:
  - name: cpu
    type: number
  - name: memory
    type: number
resources:
  - type: computeNode
    computeType: virtualMachine
    name: vmweb
    image: win2022
    cpu: "{{parameters.cpu}}"
    memory: "{{parameters.memory}}"
    domain: foo.bar
    config:
      - name: wf-install-package
        type: workflow
        variables:
          provider: chocolatey
          name:
          - nginx

Application/DB Server

This time we create a serviceaccount which is used as the service user on the application service as well as a standardized sql server.

Deployment Template:

---
schemaVersion: 1
name: appdb
displayName: App & DB Server
version: 0.1.0
description: App & DB Server
parameters:
  - name: appCpu
    description: App vCPU Count
    type: number
  - name: appMemory
    description: App Memory Size in MB
    type: number
  - name: dbAlias
    type: string
    description: DB Server alias
  - name: dbCpu
    type: number
    description: Number of vCPUs
    default: 4
  - name: dbMemory
    type: number
    description: "Memory (default: 32gb)"
    default: 32
  - name: sqlVersion
    type: string
    description: SQL Version to be installed (e.g. sql17dev, sql19dev, sql22dev)
  - name: sqlFeatures
    type: string
    description: "MSSQL Feature (default: SQLENGINE,FULLTEXT,IS)"
    default: SQLENGINE,FULLTEXT,IS
  - name: sqlCollation
    type: string
    description: "SQL Collation (default: Latin1_General_CI_AS)"
    default: Latin1_General_CI_AS
  - name: userDbDiskSize
    type: string
    description: "Size of UserDB Disk (use size specifier e.g. GB, default: 100GB)"
    default: 100GB
  - name: userLogDiskSize
    type: string
    description: "Size of UserLog Disk (use size specifier e.g. GB, default: 10GB)"
    default: 10GB
  - name: tempDbDiskSize
    type: string
    description: "Size of TempDB Disk (use size specifier e.g. GB, default: 20GB)"
    default: 20GB
  - name: tempLogDiskSize
    type: string
    description: "Size of TempLog Disk (use size specifier e.g. GB, default: 10GB)"
    default: 10GB
resourceGroups:
  - name: app
    displayName: App Server
    template: app
    templateVersion: 0.1.0
    templateParameters:
      cpu: "{{parameters.appCpu}}"
      memory: "{{parameters.appMemory}}"
  - name: db
    displayName: DB Server
    template: genericsql
    templateVersion: 0.1.0
    templateParameters:
      alias: "{{parameters.dbAlias}}"
      cpu: "{{parameters.dbCpu}}"
      memory: "{{parameters.dbMemory}}"
      sqlVersion: "{{parameters.sqlVersion}}"
      sqlFeatures: "{{parameters.sqlFeatures}}"
      sqlCollation: "{{parameters.sqlCollation}}"
      userDbDiskSize: "{{parameters.userDbDiskSize}}"
      userLogDiskSize: "{{parameters.userLogDiskSize}}"
      tempDbDiskSize: "{{parameters.tempDbDiskSize}}"
      tempLogDiskSize: "{{parameters.tempLogDiskSize}}"

ResourceGroup Template (Application Server):

---
schemaVersion: 1
name: app
displayName: App Server (nginx)
version: 0.1.0
description: App Server (nginx)
parameters:
  - name: cpu
    type: number
  - name: memory
    type: number
resources:
  - type: computeNode
    computeType: virtualMachine
    name: vmapp
    image: win2022
    cpu: "{{parameters.cpu}}"
    memory: "{{parameters.memory}}"
    domain: foo.bar
    config:
      - name: wf-install-package
        type: workflow
        variables:
          provider: chocolatey
          name:
          - nginx
      - name: invoke-psscript
        variables:
          script: |
            sc.exe config "nginx" obj= "{{serviceaccount.svcapp.svcname}}" password= "{{serviceaccount.svcapp.svcpassword}}"
            Get-Service nginx | Restart-Service
  - type: serviceAccount
    name: svcapp
    svcName: "nginx-{{deployment.shortId}}"
    memberOf:
      - .serveradmins-{{computenode.vmapp}}

ResourceGroup Template (DB Server):

---
schemaVersion: 1
name: genericsql
displayName: Generic Sql DB Template
version: 0.1.0
description: 1 Windows Server w/ SQL installed
parameters:
- name: alias
  type: string
  description: DB Server alias
- name: cpu
  type: number
  description: Number of vCPUs
  default: 4
- name: memory
  type: number
  description: "Memory (default: 32gb)"
  default: 32
- name: sqlVersion
  type: string
  description: SQL Version to be installed (e.g. sql17dev, sql19dev, sql22dev)
- name: sqlFeatures
  type: string
  description: "MSSQL Feature (default: SQLENGINE,FULLTEXT,IS)"
  default: SQLENGINE,FULLTEXT,IS
- name: sqlCollation
  type: string
  description: "SQL Collation (default: Latin1_General_CI_AS)"
  default: Latin1_General_CI_AS
- name: userDbDiskSize
  type: string
  description: "Size of UserDB Disk (use size specifier e.g. GB, default: 100GB)"
  default: 100GB
- name: userLogDiskSize
  type: string
  description: "Size of UserLog Disk (use size specifier e.g. GB, default: 10GB)"
  default: 10GB
- name: tempDbDiskSize
  type: string
  description: "Size of TempDB Disk (use size specifier e.g. GB, default: 20GB)"
  default: 20GB
- name: tempLogDiskSize
  type: string
  description: "Size of TempLog Disk (use size specifier e.g. GB, default: 10GB)"
  default: 10GB
resources:
- type: computeNode
  computeType: virtualMachine
  name: vmdb
  displayName: DB Server
  alias: ["{{parameters.alias}}"]
  image: win2022
  cpu: "{{parameters.cpu}}"
  memory: "{{parameters.memory}}"
  domain: foo.bar
  disk:
  - size: 100GB
    volume:
      - mountpoint: D
        label: SQL_Bin
        fileSystem: NTFS
  - size: 10GB
    volume:
      - mountpoint: E
        label: SQL_Data
        fileSystem: NTFS
  - size: "{{parameters.userDbDiskSize}}"
    volume:
      - mountpoint: E:\User_DB
        label: User_DB
        fileSystem: NTFS
        blocksize: 65536
  - size: "{{parameters.userLogDiskSize}}"
    volume:
      - mountpoint: E:\User_Log
        label: User_Log
        fileSystem: NTFS
        blocksize: 65536
  - size: "{{parameters.tempDbDiskSize}}"
    volume:
      - mountpoint: E:\Temp_DB
        label: Temp_DB
        fileSystem: NTFS
        blocksize: 65536
  - size: "{{parameters.tempLogDiskSize}}"
    volume:
      - mountpoint: E:\Temp_Log
        label: Temp_Log
        fileSystem: NTFS
        blocksize: 65536
  config:
  - name: install-sql
    variables:
      mssql_version: "{{parameters.sqlVersion}}"
      mssql_collation: "{{parameters.sqlCollation}}"
      mssql_features: "{{parameters.sqlFeatures}}"
      mssql_sysadmin_accounts: ["foo.bar\\{{rbacresourcegroup.rbacsysadmin.groupname}}"]
      mssql_sqlsvc_account: "foo.bar\\{{serviceaccount.svcdb.svcname}}"
      mssql_sqlsvc_account_pass: "{{serviceaccount.svcdb.svcpassword}}"
  - name: install-package
    variables:
      provider: chocolatey
      name: sql-server-management-studio
- type: rbacResourceGroup
  name: rbacsysadmin
  groupName: "{{deployment.shortid}}-sysadmin"
  members:
    - foo.bar\svc-avalon-sma-p
- type: serviceAccount
  name: svcdb
  svcName: "db-{{deployment.shortid}}"
  memberOf:
    - foo.bar\.serveradmins-{{computenode.vmdb}}
    - foo.bar\{{rbacresourcegroup.rbacsysadmin.groupname}}