argo-cd/server/application/application.proto
Chetan Banavikalmutt b728505c9f
feat: support background propagation policy while deleting applications (#5216) (#5524)
* 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>
2021-03-15 17:27:41 +01:00

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"
}
};
}
}