尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Argo CD `argocd app actions` 命令实战:列出与执行资源自定义动作

Argo CD `argocd app actions` 命令实战:列出与执行资源自定义动作 Argo CDargocd app actions命令实战列出与执行资源自定义动作【免费下载链接】argo-cdDeclarative Continuous Deployment for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ar/argo-cdargocd app actions是 Argo CD CLI 用于管理资源动作Resource Actions的命令组通过argocd app actions list列出某个 Application 下各资源当前可用的自定义动作再通过argocd app actions run对指定资源执行这些动作。读完本文你将掌握这两个子命令的完整参数用法、执行约束如必须指定--kind、只能作用于 Git 表示的资源并能结合 Argo CD 源码理解 CLI → gRPC API → Lua 脚本引擎的完整执行链路以及与之配套的 RBAC 授权模型。命令总览argocd app actions本身是一个分组命令直接执行不带子命令只会打印帮助并返回非零退出码。它包含两个子命令argocd app actions [flags]# List all the available actions for an application argocd app actions list APPNAME # Run an available action for an application argocd app actions run APPNAME ACTION --kind KIND [--resource-name RESOURCE] [--namespace NAMESPACE] [--group GROUP]两个子命令的定位分别参见argocd app actions list 参考 —— Lists available actions on a resourceargocd app actions run 参考 —— Runs an available action on resource(s) matching the specified filtersargocd app actions list列出可用动作argocd app actions list APPNAME [flags]不带任何过滤参数时list会列出该 Application 下所有资源可用的动作输出表格包含GROUP、KIND、NAME、ACTION、DISABLED五列。完整参数说明参数短选项说明--group string按资源 Group 过滤--kind string按资源 Kind 过滤--namespace string按资源所在 Namespace 过滤--resource-name string按资源名称过滤--app-namespace string-NApplication 所在的命名空间支持namespace/appname限定名写法--out string-o输出格式可选值yaml、json不指定时输出人类可读的表格--help-hhelp for list过滤参数对应 CLI 源码中的标志定义见 NewApplicationResourceActionsListCommand。继承自父命令的通用选项list与run均继承以下全局连接/鉴权选项选项默认值 / 取值说明--argocd-context string要使用的 Argo CD server 上下文名称--auth-token string或环境变量ARGOCD_AUTH_TOKEN认证令牌--client-crt string客户端证书文件--client-crt-key string客户端证书密钥文件--config string/home/user/.config/argocd/configArgo CD 配置文件路径--controller-name stringargocd-application-controllerApplication controller 名称Helm 安装且 controller 名称 label 不同可经ARGOCD_APPLICATION_CONTROLLER_NAME覆盖时设置--core设为 true 时 CLI 直接通过 Kubernetes 访问而非 Argo CD API server--grpc-web启用 gRPC-web 协议适用于 Argo CD server 位于不支持 HTTP/2 的代理之后--grpc-web-root-path string启用 gRPC-web 并设置 web root-H, --header strings为 CLI 发出的所有请求设置附加 Header可重复传参也支持逗号分隔--http-retry-max int与 Argo CD server 建立 HTTP 连接的最大重试次数--insecure跳过服务器证书与域名校验--kube-context string将命令指向给定的 kube-context--logformat stringjson日志格式json|text--loglevel stringinfo日志级别debug|info|warn|error--plaintext禁用 TLS--port-forward通过端口转发连接随机 argocd-server 端口--port-forward-namespace string端口转发所使用的命名空间--prompts-enabled本地配置默认false强制启用/禁用可选交互式提示--redis-compress stringgzip当 controller 启用了 Redis 压缩时设置取值gzip|none--redis-haproxy-name stringargocd-redis-ha-haproxyRedis HA Proxy 名称Helm 场景可经ARGOCD_REDIS_HAPROXY_NAME覆盖--redis-name stringargocd-redisRedis 部署名称可经ARGOCD_REDIS_NAME覆盖--repo-server-name stringargocd-repo-serverRepo server 名称可经ARGOCD_REPO_SERVER_NAME覆盖--server stringArgo CD server 地址--server-crt string服务器证书文件--server-name stringargocd-serverAPI server 名称可经ARGOCD_SERVER_NAME覆盖argocd app actions run执行一个动作argocd app actions run APPNAME ACTION [flags]run对匹配过滤条件的资源执行指定名称的动作。其 Synopsis 明确了执行约束All filters except --kind are optional. Use --all to run the action on all matching resources if more than one resource matches the filters. Actions may only be run on resources that are represented in git and cannot be run on child resources.即只有--kind是必填项若过滤条件命中多个资源必须显式加--all才会对全部匹配资源逐一执行动作只能作用于在 Git 中有表示的资源不能作用于子资源child resources。完整参数说明参数短选项必填说明--kind string是要执行动作的资源 Kind--all否当多个资源匹配过滤条件时是否对全部匹配资源执行该动作--group string否资源所属 Group--namespace string否资源所在 Namespace--resource-name string否资源名称--app-namespace string-N否Application 所在命名空间--help-h否help for run实操示例以对一个 Deployment 执行名为sample的动作为例动作本身需在资源自定义化配置中通过 Lua 脚本定义# 先列出应用下可用动作 argocd app actions list my-app argocd app actions list my-app --kind Deployment --namespace default -o yaml # 对指定资源执行动作--kind 必填其余过滤条件按需组合 argocd app actions run my-app sample --kind Deployment --resource-name my-deploy --namespace default --group apps # 多个资源匹配时用 --all 批量执行 argocd app actions run my-app sample --kind CronJob --namespace batch --all如果多个匹配资源分属不同的 GroupCLI 会直接报错退出要求显式指定--groupAmbiguous resource group. Use flag --group to specify resource group explicitly.这一行为见 run 命令实现中的歧义检查。源码级实现链路argocd app actions的完整调用链可以从 CLI 到服务端逐层印证。1. CLI 侧获取可执行动作的资源列表再过滤list 与 run 共用一个辅助函数getActionableResourcesForApplication它做两件事调用 gRPC 接口ManagedResources拿到该 Application 管理的资源列表[]*v1alpha1.ResourceDiff调用Get拿到 Application 对象本身将其补入资源列表——因此Application 对象自身也可以成为动作的执行目标Kind 为Application、Group 为argoproj.io。随后用util.FilterResources按--group、--kind、--namespace、--resource-name过滤。list对每个过滤后的资源调用ListResourceActions取回动作列表并渲染输出表格/YAML/JSONrun则对每个匹配资源调用RunResourceActionV2执行动作。一个值得注意的兼容性细节CLI 优先调用RunResourceActionV2若服务端返回Unimplemented老版本服务端会自动回退到已废弃的RunResourceAction接口并打印提示RunResourceActionV2 is not supported by the server, falling back to RunResourceAction.见 run 的回退逻辑。服务端对旧接口的处理同样标注了Deprecated: use RunResourceActionV2 instead见 RunResourceAction。2. 服务端侧动作来自 Lua 发现脚本服务端ListResourceActions的实现路径为校验 RBAC 后取出集群中的实际资源对象live object再结合设置中的ResourceOverrides资源自定义化配置计算可用动作见 ListResourceActions。核心在 getAvailableActions它构造一个 Lua VMutil/lua/lua.go调用GetResourceActionDiscovery找到匹配该资源 GVK 的discovery.lua脚本再执行ExecuteResourceActionDiscovery得到[]ResourceAction含动作名与Disabled状态。发现脚本的查找逻辑优先用户通过 resource overrides 提供的脚本其次内置于resource_customizations的预定义脚本见 GetResourceActionDiscovery。RunResourceActionV2在执行前会构造一个细粒度的 RBAC 动作字符串action/group/kind/action进行鉴权见 RunResourceActionV2即资源动作的权限点格式为p, role, action/apps/Deployment/restart, allowRBAC 层支持资源与动作上的通配符匹配相关行为有专门测试覆盖见 TestResourceActionWildcards。3. E2E 测试一个可参考的最小动作定义端到端测试 TestOldStyleResourceAction 展示了自定义动作的最小配置形态——通过 resource override 为apps/Deployment注入discovery.lua发现脚本与action.lua执行脚本discovery.lua: return { sample {} } definitions: - name: sample action.lua: | obj.metadata.labels.sample test return obj流程为创建并同步应用 → 调用ListResourceActions断言返回sample动作 → 调用RunResourceActionV2执行并验证效果。仓库内针对 Deployment、CronJob 等多种资源均有同类用例。适用前提与限制动作必须先通过资源自定义化resource overrides /resource.customizations为对应 GVK 定义discovery.lua与action.lua否则list不会返回任何动作未发现脚本时服务端直接返回空列表见 getAvailableActions。run只能作用于在 Git 中有表示的资源不能作用于子资源多资源匹配时必须显式--all。run的--kind为必填项源码中通过command.MarkFlagRequired(kind)强制见 run 命令标志定义。执行动作需要用户对action/group/kind/action权限点有授权API 侧的完整定义见 application.proto。旧版RunResourceAction接口不支持动作参数parameters新接口RunResourceActionV2为当前推荐路径CLI 已内置自动回退逻辑。SEE ALSOargocd app —— Manage applicationsargocd app actions list —— Lists available actions on a resourceargocd app actions run —— Runs an available action on resource(s) matching the specified filters延伸阅读CLI 命令完整实现cmd/argocd/commands/app_actions.go服务端 API 实现server/application/application.goLua 动作发现/执行引擎util/lua/lua.go内置资源自定义化目录各 GVK 的健康检查与动作脚本resource_customizations/端到端测试用例test/e2e/app_management_test.go【免费下载链接】argo-cdDeclarative Continuous Deployment for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ar/argo-cd创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表