-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: correctly assign apps to nested envs #389
Conversation
Before, if myks is tasked to process several intersecting environments, the application list from the last collected environment was winning. For example, with the following search paths: ``` envs/foo: app1, app2 envs/foo/bar: app3 ``` The environment `envs/foo/bar` was processed with `app3` instead of `app1`, `app2`, and `app3`. Moreover, empty application lists were not handled correctly. If an application list is empty, all applications in the environment should be processed.
@Zebradil I tried to reproduce the issue without any luck. I tried the default repo from envs/mykso/env-data.mykso.yaml #@data/values
---
environment:
id: mykso
applications:
- proto: argocd envs/mykso/dev/env-data.dev.yaml #@data/values
---
environment:
id: mykso-dev
applications:
- proto: httpbingo For me old and new myks are doing the same things... myks from this PR (with one additional log to log the search path in each loop): ❯ myks-new render mykso,mykso/dev
10:16AM INF Using config file: /home/kbudde/pprojects/myks-base/.myks.yaml
10:16AM INF Setting log level to: info
10:16AM ERR Ran git
git -C . remote get-url origin
10:16AM ERR Fehler: Remote-Repository 'origin' nicht gefunden
10:16AM WRN Unable to set git repo branch error="exit status 2"
looking into envs/mykso
looking into envs/mykso/dev
looking into envs/mykso/dev
10:16AM INF [mykso > argocd > render-helm] Helm chart rendered
10:16AM INF [mykso-dev > argocd > render-helm] Helm chart rendered
10:16AM INF [mykso-dev > httpbingo > render-helm] Helm chart rendered
10:16AM INF [mykso-dev > httpbingo > render-ytt] Local ytt rendered
10:16AM INF [mykso-dev > httpbingo > render] Completed
10:16AM INF [mykso-dev > argocd > render-ytt] Local ytt rendered
10:16AM INF [mykso > argocd > render-ytt] Local ytt rendered
10:16AM INF [mykso-dev > argocd > render] Completed
10:16AM INF [mykso > argocd > render] Completed myks from main branch: ❯ myks-main render mykso,mykso/dev
10:17AM INF Using config file: /home/kbudde/pprojects/myks-base/.myks.yaml
10:17AM INF Setting log level to: info
10:17AM ERR Ran git
git -C . remote get-url origin
10:17AM ERR Fehler: Remote-Repository 'origin' nicht gefunden
10:17AM WRN Unable to set git repo branch error="exit status 2"
10:17AM INF [mykso > argocd > render-helm] Helm chart rendered
10:17AM INF [mykso-dev > argocd > render-helm] Helm chart rendered
10:17AM INF [mykso-dev > httpbingo > render-helm] Helm chart rendered
10:17AM INF [mykso-dev > httpbingo > render-ytt] Local ytt rendered
10:17AM INF [mykso-dev > httpbingo > render] Completed
10:17AM INF [mykso > argocd > render-ytt] Local ytt rendered
10:17AM INF [mykso-dev > argocd > render-ytt] Local ytt rendered
10:17AM INF [mykso-dev > argocd > render] Completed
10:17AM INF [mykso > argocd > render] Completed |
There are differences between both versions if I provide the list of applications to render
❯ myks-main render mykso,mykso/dev argocd,httpbingo
10:25AM INF Using config file: /home/kbudde/pprojects/myks-base/.myks.yaml
10:25AM INF Setting log level to: info
10:25AM ERR Ran git
git -C . remote get-url origin
10:25AM ERR Fehler: Remote-Repository 'origin' nicht gefunden
10:25AM WRN Unable to set git repo branch error="exit status 2"
10:25AM WRN [mykso > init] Application not found app=httpbingo dir=envs/mykso
10:25AM INF [mykso > argocd > render-helm] Helm chart rendered
10:25AM INF [mykso-dev > argocd > render-helm] Helm chart rendered
10:25AM INF [mykso-dev > httpbingo > render-helm] Helm chart rendered
10:25AM INF [mykso-dev > httpbingo > render-ytt] Local ytt rendered
10:25AM INF [mykso-dev > httpbingo > render] Completed
10:25AM INF [mykso-dev > argocd > render-ytt] Local ytt rendered
10:25AM INF [mykso > argocd > render-ytt] Local ytt rendered
10:25AM INF [mykso > argocd > render] Completed
10:25AM INF [mykso-dev > argocd > render] Completed ❯ myks-new render mykso,mykso/dev argocd,httpbingo
10:25AM INF Using config file: /home/kbudde/pprojects/myks-base/.myks.yaml
10:25AM INF Setting log level to: info
10:25AM ERR Ran git
git -C . remote get-url origin
10:25AM ERR Fehler: Remote-Repository 'origin' nicht gefunden
10:25AM WRN Unable to set git repo branch error="exit status 2"
looking into envs/mykso
looking into envs/mykso/dev
looking into envs/mykso/dev
10:25AM WRN [mykso > init] Application not found app=httpbingo dir=envs/mykso
10:25AM INF [mykso > argocd > render-helm] Helm chart rendered
10:25AM INF [mykso-dev > argocd > render-helm] Helm chart rendered
10:25AM INF [mykso-dev > argocd > render-helm] Helm chart rendered
10:25AM INF [mykso-dev > httpbingo > render-helm] Helm chart rendered
10:25AM INF [mykso-dev > httpbingo > render-helm] Helm chart rendered
10:25AM INF [mykso-dev > httpbingo > render-ytt] Local ytt rendered
10:25AM INF [mykso-dev > httpbingo > render-ytt] Local ytt rendered
10:25AM INF [mykso-dev > httpbingo > render] Completed
10:25AM INF [mykso-dev > httpbingo > render] Completed
10:25AM INF [mykso > argocd > render-ytt] Local ytt rendered
10:25AM INF [mykso-dev > argocd > render-ytt] Local ytt rendered
10:25AM INF [mykso-dev > argocd > render-ytt] Local ytt rendered
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/customresourcedefinition-applications.argoproj.io.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/customresourcedefinition-applicationsets.argoproj.io.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/customresourcedefinition-appprojects.argoproj.io.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/serviceaccount-argocd-application-controller.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/serviceaccount-argocd-applicationset-controller.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/serviceaccount-argocd-dex-server.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/serviceaccount-argocd-notifications-controller.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/serviceaccount-argocd-redis-ha.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/serviceaccount-argocd-redis-ha-haproxy.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/serviceaccount-argocd-repo-server.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/serviceaccount-argocd-server.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/role-argocd-application-controller.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/role-argocd-applicationset-controller.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/role-argocd-dex-server.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/role-argocd-notifications-controller.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/role-argocd-redis-ha.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/role-argocd-redis-ha-haproxy.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/role-argocd-server.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/clusterrole-argocd-application-controller.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/clusterrole-argocd-server.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/rolebinding-argocd-application-controller.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/rolebinding-argocd-applicationset-controller.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/rolebinding-argocd-dex-server.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/rolebinding-argocd-notifications-controller.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/rolebinding-argocd-redis-ha.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/rolebinding-argocd-redis-ha-haproxy.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/rolebinding-argocd-server.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/clusterrolebinding-argocd-application-controller.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/clusterrolebinding-argocd-server.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/configmap-argocd-cm.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/configmap-argocd-cmd-params-cm.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/configmap-argocd-gpg-keys-cm.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/configmap-argocd-notifications-cm.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/configmap-argocd-rbac-cm.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/configmap-argocd-redis-ha-configmap.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/configmap-argocd-redis-ha-health-configmap.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/configmap-argocd-ssh-known-hosts-cm.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/configmap-argocd-tls-certs-cm.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/secret-argocd-notifications-secret.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/secret-argocd-secret.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/service-argocd-applicationset-controller.yaml
10:25AM INF [mykso-dev > argocd > render] Completed
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/service-argocd-dex-server.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/service-argocd-metrics.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/service-argocd-notifications-controller-metrics.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/service-argocd-redis-ha.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/service-argocd-redis-ha-announce-0.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/service-argocd-redis-ha-announce-1.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/service-argocd-redis-ha-announce-2.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/service-argocd-redis-ha-haproxy.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/service-argocd-repo-server.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/service-argocd-server.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/service-argocd-server-metrics.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/deployment-argocd-applicationset-controller.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/deployment-argocd-dex-server.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/deployment-argocd-notifications-controller.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/deployment-argocd-redis-ha-haproxy.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/deployment-argocd-repo-server.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/deployment-argocd-server.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/statefulset-argocd-application-controller.yaml
10:25AM INF [mykso > argocd > render] Completed
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/statefulset-argocd-redis-ha-server.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/networkpolicy-argocd-application-controller-network-policy.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/networkpolicy-argocd-applicationset-controller-network-policy.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/networkpolicy-argocd-dex-server-network-policy.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/networkpolicy-argocd-notifications-controller-network-policy.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/networkpolicy-argocd-redis-ha-proxy-network-policy.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/networkpolicy-argocd-redis-ha-server-network-policy.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/networkpolicy-argocd-repo-server-network-policy.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/networkpolicy-argocd-server-network-policy.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/configmap-cmp-plugin.yaml
10:25AM WRN [mykso-dev > argocd > slice] File already exists. Consider enabling render.includeNamespace file=rendered/envs/mykso-dev/argocd/namespace-argocd.yaml
10:25AM INF [mykso-dev > argocd > render] Completed |
Hey @kbudde, thank you for looking into this. The key thing here is to use the smart mode, i.e. you need to run I've prepared a reproduction to better demonstrate the issue. The change we'll be using for the test is an addition of two files to two different applications on different levels of the environment hierarchy:
I expect both cd "$(mktemp -d)"
git clone https://github.com/Zebradil/myks-389-repro.git
git checkout smart-mode-test
myks render --smart-mode.base-revision=smart-mode-base --log-level=debug 2>&1 | rg '(Detected changes|Collected environments)' Output before the fix:
Note the last line: only Output after the fix:
Here in the last line we now see both |
I'll take a look into the duplicated rendering from this comment: #389 (comment) |
Yeah, it's a new bug:
Note duplicated |
Fixed. Also added tests. |
@kbudde I'll merge this for now, because I need this fix asap. But I'd appreciate if you take another look and provide a feedback if you see something. |
Before, if myks is tasked to process several intersecting environments, the
application list from the last collected environment was winning.
For example, with the following search paths:
The environment
envs/foo/bar
was processed withapp3
instead ofapp1
,app2
, andapp3
.Moreover, empty application lists were not handled correctly. If an application
list is empty, all applications in the environment should be processed.