Replies: 10 comments 2 replies
-
Update: This did not work. I need a solution here. |
Beta Was this translation helpful? Give feedback.
-
There's a lot of history here. A comma delimited list isn't supported and never was. Wildcards, however, once were. They went pre-GA due both to technical challenges they presented and some edge cases where it proved to be a "foot gun." I think the "foot gun" problem has mostly been resolved through other measures over the last few releases, so there might be room to revisit this at some point, but before going to deep into that, let me ask... If you have one Argo CD Application that's deploying multiple workloads, why model those as separate Stages in Kargo? On the surface, it seems like an odd choice. We more typically see the inverse of that -- one Stage coordinating multiple Argo CD Apps. |
Beta Was this translation helpful? Give feedback.
-
How does a stage manage two different container freight at the same time? How does it know which one it is deploying to which fields in Git? This does not seem like it is explained as a possible avenue in the documentation. You'll have to enlighten me. |
Beta Was this translation helpful? Give feedback.
-
I think you're enlightening me to something that wasn't clear in the higher abstraction of the docs. But is becoming more clear as I read the CRD docs themselves. |
Beta Was this translation helpful? Give feedback.
-
Are you saying this is valid? It would know which freight to apply in the commit stages? |
Beta Was this translation helpful? Give feedback.
-
Apparently not valid. |
Beta Was this translation helpful? Give feedback.
-
I got it working. This definitely needs better docs. This is not at all what I expected was possible. I also found some bugs. As seen by the runtime error. It turns out the first time I try to add freight, it failed. It didn't know what to do with the other freight. I had to go back and add the second freight, which was successful, for the whole thing to become successful going forward. Definitely a setup I didn't expect, but ended up being possible. |
Beta Was this translation helpful? Give feedback.
-
Thank you for clarifying.
I agree it's not.
Since they're deployed by just one Argo CD App they are in fact always deployed together. So your requirement is to be able to update one or the other (or sometimes both?) of the pair of images that will always be deployed together.
Maybe. Before concluding that, let's look at the one Warehouse scenario in more detail using a reference pipeline that looks like dev --> qa --> prod.
This is where we need to stop and ask ourselves what we care about. Freight F2B2 is the shiniest new pair of images that we hope might make it all the way to prod. In relative terms, are we now less enthused about F2B1? F2B1 may remain "ahead" of F2B2 in the pipeline, perhaps even making it all the way to prod hours or days before F2B2, but with any problems discovered with F2B2 along the way notwithstanding, whether it should happens in prod or sooner than that, when F2B2 overtakes F2B1 in the pipeline, do we see it as having fully superseded F2B1? The answer to all of these is often yes. This is a very environment-centric PoV wherein our focus is on promoting a combination of artifacts that's working well in one Stage on to the next one. Note Freight F2B1 still exists, of course. If anything about F2B2 should prove problematic, any Stage that once hosted F2B1 can be restored to that. The only thing we don't have at this point is Freight with the combination of F1 + B2. That's just not the order that things happened in. If we should somehow decide that combination of artifacts is of interest to us, it's easy to manually create F1B2 through the UI. This might be pretty much what you wanted. So why ever have multiple pipelines flowing through some or all Stages? It is something that typically only comes into play for much more complex scenarios. Perhaps not all artifacts need to take the same path from left to right. Perhaps some Stages require artifacts that others do not. Perhaps you frequently encounter the previously mentioned scenario where the shiniest new Freight is F2B2 and for some reason you want to promote a non existent F1B2 into some Stage. Being a frequent occurrence, you don't want to have to manually create F1B2 each time such a need pops up, so you decide to split things out so Fs and Bs flow from left to right on their own separate tracks. Even then, those can often just be two entirely disconnected DAGs (although not in your case, as we've established). I wouldn't say we've observed any of these scenarios to be especially common. I'm glad you started this convo, because it's clear that in the multi-pipeline scenario it might be the case that we're poorly handling the scenario where a user-defined promotion process is intolerant of missing n of m pieces of Freight that it requires. But my main point delving into all of this is to help you avoid complexities that you may not need. I might suggest trying this with a single Warehouse to discover what, if any, pain points drive you toward a more complex option. |
Beta Was this translation helpful? Give feedback.
-
I think one of my takeaways is that I'm still new to Kargo, and there are some capabilities that are not yet documented. Like, single warehouse with multiple freight options. So I’m going to give that a shot regardless. I'll learn something new. Form new plans. I do like the approach of having two DAGs in this situation. I think for the end user, it looks more appealing and clear. This is actually what we did prior to the decision to add the argocd-update step, which needed the permission added. If the permission was able to select multiple Kargo project's and stages in a single app, either by glob or comma, then I could solve this by adding a separate DAG for each container flow. I also think handling the usecase I tried here is interesting too. But, if the stage is missing either F or B, it shouldn't error out. Or maybe it should give a warning. That one of the freight slots remained empty after the operation, but the other one succeeded. I'm going to re-read your last reply a few times. We're dealing with some production issues today that have distracted me from committing my brain fully to this. But it sounds like we're on the same page. |
Beta Was this translation helpful? Give feedback.
-
Yes. I can see why that appeals. Users (and even maintainers) are constantly discovering new and useful patterns. Documenting patterns that address various common use cases is one of my own most important tasks as soon as we wrap up the current release. I also remain amenable to revisiting how necessary the current restrictions on the
Yes. I want to improve this. I don't want to stop things in their tracks when this happens because some promotion processes may actually be more tolerant of some artifacts being missing. I think an error if the promotion process can't tolerate a missing artifact is the right thing -- but it shouldn't be a nil pointer dereference. I need to figure out what's slipping through the cracks and make sure the error message is more clear when this has happened. fwiw, this is a rare occurrence. Each of your Stages is going to be missing some stuff only on the very first Promotion and then that problem won't happen again. I'm sure that's part of why we haven't already looked at this more closely. Anyway... I think there's actionable stuff here and I will open issues for each as soon as I've got a moment.
lmk how it works out. |
Beta Was this translation helpful? Give feedback.
-
Howdy all,
I have an ArgoCD application which has multiple container deployments. What's the correct way to apply the annotation which allows Kargo to interface with that application?
I am going to try with a comma. But there isn't really great documentation on this. I'd like to see the way to do it correctly in the docs, if it's possible.
Beta Was this translation helpful? Give feedback.
All reactions