mirror of
https://github.com/argoproj/argo-cd
synced 2026-05-24 09:50:08 +00:00
* feat: support background propagation policy Currently, Argo CD only supports foreground propagation policy ie. delete all the resources in the foreground and then delete the application in the end. This PR introduces a new flag `propagation-policy` to decide the type of policy when cascading is enabled. It also adds an annotation `propagation-policy.argocd.argoproj.io`, which is used by the application controller to decide the order of deletion. Fixes: #5216 Signed-off-by: Chetan Banavikalmutt <chetanrns1997@gmail.com> * fix lint and doc errors Signed-off-by: Chetan Banavikalmutt <chetanrns1997@gmail.com> * update logs to display the application name Signed-off-by: Chetan Banavikalmutt <chetanrns1997@gmail.com> * address review comments * remove application name from logs since it's already present * update the propagation policy annotation key Signed-off-by: Chetan Banavikalmutt <chetanrns1997@gmail.com> * Add radio buttons in the UI to select propagation policy Signed-off-by: Chetan Banavikalmutt <chetanrns1997@gmail.com> * inject finalizers instead of annotations for specifying propagation policy Signed-off-by: Chetan Banavikalmutt <chetanrns1997@gmail.com> * rebase branch on master Signed-off-by: Chetan Banavikalmutt <chetanrns1997@gmail.com> * update the controller to set the policy only for application's resources Signed-off-by: Chetan Banavikalmutt <chetanrns1997@gmail.com> * fix the label of policy radio button Signed-off-by: Chetan Banavikalmutt <chetanrns1997@gmail.com>
383 lines
14 KiB
Protocol Buffer
383 lines
14 KiB
Protocol Buffer
syntax = "proto2";
|
|
option go_package = "github.com/argoproj/argo-cd/pkg/apiclient/application";
|
|
|
|
// Application Service
|
|
//
|
|
// Application Service API performs CRUD actions against application resources
|
|
package application;
|
|
|
|
import "gogoproto/gogo.proto";
|
|
import "google/api/annotations.proto";
|
|
import "k8s.io/api/core/v1/generated.proto";
|
|
import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto";
|
|
import "github.com/argoproj/argo-cd/pkg/apis/application/v1alpha1/generated.proto";
|
|
import "github.com/argoproj/argo-cd/reposerver/repository/repository.proto";
|
|
|
|
|
|
// ApplicationQuery is a query for application resources
|
|
message ApplicationQuery {
|
|
// the application's name
|
|
optional string name = 1;
|
|
// forces application reconciliation if set to true
|
|
optional string refresh = 2;
|
|
// the project names to restrict returned list applications
|
|
repeated string project = 3 [(gogoproto.customname) = "Projects"];
|
|
// when specified with a watch call, shows changes that occur after that particular version of a resource.
|
|
optional string resourceVersion = 4 [(gogoproto.nullable) = false];
|
|
// the selector to to restrict returned list to applications only with matched labels
|
|
optional string selector = 5 [(gogoproto.nullable) = false];
|
|
// the repoURL to restrict returned list applications
|
|
optional string repo = 6 [(gogoproto.nullable) = false];
|
|
}
|
|
|
|
message NodeQuery {
|
|
// the application's name
|
|
optional string name = 1;
|
|
}
|
|
|
|
message RevisionMetadataQuery{
|
|
// the application's name
|
|
required string name = 1;
|
|
// the revision of the app
|
|
required string revision = 2;
|
|
}
|
|
|
|
// ApplicationEventsQuery is a query for application resource events
|
|
message ApplicationResourceEventsQuery {
|
|
required string name = 1;
|
|
required string resourceNamespace = 2 [(gogoproto.nullable) = false];
|
|
required string resourceName = 3 [(gogoproto.nullable) = false];
|
|
required string resourceUID = 4 [(gogoproto.nullable) = false];
|
|
}
|
|
|
|
// ManifestQuery is a query for manifest resources
|
|
message ApplicationManifestQuery {
|
|
required string name = 1;
|
|
optional string revision = 2 [(gogoproto.nullable) = false];
|
|
}
|
|
|
|
message ApplicationResponse {}
|
|
|
|
message ApplicationCreateRequest {
|
|
required github.com.argoproj.argo_cd.pkg.apis.application.v1alpha1.Application application = 1 [(gogoproto.nullable) = false];
|
|
optional bool upsert = 2;
|
|
optional bool validate = 3;
|
|
}
|
|
|
|
message ApplicationUpdateRequest {
|
|
required github.com.argoproj.argo_cd.pkg.apis.application.v1alpha1.Application application = 1;
|
|
optional bool validate = 2;
|
|
}
|
|
|
|
message ApplicationDeleteRequest {
|
|
required string name = 1;
|
|
optional bool cascade = 2;
|
|
optional string propagationPolicy = 3;
|
|
}
|
|
|
|
message SyncOptions {
|
|
repeated string items = 1;
|
|
}
|
|
|
|
// ApplicationSyncRequest is a request to apply the config state to live state
|
|
message ApplicationSyncRequest {
|
|
required string name = 1;
|
|
optional string revision = 2 [(gogoproto.nullable) = false];
|
|
optional bool dryRun = 3 [(gogoproto.nullable) = false];
|
|
optional bool prune = 4 [(gogoproto.nullable) = false];
|
|
optional github.com.argoproj.argo_cd.pkg.apis.application.v1alpha1.SyncStrategy strategy = 5;
|
|
repeated github.com.argoproj.argo_cd.pkg.apis.application.v1alpha1.SyncOperationResource resources = 7 [(gogoproto.nullable) = false];
|
|
repeated string manifests = 8;
|
|
repeated github.com.argoproj.argo_cd.pkg.apis.application.v1alpha1.Info infos = 9;
|
|
optional github.com.argoproj.argo_cd.pkg.apis.application.v1alpha1.RetryStrategy retryStrategy = 10;
|
|
optional SyncOptions syncOptions = 11;
|
|
}
|
|
|
|
// ApplicationUpdateSpecRequest is a request to update application spec
|
|
message ApplicationUpdateSpecRequest {
|
|
required string name = 1;
|
|
required github.com.argoproj.argo_cd.pkg.apis.application.v1alpha1.ApplicationSpec spec = 2 [(gogoproto.nullable) = false];
|
|
optional bool validate = 3;
|
|
}
|
|
|
|
// ApplicationPatchRequest is a request to patch an application
|
|
message ApplicationPatchRequest {
|
|
required string name = 1;
|
|
required string patch = 2 [(gogoproto.nullable) = false];
|
|
required string patchType = 3 [(gogoproto.nullable) = false];
|
|
}
|
|
|
|
message ApplicationRollbackRequest {
|
|
required string name = 1;
|
|
required int64 id = 2 [(gogoproto.customname) = "ID", (gogoproto.nullable) = false];
|
|
optional bool dryRun = 3 [(gogoproto.nullable) = false];
|
|
optional bool prune = 4 [(gogoproto.nullable) = false];
|
|
}
|
|
|
|
message ApplicationResourceRequest {
|
|
required string name = 1;
|
|
required string namespace = 2 [(gogoproto.nullable) = false];
|
|
required string resourceName = 3 [(gogoproto.nullable) = false];
|
|
required string version = 4 [(gogoproto.nullable) = false];
|
|
required string group = 5 [(gogoproto.nullable) = false];
|
|
required string kind = 6 [(gogoproto.nullable) = false];
|
|
}
|
|
|
|
message ApplicationResourcePatchRequest {
|
|
required string name = 1;
|
|
required string namespace = 2 [(gogoproto.nullable) = false];
|
|
required string resourceName = 3 [(gogoproto.nullable) = false];
|
|
required string version = 4 [(gogoproto.nullable) = false];
|
|
required string group = 5 [(gogoproto.nullable) = false];
|
|
required string kind = 6 [(gogoproto.nullable) = false];
|
|
required string patch = 7 [(gogoproto.nullable) = false];
|
|
required string patchType = 8 [(gogoproto.nullable) = false];
|
|
}
|
|
|
|
message ApplicationResourceDeleteRequest {
|
|
required string name = 1;
|
|
required string namespace = 2 [(gogoproto.nullable) = false];
|
|
required string resourceName = 3 [(gogoproto.nullable) = false];
|
|
required string version = 4 [(gogoproto.nullable) = false];
|
|
required string group = 5 [(gogoproto.nullable) = false];
|
|
required string kind = 6 [(gogoproto.nullable) = false];
|
|
optional bool force = 7 [(gogoproto.nullable) = true];
|
|
optional bool orphan = 8 [(gogoproto.nullable) = true];
|
|
}
|
|
|
|
message ResourceActionRunRequest {
|
|
required string name = 1;
|
|
required string namespace = 2 [(gogoproto.nullable) = false];
|
|
required string resourceName = 3 [(gogoproto.nullable) = false];
|
|
required string version = 4 [(gogoproto.nullable) = false];
|
|
required string group = 5 [(gogoproto.nullable) = false];
|
|
required string kind = 6 [(gogoproto.nullable) = false];
|
|
required string action = 7 [(gogoproto.nullable) = false];
|
|
}
|
|
|
|
message ResourceActionsListResponse {
|
|
repeated github.com.argoproj.argo_cd.pkg.apis.application.v1alpha1.ResourceAction actions = 1 [(gogoproto.nullable) = false];
|
|
}
|
|
|
|
message ApplicationResourceResponse {
|
|
required string manifest = 1 [(gogoproto.nullable) = false];
|
|
}
|
|
|
|
message ApplicationPodLogsQuery {
|
|
required string name = 1;
|
|
required string namespace = 2 [(gogoproto.nullable) = false];
|
|
optional string podName = 3;
|
|
required string container = 4 [(gogoproto.nullable) = false];
|
|
required int64 sinceSeconds = 5 [(gogoproto.nullable) = false];
|
|
optional k8s.io.apimachinery.pkg.apis.meta.v1.Time sinceTime = 6;
|
|
required int64 tailLines = 7 [(gogoproto.nullable) = false];
|
|
required bool follow = 8 [(gogoproto.nullable) = false];
|
|
optional string untilTime = 9;
|
|
optional string filter = 10;
|
|
optional string kind = 11;
|
|
optional string group = 12;
|
|
optional string resourceName = 13 ;
|
|
}
|
|
|
|
message LogEntry {
|
|
required string content = 1 [(gogoproto.nullable) = false];
|
|
// deprecated in favor of timeStampStr since meta.v1.Time don't support nano time
|
|
required k8s.io.apimachinery.pkg.apis.meta.v1.Time timeStamp = 2 [(gogoproto.nullable) = false, deprecated=true];
|
|
required bool last = 3 [(gogoproto.nullable) = false];
|
|
required string timeStampStr = 4 [(gogoproto.nullable) = false];
|
|
required string podName = 5 [(gogoproto.nullable) = false];
|
|
}
|
|
|
|
message OperationTerminateRequest {
|
|
required string name = 1;
|
|
}
|
|
|
|
message ApplicationSyncWindowsQuery {
|
|
required string name = 1;
|
|
}
|
|
|
|
message ApplicationSyncWindowsResponse {
|
|
repeated ApplicationSyncWindow activeWindows = 1;
|
|
repeated ApplicationSyncWindow assignedWindows = 2;
|
|
required bool canSync = 3;
|
|
}
|
|
|
|
message ApplicationSyncWindow {
|
|
required string kind = 1;
|
|
required string schedule = 2;
|
|
required string duration = 3;
|
|
required bool manualSync = 4;
|
|
}
|
|
|
|
message OperationTerminateResponse {
|
|
}
|
|
|
|
|
|
message ResourcesQuery {
|
|
required string applicationName = 1 [(gogoproto.nullable) = true];
|
|
|
|
optional string namespace = 2 [(gogoproto.nullable) = false];
|
|
optional string name = 3 [(gogoproto.nullable) = false];
|
|
optional string version = 4 [(gogoproto.nullable) = false];
|
|
optional string group = 5 [(gogoproto.nullable) = false];
|
|
optional string kind = 6 [(gogoproto.nullable) = false];
|
|
}
|
|
|
|
message ManagedResourcesResponse {
|
|
repeated github.com.argoproj.argo_cd.pkg.apis.application.v1alpha1.ResourceDiff items = 1;
|
|
}
|
|
|
|
// ApplicationService
|
|
service ApplicationService {
|
|
|
|
// List returns list of applications
|
|
rpc List(ApplicationQuery) returns (github.com.argoproj.argo_cd.pkg.apis.application.v1alpha1.ApplicationList) {
|
|
option (google.api.http).get = "/api/v1/applications";
|
|
}
|
|
|
|
// ListResourceEvents returns a list of event resources
|
|
rpc ListResourceEvents(ApplicationResourceEventsQuery) returns (k8s.io.api.core.v1.EventList) {
|
|
option (google.api.http).get = "/api/v1/applications/{name}/events";
|
|
}
|
|
|
|
// Watch returns stream of application change events
|
|
rpc Watch(ApplicationQuery) returns (stream github.com.argoproj.argo_cd.pkg.apis.application.v1alpha1.ApplicationWatchEvent) {
|
|
option (google.api.http).get = "/api/v1/stream/applications";
|
|
}
|
|
|
|
// Create creates an application
|
|
rpc Create (ApplicationCreateRequest) returns (github.com.argoproj.argo_cd.pkg.apis.application.v1alpha1.Application) {
|
|
option (google.api.http) = {
|
|
post: "/api/v1/applications"
|
|
body: "application"
|
|
};
|
|
}
|
|
|
|
// Get returns an application by name
|
|
rpc Get (ApplicationQuery) returns (github.com.argoproj.argo_cd.pkg.apis.application.v1alpha1.Application) {
|
|
option (google.api.http).get = "/api/v1/applications/{name}";
|
|
}
|
|
|
|
// Get returns sync windows of the application
|
|
rpc GetApplicationSyncWindows (ApplicationSyncWindowsQuery) returns (ApplicationSyncWindowsResponse) {
|
|
option (google.api.http).get = "/api/v1/applications/{name}/syncwindows";
|
|
}
|
|
|
|
// Get the meta-data (author, date, tags, message) for a specific revision of the application
|
|
rpc RevisionMetadata (RevisionMetadataQuery) returns (github.com.argoproj.argo_cd.pkg.apis.application.v1alpha1.RevisionMetadata) {
|
|
option (google.api.http).get = "/api/v1/applications/{name}/revisions/{revision}/metadata";
|
|
}
|
|
|
|
// GetManifests returns application manifests
|
|
rpc GetManifests (ApplicationManifestQuery) returns (repository.ManifestResponse) {
|
|
option (google.api.http).get = "/api/v1/applications/{name}/manifests";
|
|
}
|
|
|
|
// Update updates an application
|
|
rpc Update(ApplicationUpdateRequest) returns (github.com.argoproj.argo_cd.pkg.apis.application.v1alpha1.Application) {
|
|
option (google.api.http) = {
|
|
put: "/api/v1/applications/{application.metadata.name}"
|
|
body: "application"
|
|
};
|
|
}
|
|
|
|
// UpdateSpec updates an application spec
|
|
rpc UpdateSpec(ApplicationUpdateSpecRequest) returns (github.com.argoproj.argo_cd.pkg.apis.application.v1alpha1.ApplicationSpec) {
|
|
option (google.api.http) = {
|
|
put: "/api/v1/applications/{name}/spec"
|
|
body: "spec"
|
|
};
|
|
}
|
|
|
|
// Patch patch an application
|
|
rpc Patch(ApplicationPatchRequest) returns (github.com.argoproj.argo_cd.pkg.apis.application.v1alpha1.Application) {
|
|
option (google.api.http) = {
|
|
patch: "/api/v1/applications/{name}"
|
|
body: "*"
|
|
};
|
|
}
|
|
|
|
// Delete deletes an application
|
|
rpc Delete(ApplicationDeleteRequest) returns (ApplicationResponse) {
|
|
option (google.api.http).delete = "/api/v1/applications/{name}";
|
|
}
|
|
|
|
// Sync syncs an application to its target state
|
|
rpc Sync(ApplicationSyncRequest) returns (github.com.argoproj.argo_cd.pkg.apis.application.v1alpha1.Application) {
|
|
option (google.api.http) = {
|
|
post: "/api/v1/applications/{name}/sync"
|
|
body: "*"
|
|
};
|
|
}
|
|
|
|
// ManagedResources returns list of managed resources
|
|
rpc ManagedResources(ResourcesQuery) returns (ManagedResourcesResponse) {
|
|
option (google.api.http).get = "/api/v1/applications/{applicationName}/managed-resources";
|
|
}
|
|
|
|
// ResourceTree returns resource tree
|
|
rpc ResourceTree(ResourcesQuery) returns (github.com.argoproj.argo_cd.pkg.apis.application.v1alpha1.ApplicationTree) {
|
|
option (google.api.http).get = "/api/v1/applications/{applicationName}/resource-tree";
|
|
}
|
|
|
|
// Watch returns stream of application resource tree
|
|
rpc WatchResourceTree(ResourcesQuery) returns (stream github.com.argoproj.argo_cd.pkg.apis.application.v1alpha1.ApplicationTree) {
|
|
option (google.api.http).get = "/api/v1/stream/applications/{applicationName}/resource-tree";
|
|
}
|
|
|
|
// Rollback syncs an application to its target state
|
|
rpc Rollback(ApplicationRollbackRequest) returns (github.com.argoproj.argo_cd.pkg.apis.application.v1alpha1.Application) {
|
|
option (google.api.http) = {
|
|
post: "/api/v1/applications/{name}/rollback"
|
|
body: "*"
|
|
};
|
|
}
|
|
|
|
// TerminateOperation terminates the currently running operation
|
|
rpc TerminateOperation(OperationTerminateRequest) returns (OperationTerminateResponse) {
|
|
option (google.api.http) = {
|
|
delete: "/api/v1/applications/{name}/operation";
|
|
};
|
|
}
|
|
|
|
// GetResource returns single application resource
|
|
rpc GetResource(ApplicationResourceRequest) returns (ApplicationResourceResponse) {
|
|
option (google.api.http).get = "/api/v1/applications/{name}/resource";
|
|
}
|
|
|
|
// PatchResource patch single application resource
|
|
rpc PatchResource(ApplicationResourcePatchRequest) returns (ApplicationResourceResponse) {
|
|
option (google.api.http) = {
|
|
post: "/api/v1/applications/{name}/resource"
|
|
body: "patch"
|
|
};
|
|
}
|
|
|
|
// ListResourceActions returns list of resource actions
|
|
rpc ListResourceActions(ApplicationResourceRequest) returns (ResourceActionsListResponse) {
|
|
option (google.api.http).get = "/api/v1/applications/{name}/resource/actions";
|
|
}
|
|
|
|
// RunResourceAction run resource action
|
|
rpc RunResourceAction(ResourceActionRunRequest) returns (ApplicationResponse) {
|
|
option (google.api.http) = {
|
|
post: "/api/v1/applications/{name}/resource/actions"
|
|
body: "action"
|
|
};
|
|
}
|
|
|
|
// DeleteResource deletes a single application resource
|
|
rpc DeleteResource(ApplicationResourceDeleteRequest) returns (ApplicationResponse) {
|
|
option (google.api.http).delete = "/api/v1/applications/{name}/resource";
|
|
}
|
|
|
|
// PodLogs returns stream of log entries for the specified pod. Pod
|
|
rpc PodLogs(ApplicationPodLogsQuery) returns (stream LogEntry) {
|
|
option (google.api.http) = {
|
|
get: "/api/v1/applications/{name}/pods/{podName}/logs"
|
|
additional_bindings {
|
|
get: "/api/v1/applications/{name}/logs"
|
|
}
|
|
};
|
|
}
|
|
}
|