argo-rollouts icon indicating copy to clipboard operation
argo-rollouts copied to clipboard

Step Plugins

Open zachaller opened this issue 1 year ago • 9 comments

Summary

ArgoCon feedback for step plugins, please provide a thumbs up if you find the feature interesting. Even better if you have a use case please post a sample yaml manifest and/or a description of a use case for step plugins.

https://docs.google.com/presentation/d/1B0xfpQaDJeIsE33DQUKgIrIc5XXwA9X6EmE01iKEWjE/edit#slide=id.g22829a73a56_0_61

Use Cases

When would you use this?


Message from the maintainers:

Impacted by this bug? Give it a 👍. We prioritize the issues with the most 👍.

zachaller avatar Mar 30 '23 14:03 zachaller

I would be very interested in having the ability to use step plugins. In my particular use case I would benefit greatly from a step plugin that can function as a gate based on a metric rule.

My application is stateful in the sense that it sense that it maintains large in memory objects that are flushed to disk when certain conditions are met. The application exposes information about the state of these objects as metrics. Based on the metrics I would like the ability to determine if Rollouts is allowed to progress in to a step and replace one or more containers.

In short: I would love the ability to gate a step based on metrics. The step would wait until the metrics query returns a positive result and then continue with the step.

BasJ93 avatar Apr 20 '23 12:04 BasJ93

Great talk!

I think a great step would be for chatops like you mentioned. I can foresee a template of steps which can then be applied and include their current status. So define your steps like normal but inside of slack for example it would appear as a customizable template where you can click progress and have a live update as it progresses to the next step. A single point to track and progress the rollout

GTB3NW avatar Apr 23 '23 19:04 GTB3NW

Hi, it would be useful to have a custom step that waits until a different rollout in a different cluster reaches the same step index. That would allow us to have more than one rollout happen simultaneously and in a synchronized fashion. The rollouts are going to need something like a common multiClusterRolloutId, so that the step can identify the correct rollout.

akorzy-pl avatar Apr 27 '23 12:04 akorzy-pl

Hi again, it would be useful to have the ability to pass data between different steps of a rollout. For example, when we start a verification test, we need to call an API, which returns a test run ID. We need to use that ID in the next step, which will periodically poll the API and wait for the test results to become available. Currently we have no simple way to pass such an ID between steps in a rollout. In addition, we would like Argo Rollouts to preserve a history of previously passed data, so that we can debug previous rollouts when necessary.

akorzy-pl avatar Apr 27 '23 12:04 akorzy-pl

Hello, we would like to have a custom step that allows us to send a notification to Slack. We don't want to use the notifications engine for that purpose, because when using the notifications engine, the rollout will proceed in parallel to the notification. However, we would like the rollout to wait until the notification is confirmed to have been sent. For example, after the "setWeight: 100" step completes, we would like to send a Slack notification and then start the subsequent step. By the way, we can already achieve that by using an inline CustomAnalysisTemplate step that sends the Slack notification, but having a custom step is going to make the code clearer, because sending a notification is not really an "analysis".

akorzy-pl avatar Apr 27 '23 12:04 akorzy-pl

looks like the nginx plugin repo is empty: https://github.com/argoproj-labs/rollouts-plugin-trafficrouter-sample-nginx any plan to check in that? just want to learn how to write a plugn for the nginx ingress traffic router.

andyliuliming avatar Jun 02 '23 16:06 andyliuliming

just a rough idea for a use case of a step plugin with gated-rollout in combination with the other types of plugins (traffic router and metrics provider)..

Maybe it's possible to use argo rollout not only within kubernetes but to roll out features e.g. also in frontend via toogle/flag activation Step 1: feature is made available (all services have been deployed in a canary way to the right version without any issues) Step 2: in the next step the feature is enabled via toggle/flag switch with a "second run" of canary rollout...

hpvd avatar Aug 04 '23 15:08 hpvd

In our case, we often find ourselves deploying multiple Deployments as a single ArgoCD App. Having one Rollout per Deployment would mean we'd now have to find a way to 'synchronize' them together (e.g., abort all rollouts in case any one of them fails an analysis step).

A step plugin might be able to help by gating on some API or signal 'metric', or even by just inspecting the set of Rollouts and ensuring their step indices match up...

aisrael avatar Sep 06 '23 13:09 aisrael

This issue is stale because it has been open 60 days with no activity.

github-actions[bot] avatar Nov 06 '23 02:11 github-actions[bot]