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}}