Skip to content

NylRelease

The NylRelease resource specifies release metadata (name and namespace) for a deployment. It’s an optional resource that provides context for rendering manifests.

apiVersion: nyl.niklasrosenstein.github.com/v1
kind: NylRelease
metadata:
name: string # Release name
namespace: string # Target namespace
spec: {} # Reserved for future use
argocd: # Optional ArgoCD customization
applicationOverride: {} # Partial Application override (object)
  • Type: string (required)
  • Description: The release name
  • Usage: Used as the Helm release name when rendering HelmCharts
  • Type: string (required)
  • Description: The target namespace for this release
  • Usage: Resources are deployed to this namespace
  • Type: object (optional)
  • Description: Partial ArgoCD Application override for use with ApplicationGenerator release customization policy
  • Behavior:
    • Override fields are applied only if allowed by ApplicationGenerator.spec.releaseCustomization
    • Plain keys replace the generated Application value at that field path
    • Keys prefixed with + append to list-valued Application fields instead of replacing them
    • +<field> uses the canonical field path without + for allow/deny checks
    • Unsupported or disallowed fields are ignored
    • Invalid append operations (for example using + on a non-list field or with a non-list value) are ignored
    • Ignored fields are reported as a warning in generated Application.spec.info

When nyl render encounters a NylRelease:

  1. The resource is extracted from the file
  2. Metadata is used for rendering other resources in the file
  3. The NylRelease itself is not included in the output

When ApplicationGenerator scans files:

  1. Files with a NylRelease are discovered
  2. An ArgoCD Application is generated per NylRelease
  3. Application metadata comes from the NylRelease

Only one NylRelease is allowed per file. Multiple NylReleases in the same file will cause an error:

Error: Multiple NylRelease resources found in file
apiVersion: nyl.niklasrosenstein.github.com/v1
kind: NylRelease
metadata:
name: myapp
namespace: default
apiVersion: nyl.niklasrosenstein.github.com/v1
kind: NylRelease
metadata:
name: myapp
namespace: production
---
apiVersion: v1
kind: ConfigMap
metadata:
name: myapp-config
namespace: production
data:
environment: production
version: "1.0.0"
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
namespace: production
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myapp:1.0.0
apiVersion: nyl.niklasrosenstein.github.com/v1
kind: NylRelease
metadata:
name: nginx
namespace: web
---
apiVersion: nyl.niklasrosenstein.github.com/v1
kind: HelmChart
metadata:
name: nginx
namespace: web
spec:
chart:
repository: https://charts.bitnami.com/bitnami
name: nginx
version: "15.4.4"
values:
replicaCount: 2

NylRelease is primarily used for ArgoCD integration:

# app.yaml in Git repository
apiVersion: nyl.niklasrosenstein.github.com/v1
kind: NylRelease
metadata:
name: myapp
namespace: production
---
# ... other resources ...

ArgoCD Application:

apiVersion: argoproj.io/v1alpha1
kind: Application
spec:
source:
plugin:
name: nyl-v2
env:
- name: NYL_RELEASE_NAME
value: myapp # From NylRelease.metadata.name
- name: NYL_RELEASE_NAMESPACE
value: production # From NylRelease.metadata.namespace

applicationOverride can append to list-valued Application fields by prefixing the field name with +.

apiVersion: nyl.niklasrosenstein.github.com/v1
kind: NylRelease
metadata:
name: service-proxies
namespace: home-proxy
spec:
argocd:
applicationOverride:
spec:
syncPolicy:
+syncOptions:
- RespectIgnoreDifferences=false

When combined with an ApplicationGenerator default such as:

syncPolicy:
syncOptions:
- ServerSideApply=true
- ApplyOutOfSyncOnly=true

the generated ArgoCD Application contains all three entries in order:

spec:
syncPolicy:
syncOptions:
- ServerSideApply=true
- ApplyOutOfSyncOnly=true
- RespectIgnoreDifferences=false

ApplicationGenerator scans for NylRelease resources:

apps.yaml
apiVersion: argocd.nyl.niklasrosenstein.github.com/v1
kind: ApplicationGenerator
spec:
source:
path: clusters/default # Scans this directory

For each file in clusters/default/ with a NylRelease, an Application is generated.

NylRelease metadata can be used in templates (future enhancement):

apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .release.name }}-config
namespace: {{ .release.namespace }}
data:
release_name: {{ .release.name }}
  • metadata.name must be specified
  • metadata.namespace must be specified

Missing fields cause validation errors:

Error: Invalid NylRelease resource: missing field `metadata.name`

Names must follow Kubernetes naming conventions:

  • Lowercase alphanumeric characters, -, .
  • Start and end with alphanumeric
  • Max 253 characters

You don’t need NylRelease if:

  • Deploying plain Kubernetes manifests without Helm
  • Not using ArgoCD integration
  • Rendering manifests locally without release context

In these cases, just use regular Kubernetes resources directly.