syntax = "proto2"; option go_package = "github.com/hanzoai/cd/pkg/apiclient/application"; // Application Service // // Application Service API performs CRUD actions against application resources package application; import "google/api/annotations.proto"; import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; import "github.com/hanzoai/cd/pkg/apis/application/v1alpha1/generated.proto"; import "github.com/hanzoai/cd/reposerver/repository/repository.proto"; import "github.com/hanzoai/cd/server/events/events.proto"; // ApplicationQuery is a query for application resources. When getting multiple applications, the "projects" field acts // as a filter. When getting a single application, you may specify either zero or one project. If you specify zero // projects, the application will be returned regardless of which project it belongs to (assuming you have access). If // you specify one project, the application will only be returned if it exists and belongs to the specified project. // Otherwise you will receive a 404. message ApplicationQuery { // the application's name optional string name = 1; // forces application reconciliation if set to 'hard' optional string refresh = 2; // the project names to restrict returned list applications repeated string projects = 3; // when specified with a watch call, shows changes that occur after that particular version of a resource. optional string resourceVersion = 4; // the selector to restrict returned list to applications only with matched labels optional string selector = 5; // the repoURL to restrict returned list applications optional string repo = 6; // the application's namespace optional string appNamespace = 7; // the project names to restrict returned list applications (legacy name for backwards-compatibility) repeated string project = 8; } message NodeQuery { // the application's name optional string name = 1; optional string appNamespace = 2; } message RevisionMetadataQuery{ // the application's name required string name = 1; // the revision of the app required string revision = 2; // the application's namespace optional string appNamespace = 3; optional string project = 4; // source index (for multi source apps) optional int32 sourceIndex = 5; // versionId from historical data (for multi source apps) optional int32 versionId = 6; } // ApplicationEventsQuery is a query for application resource events message ApplicationResourceEventsQuery { required string name = 1; optional string resourceNamespace = 2; optional string resourceName = 3; optional string resourceUID = 4; optional string appNamespace = 5; optional string project = 6; } // ManifestQuery is a query for manifest resources message ApplicationManifestQuery { required string name = 1; optional string revision = 2; optional string appNamespace = 3; optional string project = 4; repeated int64 sourcePositions = 5; repeated string revisions = 6; optional bool noCache = 7; } message FileChunk { required bytes chunk = 1; } message ApplicationManifestQueryWithFiles { required string name = 1; required string checksum = 2; optional string appNamespace = 3; optional string project = 4; } message ApplicationManifestQueryWithFilesWrapper { oneof part { ApplicationManifestQueryWithFiles query = 1; FileChunk chunk = 2; } } message ApplicationResponse {} message ApplicationCreateRequest { required github.com.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.Application application = 1; optional bool upsert = 2; optional bool validate = 3; } message ApplicationUpdateRequest { required github.com.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.Application application = 1; optional bool validate = 2; optional string project = 3; } message ApplicationDeleteRequest { required string name = 1; optional bool cascade = 2; optional string propagationPolicy = 3; optional string appNamespace = 4; optional string project = 5; } 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; optional bool dryRun = 3; optional bool prune = 4; optional github.com.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.SyncStrategy strategy = 5; repeated github.com.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.SyncOperationResource resources = 7; repeated string manifests = 8; repeated github.com.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.Info infos = 9; optional github.com.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.RetryStrategy retryStrategy = 10; optional SyncOptions syncOptions = 11; optional string appNamespace = 12; optional string project = 13; repeated int64 sourcePositions = 14; repeated string revisions = 15; } // ApplicationUpdateSpecRequest is a request to update application spec message ApplicationUpdateSpecRequest { required string name = 1; required github.com.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.ApplicationSpec spec = 2; optional bool validate = 3; optional string appNamespace = 4; optional string project = 5; } // ApplicationPatchRequest is a request to patch an application message ApplicationPatchRequest { required string name = 1; required string patch = 2; required string patchType = 3; optional string appNamespace = 5; optional string project = 6; } message ApplicationRollbackRequest { required string name = 1; required int64 id = 2; optional bool dryRun = 3; optional bool prune = 4; optional string appNamespace = 6; optional string project = 7; } message ApplicationResourceRequest { required string name = 1; optional string namespace = 2; required string resourceName = 3; required string version = 4; optional string group = 5; required string kind = 6; optional string appNamespace = 7; optional string project = 8; } message ApplicationResourcePatchRequest { required string name = 1; optional string namespace = 2; required string resourceName = 3; required string version = 4; optional string group = 5; required string kind = 6; required string patch = 7; required string patchType = 8; optional string appNamespace = 9; optional string project = 10; } message ApplicationResourceDeleteRequest { required string name = 1; optional string namespace = 2; required string resourceName = 3; required string version = 4; optional string group = 5; required string kind = 6; optional bool force = 7; optional bool orphan = 8; optional string appNamespace = 9; optional string project = 10; } message ResourceActionParameters { required string name = 1; required string value = 2; } // ResourceActionRunRequest is a request to run a resource action. // This message is deprecated and replaced by ResourceActionRunRequestV2. message ResourceActionRunRequest { option deprecated = true; required string name = 1; optional string namespace = 2; required string resourceName = 3; required string version = 4; optional string group = 5; required string kind = 6; required string action = 7; optional string appNamespace = 8; optional string project = 9; } message ResourceActionRunRequestV2 { required string name = 1; optional string namespace = 2; required string resourceName = 3; required string version = 4; optional string group = 5; required string kind = 6; required string action = 7; optional string appNamespace = 8; optional string project = 9; repeated ResourceActionParameters resourceActionParameters = 10; } message ResourceActionsListResponse { repeated github.com.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.ResourceAction actions = 1; } message ApplicationResourceResponse { required string manifest = 1; } message ApplicationPodLogsQuery { required string name = 1; optional string namespace = 2; optional string podName = 3; optional string container = 4; optional int64 sinceSeconds = 5; optional k8s.io.apimachinery.pkg.apis.meta.v1.Time sinceTime = 6; optional int64 tailLines = 7; optional bool follow = 8; optional string untilTime = 9; optional string filter = 10; optional string kind = 11; optional string group = 12; optional string resourceName = 13 ; optional bool previous = 14; optional string appNamespace = 15; optional string project = 16; optional bool matchCase = 17; } message LogEntry { required string content = 1; // 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; required bool last = 3; required string timeStampStr = 4; required string podName = 5; } message OperationTerminateRequest { required string name = 1; optional string appNamespace = 2; optional string project = 3; } message ApplicationSyncWindowsQuery { required string name = 1; optional string appNamespace = 2; optional string project = 3; } 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; optional string namespace = 2; optional string name = 3; optional string version = 4; optional string group = 5; optional string kind = 6; optional string appNamespace = 7; optional string project = 8; } message ManagedResourcesResponse { repeated github.com.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.ResourceDiff items = 1; } message ApplicationServerSideDiffQuery { required string appName = 1; optional string appNamespace = 2; optional string project = 3; repeated github.com.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.ResourceDiff liveResources = 4; repeated string targetManifests = 5; } message ApplicationServerSideDiffResponse { repeated github.com.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.ResourceDiff items = 1; required bool modified = 2; } message LinkInfo { required string title = 1; required string url = 2; optional string description = 3; optional string iconClass = 4; } message LinksResponse { repeated LinkInfo items = 1; } message ListAppLinksRequest { required string name = 1; optional string namespace = 3; optional string project = 4; } // ApplicationService service ApplicationService { // List returns list of applications rpc List(ApplicationQuery) returns (github.com.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.ApplicationList) { option (google.api.http).get = "/v1/applications"; } // ListResourceEvents returns a list of event resources rpc ListResourceEvents(ApplicationResourceEventsQuery) returns (events.EventList) { option (google.api.http).get = "/v1/applications/{name}/events"; } // Watch returns stream of application change events rpc Watch(ApplicationQuery) returns (stream github.com.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.ApplicationWatchEvent) { option (google.api.http).get = "/v1/stream/applications"; } // Create creates an application rpc Create (ApplicationCreateRequest) returns (github.com.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.Application) { option (google.api.http) = { post: "/v1/applications" body: "application" }; } // Get returns an application by name rpc Get (ApplicationQuery) returns (github.com.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.Application) { option (google.api.http).get = "/v1/applications/{name}"; } // Get returns sync windows of the application rpc GetApplicationSyncWindows (ApplicationSyncWindowsQuery) returns (ApplicationSyncWindowsResponse) { option (google.api.http).get = "/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.v3.pkg.apis.application.v1alpha1.RevisionMetadata) { option (google.api.http).get = "/v1/applications/{name}/revisions/{revision}/metadata"; } // Get the chart metadata (description, maintainers, home) for a specific revision of the application rpc RevisionChartDetails (RevisionMetadataQuery) returns (github.com.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.ChartDetails) { option (google.api.http).get = "/v1/applications/{name}/revisions/{revision}/chartdetails"; } // Get the chart metadata (description, maintainers, home) for a specific revision of the application rpc GetOCIMetadata (RevisionMetadataQuery) returns (github.com.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.OCIMetadata) { option (google.api.http).get = "/v1/applications/{name}/revisions/{revision}/ocimetadata"; } // GetManifests returns application manifests rpc GetManifests (ApplicationManifestQuery) returns (repository.ManifestResponse) { option (google.api.http).get = "/v1/applications/{name}/manifests"; } // GetManifestsWithFiles returns application manifests using provided files to generate them rpc GetManifestsWithFiles (stream ApplicationManifestQueryWithFilesWrapper) returns (repository.ManifestResponse) { option (google.api.http) = { post: "/v1/applications/manifestsWithFiles" body: "*" }; } // Update updates an application rpc Update(ApplicationUpdateRequest) returns (github.com.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.Application) { option (google.api.http) = { put: "/v1/applications/{application.metadata.name}" body: "application" }; } // UpdateSpec updates an application spec rpc UpdateSpec(ApplicationUpdateSpecRequest) returns (github.com.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.ApplicationSpec) { option (google.api.http) = { put: "/v1/applications/{name}/spec" body: "spec" }; } // Patch patch an application rpc Patch(ApplicationPatchRequest) returns (github.com.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.Application) { option (google.api.http) = { patch: "/v1/applications/{name}" body: "*" }; } // Delete deletes an application rpc Delete(ApplicationDeleteRequest) returns (ApplicationResponse) { option (google.api.http).delete = "/v1/applications/{name}"; } // Sync syncs an application to its target state rpc Sync(ApplicationSyncRequest) returns (github.com.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.Application) { option (google.api.http) = { post: "/v1/applications/{name}/sync" body: "*" }; } // ManagedResources returns list of managed resources rpc ManagedResources(ResourcesQuery) returns (ManagedResourcesResponse) { option (google.api.http).get = "/v1/applications/{applicationName}/managed-resources"; } // ServerSideDiff performs server-side diff calculation using dry-run apply rpc ServerSideDiff(ApplicationServerSideDiffQuery) returns (ApplicationServerSideDiffResponse) { option (google.api.http).get = "/v1/applications/{appName}/server-side-diff"; } // ResourceTree returns resource tree rpc ResourceTree(ResourcesQuery) returns (github.com.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.ApplicationTree) { option (google.api.http).get = "/v1/applications/{applicationName}/resource-tree"; } // Watch returns stream of application resource tree rpc WatchResourceTree(ResourcesQuery) returns (stream github.com.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.ApplicationTree) { option (google.api.http).get = "/v1/stream/applications/{applicationName}/resource-tree"; } // Rollback syncs an application to its target state rpc Rollback(ApplicationRollbackRequest) returns (github.com.argoproj.argo_cd.v3.pkg.apis.application.v1alpha1.Application) { option (google.api.http) = { post: "/v1/applications/{name}/rollback" body: "*" }; } // TerminateOperation terminates the currently running operation rpc TerminateOperation(OperationTerminateRequest) returns (OperationTerminateResponse) { option (google.api.http) = { delete: "/v1/applications/{name}/operation"; }; } // GetResource returns single application resource rpc GetResource(ApplicationResourceRequest) returns (ApplicationResourceResponse) { option (google.api.http).get = "/v1/applications/{name}/resource"; } // PatchResource patch single application resource rpc PatchResource(ApplicationResourcePatchRequest) returns (ApplicationResourceResponse) { option (google.api.http) = { post: "/v1/applications/{name}/resource" body: "patch" }; } // ListResourceActions returns list of resource actions rpc ListResourceActions(ApplicationResourceRequest) returns (ResourceActionsListResponse) { option (google.api.http).get = "/v1/applications/{name}/resource/actions"; } // RunResourceAction runs a resource action // // Deprecated: use RunResourceActionV2 instead. This version does not support resource action parameters but is // maintained for backward compatibility. It will be removed in a future release. rpc RunResourceAction(ResourceActionRunRequest) returns (ApplicationResponse) { option deprecated = true; option (google.api.http) = { post: "/v1/applications/{name}/resource/actions" body: "action" }; } // RunResourceActionV2 runs a resource action with parameters rpc RunResourceActionV2(ResourceActionRunRequestV2) returns (ApplicationResponse) { option (google.api.http) = { post: "/v1/applications/{name}/resource/actions/v2" body: "*" }; } // DeleteResource deletes a single application resource rpc DeleteResource(ApplicationResourceDeleteRequest) returns (ApplicationResponse) { option (google.api.http).delete = "/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: "/v1/applications/{name}/pods/{podName}/logs" additional_bindings { get: "/v1/applications/{name}/logs" } }; } // ListLinks returns the list of all application deep links rpc ListLinks(ListAppLinksRequest) returns (LinksResponse) { option (google.api.http).get = "/v1/applications/{name}/links"; } // ListResourceLinks returns the list of all resource deep links rpc ListResourceLinks(ApplicationResourceRequest) returns (LinksResponse) { option (google.api.http).get = "/v1/applications/{name}/resource/links"; } }