Schema
The schema is published as a JSONSchema V4 document in the Replicated Lint Repository
The canonical source for all available Replicated YAML options is available at github.com/replicatedhq/libyaml. This is a great reference to look up supported options and learn how different sections fit together.
Additional Linter Rules
The following list documents rules that will be applied by the Replicated release editor and the replicated-lint cli.
prop-admincommand-component-exists
Admin commands must reference an existing component and container
Examples:
Incorrect: admin command but no containers
---
admin_commands:
- alias: aliasecho
command: [echo]
component: DB
container: redis
Incorrect: Admin command but no matching containers
---
admin_commands:
- alias: aliasecho
command: [echo]
component: DB
container: redis
components:
- name: DB
containers:
- image_name: postgres
source: public
version: latest
Incorrect: Old style admin command but no matching containers
---
admin_commands:
- alias: aliasecho
command: [echo]
component: DB
image:
image_name: redis
components:
- name: DB
containers:
- image_name: postgres
source: public
version: latest
Incorrect: Admin multi command but no matching containers
---
admin_commands:
- alias: aliasecho
command: [echo]
replicated:
component: DB
container: redis
swarm:
service: myapp
kubernetes:
selector:
tier: backend
app: mine
container: node
components:
- name: DB
containers:
- image_name: postgres
source: public
version: latest
Incorrect: Admin source multi command but no matching containers
---
admin_commands:
- alias: aliasecho
command: [echo]
source:
replicated:
component: DB
container: redis
swarm:
service: myapp
kubernetes:
selector:
tier: backend
app: mine
container: node
components:
- name: DB
containers:
- image_name: postgres
source: public
version: latest
Correct: No commands, no containers
---
admin_commands: []
components: []
Correct: Admin command with matching container
---
admin_commands:
- alias: aliasecho
command: [echo]
component: DB
container: redis
components:
- name: DB
containers:
- image_name: redis
source: public
version: latest
Correct: Admin command has service, so this is probably a swarm command and thus is not tested here
---
admin_commands:
- alias: aliasecho
command: [echo]
service: database
Correct: Admin command has selector, so this is probably a kubernetes command and thus is not tested here
---
admin_commands:
- alias: aliasecho
command: [echo]
selector:
tier: database
Correct: Old style admin command with a matching container
---
admin_commands:
- alias: aliasecho
command: [echo]
component: DB
image:
image_name: redis
components:
- name: DB
containers:
- image_name: redis
source: public
version: latest
Correct: Admin multi command with matching container
---
admin_commands:
- alias: aliasecho
command: [echo]
replicated:
component: DB
container: redis
swarm:
service: myapp
kubernetes:
selector:
tier: backend
app: mine
container: node
components:
- name: DB
containers:
- image_name: redis
source: public
version: latest
Correct: Admin source multi command with matching container
---
admin_commands:
- alias: aliasecho
command: [echo]
source:
replicated:
component: DB
container: redis
swarm:
service: myapp
kubernetes:
selector:
tier: backend
app: mine
container: node
components:
- name: DB
containers:
- image_name: redis
source: public
version: latest
prop-admincommand-shellalias-valid
An admin command’s alias must be a valid shell alias
Examples:
Incorrect: admin command’s alias contains invalid character &
---
admin_commands:
- alias: exec&echo
command: ["echo"]
run_type: exec
component: DB
container: redis
Incorrect: admin command’s alias contains invalid character *
---
admin_commands:
- alias: exec**echo
command: ["echo"]
run_type: exec
component: DB
container: redis
Correct: valid alias
---
admin_commands:
- alias: redis_echo-command--
command: ["echo"]
run_type: exec
component: DB
container: redis
prop-admincommand-requirements-present
Basic requirements for an admin command must be present - an alias and a command
Examples:
Incorrect: alias missing
---
admin_commands:
- command: [echo]
component: DB
container: redis
Incorrect: command missing
---
admin_commands:
- alias: echo
component: DB
container: redis
Correct: Valid new-style replicated command
---
admin_commands:
- alias: echo
command: [echo]
component: DB
container: redis
prop-admincommand-old-style-requirements-present
image_name must be present within admin_commands.image and admin_commands.component must exist if admin_commands.image is present
Examples:
Incorrect: image is present, but not image.image_name
---
admin_commands:
- alias: echo
command: [echo]
component: alpha
image: {}
Incorrect: image is present, but not component
---
admin_commands:
- alias: echo
command: [echo]
image:
image_name: redis
Correct: Valid old-style (depreciated) command
---
admin_commands:
- alias: echo
command: [echo]
component: DB
image:
image_name: redis
prop-admincommand-multi-requirements-present
container and component must both be present within admin_commands.replicated if it is present
Examples:
Incorrect: replicated is present, but not replicated.component
---
admin_commands:
- alias: echo
command: [echo]
replicated:
container: redis
swarm:
service: myapp
Incorrect: replicated is present, but not replicated.container
---
admin_commands:
- alias: echo
command: [echo]
replicated:
component: DB
swarm:
service: myapp
Correct: Valid admin multi command
---
admin_commands:
- alias: echo
command: [echo]
replicated:
component: DB
container: redis
swarm:
service: myapp
prop-admincommand-verbose-requirements-present
container and component must both be present within admin_commands.source.replicated if it is present
Examples:
Incorrect: source.replicated is present, but not source.replicated.component
---
admin_commands:
- alias: echo
command: [echo]
source:
replicated:
container: redis
swarm:
service: myapp
Incorrect: source.replicated is present, but not source.replicated.container
---
admin_commands:
- alias: echo
command: [echo]
source:
replicated:
component: redis
swarm:
service: myapp
Correct: Valid verbose admin multi command
---
admin_commands:
- alias: echo
command: [echo]
source:
replicated:
component: DB
container: redis
swarm:
service: myapp
prop-admincommand-one-present
Admin command must use one of several methods to identify the relevant container
Examples:
Incorrect: None of the options are present
---
admin_commands:
- alias: echo
command: [echo]
Correct: Valid new-style replicated command
---
admin_commands:
- alias: echo
command: [echo]
component: DB
container: redis
Correct: Valid old-style (depreciated) admin command
---
admin_commands:
- alias: echo
command: [echo]
component: DB
image:
image_name: redis
Correct: Valid admin multi command
---
admin_commands:
- alias: echo
command: [echo]
replicated:
component: DB
container: redis
swarm:
service: myapp
Correct: Valid verbose admin multi command
---
admin_commands:
- alias: echo
command: [echo]
source:
replicated:
component: DB
container: redis
swarm:
service: myapp
prop-component-cluster-count
If cluster_host_count.min and cluster_host_count.max are both set to 1, then it will be impossible to run multiple instances of this container anywhere in the cluster.
Examples:
Incorrect: cluster_host_count.min and cluster_host_count.max are both set to 1
---
components:
- name: DB
cluster: true
tags:
- db
cluster_host_count:
min: 1
max: 1
containers:
- source: public
image_name: redis
version: latest
Correct: cluster_host_count.min and cluster_host_count.max is a range
---
components:
- name: DB
cluster: true
tags:
- db
cluster_host_count:
min: 1
max: 3
containers:
- source: public
image_name: redis
version: latest
Correct: cluster_host_count.min and cluster_host_count.max are unset
---
components:
- name: DB
cluster: true
tags:
- db
containers:
- source: public
image_name: redis
version: latest
prop-component-cluster-strategy
A component’s cluster strategy must be either random or autoscale
Examples:
Incorrect: strategy is set to all-on-one-host, which is not a supported clustering strategy
---
components:
- name: DB
cluster: true
tags:
- db
cluster_host_count:
strategy: all-on-one-host
containers:
- source: public
image_name: redis
version: latest
Correct: strategy is set to autoscale, a supported option
---
components:
- name: DB
cluster: true
tags:
- db
cluster_host_count:
strategy: autoscale
containers:
- source: public
image_name: redis
version: latest
Correct: strategy is unset
---
components:
- name: DB
cluster: true
tags:
- db
cluster_host_count: {}
containers:
- source: public
image_name: redis
version: latest
prop-component-volume-path-absolute
Component volume’s host_path must be absolute
Examples:
Incorrect: host path is not absolute
---
components:
- name: DB
host_volumes:
- host_path: ubuntu/workspace
containers:
- source: public
image_name: mongo
Correct: host path is absolute
---
components:
- name: DB
host_volumes:
- host_path: /home/ubuntu/workspace
containers:
- source: public
image_name: mongo
Correct: host path is a templated field
---
components:
- name: DB
host_volumes:
- host_path: '{{repl ConfigOption "custom_volume_path" }}'
containers:
- source: public
image_name: mongo
prop-component-cluster-boolstring
component.cluster must be a template or a boolean
Examples:
Incorrect: component.cluster is not a boolean or template
---
components:
- name: DB
cluster: "yes please"
Correct: component.cluster absent
---
components:
- name: DB
Correct: component.cluster boolean
---
components:
- name: DB
cluster: true
Correct: component.cluster string boolean
---
components:
- name: DB
cluster: "false"
Correct: component.cluster == 0
---
components:
- name: DB
cluster: "0"
Correct: component.cluster == 1
---
components:
- name: DB
cluster: "1"
Correct: component.cluster template
---
components:
- name: DB
cluster: '{{repl ConfigOption "use_cluster"}}'
prop-port-min-api-version
The minimum Replicated API version to use container.ports.public_port is 2.8.0
Examples:
Incorrect: public_port used and replicated api version set to 2.7.0
---
replicated_api_version: "2.7.0"
components:
- name: DB
containers:
- source: public
ports:
- public_port: "10000"
image_name: redis
version: latest
Incorrect: public_port used and replicated api version set to 1.8.5
---
replicated_api_version: "1.8.5"
components:
- name: DB
containers:
- source: public
ports:
- public_port: "10000"
image_name: redis
version: latest
Correct: public_port used and replicated api version set to 2.8.0
---
replicated_api_version: "2.8.0"
components:
- name: DB
containers:
- source: public
ports:
- public_port: "10000"
image_name: redis
version: latest
Correct: public_port used and replicated api version set to 2.8.1
---
replicated_api_version: "2.8.1"
components:
- name: DB
containers:
- source: public
ports:
- public_port: "10000"
image_name: redis
version: latest
prop-component-container-host-count-min-uint
Container’s cluster_host_count property min must be an unsigned integer
Examples:
Incorrect: cluster_host_count.min must be an unsigned integer, and this parses as a negative integer
---
components:
- cluster_host_count:
min: "-2"
Correct: cluster_host_count.min is an unsigned integer
---
components:
- cluster_host_count:
min: 3
prop-component-container-host-count-max-uint
Container’s cluster_host_count property max must be an unsigned integer
Examples:
Incorrect: cluster_host_count.max must be an unsigned integer, and this is a negative integer
---
components:
- cluster_host_count:
max: -10
Correct: cluster_host_count.max is an unsigned integer
---
components:
- cluster_host_count:
max: 10
prop-component-container-host-count-healthy-uint
Container’s cluster_host_count property threshold_healthy must be an unsigned integer
Examples:
Incorrect: cluster_host_count.threshold_healthy must be an unsigned integer, and this is a string
---
components:
- cluster_host_count:
threshold_healthy: "all"
Correct: cluster_host_count.threshold_healthy is an unsigned integer
---
components:
- cluster_host_count:
threshold_healthy: 5
prop-component-container-host-count-degraded-uint
Container’s cluster_host_count property threshold_degraded must be an unsigned integer
Examples:
Incorrect: cluster_host_count.threshold_degraded must be an unsigned integer, and this parses as a float
---
components:
- cluster_host_count:
threshold_degraded: "2.5"
Correct: cluster_host_count.threshold_degraded is an unsigned integer
---
components:
- cluster_host_count:
threshold_degraded: 2
prop-cluster-size-public-port
If using container.ports.public_port, cluster must be disabled or cluster size must be 1
Examples:
Incorrect: public_port used and cluster_instance_count.max is not 1
---
components:
- name: DB
containers:
- cluster_instance_count:
max: 2
cluster: "true"
ports:
- public_port: "10000"
image_name: redis
source: public
version: latest
Incorrect: public_port used and cluster_instance_count.max is not 1
---
components:
- name: DB
containers:
- cluster_instance_count:
max: "0"
cluster: true
ports:
- public_port: "10000"
image_name: redis
source: public
version: latest
Correct: public_port used and cluster_instance_count.max is 1
---
components:
- name: DB
containers:
- cluster_instance_count:
max: 1
cluster: true
ports:
- public_port: "10000"
image_name: redis
source: public
version: latest
Correct: public_port used and cluster_instance_count.initial is 1
---
components:
- name: DB
containers:
- cluster_instance_count:
initial: "1"
cluster: true
ports:
- public_port: "10000"
image_name: redis
source: public
version: latest
Correct: public_port used and cluster is set to false
---
components:
- name: DB
containers:
- cluster: false
ports:
- public_port: "10000"
image_name: redis
source: public
version: latest
Correct: public_port used and cluster is not set
---
components:
- name: DB
containers:
- ports:
- public_port: "10000"
image_name: redis
source: public
version: latest
tmpl-configoption-exists
Options referenced with {{repl ConfigOption }} must be present in the config section
Examples:
Incorrect: Config Option not_existent is not defined in config section
---
config:
- name: settings
title: Settings
items:
- name: hostname
title: Hostname
type: text
default: ""
components:
- name: App
cluster: false
containers:
- image_name: wlaoh/counter
name: '{{repl ConfigOption "not_existent" }}'
source: public
Correct: All uses of repl ConfigOption reference defined Config Options
---
config:
- name: hostname
title: Hostname
description: Ensure this domain name is routable on your network.
items:
- name: hostname
title: Hostname
type: text
recommended: false
default: ""
value_cmd:
name: host_ip
value_at: 0
when: ""
affix: ""
required: false
items: []
- name: host_count
title: Host Count
type: select_many
items:
- name: one_host
default: "0"
- name: two_hosts
default: "0"
components:
- name: App
cluster: false
containers:
- source: public
image_name: wlaoh/counter
version: signed
cmd: '{{ repl ConfigOption "one_host" }}'
name: '{{repl ConfigOption "hostname" }}'
prop-configitem-type-password
It looks like this Config Option may contain sensitive data – consider setting type: password
Examples:
Incorrect: Config Option with name database_password should have type: password
---
config:
- name: database
title: Database
items:
- name: database_password
title: Password
type: text
default: ""
Correct: Config Option with name database_password correctly has type: password
---
config:
- name: database
title: Database
items:
- name: database_password
title: Password
type: password
default: ""
tmpl-configoption-not-circular
A Config Options’s fields may not reference the Config Option they describe
Examples:
Incorrect: Config Option circular references {{repl ConfigOption "circular" }} in it’s when field
---
config:
- name: hostname
title: Hostname
items:
- name: circular
title: A Circle
type: text
when: '{{ repl ConfigOptionEquals "circular" "I heard you liked circles" }}'
Correct: No config options reference themselves
---
config:
- name: hostname
title: Hostname
items:
- name: left
title: Left
type: text
when: '{{ repl ConfigOptionEquals "right" "right option" }}'
- name: right
title: Right
type: text
when: '{{ repl ConfigOptionEquals "left" "left option" }}'
prop-configitem-type-valid
A Config Item must have a valid type
Examples:
Incorrect: Config Option type image_upload is not valid
---
config:
- name: images
title: Images
items:
- name: cat_picture
title: Cat Picture
type: image_upload
default: ""
Correct: All config options have valid types
---
config:
- name: database
title: Database
items:
- name: database_use_ssl
title: Use SSL
type: bool
default: ""
- name: database_host
title: Host
type: text
default: ""
- name: database_ssl_cert
title: SSL Certificate
type: textarea
default: ""
prop-configitem-when-valid
A Config Item’s when clause must be either empty, a template, a boolean literal, or reference a valid config option with = or !=
Examples:
Incorrect: Config Option when field references non-existent option ssl_is_good
---
config:
- name: database
title: Database
items:
- name: database_use_ssl
title: Use SSL
type: bool
default: ""
- name: database_ssl_cert
title: SSL Certificate
type: textarea
default: ""
when: ssl_is_good=1
Incorrect: Config Option when field references non-existent option ssl_is_bad
---
config:
- name: database
title: Database
items:
- name: database_use_ssl
title: Use SSL
type: bool
default: ""
- name: database_ssl_cert
title: SSL Certificate
type: textarea
default: ""
when: ssl_is_bad!=1
Incorrect: Config Section when uses unsupported < operator on option auth_source
---
config:
- name: auth
title: Authentication
description: Where will user accounts be provisioned
items:
- name: auth_source
default: auth_type_internal
type: select_one
items:
- name: auth_type_internal
title: Built In
- name: auth_type_ldap
title: LDAP
- name: auth_type_ldap_advanced
title: LDAP Advanced
- name: ldap_settings
title: LDAP Server Settings
when: auth_source>auth_type_ldap
items: []
Correct: All config options have valid when clauses
---
config:
- name: database
title: Database
items:
- name: database_use_ssl
title: Use SSL
type: bool
default: ""
when: ""
- name: database_use_ssl_2
title: Use SSL
type: bool
default: ""
when: ""
- name: database_use_udp
title: Use UDP
type: boolean
default: ""
when: false
- name: database_use_tcp
title: Use UDP
type: boolean
default: ""
when: true
- name: database_use_index
title: Use Index?
type: boolean
default: ""
when: "false"
- name: database_use_btree
title: Use Btree?
type: boolean
default: ""
when: "true"
- name: database_ssl_cert
title: SSL Certificate
type: textarea
default: ""
when: '{{repl ConfigOptionEquals "database_use_ssl" "1"}}'
- name: database_ssl_key
title: SSL Key
type: textarea
default: ""
when: database_use_ssl=1
- name: database_strong_password
title: Require strong password
type: bool
default: ""
when: database_use_ssl!=1
Correct: Config option group’s when clause references a valid multi-select option
---
config:
- name: ssl
title: SSL Configuration
description: SSL Options
items:
- name: ssl_cipher
default: ssl_cipher_ecdsa
type: select_one
items:
- name: ssl_cipher_ecdsa
title: ECDSA
- name: ssl_cipher_rsa
title: RSA
- name: database
title: Database
when: ssl_cipher=ssl_cipher_ecdsa
items:
- name: database_use_ssl
title: Use SSL
type: bool
prop-component-container-names-unique
Custom requirements must have unique ids
Examples:
Incorrect: duplicated ids
---
custom_requirements:
- id: alpha
message: beta
- id: alpha
message: delta
Incorrect: separated duplicated ids
---
custom_requirements:
- id: alpha
message: beta
- id: gamma
message: delta
- id: alpha
message: zeta
Correct: no duplicated ids
---
custom_requirements:
- id: alpha
message: beta
- id: gamma
message: delta
prop-component-container-unnamed-when-cluster-true
With clustering turned on, setting container.name will prevent multiple instances of the container from being scheduled on a single node
Examples:
Incorrect: container in component with cluster_instance_count: 2 should not have a name specified
---
components:
- name: DB
cluster: true
cluster_host_count:
min: 1
max: 4
containers:
- source: public
cluster: true
cluster_instance_count:
initial: 2
image_name: redis
name: database
Correct: container in component with cluster_instance_count: 2 does not have a name specified
---
components:
- name: DB
tags:
- db
cluster: true
cluster_host_count:
min: 1
max: 4
containers:
- source: public
cluster_instance_count:
initial: 2
image_name: redis
version: latest
prop-component-container-event-subscription-container-exists
Container event subscriptions must reference an existing component/container
Examples:
Incorrect: container redis has a publish_event that references missing container Pipeline/logstash
---
components:
- name: DB
containers:
- source: public
image_name: mongo
- source: public
image_name: redis
publish_events:
- name: event
subscriptions:
- component: Pipeline
container: logstash
action: start
Incorrect: container redis has a publish_event that references missing container Pipeline/logstash
---
components:
- name: DB
containers:
- source: public
image_name: mongo
version: latest
- source: public
image_name: logstash
version: latest
- source: public
image_name: redis
version: latest
publish_events:
- name: event
subscriptions:
- component: Pipeline
container: logstash
action: start
Correct: All containers referenced in publish_events have a matching component/container definition
---
components:
- name: DB
containers:
- source: public
image_name: mongo
- source: public
image_name: redis
publish_events:
- name: event
subscriptions:
- component: Pipeline
container: logstash
action: start
- name: Pipeline
containers:
- source: public
image_name: logstash
prop-component-container-volume-modes-valid
Container volume must not specify conflicting options
Examples:
Incorrect: volume options contains conflicting options rw and ro
---
components:
- name: DB
containers:
- source: public
image_name: mongo
version: latest
volumes:
- host_path: /tmp
container_path: /tmp
options:
- rw
- ro
Incorrect: volume options contains conflicting options z and Z
---
components:
- name: DB
containers:
- source: public
image_name: mongo
version: latest
volumes:
- host_path: /tmp
container_path: /tmp
options:
- z
- Z
Incorrect: volume options contains conflicting options rshared and private
---
components:
- name: DB
containers:
- source: public
image_name: mongo
version: latest
volumes:
- host_path: /tmp
container_path: /tmp
options:
- rshared
- private
Incorrect: volume options contains duplicated option nocopy
---
components:
- name: DB
containers:
- source: public
image_name: mongo
version: latest
volumes:
- host_path: /tmp
container_path: /tmp
options:
- nocopy
- nocopy
Correct: no volumes are defined
---
components:
- name: DB
containers:
- source: public
image_name: redis
version: latest
Correct: no volume options are defined
---
components:
- name: DB
containers:
- source: public
image_name: redis
version: latest
volumes:
- host_path: /tmp
container_path: /tmp
Correct: No conflicting volume options are defined
---
components:
- name: DB
containers:
- source: public
image_name: redis
version: latest
volumes:
- host_path: /tmp
container_path: /tmp
options:
- rw
- Z
- rshared
- nocopy
prop-component-container-volume-path-absolute
Container volume’s container_path must be absolute
Examples:
Incorrect: container path is not absolute
---
components:
- name: DB
containers:
- source: public
image_name: mongo
version: latest
volumes:
- host_path: /tmp
container_path: ubuntu/workspace
Correct: container path is absolute
---
components:
- name: DB
containers:
- source: public
image_name: mongo
version: latest
volumes:
- host_path: /tmp
container_path: /home/ubuntu/workspace
Correct: container path is a templated field
---
components:
- name: DB
containers:
- source: public
image_name: redis
version: latest
volumes:
- host_path: /tmp
container_path: '{{repl ConfigOption "mount_path"}}'
prop-component-container-contenttrust-fingerprint-valid
A container’s content_trust.public_key_fingerprint must be a valid RFC4716 fingerprint, e.g. cb:69:19:cd:76:1f:17:54:92:a4:fc:a9:6f:a5:57:72
Examples:
Incorrect: invalid public_key_fingerprint
---
components:
- name: DB
containers:
- source: public
name: redis
image_name: redis
version: 3.2.1
content_trust:
public_key_fingerprint: flksdjflkds
Correct: valid fingerprint
components:
- name: DB
containers:
- source: public
name: redis
image_name: redis
version: 3.2.1
content_trust:
public_key_fingerprint: cb:69:19:cd:76:1f:17:54:92:a4:fc:a9:6f:a5:57:72
- source: public
name: redis
image_name: redis
version: 3.2.1
content_trust:
public_key_fingerprint: aa:9c:75:89:de:46:3a:92:08:c7:ba:9a:29:fb:12:cc
prop-component-container-volumesfrom-exists
A container’s volumes_from must reference an existing container’s name field
Examples:
Incorrect: volumes_from references own container
---
components:
- name: DB
containers:
- source: public
image_name: redis
name: redis
version: 3.2.1
volumes_from:
- redis
Incorrect: volumes_from references non-existing container
---
components:
- name: DB
containers:
- source: public
image_name: redis
name: redis
version: 3.2.1
volumes_from:
- mongo
Correct: valid volumes_from reference
components:
- name: DB
containers:
- source: public
image_name: redis
name: redis
version: 3.2.1
volumes_from:
- mongo
- source: public
image_name: mongo
name: mongo
version: 3.2.1
prop-component-container-names-unique
A component’s container’s must have unique name entries
Examples:
Incorrect: duplicated names in single component
---
components:
- name: DB
containers:
- source: public
image_name: redis
name: db
version: 3.2.1
- source: public
image_name: mongo
name: db
version: latest
Incorrect: duplicated names across components
---
components:
- name: DB
containers:
- source: public
image_name: redis
name: db
version: 3.2.1
- name: MoreDB
containers:
- source: public
image_name: mongo
name: db
version: latest
Correct: no duplicated names
components:
- name: UI
containers:
- source: public
image_name: nginx
name: ui
version: 1.10.2
- name: DB
containers:
- source: public
image_name: redis
name: redis
version: 3.2.1
- source: public
image_name: mongo
name: mongo
version: "3.2"
prop-component-container-instance-count-initial-uint
Container’s cluster_instance_count property initial must be an unsigned integer
Examples:
Incorrect: cluster_instance_count.initial must be an unsigned integer, and this is a float
---
components:
- containers:
- cluster_instance_count:
initial: 3.5
image_name: redis
version: latest
source: public
Incorrect: cluster_instance_count.initial must be an unsigned integer, and this parses as a negative integer
---
components:
- containers:
- cluster_instance_count:
initial: "-2"
image_name: redis
version: latest
source: public
Correct: cluster_instance_count.initial is an unsigned integer
---
components:
- containers:
- cluster_instance_count:
initial: 3
image_name: redis
version: latest
source: public
prop-component-container-instance-count-max-uint
Container’s cluster_instance_count property max must be an unsigned integer
Examples:
Incorrect: cluster_instance_count.max must be an unsigned integer, and this is a negative integer
---
components:
- containers:
- cluster_instance_count:
max: -10
image_name: redis
version: latest
source: public
Correct: cluster_instance_count.max is an unsigned integer
---
components:
- containers:
- cluster_instance_count:
max: 10
image_name: redis
version: latest
source: public
prop-component-container-instance-count-degraded-uint
Container’s cluster_instance_count property threshold_degraded must be an unsigned integer
Examples:
Incorrect: cluster_instance_count.threshold_degraded must be an unsigned integer, and this parses as a float
---
components:
- containers:
- cluster_instance_count:
threshold_degraded: "2.8"
image_name: redis
version: latest
source: public
Correct: cluster_instance_count.threshold_degraded is an unsigned integer
---
components:
- containers:
- cluster_instance_count:
threshold_degraded: "2"
image_name: redis
version: latest
source: public
prop-component-container-instance-count-healthy-uint
Container’s cluster_instance_count property threshold_healthy must be an unsigned integer
Examples:
Incorrect: cluster_instance_count.threshold_healthy must be an unsigned integer, and this is a string
---
components:
- containers:
- cluster_instance_count:
threshold_healthy: "all"
image_name: redis
version: latest
source: public
Correct: cluster_instance_count.threshold_healthy is an unsigned integer
---
components:
- containers:
- cluster_instance_count:
threshold_healthy: "5"
image_name: redis
version: latest
source: public
prop-component-container-volumesfrom-subscription-exists
A container’s volumes_from must reference a container that subscribes to it
Examples:
Incorrect: volumes_from references container that does not exist
---
components:
- name: DB
containers:
- name: notalpha
image_name: redis
version: latest
source: public
publish_events:
- subscriptions:
- component: DB
container: beta
- image_name: beta
volumes_from:
- alpha
version: latest
source: public
Incorrect: volumes_from references container that does not subscribe to it
---
components:
- name: DB
containers:
- name: alpha
publish_events:
- subscriptions:
- component: DB
container: notalpine
image_name: redis
version: latest
source: public
- volumes_from:
- alpha
image_name: alpine
version: latest
source: public
Incorrect: volumes_from references multiple containers, of which one is not valid
---
components:
- name: DB
containers:
- name: alpha
image_name: alpha
version: latest
source: public
publish_events:
- subscriptions:
- component: DB
container: beta
- image_name: beta
volumes_from:
- alpha
- gamma
version: latest
source: public
Incorrect: volumes_from references itself
---
components:
- name: DB
containers:
- name: alphaname
image_name: alpha
version: latest
source: public
volumes_from:
- alpha
publish_events:
- subscriptions:
- component: DB
container: alphaname
Correct: valid volumes_from reference
---
components:
- name: DB
containers:
- name: alpha
image_name: irrelevant
version: latest
source: public
publish_events:
- subscriptions:
- component: DB
container: beta
- image_name: beta
volumes_from:
- alpha
version: latest
source: public
Correct: multiple valid volumes_from references
---
components:
- name: DB
containers:
- name: alpha
image_name: irrelevant
version: latest
source: public
publish_events:
- subscriptions:
- component: DB
container: beta
- component: DB
container: gamma
- image_name: gamma
volumes_from:
- alpha
version: latest
source: public
- image_name: beta
volumes_from:
- alpha
version: latest
source: public
Correct: Chained dependency for volumes_from across components
---
components:
- name: DB
containers:
- name: alpha
image_name: irrelevant
version: latest
source: public
publish_events:
- subscriptions:
- component: DB2
container: gamma
- image_name: beta
volumes_from:
- alpha
version: latest
source: public
- name: DB2
containers:
- image_name: gamma
version: latest
source: public
publish_events:
- subscriptions:
- component: DB
container: beta
prop-component-container-volume-ephemeral-type-check
is_ephemeral must be a bool string, boolean literal, or template function
Examples:
Incorrect: yes is not a valid value for is_ephemeral
---
components:
- containers:
- volumes:
- is_ephemeral: "yes"
image_name: redis
version: latest
source: public
Correct: "true", true, "false" and false are all valid values for is_ephemeral
---
components:
- containers:
- volumes:
- is_ephemeral: "true"
- is_ephemeral: "false"
- is_ephemeral: true
- is_ephemeral: false
image_name: redis
version: latest
source: public
Correct: {{repl AppID}} is a valid template function and is thus a valid if questionable value for is_ephemeral
---
components:
- containers:
- volumes:
- is_ephemeral: "{{repl AppID}}"
image_name: redis
version: latest
source: public
prop-component-container-volume-excluded-type-check
is_excluded_from_backup must be a bool string, boolean literal, or template function
Examples:
Incorrect: yes is not a valid value for is_excluded_from_backup
---
components:
- containers:
- volumes:
- is_excluded_from_backup: "yes"
image_name: redis
version: latest
source: public
Correct: "true", true, "false" and false are all valid values for is_excluded_from_backup
---
components:
- containers:
- volumes:
- is_excluded_from_backup: "true"
- is_excluded_from_backup: "false"
- is_excluded_from_backup: true
- is_excluded_from_backup: false
image_name: redis
version: latest
source: public
Correct: {{repl AppID}} is a valid template function and is thus a valid value for is_excluded_from_backup
---
components:
- containers:
- volumes:
- is_excluded_from_backup: "{{repl AppID}}"
image_name: redis
version: latest
source: public
prop-component-container-envvars-staticval-deprecated
static_val is deprecated, use value instead
Examples:
Incorrect: static_val deprecated
---
components:
- containers:
- env_vars:
- static_val: blah
value: blah
image_name: redis
version: latest
source: public
Incorrect: static_val deprecated empty
---
components:
- containers:
- env_vars:
- static_val: ""
value: blah
image_name: redis
version: latest
source: public
Correct: value preferred over static_val
---
components:
- containers:
- name: first
env_vars:
- value: "blah"
image_name: redis
version: latest
source: public
prop-component-container-envvars-excluded-type-check
is_excluded_from_support must be a bool string, boolean literal, or template function
Examples:
Incorrect: yes is not a valid value for is_excluded_from_support
---
components:
- containers:
- env_vars:
- is_excluded_from_support: "yes"
image_name: redis
version: latest
source: public
Correct: "true", true, "false" and false are all valid values for is_excluded_from_support
---
components:
- containers:
- env_vars:
- is_excluded_from_support: "true"
- is_excluded_from_support: "false"
- is_excluded_from_support: true
- is_excluded_from_support: false
image_name: redis
version: latest
source: public
Correct: {{repl AppID}} is a valid template function and is thus a valid value for is_excluded_from_support
---
components:
- containers:
- env_vars:
- is_excluded_from_support: "{{repl AppID}}"
image_name: redis
version: latest
source: public
prop-component-container-shm-size-uint
Container’s property shm_size must be an unsigned integer
Examples:
Incorrect: shm_size must be an unsigned integer, and this is a negative integer
---
components:
- containers:
- shm_size: -10
image_name: redis
version: latest
source: public
Correct: shm_size is an unsigned integer
---
components:
- containers:
- shm_size: 10
image_name: redis
version: latest
source: public
prop-hostreq-docker-version-valid
host_requirements.docker_version must be a valid docker version specification
Examples:
Incorrect: Invalid docker version the.good.one, not semver
---
host_requirements:
docker_version: the.good.one
Incorrect: Invalid docker version 0.1.1
---
host_requirements:
docker_version: 0.1.1
Incorrect: Invalid docker version 1.09.1, no leading zeros
---
host_requirements:
docker_version: 1.09.1
Incorrect: Invalid docker version 1.14.1, never released
---
host_requirements:
docker_version: 1.14.1
Incorrect: Invalid docker version 17.13.1-ce, 13 is not a valid month
---
host_requirements:
docker_version: 17.13.1-ce
Correct: Valid docker version
---
host_requirements:
docker_version: 17.09.1-ce
Correct: Valid docker version
---
host_requirements:
docker_version: 17.09.1
Correct: Valid docker version
---
host_requirements:
docker_version: 1.12.1
prop-hostreq-replicated-version-semver-valid
host_requirements.replicated_version must be a semver range specification
Examples:
Incorrect: Invalid replicated version the.good.one, not semver
---
host_requirements:
replicated_version: the.good.one
Incorrect: Invalid replicated version alpha-0.1.1
---
host_requirements:
replicated_version: alpha-0.1.1
Correct: valid version 2.x
---
host_requirements:
replicated_version: 2.x
Correct: valid version 2.5.3
---
host_requirements:
replicated_version: 2.5.3
Correct: valid version <=2.5.3 >2.5.x
---
host_requirements:
replicated_version: '<=2.5.3 >2.5.x'
Correct: valid version 1.x
---
host_requirements:
replicated_version: '1.x'
Correct: valid version =1.x
---
host_requirements:
replicated_version: '=1.x'
Correct: valid version >=1.4 <1.7
---
host_requirements:
replicated_version: '>=1.4 <1.7'
prop-hostreq-system-ram-specs-valid
host_requirements.memory must be a positive decimal with a unit of measurement like M, MB, G, or GB
Examples:
Incorrect: Invalid memory size, not a properly formatted size
---
host_requirements:
memory: "128"
Incorrect: Invalid memory size, too many digits past the decimal point
---
host_requirements:
memory: 0.0625TB
Correct: Valid memory size, 2.0TB
---
host_requirements:
memory: 2.0TB
Correct: Valid memory size, 128KB
---
host_requirements:
memory: 128KB
prop-hostreq-system-storage-specs-valid
host_requirements.disk_space be a positive decimal with a unit of measurement like M, MB, G, or GB
Examples:
Incorrect: Invalid disk size, not a properly formatted size
---
host_requirements:
disk_space: "128"
Incorrect: Invalid disk size, too many digits past the decimal point
---
host_requirements:
disk_space: 0.0625EB
Correct: Valid disk size, 20.0TB
---
host_requirements:
disk_space: 20.0TB
Correct: Valid disk size, 128GB
---
host_requirements:
disk_space: 128GB
prop-hostreq-docker-storage-specs-valid
host_requirements.docker_space be a positive decimal with a unit of measurement like M, MB, G, or GB
Examples:
Incorrect: Invalid disk size, not a properly formatted size
---
host_requirements:
docker_space: "128"
Incorrect: Invalid disk size, too many digits past the decimal point
---
host_requirements:
docker_space: 0.0625EB
Correct: Valid disk size, 20.0TB
---
host_requirements:
docker_space: 20.0TB
Correct: Valid disk size, 128GB
---
host_requirements:
docker_space: 128GB
prop-kubernetes-requirements-version-valid
kubernetes.requirements.server_version must be a valid semver specification
Examples:
Incorrect: server_version is not valid semver
---
kubernetes:
requirements:
server_version: 17.01.1-ce
Correct: valid version 1.5.3
---
kubernetes:
requirements:
server_version: 1.5.3
Correct: valid version <=1.5.3 >1.5.x
---
kubernetes:
requirements:
server_version: '<=1.5.3 >1.5.x'
Correct: valid version 1.x
---
kubernetes:
requirements:
server_version: '1.x'
Correct: valid version =1.x
---
kubernetes:
requirements:
server_version: '=1.x'
Correct: valid version >=1.4 <1.7
---
kubernetes:
requirements:
server_version: '>=1.4 <1.7'
prop-kubernetes-total-memory-valid
kubernetes.requirements.total_memory must be expressed as a plain integer, a fixed-point integer, or the power-of-two equivalent (e.g. 128974848, 129e6, 129M, 123Mi)
Examples:
Incorrect: Invalid memory size, too many digits past the decimal point
---
kubernetes:
requirements:
total_memory: 0.0625TB
Correct: Valid memory size, 2.0TB
---
kubernetes:
requirements:
total_memory: 2.0TB
Correct: Valid memory size, 128KB
---
kubernetes:
requirements:
total_memory: 128KB
Correct: Valid kubernetes memory size, 128
---
kubernetes:
requirements:
total_memory: "128"
Correct: Valid kubernetes memory size, 129e6
---
kubernetes:
requirements:
total_memory: "129e6"
prop-kubernetes-persistent-storage-valid
kubernetes.persistent_volume_claims.storage must be expressed as a plain integer, a fixed-point integer, or the power-of-two equivalent (e.g. 128974848, 129e6, 129M, 123Mi)
Examples:
Incorrect: Invalid storage size, too many digits past the decimal point
---
kubernetes:
persistent_volume_claims:
- storage: 0.0625TB
Correct: Valid storage size, 2.0TB
---
kubernetes:
persistent_volume_claims:
- storage: 2.0TB
Correct: Valid storage size, 128KB
---
kubernetes:
persistent_volume_claims:
- storage: 128KB
Correct: Valid kubernetes storage size, 128
---
kubernetes:
persistent_volume_claims:
- storage: "128"
Correct: Valid kubernetes storage size, 129e6
---
kubernetes:
persistent_volume_claims:
- storage: "129e6"
Correct: No storage size given
---
kubernetes:
persistent_volume_claims: []
prop-monitors-cpuacct-container-exists
Entries in monitors.cpuacct must have matching component+container or the scheduler must be swarm
Examples:
Incorrect: cpuacct monitor references a component that does not exist
---
components:
- name: Kibana
containers:
- image_name: quay.io/getelk/logstash
version: latest
source: public
monitors:
cpuacct:
- Logstash,quay.io/getelk/logstash
Incorrect: cpuacct monitor references a container that does not exist
---
components:
- name: Logstash
containers:
- image_name: quay.io/getelk/elasticsearch
version: latest
source: public
monitors:
cpuacct:
- Logstash,quay.io/getelk/logstash
Correct: All cpuacct monitors reference existing containers
---
components:
- name: Logstash
containers:
- image_name: quay.io/getelk/logstash
version: latest
source: public
monitors:
cpuacct:
- Logstash,quay.io/getelk/logstash
Correct: All cpuacct monitors are valid if the scheduler is swarm
---
monitors:
cpuacct:
- swarmstash
swarm:
minimum_node_count: "1"
Correct: No monitors, no containers
---
monitors:
cpuacct: []
prop-monitors-memory-container-exists
Entries in monitors.memory must have matching component+container or the scheduler must be swarm
Examples:
Incorrect: memacct monitor references a component that does not exist
---
components:
- name: Kibana
containers:
- image_name: quay.io/getelk/logstash
version: latest
source: public
monitors:
memory:
- Logstash,quay.io/getelk/logstash
Incorrect: memacct monitor references a container that does not exist
---
components:
- name: Logstash
containers:
- image_name: quay.io/getelk/elasticsearch
version: latest
source: public
monitors:
memory:
- Logstash,quay.io/getelk/logstash
Correct: All memacct monitors reference existing containers
---
components:
- name: Logstash
containers:
- image_name: quay.io/getelk/logstash
version: latest
source: public
monitors:
memory:
- Logstash,quay.io/getelk/logstash
Correct: All memacct monitors are valid if the scheduler is swarm
---
monitors:
memory:
- swarmstash
swarm:
minimum_node_count: "1"
prop-monitors-custom-has-target
Entries in monitors.custom must have at least one target
Examples:
Incorrect: custom monitor has no targets
---
monitors:
custom:
- name: whatever
targets: []
Incorrect: single target is empty
---
monitors:
custom:
- name: whatever
target: ""
Incorrect: custom monitor has null targets
---
monitors:
custom:
- name: whatever
Correct: All custom monitors have at least one target
---
components:
- name: Logstash
containers:
- image_name: quay.io/getelk/logstash
version: latest
source: public
monitors:
custom:
- name: whenever
target: stats.gauges.myapp100.ping.*
- name: whatever
targets:
- stats.gauges.myapp100.ping.*
- movingAverage(stats.gauges.myapp100.ping.*,60)
- movingAverage(stats.gauges.myapp100.ping.*,600)
prop-monitors-custom-has-target
Entries in monitors.custom have valid color specifications
Examples:
Incorrect: custom monitor has invalid stroke_color
---
monitors:
custom:
- name: whatever
targets: [stats.mystat.*]
display:
stroke_color: blue
Incorrect: custom monitor has invalid fill_color
---
monitors:
custom:
- name: whatever
targets: [stats.mystat.*]
display:
fill_color: blue
Correct: custom monitor has valid color specs
---
components:
- name: Logstash
containers:
- image_name: quay.io/getelk/logstash
source: public
version: latest
monitors:
custom:
- name: whenever
target: stats.gauges.myapp100.ping.*
- name: whatever
targets:
- stats.gauges.myapp100.ping.*
- movingAverage(stats.gauges.myapp100.ping.*,60)
- movingAverage(stats.gauges.myapp100.ping.*,600)
display:
fill_color: '#44BB66'
stroke_color: '#444444'
prop-statsd-port-valid
If specified, statsd.port must be a valid TCP port
Examples:
Incorrect: statsd.port is negative
---
statsd:
port: -100
Incorrect: statsd.port is above the maximum tcp port range
---
statsd:
port: 100000
Correct: statsd port valid
---
statsd:
port: 43221
Correct: statsd port not specified
---
statsd: {}
prop-graphite-port-valid
If specified, graphite.port must be a valid TCP port
Examples:
Incorrect: graphite.port is negative
---
graphite:
port: -100
Incorrect: graphite.port is above the maximum tcp port range
---
graphite:
port: 100000
Correct: graphite port valid
---
graphite:
port: 43221
Correct: graphite port not specified
---
graphite: {}
prop-custommetric-retention-valid
If specified, a custom_metric’s retention must be in a valid format, e.g.15s:7d,1m:21d,15m:5y
Examples:
Incorrect: retention invalid
---
custom_metrics:
- target: stats.gauges.ping.rtt.*
retention: 15 second resolution for 10 days
aggregation_method: "average"
xfiles_factor: 0.3
Correct: no custom metrics
---
custom_metrics: []
Correct: custom retention not specified
---
custom_metrics:
- target: stats.gauges.ping.rtt.*
aggregation_method: "average"
xfiles_factor: 0.3
Correct: minimal valid retention
---
custom_metrics:
- target: stats.gauges.ping.rtt.*
retention: 15s:7d
aggregation_method: "average"
xfiles_factor: 0.3
Correct: valid retention with spaces
---
custom_metrics:
- target: stats.gauges.ping.rtt.*
retention: 15s:7d, 1m:22d, 15m:2h
aggregation_method: "average"
xfiles_factor: 0.3
Correct: valid retention 1
---
custom_metrics:
- target: stats.gauges.ping.rtt.*
retention: 15s:7d,1m:21d,15m:5y
aggregation_method: "average"
xfiles_factor: 0.3
Correct: valid retention 2
---
custom_metrics:
- target: stats.gauges.ping.rtt.*
retention: "1m:1h,1h:7d,1d:90d"
aggregation_method: "average"
xfiles_factor: 0.3
Correct: valid retention 3
---
custom_metrics:
- target: stats.gauges.ping.rtt.*
retention: "1s:10m,1m:4h,1h:30d"
aggregation_method: "average"
xfiles_factor: 0.3
Correct: valid retention 4
---
custom_metrics:
- target: stats.gauges.myapp100.ping.*
retention: "10s:10m,1m:20m,1h:30d"
aggregation_method: "average"
xfiles_factor: 0.3
prop-custommetric-aggregation-valid
If specified, a custom_metric’s aggregation must one of average, sum, min, max, last
Examples:
Incorrect: aggregation invalid
---
custom_metrics:
- target: stats.gauges.ping.rtt.*
retention: 15s:7d,1m:14d,15m:1y
aggregation_method: "middle-out"
xfiles_factor: 0.3
Correct: no custom metrics
---
custom_metrics: []
Correct: custom aggregation not specified
---
custom_metrics:
- target: stats.gauges.ping.rtt.*
Correct: aggregation == sum
---
custom_metrics:
- target: stats.gauges.ping.rtt.*
retention: 15s:7d
aggregation_method: "sum"
xfiles_factor: 0.3
Correct: aggregation == average
---
custom_metrics:
- target: stats.gauges.ping.rtt.*
retention: 15s:7d, 1m:22d, 15m:2h
aggregation_method: "average"
xfiles_factor: 0.3
Correct: aggregation == max
---
custom_metrics:
- target: stats.gauges.ping.rtt.*
retention: 15s:7d,1m:21d,15m:5y
aggregation_method: "max"
xfiles_factor: 0.3
Correct: aggregation == min
---
custom_metrics:
- target: stats.gauges.ping.rtt.*
retention: "1m:1h,1h:7d,1d:90d"
aggregation_method: "min"
xfiles_factor: 0.3
Correct: aggregation == last
---
custom_metrics:
- target: stats.gauges.ping.rtt.*
retention: "1s:10m,1m:4h,1h:30d"
aggregation_method: "last"
xfiles_factor: 0.3
prop-monitors-custom-display-labelscale-valid
If specified, a custom monitor’s display.label_scale must be one of metric, none or a parseable float
Examples:
Incorrect: label_scale == kfbr392, not a valid float
---
monitors:
custom:
- target: stats.gauges.kfbr392.*
display:
label_scale: kfbr392
Incorrect: label_scale == 1.1.02, not a valid float
---
monitors:
custom:
- target: stats.gauges.kfbr392.*
display:
label_scale: 1.1.02
Correct: label_scale == metric
---
monitors:
custom:
- target: stats.gauges.kfbr392.*
display:
label_scale: metric
Correct: label_scale == none
---
monitors:
custom:
- target: stats.gauges.kfbr392.*
display:
label_scale: none
Correct: label_scale == 1.84
---
monitors:
custom:
- target: stats.gauges.kfbr392.*
display:
label_scale: 1.84
Correct: label_scale == .1
---
monitors:
custom:
- target: stats.gauges.kfbr392.*
display:
label_scale: .1
Correct: label_scale == 12
---
monitors:
custom:
- target: stats.gauges.kfbr392.*
display:
label_scale: 12
Correct: label_scale == -12.23131131
---
monitors:
custom:
- target: stats.gauges.kfbr392.*
display:
label_scale: -12.23131131
prop-replicated-api-version-present
replicated_api_version must be present and be a valid Semver specification
Examples:
Incorrect: replicated_api_version is missing
---
{}
Incorrect: replicated_api_version is not valid semver
---
replicated_api_version: kfbr392
Correct: replicated_api_version is valid semver
---
replicated_api_version: 2.9.0
prop-image-contenttrust-fingerprint-valid
An image’s content_trust.public_key_fingerprint must be a valid RFC4716 fingerprint, e.g. cb:69:19:cd:76:1f:17:54:92:a4:fc:a9:6f:a5:57:72
Examples:
Incorrect:
---
images:
- source: public
name: redis
tag: 3.2.1
content_trust:
public_key_fingerprint: flksdjflkds
Correct: valid fingerprint
---
images:
- source: public
name: redis
tag: 3.2.1
content_trust:
public_key_fingerprint: cb:69:19:cd:76:1f:17:54:92:a4:fc:a9:6f:a5:57:72
prop-properties-shellalias-valid
properties.shell_alias must be a valid shell alias
Examples:
Incorrect: alias contains invalid character &
---
properties:
shell_alias: exec&echo
Incorrect: admin command contains invalid character *
---
properties:
shell_alias: exec**echo
Correct: valid alias
---
properties:
shell_alias: do_a-replicated_thing---plz
prop-properties-logourl-valid
Logo URL must be a valid http or https URL
Examples:
Incorrect: protocol not in [http, https]
---
properties:
logo_url: yo://mylogo.com/logo.png
Incorrect: invalid url
---
properties:
logo_url: kfbr392
Incorrect: invalid url
---
properties:
logo_url: http://i.goo gr.com/rnZ3Ftf.png
Correct: valid url
---
properties:
logo_url: http://x.y+a.com:3000/b/c
mesg-yaml-valid
Document must be valid YAML. This could occur for many reasons, consult individual error details for more info.
More Info:
Examples:
Incorrect: Document must have valid syntax
---
}}{{}}{{
mesg-yaml-not-empty
Document must not be empty
Examples:
Incorrect: Document may not be empty
---
prop-schema-valid
Document must conform to the Replicated YAML document schema
More Info:
Examples:
Incorrect: container missing a source
---
components:
- containers:
- image_name: kfbr
version: 392
Incorrect: container missing an image_name
---
components:
- containers:
- source: public
version: 3.2
Incorrect: Property deploy_this_great_app is not present in the schema
---
deploy_this_great_app: plz&thx
Incorrect: Property replicated_api_version is not of correct type, should be string, but 2.11 is parsed as type float
---
replicated_api_version: 2.11
Incorrect: 2 is not a valid value for is_ephemeral
---
components:
- containers:
- volumes:
- is_ephemeral: 2
Incorrect: 1 is not a valid value for is_ephemeral, though "1" is
---
components:
- containers:
- volumes:
- is_ephemeral: 1
Incorrect: 2 is not a valid value for is_excluded_from_backup
---
components:
- containers:
- volumes:
- is_excluded_from_backup: 2
Incorrect: 1 is not a valid value for is_excluded_from_backup, though "1" is
---
components:
- containers:
- volumes:
- is_excluded_from_backup: 1
Incorrect: statsd.port is not an integer
---
statsd:
port: foo
Incorrect: graphite.port is not an integer
---
graphite:
port: foo
Incorrect: cluster_host_count.min must be an unsigned integer, and this is a boolean
---
components:
- cluster_host_count:
min: false
Correct: container.version can be a string or a number
---
components:
- containers:
- image_name: kfbr
version: 392
source: replicated
- image_name: redis
version: latest
source: replicated
prop-support-bundle
For customers using Version 2 of the support bundle, custom files and commands can be configured in Replicated Console.
More Info:
Examples:
Incorrect: support key detected
support:
commands:
- filename: output.txt
command: ["sleep", "10"]
source:
replicated:
component: LB
container: wlaoh/nginx
- filename: output.txt
command: ["echo", "Hello World!"]
source:
replicated:
component: LB
container: wlaoh/nginx
files:
- filename: output.txt
source:
replicated:
component: LB
container: wlaoh/nginx
Correct: support key not detected
---
replicated_api_version: "2.10.1"
prop-swarm-secret-name-value
Swarm secrets require both a name and a value to function.
Examples:
Incorrect: A swarm secret must contain a name and a value, and this only has a name
---
replicated_api_version: "2.7.0"
swarm:
secrets:
- name: foo
Incorrect: A swarm secret must contain a name and a value, and this name is empty
---
replicated_api_version: "2.7.0"
swarm:
secrets:
- name: ""
value: bar
Incorrect: A swarm secret must contain a name and a value even when labels exist
---
replicated_api_version: "2.7.0"
swarm:
secrets:
- name: ""
value: bar
labels:
alpha: beta
Correct: This swarm secret contains a name and a value
---
replicated_api_version: "2.7.0"
swarm:
secrets:
- name: foo
value: bar
prop-swarm-secret-label-key
Labels within a swarm secret must have keys.
Examples:
Incorrect: Swarm secret labels must not be the empty string
---
replicated_api_version: "2.7.0"
swarm:
secrets:
- name: foo
value: bar
labels:
alpha: beta
"": delta
Correct: These swarm secret labels are not the empty string
---
replicated_api_version: "2.7.0"
swarm:
secrets:
- name: foo
value: bar
labels:
alpha: beta
gamma: delta
prop-swarm-config-name-value
Swarm configs require both a name and a value to function.
Examples:
Incorrect: A swarm config must contain a name and a value, and this only has a name
---
replicated_api_version: "2.7.0"
swarm:
configs:
- name: foo
Incorrect: A swarm config must contain a name and a value, and this name is empty
---
replicated_api_version: "2.7.0"
swarm:
configs:
- name: ""
value: bar
Incorrect: A swarm config must contain a name and a value even when labels exist
---
replicated_api_version: "2.7.0"
swarm:
configs:
- name: ""
value: bar
labels:
alpha: beta
Correct: This swarm config contains a name and a value
---
replicated_api_version: "2.7.0"
swarm:
configs:
- name: foo
value: bar
prop-swarm-config-label-key
Labels within a swarm config must have keys.
Examples:
Incorrect: Swarm config labels must not be the empty string
---
replicated_api_version: "2.7.0"
swarm:
configs:
- name: foo
value: bar
labels:
alpha: beta
"": delta
Correct: These swarm config labels are not the empty string
---
replicated_api_version: "2.7.0"
swarm:
configs:
- name: foo
value: bar
labels:
alpha: beta
gamma: delta
prop-configitem-testproc-run-on-save
If a config item’s test_proc.run_on_save is not set to true, test_proc’s will not be checked automatically. Consider setting to true to automatically validate inputs
More Info:
Examples:
Incorrect: A config item’s test_proc.run_on_save set to false
---
config:
- name: configs
title: Configuration
items:
- name: phone_number
type: text
test_proc:
display_name: Is this a Phone Number?
command: regex_match
run_on_save: false
args:
- "([0-9]{3})[-]([0-9]{3})[-]([0-9]{4})$"
- "That doesn't seem to be a phone number!"
Incorrect: A config groups’s test_proc.run_on_save set to false
---
config:
- name: configs
title: Configuration
test_proc:
display_name: Is this a Phone Number?
command: regex_match
run_on_save: false
args:
- "([0-9]{3})[-]([0-9]{3})[-]([0-9]{4})$"
- "That doesn't seem to be a phone number!"
items:
- name: phone_number
type: text
Correct: All test_procs have run_on_save == true
---
config:
- name: configs
title: Configuration
items:
- name: phone_number
type: text
test_proc:
display_name: Is this a Phone Number?
command: regex_match
run_on_save: true
args:
- "([0-9]{3})[-]([0-9]{3})[-]([0-9]{4})$"
- "That doesn't seem to be a phone number!"
Correct: No config items have test procs
---
config:
- name: configs
title: Configuration
items:
- name: phone_number
type: text
prop-configitem-testproc-command-valid
A test_proc’s command entry must be a valid command.
More Info:
Examples:
Incorrect: config item’s test_proc.command is set to json_is_good, which is not a supported Test Proc command
---
config:
- name: configs
title: Configuration
items:
- name: phone_number
type: text
test_proc:
display_name: Is the json good?
command: json_is_good
Incorrect: config group’s test_proc.command is set to all_the_json_is_good, which is not a supported Test Proc command
---
config:
- name: configs
title: Configuration
test_proc:
display_name: Is the json good?
command: all_the_json_is_good
items:
- name: phone_number
type: text
Correct: item and group’s test_proc.commands are set to resolve_host and smtp_auth, both supported Test Proc commands
---
config:
- name: configs
title: Configuration
test_proc:
display_name: Is docs.replicated.com reachable?
command: smtp_auth
items:
- name: docs_host
type: text
test_proc:
display_name: Is docs.replicated.com reachable?
command: resolve_host
args:
- docs.replicated.com
Correct: item’s test_proc.command is set to resolve_host
---
config:
- name: hostname
title: Hostname
description: Ensure this domain name is routable on your network.
items:
- name: hostname
title: Hostname
value: '{{repl ConsoleSetting "tls.hostname"}}'
type: text
test_proc:
display_name: Check DNS
command: resolve_host
Correct: no test procs specified
---
config:
- name: configs
title: Configuration
items:
- name: docs_host
type: text
Correct: test_proc.custom_command specified instead of test_proc.command
---
config:
- name: configs
title: Configuration
items:
- name: docs_host
type: text
test_proc:
display_name: Check DNS
custom_command:
id: scheduler
timeout: 15
data:
replicated:
component: password-checker
container: debian
results:
- status: success
message: Success!
condition:
status_code: 0
error: false
Autogenerated reference documentation for Replicated YAML Linter Generated at Tue Nov 06 2018 09:22:41 GMT-0800 (PST)