# Operator Parameters
This document explains what operator parameters are and how they work in KUDO.
# What are operator parameters
Operator parameters are key-value pairs declared by the operator developer.
The operator user may override their values at deployment time. This allows customizing the behavior of an operator.
Tip
Did you know? You can list all parameters for an operator with kubectl kudo package list parameters <operatorname>
# Declaring parameters
Operator developer declares parameters in a params.yaml
file.
This file is mandatory and must be present in the root directory of an operator.
If the operator developer does not wish to provide any parameters, the file may be empty.
The following example illustrates the structure of the file:
apiVersion: kudo.dev/v1beta1
parameters:
- name: BACKUP_FILE
description: "Filename to save the backups to."
default: "backup.sql"
displayName: "BackupFile"
- name: PASSWORD
default: "password"
trigger: backup
- name: OPTIONAL_PARAM
description: "This parameter is not required."
required: False
- name: REQUIRED_PARAM
description: "This parameter is required but does not have a default value."
required: True
- name: ARRAY_PARAM
description: "This parameter describes an array of values."
default:
- user1
- user2
type: array
- name: MAP_PARAM
description: "This parameter describes a map of values."
default:
label1: foo
label2: bar
type: map
A parameter declaration consists of the following attributes:
name
Provides a name of the parameter. Required. It is a convention to use upper-case and separate words with underscores.
displayName
Provides an alternative name of the parameter. Optional. Currently not used anywhere. May be used by user interfaces to KUDO.
description
A description of the purpose of the parameter. Optional. Currently not used anywhere. May be used by user interfaces to KUDO.
type
The type of the parameter value. Optional.
By default, a parameter value is a string. Arrays or maps can be provided by using array
or map
here.
In that case the default value can be provided as YAML.
default
A default value of the parameter. Optional.
Note that omitting this attribute will make the parameter required by default.
You may change that with the required
attribute.
required
Whether a value for this parameter must be explicitly provided at installation time. Optional. Failure to provide a value at installation time will prevent installation from happening.
trigger
Which plan should be triggered when this parameter is changed after initial installation. Optional.
If you do not specify this attribute, the update
or deploy
plan will be triggered.
immutable
If the parameter can be changed in an update to the operator instance. Optional, false by default. When this attribute is set to true, the parameter must also be required or have a default value, in any way the parameter must have a value set when the operator instance is installed and can not be changed later on.
# Overriding parameters
Parameter values may be overridden from the CLI by the operator user.
The install
, upgrade
and update
subcommands of kubectl kudo
take the --parameter
flag
(which may be abbreviated as -p
).
The argument to that flag has the form PARAMETER_NAME=parameter_value
.
Arrays and maps are provided as YAML values, e.g. PARAMETER_NAME='[array_value_1, array_value_2]'
' for arrays, PARAMETER_NAME='{map_key_1: map_value_1, map_key_2: map_value_2}'
for maps.
This flag may be specified many times to change more parameters in a single run.
# Triggers
Operator developer may specify the name of the plan which should be triggered when the value of this parameter is changed in an update.
In other words, this plan will apply the parameter change to your Kubernetes application.
If no trigger is specified, the update
plan will be triggered by default.
If no update
plan exists for this operator, the deploy
plan is triggered.
WARNING
It is currently not specified what happens when a single update changes parameters which refer to more than one trigger plan.
# Immutability
Operators may often have parameters that have to be set at installation time but can not be changed later on. For example
the NUM_TOKENS
parameter in the KUDO Cassandra operator defines the number of tokens that each node in a cluster manages.
This value can not be changed in the lifetime of a Cassandra cluster; if the user wants to change this he must create a new
cluster with a different value and migrate the data.
A parameter that is defined as immutable must either have a default value, or it must be marked as required - both ways ensure that the parameter will have a value at installation.
When an operator instance is updated, the user can not change the value of immutable parameters or KUDO will decline the update.
For all details on immutability, read the KEP-30 (opens new window)