Resource Actions
Overview
Argo CD allows operators to define custom actions which users can perform on specific resource types. This is used internally to provide actions like restart
for a DaemonSet
, or retry
for an Argo Rollout.
Operators can add actions to custom resources in form of a Lua script and expand those capabilities.
Custom Resource Actions
Argo CD supports custom resource actions written in Lua. This is useful if you:
- Have a custom resource for which Argo CD does not provide any built-in actions.
- Have a commonly performed manual task that might be error prone if executed by users via
kubectl
You can define your own custom resource actions in the argocd-cm
ConfigMap.
Define a Custom Resource Action in argocd-cm
ConfigMap
Custom resource actions can be defined in resource.customizations.actions.<group_kind>
field of argocd-cm
. Following example demonstrates a set of custom actions for CronJob
resources. The customizations key is in the format of resource.customizations.actions.<apiGroup_Kind>
.
resource.customizations.actions.batch_CronJob: |
discovery.lua: |
actions = {}
actions["suspend"] = {["disabled"] = true}
actions["resume"] = {["disabled"] = true}
local suspend = false
if obj.spec.suspend ~= nil then
suspend = obj.spec.suspend
end
if suspend then
actions["resume"]["disabled"] = false
else
actions["suspend"]["disabled"] = false
end
return actions
definitions:
- name: suspend
action.lua: |
obj.spec.suspend = true
return obj
- name: resume
action.lua: |
if obj.spec.suspend ~= nil and obj.spec.suspend then
obj.spec.suspend = false
end
return obj
The discovery.lua
script must return a table where the key name represents the action name. You can optionally include logic to enable or disable certain actions based on the current object state.
Each action name must be represented in the list of definitions
with an accompanying action.lua
script to control the resource modifications. The obj
is a global variable which contains the resource. Each action script must return an optionally modified version of the resource. In this example, we are simply setting .spec.suspend
to either true
or false
.