Skip to content
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

Step Plugins #2685

Closed
zachaller opened this issue Mar 30, 2023 · 10 comments
Closed

Step Plugins #2685

zachaller opened this issue Mar 30, 2023 · 10 comments
Labels
enhancement New feature or request

Comments

@zachaller
Copy link
Collaborator

zachaller commented Mar 30, 2023

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 zachaller added the enhancement New feature or request label Mar 30, 2023
@BasJ93
Copy link

BasJ93 commented Apr 20, 2023

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.

@GTB3NW
Copy link

GTB3NW commented Apr 23, 2023

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

@akorzy-pl
Copy link
Contributor

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
Copy link
Contributor

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
Copy link
Contributor

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".

@andyliuliming
Copy link
Contributor

andyliuliming commented Jun 2, 2023

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.

@hpvd
Copy link

hpvd commented Aug 4, 2023

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...

@aisrael
Copy link

aisrael commented Sep 6, 2023

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...

Copy link
Contributor

github-actions bot commented Nov 6, 2023

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

@agaudreault
Copy link
Member

agaudreault commented Oct 19, 2024

What is left to be done for this feature to go from alpha -> beta

  • Create Official step plugin example with best practice in argoproj-labs
  • Configurable defaults for error, requeue and minRequeue.
  • Health status in ArgoCD should reflect the "cause"
  • ArgoCD UI extensions to add plugin step information
  • Run step plugin e2e on CI
  • Allow to reload config without restarting container
  • Documentation (necessary for alpha)
    • Explain step plugin behavior
    • Explain configuration
    • Example repository

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

8 participants