diff --git a/client/client.gen.go b/client/client.gen.go index 68f2fcb..329c4a4 100644 --- a/client/client.gen.go +++ b/client/client.gen.go @@ -222,6 +222,9 @@ type ActiveResourceResponse struct { // Status Current resource status: 'pending', 'active', or 'deleting'. Status string `json:"status"` + // TargetDefVersionId The Resource Definition Version pinned to this resource to be provisioned from. + TargetDefVersionId *string `json:"target_def_version_id,omitempty"` + // Type The Resource Type of the resource Type string `json:"type"` @@ -499,6 +502,22 @@ type BatchItem struct { Type string `json:"type"` } +// CheckResourceAccountData The successful check response details. +type CheckResourceAccountData struct { + // IdentityFields A set of identity fields and properties resulting from the account check. + IdentityFields []CheckResourceAccountField `json:"identity_fields"` + + // Warnings A list of warnings related to this account. + Warnings *[]string `json:"warnings,omitempty"` +} + +// CheckResourceAccountField An identity field or property resulting from the account check. +type CheckResourceAccountField struct { + Description string `json:"description"` + Id string `json:"id"` + Value string `json:"value"` +} + // ClusterSecretRequest ClusterSecret represents Kubernetes secret reference. type ClusterSecretRequest struct { // Namespace Namespace to look for the Kubernetes secret definition in. @@ -1490,7 +1509,7 @@ type OrganizationResponse struct { Name string `json:"name"` // ScaffoldingUrl URL of the scaffolding service. - ScaffoldingUrl *string `json:"scaffolding_url,omitempty"` + ScaffoldingUrl *string `json:"scaffolding_url"` // TrialExpiresAt Timestamp the trial expires at. TrialExpiresAt *time.Time `json:"trial_expires_at"` @@ -5445,6 +5464,9 @@ type ClientInterface interface { PatchResourceAccount(ctx context.Context, orgId string, accId string, body PatchResourceAccountJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error) + // CheckResourceAccount request + CheckResourceAccount(ctx context.Context, orgId string, accId string, reqEditors ...RequestEditorFn) (*http.Response, error) + // ListResourceClasses request ListResourceClasses(ctx context.Context, orgId string, reqEditors ...RequestEditorFn) (*http.Response, error) @@ -8175,6 +8197,18 @@ func (c *Client) PatchResourceAccount(ctx context.Context, orgId string, accId s return c.Client.Do(req) } +func (c *Client) CheckResourceAccount(ctx context.Context, orgId string, accId string, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewCheckResourceAccountRequest(c.Server, orgId, accId) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if err := c.applyEditors(ctx, req, reqEditors); err != nil { + return nil, err + } + return c.Client.Do(req) +} + func (c *Client) ListResourceClasses(ctx context.Context, orgId string, reqEditors ...RequestEditorFn) (*http.Response, error) { req, err := NewListResourceClassesRequest(c.Server, orgId) if err != nil { @@ -18248,6 +18282,47 @@ func NewPatchResourceAccountRequestWithBody(server string, orgId string, accId s return req, nil } +// NewCheckResourceAccountRequest generates requests for CheckResourceAccount +func NewCheckResourceAccountRequest(server string, orgId string, accId string) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParamWithLocation("simple", false, "orgId", runtime.ParamLocationPath, orgId) + if err != nil { + return nil, err + } + + var pathParam1 string + + pathParam1, err = runtime.StyleParamWithLocation("simple", false, "accId", runtime.ParamLocationPath, accId) + if err != nil { + return nil, err + } + + serverURL, err := url.Parse(server) + if err != nil { + return nil, err + } + + operationPath := fmt.Sprintf("/orgs/%s/resources/accounts/%s/actions/check", pathParam0, pathParam1) + if operationPath[0] == '/' { + operationPath = "." + operationPath + } + + queryURL, err := serverURL.Parse(operationPath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("POST", queryURL.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + // NewListResourceClassesRequest generates requests for ListResourceClasses func NewListResourceClassesRequest(server string, orgId string) (*http.Request, error) { var err error @@ -21328,6 +21403,9 @@ type ClientWithResponsesInterface interface { PatchResourceAccountWithResponse(ctx context.Context, orgId string, accId string, body PatchResourceAccountJSONRequestBody, reqEditors ...RequestEditorFn) (*PatchResourceAccountResponse, error) + // CheckResourceAccountWithResponse request + CheckResourceAccountWithResponse(ctx context.Context, orgId string, accId string, reqEditors ...RequestEditorFn) (*CheckResourceAccountResponse, error) + // ListResourceClassesWithResponse request ListResourceClassesWithResponse(ctx context.Context, orgId string, reqEditors ...RequestEditorFn) (*ListResourceClassesResponse, error) @@ -25214,6 +25292,29 @@ func (r PatchResourceAccountResponse) StatusCode() int { return 0 } +type CheckResourceAccountResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *CheckResourceAccountData + JSON400 *HumanitecErrorResponse +} + +// Status returns HTTPResponse.Status +func (r CheckResourceAccountResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r CheckResourceAccountResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + type ListResourceClassesResponse struct { Body []byte HTTPResponse *http.Response @@ -28173,6 +28274,15 @@ func (c *ClientWithResponses) PatchResourceAccountWithResponse(ctx context.Conte return ParsePatchResourceAccountResponse(rsp) } +// CheckResourceAccountWithResponse request returning *CheckResourceAccountResponse +func (c *ClientWithResponses) CheckResourceAccountWithResponse(ctx context.Context, orgId string, accId string, reqEditors ...RequestEditorFn) (*CheckResourceAccountResponse, error) { + rsp, err := c.CheckResourceAccount(ctx, orgId, accId, reqEditors...) + if err != nil { + return nil, err + } + return ParseCheckResourceAccountResponse(rsp) +} + // ListResourceClassesWithResponse request returning *ListResourceClassesResponse func (c *ClientWithResponses) ListResourceClassesWithResponse(ctx context.Context, orgId string, reqEditors ...RequestEditorFn) (*ListResourceClassesResponse, error) { rsp, err := c.ListResourceClasses(ctx, orgId, reqEditors...) @@ -34457,6 +34567,39 @@ func ParsePatchResourceAccountResponse(rsp *http.Response) (*PatchResourceAccoun return response, nil } +// ParseCheckResourceAccountResponse parses an HTTP response from a CheckResourceAccountWithResponse call +func ParseCheckResourceAccountResponse(rsp *http.Response) (*CheckResourceAccountResponse, error) { + bodyBytes, err := io.ReadAll(rsp.Body) + defer func() { _ = rsp.Body.Close() }() + if err != nil { + return nil, err + } + + response := &CheckResourceAccountResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest CheckResourceAccountData + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400: + var dest HumanitecErrorResponse + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON400 = &dest + + } + + return response, nil +} + // ParseListResourceClassesResponse parses an HTTP response from a ListResourceClassesWithResponse call func ParseListResourceClassesResponse(rsp *http.Response) (*ListResourceClassesResponse, error) { bodyBytes, err := io.ReadAll(rsp.Body) diff --git a/docs/openapi.json b/docs/openapi.json index 0a3b197..19a3c02 100644 --- a/docs/openapi.json +++ b/docs/openapi.json @@ -2,11 +2,11 @@ "openapi": "3.0.0", "info": { "title": "Humanitec API", - "version": "0.26.11", - "description": "# Introduction\nThe *Humanitec API* allows you to automate and integrate Humanitec into your developer and operational workflows.\nThe API is a REST based API. It is based around a set of concepts:\n\n* Core\n* External Resources\n* Sets and Deltas\n\n## Authentication\n\nAlmost all requests made to the Humanitec API require Authentication. See our [Developer Docs on API Authentication](https://developer.humanitec.com/platform-orchestrator/reference/api-references/#authentication) for instructions.\n\n## Content Types\nAll of the Humanitec API unless explicitly only accepts content types of `application/json` and will always return valid `application/json` or an empty response.\n\n## Response Codes\n### Success\nAny response code in the `2xx` range should be regarded as success.\n\n| **Code** | **Meaning** |\n| --- | --- |\n| `200` | Success |\n| `201` | Success (In future, `201` will be replaced by `200`) |\n| `204` | Success, but no content in response |\n\n_Note: We plan to simplify the interface by replacing 201 with 200 status codes._\n\n### Failure\nAny response code in the `4xx` should be regarded as an error which can be rectified by the client. `5xx` error codes indicate errors that cannot be corrected by the client.\n\n| **Code** | **Meaning** |\n| --- | --- |\n| `400` | General error. (Body will contain details) |\n| `401` | Attempt to access protected resource without `Authorization` Header. |\n| `403` | The `Bearer` or `JWT` does not grant access to the requested resource. |\n| `404` | Resource not found. |\n| `405` | Method not allowed |\n| `409` | Conflict. Usually indicated a resource with that ID already exists. |\n| `422` | Unprocessable Entity. The body was not valid JSON, was empty or contained an object different from what was expected. |\n| `429` | Too many requests - request rate limit has been reached. |\n| `500` | Internal Error. If it occurs repeatedly, contact support. |\n", + "version": "0.26.12", + "description": "# Introduction\nThe *Humanitec API* allows you to automate and integrate Humanitec into your developer and operational workflows.\nThe API is a REST based API. It is based around a set of concepts:\n\n* Core\n* External Resources\n* Sets and Deltas\n\n## Authentication\n\nAlmost all requests made to the Humanitec API require Authentication. See our [Developer Docs on API Authentication](https://developer.humanitec.com/platform-orchestrator/reference/api-references/#authentication) for instructions.\n\n## Content Types\nThe Humanitec API, unless explicitly specified, only accepts content types of `application/json` and will always return valid `application/json` or an empty response.\n\n## Response Codes\n### Success\nAny response code in the `2xx` range should be regarded as success.\n\n| **Code** | **Meaning** |\n|----------|-------------------------------------|\n| `200` | Success |\n| `201` | Success, a new resource was created |\n| `204` | Success, but no content in response |\n\n_Note: We plan to simplify the interface by replacing 201 with 200 status codes._\n\n### Failure\nAny response code in the `4xx` range should be regarded as an error that can be rectified by the client. `5xx` error codes indicate errors that cannot be corrected by the client.\n\n| **Code** | **Meaning** |\n|----------|-----------------------------------------------------------------------------------------------------------------------|\n| `400` | General error. (Body will contain details) |\n| `401` | Attempt to access protected resource without `Authorization` Header. |\n| `403` | The `Bearer` or `JWT` does not grant access to the requested resource. |\n| `404` | Resource not found. |\n| `405` | Method not allowed |\n| `409` | Conflict. Usually indicated a resource with that ID already exists. |\n| `422` | Unprocessable Entity. The body was not valid JSON, was empty or contained an object different from what was expected. |\n| `429` | Too many requests - request rate limit has been reached. |\n| `500` | Internal Error. If it occurs repeatedly, contact support. |\n", "contact": { - "name": "API Support", - "email": "apiteam@humanitec.com" + "name": "Humanitec Support", + "email": "support@humanitec.com" }, "x-logo": { "url": "humanitec-logo.png", @@ -7047,6 +7047,59 @@ } } }, + "/orgs/{orgId}/resources/accounts/{accId}/actions/check": { + "post": { + "tags": [ + "public", + "ResourceAccount" + ], + "summary": "Check the credentials of an existing Resource Account", + "description": "Check the validity of a Resource Account and return any problems that may cause it to not work as expected.", + "operationId": "checkResourceAccount", + "parameters": [ + { + "name": "orgId", + "in": "path", + "description": "The Organization ID.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "accId", + "in": "path", + "description": "The Resource Account ID.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "The updated Account Type.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CheckResourceAccountData" + } + } + } + }, + "400": { + "description": "The Resource Account is not valid or could not be validated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HumanitecErrorResponse" + } + } + } + } + } + } + }, "/orgs/{orgId}/resources/defs": { "get": { "tags": [ @@ -15310,6 +15363,7 @@ }, "scaffolding_url": { "description": "URL of the scaffolding service.", + "nullable": true, "type": "string" } }, @@ -16703,6 +16757,10 @@ "description": "The Resource Definition Version that this resource was provisioned from.", "type": "string" }, + "target_def_version_id": { + "description": "The Resource Definition Version pinned to this resource to be provisioned from.", + "type": "string" + }, "deploy_id": { "description": "The deployment that the resource was last provisioned in.", "type": "string" @@ -17789,7 +17847,7 @@ "type": "object" } }, - "type": "postgres", + "type": "my-org/postgres", "use": "direct" }, "properties": { @@ -17812,8 +17870,9 @@ "type": "object" }, "type": { - "description": "Unique resource type identifier (system-wide, across all organizations).", - "type": "string" + "description": "Unique resource type identifier (system-wide, across all organizations). It should start with the Humanitec Organization ID followed by \"/\".", + "type": "string", + "example": "my-org/my-private-type" }, "use": { "description": "Kind of dependency between resource of this type and a workload. It should be one of: `direct`, `indirect`, `implicit`.", @@ -18221,6 +18280,51 @@ }, "type": "object" }, + "CheckResourceAccountField": { + "description": "An identity field or property resulting from the account check.", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "description": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "id", + "description", + "value" + ] + }, + "CheckResourceAccountData": { + "description": "The successful check response details.", + "type": "object", + "properties": { + "identity_fields": { + "description": "A set of identity fields and properties resulting from the account check.", + "type": "array", + "items": { + "$ref": "#/components/schemas/CheckResourceAccountField" + } + }, + "warnings": { + "description": "A list of warnings related to this account.", + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "required": [ + "identity_fields" + ] + }, "ControllerResponse": { "description": "Controller represents deployment, stateful set etc", "properties": { @@ -20017,7 +20121,7 @@ ], "externalDocs": { "description": "Find out more about how to use Humanitec in your every-day development work.", - "url": "https://docs.humanitec.com" + "url": "https://developer.humanitec.com/" }, "x-tagGroups": [ {