JSON schema file for YAML configuration schema validation (#656)

* Create YamlConfigSchema.json

* Change file name

* Update YAML schema validation documentation

Fix typos

* Add descriptions to the configurations

* Update YAML schema validaion documentation

* Fix typo

* Update doc/yamlConfigurationSchema.json

* Update JSON shcema file

Co-authored-by: Oleg Nenashev <o.v.nenashev@gmail.com>
pull/675/head v2.10.2
Buddhika Chathuranga 2020-08-27 15:20:23 +05:30 committed by GitHub
parent 43690d3e6a
commit 6908d27557
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 376 additions and 3 deletions

View File

@ -7,7 +7,7 @@ Actual samples are also being published as part of releases on GitHub and NuGet.
## File structure ## File structure
YAML Configuration file shuold be in following format YAML Configuration file should be in following format
Example: Example:
@ -28,6 +28,13 @@ log:
mode: roll mode: roll
``` ```
## YAML configuration schema validation
Users can validate YAML configurations file against JSON schema.
You can use YAML utility tool for VSCode to validate your
YAML configurations file with this JSON schema.
[Download YAML utility tool for VSCode from Visual Studio Marketplace.](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml)
## Environment variable expansion ## Environment variable expansion
Configuration YAML files can include environment variable expansions of the form `%Name%`. Configuration YAML files can include environment variable expansions of the form `%Name%`.
@ -110,7 +117,7 @@ See the [Logging and error reporting](loggingAndErrorReporting.md) page for more
arguments: arg1 arg2 arg3 arguments: arg1 arg2 arg3
``` ```
Also user can specify the arguemtns in more structured way with YAML multline strings. Also user can specify the arguments in more structured way with YAML multiline strings.
```yaml ```yaml
arguments: > arguments: >
@ -239,7 +246,7 @@ onFailure:
This optional element controls the timing in which Windows SCM resets the failure count. This optional element controls the timing in which Windows SCM resets the failure count.
For example, if you specify `resetfailure: 1 hour` and your service continues to run longer than one hour, then the failure count is reset to zero. For example, if you specify `resetfailure: 1 hour` and your service continues to run longer than one hour, then the failure count is reset to zero.
This affects the behaviour of the failure actions (see `onfailure` above). This affects the behavior of the failure actions (see `onfailure` above).
In other words, this is the duration in which you consider the service has been running successfully. In other words, this is the duration in which you consider the service has been running successfully.
Defaults to 1 day. Defaults to 1 day.

View File

@ -0,0 +1,366 @@
{
"$schema": "http://json-schema.org/draft-07/schema",
"type": "object",
"title": "Windows Service Wrapper. YAML configuration schema",
"description": "This JSON schema validate the YAML configuration file. You can find more details about YAML configurations from https://github.com/winsw/winsw/blob/master/doc/yamlConfigFile.md",
"required": [
"id",
"name",
"description",
"executable"
],
"properties": {
"id": {
"$id": "#/properties/id",
"description": "Specifies the ID that Windows uses internally to identify the service.",
"type": "string",
"maxLength": 256
},
"name": {
"$id": "#/properties/name",
"description": "Short display name of the service, which can contain spaces and other characters.",
"type": "string",
"maxLength": 256
},
"description": {
"$id": "#/properties/description",
"description": "Long human-readable description of the service.",
"type": "string"
},
"executable": {
"$id": "#/properties/executable",
"description": "This element specifies the executable to be launched.",
"type": "string"
},
"executablePath": {
"$id": "#/properties/executablePath",
"description": "Path to the WinSW executable",
"type": "string"
},
"hideWindow": {
"$id": "#/properties/hideWindow",
"$ref": "#/definitions/boolPattern"
},
"workingdirectory": {
"$id": "#/properties/workingdirectory",
"description": "Some services need to run with a working directory specified. To do this, specify the workingdirectory element",
"type": "string"
},
"serviceAccount": {
"$id": "#/properties/serviceAccount",
"description": "Defines account, under which the service should run.",
"type": "object",
"properties": {
"user": {
"$id": "#/properties/serviceAccount/user",
"type": "string"
},
"domain": {
"$id": "#/properties/serviceAccount/domain",
"type": "string"
},
"password": {
"$id": "#/properties/serviceAccount/password",
"type": "string"
},
"allowservicelogon": {
"$id": "#/properties/serviceAccount/allowservicelogon",
"$ref": "#/definitions/boolPattern"
}
}
},
"log": {
"$id": "#/properties/log",
"description": "All the log details. Read the loggingAndErrorreporting.md for more details",
"type": "object",
"properties": {
"mode": {
"$id": "#/properties/log/mode",
"type": "string",
"enum": [
"rotate",
"none",
"reset",
"roll",
"roll-by-time",
"roll-by-size",
"append",
"roll-by-size-time"
]
},
"name": {
"$id": "#/properties/log/name",
"type": "string"
},
"sizeThreshold": {
"$id": "#/properties/log/sizeThreshold",
"type": "number"
},
"keepFiles": {
"$id": "#/properties/log/keepFiles",
"type": "number"
},
"pattern": {
"$id": "#/properties/log/pattern",
"type": "string"
},
"period": {
"$id": "#/properties/log/period",
"type": "number"
},
"logpath": {
"$id": "#/properties/log/logpath",
"type": "string"
},
"outFileDisabled": {
"$id": "#/properties/log/outFileDisabled",
"$ref": "#/definitions/boolPattern"
},
"errFileDisabled": {
"$id": "#/properties/log/errFileDisabled",
"$ref": "#/definitions/boolPattern"
},
"outFilePattern": {
"$id": "#/properties/log/outFilePattern",
"type": "string"
},
"errFilePattern": {
"$id": "#/properties/log/errFilePattern",
"type": "string"
},
"autoRollAtTime": {
"$id": "#/properties/log/autoRollAtTime",
"type": "string"
},
"zipOlderThanNumDays": {
"$id": "#/properties/log/zipOlderThanNumDays",
"$ref": "#/definitions/boolPattern"
},
"zipDateFormat": {
"$id": "#/properties/log/zipDateFormat",
"$ref": "#/definitions/boolPattern"
}
}
},
"download": {
"$id": "#/properties/download",
"description": "This optional element can be specified to have the service wrapper retrieve resources from URL and place it locally as a file.",
"type": "array",
"items": {
"$ref": "#/definitions/download"
}
},
"arguments": {
"$id": "#/properties/arguments",
"description": "Specifies the arguments to be passed to the executable. User can specify all the commands as a single line.",
"type": "string"
},
"startArguments": {
"description": "When you use the stoparguments you must use startarguments instead of arguments",
"$id": "#/properties/startArguments",
"type": "string"
},
"stopArguments": {
"$id": "#/properties/stopArguments",
"description": "If this configurations is present WinSW will launch another process of executable or stopexecutable (if specified) with stoparguments instead terminating the WinSW process.",
"type": "string"
},
"stopExecutable": {
"$id": "#/properties/stopExecutable",
"description": "If stoparguments is present then WinSW will laungh this executable with stoparguments instead terminating the WinSW process.",
"type": "string"
},
"stopParentProcessFirst": {
"$id": "#/properties/stopParentProcessFirst",
"description": "Optionally specify the order of service shutdown. If configed as true, parent process is shutdown first",
"$ref": "#/definitions/boolPattern"
},
"resetFailureAfter": {
"$id": "#/properties/resetFailureAfter",
"description": "This optional element controls the timing in which Windows SCM resets the failure count.",
"type": "string"
},
"stopTimeout": {
"$id": "#/properties/stopTimeout",
"description": "This optional element allows you to change this 15 seconds value, so that you can control how long winsw gives the service to shut itself down.",
"type": "string"
},
"startMode": {
"$id": "#/properties/startMode",
"description": "This element specifies the start mode of the Windows service.",
"type": "string",
"enum": [
"Boot",
"System",
"Automatic",
"Manual",
"Disabled"
]
},
"serviceDependencies": {
"$id": "#/properties/serviceDependencies",
"description": "Optionally specified depend services that must start before this service starts.",
"type": "array",
"items": {
"type": "string"
}
},
"waitHint": {
"$id": "#/properties/waitHint",
"type": "string"
},
"sleepTime": {
"$id": "#/properties/sleepTime",
"type": "string"
},
"interactive": {
"$id": "#/properties/interactive",
"description": "If this optional element is specified, the service will be allowed to interact with the desktop, such as by showing a new window and dialog boxes.",
"$ref": "#/definitions/boolPattern"
},
"priority": {
"$id": "#/properties/priority",
"description": "Optionally specify the scheduling priority of the service process.",
"type": "string",
"enum": [
"Normal",
"Idle",
"High",
"RealTime",
"BelowNormal",
"AboveNormal"
]
},
"beepOnShutdown": {
"$id": "#/properties/beepOnShutdown",
"description": "This optional element is to emit beepsound when the service shuts down.",
"$ref": "#/definitions/boolPattern"
},
"env": {
"$id": "#/properties/env",
"description": "User can use specify environment variables with this configurations. Variables will be expand while parsing.",
"type": "array",
"items": {
"$ref": "#/definitions/env"
}
},
"delayedAutoStart": {
"$id": "#/properties/delayedAutoStart",
"description": "This Boolean option enables the delayed start mode if the Automatic start mode is defined. ",
"$ref": "#/definitions/boolPattern"
},
"securityDescriptor": {
"$id": "#/properties/securityDescriptor",
"type": "string"
},
"extensions": {
"$id": "#/properties/extensions",
"description": "Read extension.md for more details",
"type": "array",
"items": {
"$ref": "#/definitions/extensions"
}
}
},
"definitions": {
"boolPattern": {
"type": "string",
"enum": [
"y", "Y", "yes", "Yes", "YES",
"n", "N", "no", "No", "NO",
"true", "True", "TRUE",
"false", "False", "FALSE",
"on", "On", "ON",
"off", "Off", "OFF"
]
},
"download": {
"$id": "#/definitions/download",
"type": "object",
"required": [
"from",
"to"
],
"properties": {
"from": {
"$id": "#/definitions/download/from",
"type": "string"
},
"to": {
"$id": "#/definitions/download/to",
"type": "string"
},
"auth": {
"$id": "#/definitions/download/auth",
"type": "string"
},
"username": {
"$id": "#/definitions/download/username",
"type": "string"
},
"password": {
"$id": "#/definitions/download/password",
"type": "string"
},
"unsecureAuth": {
"$id": "#/definitions/download/unsecureAuth",
"$ref": "#/definitions/boolPattern"
},
"failOnError": {
"$id": "#/definitions/download/failOnError",
"$ref": "#/definitions/boolPattern"
},
"proxy": {
"$id": "#/definitions/download/proxy",
"type": "string"
}
}
},
"env": {
"$id": "#/definitions/env",
"type": "object",
"required": [
"name",
"value"
],
"properties": {
"name": {
"$id": "#/definitions/env/name",
"type": "string"
},
"value": {
"$id": "#/definitions/env/value",
"type": "string"
}
}
},
"extensions": {
"$id": "#/definitions/extensions",
"type": "object",
"required": [
"id",
"className",
"enabled",
"settings"
],
"properties": {
"id": {
"$id": "#/definitions/extensions/id",
"type": "string"
},
"className": {
"$id": "#/definitions/extensions/className",
"type": "string"
},
"enabled": {
"$id": "#/definitions/extensions/enabled",
"$ref": "#/definitions/boolPattern"
},
"settings": {
"$id": "#/definitions/extensions/settings",
"type": "object"
}
}
}
}
}