Files
threshold/internal/proto/controller/api/services/v1/policy_service.proto
T
6b53766aa6 internal/proto: improvements to OpenAPIv2 spec (#4555)
* internal/gen: better API docs

Add various pieces of metadata that can be used by the API docs renderer.
Improve the service labels by specifying explicit tags.
Specify error responses. Specify version at generation time.

* internal/gen: add better errors

The default error entry is now used to cover all errors, as
adding a new error for every possible status code was a bit much.
This also properly includes the real error type now!

* Add various pieces of metadata that can be used by the API docs renderer. Improve the service labels by specifying explicit tags.

* make auth method API docs

* make API docs better

* make auth methods API docs nicer

* internal/gen: better attribute examples

Replace Output Only comments with a field behavior annotation in accounts.
Mark some fields as required.
Add elaborate description for attributes.

* Make API docs better

* Make API docs better

* Make API docs better

* internal/proto: regenerate files

* internal/proto: finish off account service

* Make API docs better

* internal/proto: add better API docs for aliases

* Tidy up service descriptions

* Added description for Boundary controller  API doc

* internal/gen: add better API intro

Copy parts of the API docs into the description

* sdk: add openapi dependency

* internal/gen: move global API doc to separate file

* internal/gen: remove required annotations

Unfortunately, while these help with the creating of resources, they still
appear required in contexts where they are not, such as when
updating a resource.

* Review comments

---------

Co-authored-by: jigar-hashicorp <jigar.shah@hashicorp.com>
Co-authored-by: Isaac Christian (he/him) <112639904+isaacchristian@users.noreply.github.com>
2024-04-08 13:55:17 -07:00

155 lines
6.8 KiB
Protocol Buffer

// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
syntax = "proto3";
package controller.api.services.v1;
import "controller/api/resources/policies/v1/policy.proto";
import "controller/custom_options/v1/options.proto";
import "google/api/annotations.proto";
import "google/protobuf/field_mask.proto";
import "protoc-gen-openapiv2/options/annotations.proto";
option go_package = "github.com/hashicorp/boundary/internal/gen/controller/api/services;services";
option (custom_options.v1.domain) = "policy";
service PolicyService {
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_tag) = {
name: "Policy service"
description:
"The policy service provides endpoints that let you manage policies in Boundary. "
"Policies are used to define rules for the lifecycle of session recordings."
external_docs: {
url: "https://developer.hashicorp.com/boundary/docs/concepts/domain-model/storage-policy";
description: "Read about policies in the Boundary domain model";
}
};
// GetPolicy returns a policy with the given id, if it exists. The request
// must include a policy id. An error is returned if the ID is missing,
// malformed, or if a policy with the provided ID doesn't exist.
rpc GetPolicy(GetPolicyRequest) returns (GetPolicyResponse) {
option (google.api.http) = {
get: "/v1/policies/{id}"
response_body: "item"
};
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {summary: "Gets a single policy with the given id."};
}
// ListPolicies returns a list of stored policies in Boundary which exist
// inside the scope referenced in the request. The request must include the
// scope ID for the policies being retrieved. An error is returned if the
// scope ID is missing, malformed, or references a non existing scope.
rpc ListPolicies(ListPoliciesRequest) returns (ListPoliciesResponse) {
option (google.api.http) = {get: "/v1/policies"};
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {summary: "Lists all policies."};
}
// CreatePolicy creates and stores a new policy in Boundary. The provided
// request must include the scope ID in which the policy will be created. An
// error is returned if the scope ID is missing, malformed or references a non
// existing scope.
rpc CreatePolicy(CreatePolicyRequest) returns (CreatePolicyResponse) {
option (google.api.http) = {
post: "/v1/policies"
body: "item"
response_body: "item"
};
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {summary: "Creates a single policy."};
}
// UpdatePolicy updates an existing policy in Boundary. The provided policy
// must not have any read-only fields set. The update mask must be included in
// the request and contain at least one mutable field. To unset a field's
// value (if unsettable), include it in the update mask and don't set it in
// the policy object.
rpc UpdatePolicy(UpdatePolicyRequest) returns (UpdatePolicyResponse) {
option (google.api.http) = {
patch: "/v1/policies/{id}"
body: "item"
response_body: "item"
};
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {summary: "Updates an existing policy."};
}
// DeletePolicy deletes a policy from Boundary. An error is returned if the
// policy ID is malformed or not provided.
rpc DeletePolicy(DeletePolicyRequest) returns (DeletePolicyResponse) {
option (google.api.http) = {delete: "/v1/policies/{id}"};
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {summary: "Deletes an existing policy."};
}
}
message GetPolicyRequest {
string id = 1; // @gotags: `class:"public" eventstream:"observation"`
}
message GetPolicyResponse {
api.resources.policies.v1.Policy item = 1;
}
message ListPoliciesRequest {
string scope_id = 1; // @gotags: `class:"public" eventstream:"observation"`
bool recursive = 2 [json_name = "recursive"]; // @gotags: `class:"public" eventstream:"observation"`
string filter = 3 [json_name = "filter"]; // @gotags: `class:"public"`
// An opaque token that Boundary uses to continue an existing iteration or
// request updated items. If you do not specify a token, pagination
// starts from the beginning. To learn more about list pagination
// in Boundary, refer to [list pagination](https://developer.hashicorp.com/boundary/docs/api-clients/api/pagination).
string list_token = 4 [json_name = "list_token"]; // @gotags: `class:"public"`
// The maximum size of a page in this iteration.
// If unset, the default page size configured will be used.
// If the page_size is greater than the default page configured,
// the page size will be truncated to this number..
uint32 page_size = 5 [json_name = "page_size"]; // @gotags: `class:"public"`
}
message ListPoliciesResponse {
repeated api.resources.policies.v1.Policy items = 1;
// The type of response, either "delta" or "complete".
// Delta signifies that this is part of a paginated result
// or an update to a previously completed pagination.
// Complete signifies that it is the last page.
string response_type = 2 [json_name = "response_type"]; // @gotags: `class:"public"`
// An opaque token used to continue an existing pagination or
// request updated items. Use this token in the next list request
// to request the next page.
string list_token = 3 [json_name = "list_token"]; // @gotags: `class:"public"`
// The name of the field which the items are sorted by.
string sort_by = 4 [json_name = "sort_by"]; // @gotags: `class:"public"`
// The direction of the sort, either "asc" or "desc".
string sort_dir = 5 [json_name = "sort_dir"]; // @gotags: `class:"public"`
// A list of item IDs that have been removed since they were returned
// as part of a pagination. They should be dropped from any client cache.
// This may contain items that are not known to the cache, if they were
// created and deleted between listings.
repeated string removed_ids = 6 [json_name = "removed_ids"]; // @gotags: `class:"public"`
// An estimate at the total items available. This may change during pagination.
uint32 est_item_count = 7 [json_name = "est_item_count"]; // @gotags: `class:"public"`
}
message CreatePolicyRequest {
api.resources.policies.v1.Policy item = 1;
}
message CreatePolicyResponse {
string uri = 1; // @gotags: `class:"public" eventstream:"observation"`
api.resources.policies.v1.Policy item = 2;
}
message UpdatePolicyRequest {
string id = 1; // @gotags: `class:"public" eventstream:"observation"`
api.resources.policies.v1.Policy item = 2;
google.protobuf.FieldMask update_mask = 3 [json_name = "update_mask"];
}
message UpdatePolicyResponse {
api.resources.policies.v1.Policy item = 1;
}
message DeletePolicyRequest {
string id = 1; // @gotags: `class:"public" eventstream:"observation"`
}
message DeletePolicyResponse {}