nyl 0.4.0

Kubernetes manifest generator with Helm integration
Documentation
# Resources

Nyl provides Kubernetes-style custom resources for declarative configuration and deployment.

## Resource Types

### Core Resources

- **[NylRelease]./resources/nyl-release.md**: Defines release metadata (name, namespace) for deployments
- **[Component]./resources/component.md**: Compact chart-backed resource using dynamic `kind` lookup
- **[HelmChart]./resources/helmchart.md**: Declarative Helm chart deployment with templating support
- **[RemoteManifest]./resources/remote-manifest.md**: Fetch and include manifests from a remote HTTPS URL

### ArgoCD Resources

- **[ApplicationGenerator]./resources/application-generator.md**: Automatically generates ArgoCD Applications from NylRelease files

### Policy Resources

- **[Kyverno Policies]./kyverno-policies.md**: Apply Kyverno mutation and validation policies at render time

## Resource Format

All Nyl resources follow Kubernetes resource conventions:

```yaml
apiVersion: <api-version>
kind: <resource-kind>
metadata:
  name: <name>
  namespace: <namespace>  # Optional
spec:
  # Resource-specific fields
```

## API Versions

- `nyl.niklasrosenstein.github.com/v1`: Core Nyl resources (NylRelease, HelmChart)
  - Includes: `NylRelease`, `HelmChart`, `RemoteManifest`
- `argocd.nyl.niklasrosenstein.github.com/v1`: ArgoCD integration resources (ApplicationGenerator)
- `components.nyl.niklasrosenstein.github.com/v1`: Component resources (dynamic `kind` path/shortcut)

## Processing Behavior

### Regular Kubernetes Resources

Regular Kubernetes resources (ConfigMap, Deployment, etc.) are passed through unchanged during `nyl render`.

### Nyl Resources

Nyl resources are processed based on their kind:

- **NylRelease**: Extracted and removed from output (provides metadata only)
- **Component**: Resolved to a chart reference and rendered via Helm, replaced with rendered manifests
- **HelmChart**: Rendered using Helm templating, replaced with rendered manifests
- **RemoteManifest**: Fetched via HTTPS and parsed into documents, then processed recursively
- **ApplicationGenerator**: Processed to generate ArgoCD Applications, removed from output

## Multi-Document Files

Nyl supports YAML multi-document files with `---` separators:

```yaml
apiVersion: nyl.niklasrosenstein.github.com/v1
kind: NylRelease
metadata:
  name: myapp
  namespace: default
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: myapp-config
data:
  key: value
---
apiVersion: v1
kind: Service
metadata:
  name: myapp-svc
spec:
  ports:
    - port: 80
```

Processing:
1. NylRelease is extracted (provides name and namespace)
2. ConfigMap and Service are output as-is

## See Also

- [Configuration]../configuration.md
- [Commands]../commands/README.md