This guide covers how to configure the three parameterization mechanisms in Nuon: inputs, variables, and secrets.
Inputs are defined in an inputs.toml file in the root of your app directory:
[[group]]
name = "dns"
description = "DNS configuration"
display_name = "DNS"
[[input]]
name = "root_domain"
description = "The root domain for the install."
default = "app.example.com"
display_name = "Root Domain"
group = "dns"
required = true
Use inputs in sandbox or component config:
[vars]
public_root_domain = "{{ .nuon.inputs.inputs.root_domain }}"
By default, inputs are vendor-facing and set through the dashboard. To allow customers to set an input directly through the install stack (CloudFormation, Bicep), mark it as user_configurable:
[[input]]
name = "sub_domain"
display_name = "Sub Domain"
description = "The sub domain for the service."
default = "whoami"
user_configurable = true
Customer-facing inputs can only be modified by the customer through the install stack. Changes trigger redeployment of dependent components.
Inputs can be organized into groups to control how they are displayed in the dashboard during install creation:
[[group]]
name = "db"
description = "Database configuration"
display_name = "Database"
[[input]]
name = "db_password"
description = "Password for the database."
sensitive = true
display_name = "Password"
group = "db"
Variables
Variables are managed through the CLI:
nuon apps variables create --name=external_api_key --value=your-api-key
nuon apps variables list
nuon variables delete --id=app_variable_id
Variables are accessed in config using {{ .nuon.app.variables.<variable-name> }}.
If you add or update a variable after an install has been created, the install’s state must be refreshed before the new value is available. Running a deploy or sandbox provision triggers a state update.
Secrets
Secret metadata is defined in a secrets.toml file. The actual values are entered by the customer when deploying the install stack:
[[secret]]
name = "github_app_key"
display_name = "GitHub App Key"
description = "Base64 encoded GitHub App Key"
required = true
format = "base64"
kubernetes_sync = true
kubernetes_secret_namespace = "control-plane"
kubernetes_secret_name = "github-app-key"
Setting kubernetes_sync = true syncs the secret as a Kubernetes Secret object after sandbox provisioning, using value as the key.
Using Secrets in Components
Secrets are referenced as outputs from the install stack:
[vars]
secret_arn = "{{ .nuon.install_stack.outputs.rds_secret_arn }}"
In Helm charts, reference the synced Kubernetes secret:
env:
- name: API_KEY
valueFrom:
secretKeyRef:
name: vendor-license-key
key: value
Changing Secrets
If you change a secret value outside of Nuon (e.g., directly in AWS Secrets Manager), Nuon will not detect the change. You will need to reprovision the install or manually redeploy dependent components. If secrets are configured to sync with Kubernetes, use the “sync secrets” option in the dashboard.