nyl 0.10.2__tar.gz → 0.10.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- nyl-0.10.4/.changelog/0.10.3.toml +13 -0
- {nyl-0.10.2 → nyl-0.10.4}/.github/workflows/docs.yaml +16 -14
- {nyl-0.10.2 → nyl-0.10.4}/PKG-INFO +1 -1
- {nyl-0.10.2 → nyl-0.10.4}/argocd-cmp/Dockerfile +4 -4
- {nyl-0.10.2 → nyl-0.10.4}/argocd-cmp/plugin.yaml +1 -1
- {nyl-0.10.2 → nyl-0.10.4}/docs/content/changelog.md +12 -1
- {nyl-0.10.2 → nyl-0.10.4}/docs/content/reference/argocd-plugin.md +4 -0
- {nyl-0.10.2 → nyl-0.10.4}/pyproject.toml +1 -1
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/commands/__init__.py +4 -1
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/commands/template.py +2 -1
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/tools/kubernetes.py +14 -0
- {nyl-0.10.2 → nyl-0.10.4}/uv.lock +333 -332
- {nyl-0.10.2 → nyl-0.10.4}/.changelog/0.10.0.toml +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/.changelog/0.10.1.toml +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/.changelog/0.10.2.toml +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/.changelog/0.7.0.toml +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/.changelog/0.7.1.toml +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/.changelog/0.7.2.toml +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/.changelog/0.8.0.toml +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/.changelog/0.8.1.toml +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/.changelog/0.9.0.toml +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/.changelog/0.9.1.toml +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/.changelog/0.9.2.toml +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/.changelog/0.9.3.toml +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/.changelog/0.9.4.toml +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/.envrc +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/.github/workflows/docker.yaml +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/.github/workflows/python.yaml +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/.github/workflows/update-flake-lock.yaml +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/.gitignore +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/README.md +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/argocd-cmp/README.md +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/argocd-with-nyl/.envrc +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/argocd-with-nyl/.secrets.yaml +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/argocd-with-nyl/.sops.yaml +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/argocd-with-nyl/README.md +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/argocd-with-nyl/argocd.yaml +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/argocd-with-nyl/nyl-project.yaml +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/argocd-with-nyl/nyl-secrets.yaml +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/docs/content/index.md +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/docs/content/reference/applysets.md +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/docs/content/reference/cluster-connectivity.md +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/docs/content/reference/configuration/environment.md +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/docs/content/reference/configuration/profiles.md +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/docs/content/reference/configuration/projects.md +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/docs/content/reference/configuration/secrets.md +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/docs/content/reference/configuration-api/profiles.md +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/docs/content/reference/configuration-api/secrets.md +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/docs/content/reference/glossary.md +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/docs/content/reference/templating/basics.md +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/docs/content/reference/templating/components.md +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/docs/content/reference/templating/inlining/helmcharts.md +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/docs/content/reference/templating/inlining/overview.md +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/docs/content/reference/templating/inlining/postprocessor.md +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/docs/content/reference/templating/locals.md +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/docs/content/reference/templating/secrets.md +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/docs/mkdocs.yml +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/docs/pyproject.toml +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/docs/uv.lock +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/example/manifests/postgres.yaml +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/example/nyl-profiles.toml +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/example/nyl-profiles.yaml +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/example/nyl-secrets.yaml +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/example/secrets.yaml +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/flake.lock +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/flake.nix +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/nix/uv.nix +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/renovate.json +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/kubernetes/README.md +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/kubernetes/__init__.pyi +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/kubernetes/dynamic/__init__.pyi +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/kubernetes/dynamic/client.pyi +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/kubernetes/dynamic/discovery.pyi +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/kubernetes/dynamic/exceptions.pyi +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/kubernetes/dynamic/resource.pyi +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/kubernetes/watch/__init__.pyi +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/kubernetes/watch/watch.pyi +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/__init__.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/commands/add.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/commands/crds.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/commands/new.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/commands/profile.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/commands/run.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/commands/secrets.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/commands/tools/__init__.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/commands/tools/bcrypt.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/commands/tools/sops.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/commands/tun.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/daemon.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/generator/__init__.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/generator/components.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/generator/dispatch.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/generator/dispatch_test.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/generator/helmchart.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/generator/helmchart_test.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/generator/statefulsecret.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/profiles/__init__.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/profiles/config.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/profiles/config_test.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/profiles/kubeconfig.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/profiles/tunnel.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/project/config.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/resources/__init__.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/resources/applyset.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/resources/applyset_test.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/resources/helmchart.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/resources/helmchart_test.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/resources/placeholder.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/resources/postprocessor.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/resources/postprocessor_test.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/resources/statefulsecret.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/secrets/__init__.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/secrets/config.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/secrets/config_test.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/secrets/kubernetes.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/secrets/null.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/secrets/sops.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/secrets/sops_test.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/templating.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/templating_test.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/tools/di.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/tools/fs.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/tools/fs_test.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/tools/kubectl.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/tools/kvstore.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/tools/loads.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/tools/logging.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/tools/pyroscope.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/tools/shell.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/tools/testing.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/tools/typer.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/tools/types.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/tools/url.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/nyl/tools/yaml.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/src/pyroscope/__init__.pyi +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/testdata/helm-test-chart/Chart.yaml +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/testdata/helm-test-chart/templates/sa.yaml +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/testdata/helm-test-chart/values.yaml +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/tests/__init__.py +0 -0
- {nyl-0.10.2 → nyl-0.10.4}/tests/conftest.py +0 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
release-date = "2025-05-08"
|
|
2
|
+
|
|
3
|
+
[[entries]]
|
|
4
|
+
id = "67d4932f-0e84-4299-90ae-333cf7774ee0"
|
|
5
|
+
type = "improvement"
|
|
6
|
+
description = "Further improve filtering of env vars that start with ARGOCD_ but are Kubernetes-specific"
|
|
7
|
+
author = "@NiklasRosenstein"
|
|
8
|
+
|
|
9
|
+
[[entries]]
|
|
10
|
+
id = "5b794574-bca0-4160-b2ff-3f5d68e296a9"
|
|
11
|
+
type = "improvement"
|
|
12
|
+
description = "Automatically drop empty `.metadata.labels` fields from resources generated with `nyl template` to prevent resources with such labels to immediately be `OutOfSync` after apply in ArgoCD"
|
|
13
|
+
author = "@NiklasRosenstein"
|
|
@@ -2,19 +2,21 @@ name: Documentation
|
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
4
|
push:
|
|
5
|
-
branches: [
|
|
6
|
-
tags: [ '*' ]
|
|
7
|
-
pull_request:
|
|
8
|
-
branches: [ develop ]
|
|
5
|
+
branches: [develop]
|
|
9
6
|
|
|
10
7
|
jobs:
|
|
11
8
|
build:
|
|
12
9
|
runs-on: ubuntu-latest
|
|
13
10
|
permissions:
|
|
14
|
-
contents:
|
|
15
|
-
|
|
11
|
+
contents: read
|
|
12
|
+
pages: write
|
|
13
|
+
id-token: write
|
|
14
|
+
environment:
|
|
15
|
+
name: github-pages
|
|
16
|
+
url: ${{steps.deployment.outputs.page_url}}
|
|
16
17
|
steps:
|
|
17
18
|
- uses: actions/checkout@v4
|
|
19
|
+
- uses: actions/configure-pages@v5
|
|
18
20
|
- name: Check Nix flake Nixpkgs inputs
|
|
19
21
|
uses: DeterminateSystems/flake-checker-action@main
|
|
20
22
|
- uses: cachix/install-nix-action@v31
|
|
@@ -24,15 +26,15 @@ jobs:
|
|
|
24
26
|
with:
|
|
25
27
|
name: mycache
|
|
26
28
|
# If you chose signing key for write access
|
|
27
|
-
signingKey:
|
|
29
|
+
signingKey: "${{ secrets.CACHIX_SIGNING_KEY }}"
|
|
28
30
|
# If you chose API tokens for write access OR if you have a private cache
|
|
29
|
-
authToken:
|
|
30
|
-
|
|
31
|
+
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
31
32
|
- name: Build docs
|
|
32
33
|
run: nix run .#docs build
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
uses: peaceiris/actions-gh-pages@v4
|
|
34
|
+
- name: Upload Artifact
|
|
35
|
+
uses: actions/upload-pages-artifact@v3
|
|
36
36
|
with:
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
path: ./docs/site
|
|
38
|
+
- name: Deploy to GitHub Pages
|
|
39
|
+
id: deployment
|
|
40
|
+
uses: actions/deploy-pages@v4
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
FROM python:3.13-slim AS build_base
|
|
2
|
-
COPY --from=ghcr.io/astral-sh/uv:0.7.
|
|
2
|
+
COPY --from=ghcr.io/astral-sh/uv:0.7.12 /uv /bin/uv
|
|
3
3
|
|
|
4
4
|
#: Build Nyl itself.
|
|
5
5
|
#: -----------------
|
|
@@ -41,7 +41,7 @@ RUN \
|
|
|
41
41
|
FROM fetch-bin-base AS argocd-bin
|
|
42
42
|
# Find ArgoCD releases at https://github.com/argoproj/argo-cd/releases
|
|
43
43
|
# renovate: datasource=github-releases depName=argocd packageName=argoproj/argo-cd
|
|
44
|
-
ARG ARGOCD_VERSION=v2.14.
|
|
44
|
+
ARG ARGOCD_VERSION=v2.14.14
|
|
45
45
|
RUN curl -sSfLo /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/download/${ARGOCD_VERSION}/argocd-linux-$(cat /BINARY_ARCH) \
|
|
46
46
|
&& chmod +x /usr/local/bin/argocd \
|
|
47
47
|
&& upx /usr/local/bin/argocd \
|
|
@@ -50,7 +50,7 @@ RUN curl -sSfLo /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releas
|
|
|
50
50
|
FROM fetch-bin-base AS helm-bin
|
|
51
51
|
# Find Helm releases at https://github.com/helm/helm/releases
|
|
52
52
|
# renovate: datasource=github-releases depName=helm packageName=helm/helm
|
|
53
|
-
ARG HELM_VERSION=v3.
|
|
53
|
+
ARG HELM_VERSION=v3.18.2
|
|
54
54
|
RUN curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 \
|
|
55
55
|
&& chmod 700 get_helm.sh \
|
|
56
56
|
&& ./get_helm.sh --version $HELM_VERSION \
|
|
@@ -69,7 +69,7 @@ RUN curl -fLO https://github.com/getsops/sops/releases/download/${SOPS_VERSION}/
|
|
|
69
69
|
|
|
70
70
|
FROM fetch-bin-base AS kyverno-bin
|
|
71
71
|
# renovate: datasource=github-releases depName=kyverno packageName=kyverno/kyverno
|
|
72
|
-
ARG KYVERNO_VERSION=1.14.
|
|
72
|
+
ARG KYVERNO_VERSION=1.14.2
|
|
73
73
|
RUN \
|
|
74
74
|
case "$(uname -m)" in \
|
|
75
75
|
x86_64) KYVERNO_ARCH='x86_64' ;; \
|
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
## 0.10.3 (2025-05-08)
|
|
2
|
+
|
|
3
|
+
<table><tr><th>Type</th><th>Description</th><th>PR</th><th>Issues</th><th>Author</th></tr>
|
|
4
|
+
<tr><td>Improvement</td><td>
|
|
5
|
+
|
|
6
|
+
Further improve filtering of env vars that start with ARGOCD_ but are Kubernetes-specific</td><td></td><td></td><td>@NiklasRosenstein</td></tr>
|
|
7
|
+
<tr><td>Improvement</td><td>
|
|
8
|
+
|
|
9
|
+
Automatically drop empty `.metadata.labels` fields from resources generated with `nyl template` to prevent resources with such labels to immediately be `OutOfSync` after apply in ArgoCD</td><td></td><td></td><td>@NiklasRosenstein</td></tr>
|
|
10
|
+
</table>
|
|
11
|
+
|
|
1
12
|
## 0.10.2 (2025-05-08)
|
|
2
13
|
|
|
3
14
|
<table><tr><th>Type</th><th>Description</th><th>PR</th><th>Issues</th><th>Author</th></tr>
|
|
@@ -192,6 +203,6 @@ Refactor `PostProcessor` implementation for generating policy files and invoking
|
|
|
192
203
|
`PostProcessor` log for invoking Kyverno now lists the policy file paths that are going to be applied</td><td></td><td></td><td>@NiklasRosenstein</td></tr>
|
|
193
204
|
<tr><td>Fix</td><td>
|
|
194
205
|
|
|
195
|
-
`nyl new chart` now generates 2-space indented YAML and has a more complete template</td><td></td><td><a href="https://github.com/NiklasRosenstein/nyl/issues/47">47</a></td><td>@NiklasRosenstein</td></tr>
|
|
206
|
+
`nyl new chart` now generates 2-space indented YAML and has a more complete template</td><td></td><td><a href="https://github.com/NiklasRosenstein/nyl/issues/47">NiklasRosenstein/nyl#47</a></td><td>@NiklasRosenstein</td></tr>
|
|
196
207
|
</table>
|
|
197
208
|
|
|
@@ -53,6 +53,10 @@ repoServer:
|
|
|
53
53
|
|
|
54
54
|
## Installation (Daemon)
|
|
55
55
|
|
|
56
|
+
!!! warning
|
|
57
|
+
|
|
58
|
+
The daemon mode is currently in an experimental state and not recommended for production use.
|
|
59
|
+
|
|
56
60
|
The above example will invoke the `nyl template` command again and again for each time an application's manifests are
|
|
57
61
|
refreshed by ArgoCD. This carries a bit of a performance penalty, since a new Nyl process is spawned each time and
|
|
58
62
|
loading its code from disk.
|
|
@@ -88,7 +88,10 @@ def _callback(
|
|
|
88
88
|
for key, value in os.environ.items():
|
|
89
89
|
if (
|
|
90
90
|
# Keep ARGOCD_ environment variables but filter out those that are likely set by Kubernetes.
|
|
91
|
-
(
|
|
91
|
+
(
|
|
92
|
+
key.startswith("ARGOCD_")
|
|
93
|
+
and not any(x in key for x in ["_PORT", "_PROTO", "_SERVER", "_HOST", "_SERVICE", "_TCP", "_UDP"])
|
|
94
|
+
)
|
|
92
95
|
or key.startswith("NYL_")
|
|
93
96
|
or key.startswith("KUBE_")
|
|
94
97
|
):
|
|
@@ -27,7 +27,7 @@ from nyl.secrets.config import SecretsConfig
|
|
|
27
27
|
from nyl.templating import NylTemplateEngine
|
|
28
28
|
from nyl.tools import yaml
|
|
29
29
|
from nyl.tools.kubectl import Kubectl
|
|
30
|
-
from nyl.tools.kubernetes import populate_namespace_to_resources
|
|
30
|
+
from nyl.tools.kubernetes import drop_empty_metadata_labels, populate_namespace_to_resources
|
|
31
31
|
from nyl.tools.logging import lazy_str
|
|
32
32
|
from nyl.tools.types import Resource, ResourceList
|
|
33
33
|
|
|
@@ -365,6 +365,7 @@ def template(
|
|
|
365
365
|
labels[APPLYSET_LABEL_PART_OF] = applyset.id
|
|
366
366
|
|
|
367
367
|
populate_namespace_to_resources(source.resources, current_default_namespace)
|
|
368
|
+
drop_empty_metadata_labels(source.resources)
|
|
368
369
|
|
|
369
370
|
# Now apply the post-processor.
|
|
370
371
|
source.resources = PostProcessor.apply_all(source.resources, post_processors, source.file)
|
|
@@ -51,6 +51,20 @@ def populate_namespace_to_resources(resources: list[Resource], namespace: str) -
|
|
|
51
51
|
resource["metadata"]["namespace"] = namespace
|
|
52
52
|
|
|
53
53
|
|
|
54
|
+
def drop_empty_metadata_labels(resources: list[Resource]) -> None:
|
|
55
|
+
"""
|
|
56
|
+
Drop the `metadata.labels` field from all resources that have it but are empty.
|
|
57
|
+
|
|
58
|
+
This gets applied to resources after templating as it can cause the resources to be OutOfSync immediately
|
|
59
|
+
after apply as the Kubernetes API stores the empty labels as `null` instead of `{}`.
|
|
60
|
+
"""
|
|
61
|
+
|
|
62
|
+
for resource in resources:
|
|
63
|
+
if "metadata" in resource and "labels" in resource["metadata"]:
|
|
64
|
+
if not resource["metadata"]["labels"]:
|
|
65
|
+
del resource["metadata"]["labels"]
|
|
66
|
+
|
|
67
|
+
|
|
54
68
|
def is_cluster_scoped_resource(manifest: Resource) -> bool:
|
|
55
69
|
"""
|
|
56
70
|
Check if a manifest is a cluster scoped resource.
|