From 6c7b8c8b20b4532b841043a83ed412e3aa865e88 Mon Sep 17 00:00:00 2001 From: Aditya Choudhari Date: Sat, 12 Apr 2025 22:26:42 -0700 Subject: [PATCH] feat: policy create cmd --- cmd/ctrlc/root/api/create/create.go | 2 + cmd/ctrlc/root/api/create/policy/policy.go | 203 ++++++++ internal/api/client.gen.go | 552 +++++++++++++++++++++ 3 files changed, 757 insertions(+) create mode 100644 cmd/ctrlc/root/api/create/policy/policy.go diff --git a/cmd/ctrlc/root/api/create/create.go b/cmd/ctrlc/root/api/create/create.go index 8368680..eb4f637 100644 --- a/cmd/ctrlc/root/api/create/create.go +++ b/cmd/ctrlc/root/api/create/create.go @@ -4,6 +4,7 @@ import ( "github.com/ctrlplanedev/cli/cmd/ctrlc/root/api/create/deploymentversion" "github.com/ctrlplanedev/cli/cmd/ctrlc/root/api/create/deploymentversionchannel" "github.com/ctrlplanedev/cli/cmd/ctrlc/root/api/create/environment" + "github.com/ctrlplanedev/cli/cmd/ctrlc/root/api/create/policy" "github.com/ctrlplanedev/cli/cmd/ctrlc/root/api/create/relationship" "github.com/ctrlplanedev/cli/cmd/ctrlc/root/api/create/release" "github.com/ctrlplanedev/cli/cmd/ctrlc/root/api/create/releasechannel" @@ -28,6 +29,7 @@ func NewCreateCmd() *cobra.Command { cmd.AddCommand(relationship.NewRelationshipCmd()) cmd.AddCommand(release.NewCreateReleaseCmd()) cmd.AddCommand(system.NewCreateSystemCmd()) + cmd.AddCommand(policy.NewCreatePolicyCmd()) return cmd } diff --git a/cmd/ctrlc/root/api/create/policy/policy.go b/cmd/ctrlc/root/api/create/policy/policy.go new file mode 100644 index 0000000..af0b787 --- /dev/null +++ b/cmd/ctrlc/root/api/create/policy/policy.go @@ -0,0 +1,203 @@ +package policy + +import ( + "encoding/json" + "fmt" + "time" + + "github.com/MakeNowJust/heredoc/v2" + "github.com/ctrlplanedev/cli/internal/api" + "github.com/ctrlplanedev/cli/internal/cliutil" + "github.com/spf13/cobra" + "github.com/spf13/viper" +) + +func NewCreatePolicyCmd() *cobra.Command { + var name string + var workspaceID string + var description string + var priority float32 + var enabled bool + var deploymentTargetSelector string + var environmentTargetSelector string + var resourceTargetSelector string + var denyWindows string + var versionAnyApprovals string + var versionUserApprovals string + var versionRoleApprovals string + var deploymentVersionSelector string + + cmd := &cobra.Command{ + Use: "policy [flags]", + Short: "Create a new policy", + Long: `Create a new policy with specified parameters`, + Example: heredoc.Doc(` + # Create a new policy + $ ctrlc create policy --name my-policy --workspace-id 00000000-0000-0000-0000-000000000000 + + # Create a new policy with deployment selector + $ ctrlc create policy --name my-policy --workspace-id 00000000-0000-0000-0000-000000000000 --deployment-selector '{"type": "production"}' + + # Create a new policy with environment selector + $ ctrlc create policy --name my-policy --workspace-id 00000000-0000-0000-0000-000000000000 --environment-selector '{"name": "prod"}' + + # Create a new policy with deny windows + $ ctrlc create policy --name my-policy --workspace-id 00000000-0000-0000-0000-000000000000 --deny-windows '[{"timeZone": "UTC", "rrule": {"freq": "WEEKLY", "byday": ["SA", "SU"]}}]' + + # Create a new policy with version approvals + $ ctrlc create policy --name my-policy --workspace-id 00000000-0000-0000-0000-000000000000 --version-any-approvals '{"requiredApprovalsCount": 2}' --version-user-approvals '[{"userId": "user1"}, {"userId": "user2"}]' --version-role-approvals '[{"roleId": "role1", "requiredApprovalsCount": 1}]' + `), + RunE: func(cmd *cobra.Command, args []string) error { + apiURL := viper.GetString("url") + apiKey := viper.GetString("api-key") + client, err := api.NewAPIKeyClientWithResponses(apiURL, apiKey) + if err != nil { + return fmt.Errorf("failed to create API client: %w", err) + } + + // Parse selectors from JSON strings + var deploymentSelector *map[string]interface{} + if deploymentTargetSelector != "" { + var parsedSelector map[string]interface{} + if err := json.Unmarshal([]byte(deploymentTargetSelector), &parsedSelector); err != nil { + return fmt.Errorf("invalid deployment target selector JSON: %w", err) + } + deploymentSelector = &parsedSelector + } + + var environmentSelector *map[string]interface{} + if environmentTargetSelector != "" { + var parsedSelector map[string]interface{} + if err := json.Unmarshal([]byte(environmentTargetSelector), &parsedSelector); err != nil { + return fmt.Errorf("invalid environment target selector JSON: %w", err) + } + environmentSelector = &parsedSelector + } + + var resourceSelector *map[string]interface{} + if resourceTargetSelector != "" { + var parsedSelector map[string]interface{} + if err := json.Unmarshal([]byte(resourceTargetSelector), &parsedSelector); err != nil { + return fmt.Errorf("invalid resource target selector JSON: %w", err) + } + resourceSelector = &parsedSelector + } + + // Parse deny windows + var parsedDenyWindows []struct { + Dtend *time.Time `json:"dtend,omitempty"` + Rrule *map[string]interface{} `json:"rrule,omitempty"` + TimeZone string `json:"timeZone"` + } + if denyWindows != "" { + if err := json.Unmarshal([]byte(denyWindows), &parsedDenyWindows); err != nil { + return fmt.Errorf("invalid deny windows JSON: %w", err) + } + } + + // Parse version any approvals + var parsedVersionAnyApprovals *[]struct { + RequiredApprovalsCount *float32 `json:"requiredApprovalsCount,omitempty"` + } + if versionAnyApprovals != "" { + var approvals []struct { + RequiredApprovalsCount *float32 `json:"requiredApprovalsCount,omitempty"` + } + if err := json.Unmarshal([]byte(versionAnyApprovals), &approvals); err != nil { + return fmt.Errorf("invalid version any approvals JSON: %w", err) + } + parsedVersionAnyApprovals = &approvals + } + + // Parse version user approvals + var parsedVersionUserApprovals []api.VersionUserApproval + if versionUserApprovals != "" { + if err := json.Unmarshal([]byte(versionUserApprovals), &parsedVersionUserApprovals); err != nil { + return fmt.Errorf("invalid version user approvals JSON: %w", err) + } + } else { + parsedVersionUserApprovals = []api.VersionUserApproval{} + } + + // Parse version role approvals + var parsedVersionRoleApprovals []struct { + RequiredApprovalsCount *float32 `json:"requiredApprovalsCount,omitempty"` + RoleId *string `json:"roleId,omitempty"` + } + if versionRoleApprovals != "" { + if err := json.Unmarshal([]byte(versionRoleApprovals), &parsedVersionRoleApprovals); err != nil { + return fmt.Errorf("invalid version role approvals JSON: %w", err) + } + } else { + parsedVersionRoleApprovals = []struct { + RequiredApprovalsCount *float32 `json:"requiredApprovalsCount,omitempty"` + RoleId *string `json:"roleId,omitempty"` + }{} + } + + // Parse deployment version selector + var parsedDeploymentVersionSelector *api.DeploymentVersionSelector + if deploymentVersionSelector != "" { + var selector map[string]interface{} + + if err := json.Unmarshal([]byte(deploymentVersionSelector), &selector); err != nil { + return fmt.Errorf("invalid deployment version selector JSON: %w", err) + } + + parsedDeploymentVersionSelector = &api.DeploymentVersionSelector{ + DeploymentVersionSelector: selector, + Name: name, + } + } + + // Create policy request + body := api.CreatePolicyJSONRequestBody{ + Name: name, + WorkspaceId: workspaceID, + Description: &description, + Priority: &priority, + Enabled: &enabled, + Targets: []api.PolicyTarget{ + { + DeploymentSelector: deploymentSelector, + EnvironmentSelector: environmentSelector, + ResourceSelector: resourceSelector, + }, + }, + DenyWindows: parsedDenyWindows, + DeploymentVersionSelector: parsedDeploymentVersionSelector, + VersionAnyApprovals: parsedVersionAnyApprovals, + VersionUserApprovals: parsedVersionUserApprovals, + VersionRoleApprovals: parsedVersionRoleApprovals, + } + + resp, err := client.CreatePolicy(cmd.Context(), body) + if err != nil { + return fmt.Errorf("failed to create policy: %w", err) + } + + return cliutil.HandleResponseOutput(cmd, resp) + }, + } + + // Add flags + cmd.Flags().StringVarP(&name, "name", "n", "", "Name of the policy (required)") + cmd.Flags().StringVarP(&workspaceID, "workspace-id", "w", "", "Workspace ID (required)") + cmd.Flags().StringVarP(&description, "description", "d", "", "Description of the policy") + cmd.Flags().Float32VarP(&priority, "priority", "p", 0, "Priority of the policy (default: 0)") + cmd.Flags().BoolVarP(&enabled, "enabled", "e", true, "Whether the policy is enabled (default: true)") + cmd.Flags().StringVar(&deploymentTargetSelector, "deployment-selector", "", "JSON string for deployment target selector") + cmd.Flags().StringVar(&environmentTargetSelector, "environment-selector", "", "JSON string for environment target selector") + cmd.Flags().StringVar(&resourceTargetSelector, "resource-selector", "", "JSON string for resource target selector") + cmd.Flags().StringVar(&denyWindows, "deny-windows", "", "JSON string for deny windows") + cmd.Flags().StringVar(&versionAnyApprovals, "version-any-approvals", "", "JSON string for version any approvals") + cmd.Flags().StringVar(&versionUserApprovals, "version-user-approvals", "", "JSON string for version user approvals") + cmd.Flags().StringVar(&versionRoleApprovals, "version-role-approvals", "", "JSON string for version role approvals") + cmd.Flags().StringVar(&deploymentVersionSelector, "deployment-version-selector", "", "JSON string for deployment version selector") + + // Mark required flags + cmd.MarkFlagRequired("name") + cmd.MarkFlagRequired("workspace-id") + + return cmd +} diff --git a/internal/api/client.gen.go b/internal/api/client.gen.go index 78edd08..b9f5d3a 100644 --- a/internal/api/client.gen.go +++ b/internal/api/client.gen.go @@ -109,6 +109,13 @@ type CloudRegionGeoData struct { Timezone string `json:"timezone"` } +// DenyWindow defines model for DenyWindow. +type DenyWindow struct { + Dtend *time.Time `json:"dtend,omitempty"` + Rrule map[string]interface{} `json:"rrule"` + TimeZone string `json:"timeZone"` +} + // Deployment defines model for Deployment. type Deployment struct { Description string `json:"description"` @@ -134,6 +141,13 @@ type DeploymentVersion struct { Tag string `json:"tag"` } +// DeploymentVersionSelector defines model for DeploymentVersionSelector. +type DeploymentVersionSelector struct { + DeploymentVersionSelector map[string]interface{} `json:"deploymentVersionSelector"` + Description *string `json:"description,omitempty"` + Name string `json:"name"` +} + // Environment defines model for Environment. type Environment struct { CreatedAt time.Time `json:"createdAt"` @@ -255,6 +269,30 @@ type PolicyReleaseSequencing string // PolicySuccessType If a policy depends on an environment, whether or not the policy requires all, some, or optional successful releases in the environment type PolicySuccessType string +// Policy1 defines model for Policy1. +type Policy1 struct { + CreatedAt time.Time `json:"createdAt"` + DenyWindows []DenyWindow `json:"denyWindows"` + DeploymentVersionSelector *DeploymentVersionSelector `json:"deploymentVersionSelector,omitempty"` + Description *string `json:"description,omitempty"` + Enabled bool `json:"enabled"` + Id openapi_types.UUID `json:"id"` + Name string `json:"name"` + Priority float32 `json:"priority"` + Targets []PolicyTarget `json:"targets"` + VersionAnyApprovals *[]VersionAnyApproval `json:"versionAnyApprovals,omitempty"` + VersionRoleApprovals []VersionRoleApproval `json:"versionRoleApprovals"` + VersionUserApprovals []VersionUserApproval `json:"versionUserApprovals"` + WorkspaceId openapi_types.UUID `json:"workspaceId"` +} + +// PolicyTarget defines model for PolicyTarget. +type PolicyTarget struct { + DeploymentSelector *map[string]interface{} `json:"deploymentSelector,omitempty"` + EnvironmentSelector *map[string]interface{} `json:"environmentSelector,omitempty"` + ResourceSelector *map[string]interface{} `json:"resourceSelector,omitempty"` +} + // Release defines model for Release. type Release struct { Config map[string]interface{} `json:"config"` @@ -342,6 +380,22 @@ type Variable_Value struct { union json.RawMessage } +// VersionAnyApproval defines model for VersionAnyApproval. +type VersionAnyApproval struct { + RequiredApprovalsCount float32 `json:"requiredApprovalsCount"` +} + +// VersionRoleApproval defines model for VersionRoleApproval. +type VersionRoleApproval struct { + RequiredApprovalsCount float32 `json:"requiredApprovalsCount"` + RoleId string `json:"roleId"` +} + +// VersionUserApproval defines model for VersionUserApproval. +type VersionUserApproval struct { + UserId string `json:"userId"` +} + // Workspace defines model for Workspace. type Workspace struct { // AwsRoleArn The ARN of the AWS role attached to the workspace @@ -462,6 +516,30 @@ type UpdateJobJSONBody struct { Status *JobStatus `json:"status,omitempty"` } +// CreatePolicyJSONBody defines parameters for CreatePolicy. +type CreatePolicyJSONBody struct { + DenyWindows []struct { + Dtend *time.Time `json:"dtend,omitempty"` + Rrule *map[string]interface{} `json:"rrule,omitempty"` + TimeZone string `json:"timeZone"` + } `json:"denyWindows"` + DeploymentVersionSelector *DeploymentVersionSelector `json:"deploymentVersionSelector,omitempty"` + Description *string `json:"description,omitempty"` + Enabled *bool `json:"enabled,omitempty"` + Name string `json:"name"` + Priority *float32 `json:"priority,omitempty"` + Targets []PolicyTarget `json:"targets"` + VersionAnyApprovals *[]struct { + RequiredApprovalsCount *float32 `json:"requiredApprovalsCount,omitempty"` + } `json:"versionAnyApprovals,omitempty"` + VersionRoleApprovals []struct { + RequiredApprovalsCount *float32 `json:"requiredApprovalsCount,omitempty"` + RoleId *string `json:"roleId,omitempty"` + } `json:"versionRoleApprovals"` + VersionUserApprovals []VersionUserApproval `json:"versionUserApprovals"` + WorkspaceId string `json:"workspaceId"` +} + // CreateJobToResourceRelationshipJSONBody defines parameters for CreateJobToResourceRelationship. type CreateJobToResourceRelationshipJSONBody struct { // JobId Unique identifier of the job @@ -538,6 +616,21 @@ type SetResourceProvidersResourcesJSONBody struct { } `json:"resources"` } +// CreateResourceSchemaJSONBody defines parameters for CreateResourceSchema. +type CreateResourceSchemaJSONBody struct { + // JsonSchema The JSON schema definition + JsonSchema map[string]interface{} `json:"jsonSchema"` + + // Kind Kind of resource this schema is for + Kind string `json:"kind"` + + // Version Version of the schema + Version string `json:"version"` + + // WorkspaceId The ID of the workspace + WorkspaceId openapi_types.UUID `json:"workspaceId"` +} + // UpsertResourcesJSONBody defines parameters for UpsertResources. type UpsertResourcesJSONBody struct { Resources []struct { @@ -617,6 +710,9 @@ type UpsertJobAgentJSONRequestBody UpsertJobAgentJSONBody // UpdateJobJSONRequestBody defines body for UpdateJob for application/json ContentType. type UpdateJobJSONRequestBody UpdateJobJSONBody +// CreatePolicyJSONRequestBody defines body for CreatePolicy for application/json ContentType. +type CreatePolicyJSONRequestBody CreatePolicyJSONBody + // CreateJobToResourceRelationshipJSONRequestBody defines body for CreateJobToResourceRelationship for application/json ContentType. type CreateJobToResourceRelationshipJSONRequestBody CreateJobToResourceRelationshipJSONBody @@ -635,6 +731,9 @@ type UpdateReleaseJSONRequestBody UpdateReleaseJSONBody // SetResourceProvidersResourcesJSONRequestBody defines body for SetResourceProvidersResources for application/json ContentType. type SetResourceProvidersResourcesJSONRequestBody SetResourceProvidersResourcesJSONBody +// CreateResourceSchemaJSONRequestBody defines body for CreateResourceSchema for application/json ContentType. +type CreateResourceSchemaJSONRequestBody CreateResourceSchemaJSONBody + // UpsertResourcesJSONRequestBody defines body for UpsertResources for application/json ContentType. type UpsertResourcesJSONRequestBody UpsertResourcesJSONBody @@ -1060,6 +1159,11 @@ type ClientInterface interface { // AcknowledgeJob request AcknowledgeJob(ctx context.Context, jobId string, reqEditors ...RequestEditorFn) (*http.Response, error) + // CreatePolicyWithBody request with any body + CreatePolicyWithBody(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) + + CreatePolicy(ctx context.Context, body CreatePolicyJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error) + // CreateJobToResourceRelationshipWithBody request with any body CreateJobToResourceRelationshipWithBody(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) @@ -1090,6 +1194,14 @@ type ClientInterface interface { SetResourceProvidersResources(ctx context.Context, providerId string, body SetResourceProvidersResourcesJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error) + // CreateResourceSchemaWithBody request with any body + CreateResourceSchemaWithBody(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) + + CreateResourceSchema(ctx context.Context, body CreateResourceSchemaJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error) + + // DeleteResourceSchema request + DeleteResourceSchema(ctx context.Context, schemaId openapi_types.UUID, reqEditors ...RequestEditorFn) (*http.Response, error) + // UpsertResourcesWithBody request with any body UpsertResourcesWithBody(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) @@ -1492,6 +1604,30 @@ func (c *Client) AcknowledgeJob(ctx context.Context, jobId string, reqEditors .. return c.Client.Do(req) } +func (c *Client) CreatePolicyWithBody(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewCreatePolicyRequestWithBody(c.Server, contentType, body) + 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) CreatePolicy(ctx context.Context, body CreatePolicyJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewCreatePolicyRequest(c.Server, body) + 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) CreateJobToResourceRelationshipWithBody(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) { req, err := NewCreateJobToResourceRelationshipRequestWithBody(c.Server, contentType, body) if err != nil { @@ -1636,6 +1772,42 @@ func (c *Client) SetResourceProvidersResources(ctx context.Context, providerId s return c.Client.Do(req) } +func (c *Client) CreateResourceSchemaWithBody(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewCreateResourceSchemaRequestWithBody(c.Server, contentType, body) + 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) CreateResourceSchema(ctx context.Context, body CreateResourceSchemaJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewCreateResourceSchemaRequest(c.Server, body) + 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) DeleteResourceSchema(ctx context.Context, schemaId openapi_types.UUID, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewDeleteResourceSchemaRequest(c.Server, schemaId) + 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) UpsertResourcesWithBody(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) { req, err := NewUpsertResourcesRequestWithBody(c.Server, contentType, body) if err != nil { @@ -2675,6 +2847,46 @@ func NewAcknowledgeJobRequest(server string, jobId string) (*http.Request, error return req, nil } +// NewCreatePolicyRequest calls the generic CreatePolicy builder with application/json body +func NewCreatePolicyRequest(server string, body CreatePolicyJSONRequestBody) (*http.Request, error) { + var bodyReader io.Reader + buf, err := json.Marshal(body) + if err != nil { + return nil, err + } + bodyReader = bytes.NewReader(buf) + return NewCreatePolicyRequestWithBody(server, "application/json", bodyReader) +} + +// NewCreatePolicyRequestWithBody generates requests for CreatePolicy with any type of body +func NewCreatePolicyRequestWithBody(server string, contentType string, body io.Reader) (*http.Request, error) { + var err error + + serverURL, err := url.Parse(server) + if err != nil { + return nil, err + } + + operationPath := fmt.Sprintf("/v1/policies") + if operationPath[0] == '/' { + operationPath = "." + operationPath + } + + queryURL, err := serverURL.Parse(operationPath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("POST", queryURL.String(), body) + if err != nil { + return nil, err + } + + req.Header.Add("Content-Type", contentType) + + return req, nil +} + // NewCreateJobToResourceRelationshipRequest calls the generic CreateJobToResourceRelationship builder with application/json body func NewCreateJobToResourceRelationshipRequest(server string, body CreateJobToResourceRelationshipJSONRequestBody) (*http.Request, error) { var bodyReader io.Reader @@ -2929,6 +3141,80 @@ func NewSetResourceProvidersResourcesRequestWithBody(server string, providerId s return req, nil } +// NewCreateResourceSchemaRequest calls the generic CreateResourceSchema builder with application/json body +func NewCreateResourceSchemaRequest(server string, body CreateResourceSchemaJSONRequestBody) (*http.Request, error) { + var bodyReader io.Reader + buf, err := json.Marshal(body) + if err != nil { + return nil, err + } + bodyReader = bytes.NewReader(buf) + return NewCreateResourceSchemaRequestWithBody(server, "application/json", bodyReader) +} + +// NewCreateResourceSchemaRequestWithBody generates requests for CreateResourceSchema with any type of body +func NewCreateResourceSchemaRequestWithBody(server string, contentType string, body io.Reader) (*http.Request, error) { + var err error + + serverURL, err := url.Parse(server) + if err != nil { + return nil, err + } + + operationPath := fmt.Sprintf("/v1/resource-schemas") + if operationPath[0] == '/' { + operationPath = "." + operationPath + } + + queryURL, err := serverURL.Parse(operationPath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("POST", queryURL.String(), body) + if err != nil { + return nil, err + } + + req.Header.Add("Content-Type", contentType) + + return req, nil +} + +// NewDeleteResourceSchemaRequest generates requests for DeleteResourceSchema +func NewDeleteResourceSchemaRequest(server string, schemaId openapi_types.UUID) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParamWithLocation("simple", false, "schemaId", runtime.ParamLocationPath, schemaId) + if err != nil { + return nil, err + } + + serverURL, err := url.Parse(server) + if err != nil { + return nil, err + } + + operationPath := fmt.Sprintf("/v1/resource-schemas/%s", pathParam0) + if operationPath[0] == '/' { + operationPath = "." + operationPath + } + + queryURL, err := serverURL.Parse(operationPath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("DELETE", queryURL.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + // NewUpsertResourcesRequest calls the generic UpsertResources builder with application/json body func NewUpsertResourcesRequest(server string, body UpsertResourcesJSONRequestBody) (*http.Request, error) { var bodyReader io.Reader @@ -3767,6 +4053,11 @@ type ClientWithResponsesInterface interface { // AcknowledgeJobWithResponse request AcknowledgeJobWithResponse(ctx context.Context, jobId string, reqEditors ...RequestEditorFn) (*AcknowledgeJobResponse, error) + // CreatePolicyWithBodyWithResponse request with any body + CreatePolicyWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*CreatePolicyResponse, error) + + CreatePolicyWithResponse(ctx context.Context, body CreatePolicyJSONRequestBody, reqEditors ...RequestEditorFn) (*CreatePolicyResponse, error) + // CreateJobToResourceRelationshipWithBodyWithResponse request with any body CreateJobToResourceRelationshipWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*CreateJobToResourceRelationshipResponse, error) @@ -3797,6 +4088,14 @@ type ClientWithResponsesInterface interface { SetResourceProvidersResourcesWithResponse(ctx context.Context, providerId string, body SetResourceProvidersResourcesJSONRequestBody, reqEditors ...RequestEditorFn) (*SetResourceProvidersResourcesResponse, error) + // CreateResourceSchemaWithBodyWithResponse request with any body + CreateResourceSchemaWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*CreateResourceSchemaResponse, error) + + CreateResourceSchemaWithResponse(ctx context.Context, body CreateResourceSchemaJSONRequestBody, reqEditors ...RequestEditorFn) (*CreateResourceSchemaResponse, error) + + // DeleteResourceSchemaWithResponse request + DeleteResourceSchemaWithResponse(ctx context.Context, schemaId openapi_types.UUID, reqEditors ...RequestEditorFn) (*DeleteResourceSchemaResponse, error) + // UpsertResourcesWithBodyWithResponse request with any body UpsertResourcesWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*UpsertResourcesResponse, error) @@ -4407,6 +4706,31 @@ func (r AcknowledgeJobResponse) StatusCode() int { return 0 } +type CreatePolicyResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *Policy1 + JSON500 *struct { + Error *string `json:"error,omitempty"` + } +} + +// Status returns HTTPResponse.Status +func (r CreatePolicyResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r CreatePolicyResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + type CreateJobToResourceRelationshipResponse struct { Body []byte HTTPResponse *http.Response @@ -4590,6 +4914,68 @@ func (r SetResourceProvidersResourcesResponse) StatusCode() int { return 0 } +type CreateResourceSchemaResponse struct { + Body []byte + HTTPResponse *http.Response + JSON201 *struct { + Id *openapi_types.UUID `json:"id,omitempty"` + JsonSchema *map[string]interface{} `json:"jsonSchema,omitempty"` + Kind *string `json:"kind,omitempty"` + Version *string `json:"version,omitempty"` + WorkspaceId *openapi_types.UUID `json:"workspaceId,omitempty"` + } + JSON400 *struct { + Error *string `json:"error,omitempty"` + } + JSON409 *struct { + Error *string `json:"error,omitempty"` + Id *openapi_types.UUID `json:"id,omitempty"` + } +} + +// Status returns HTTPResponse.Status +func (r CreateResourceSchemaResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r CreateResourceSchemaResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + +type DeleteResourceSchemaResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *struct { + Id *openapi_types.UUID `json:"id,omitempty"` + } + JSON404 *struct { + Error *string `json:"error,omitempty"` + } +} + +// Status returns HTTPResponse.Status +func (r DeleteResourceSchemaResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r DeleteResourceSchemaResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + type UpsertResourcesResponse struct { Body []byte HTTPResponse *http.Response @@ -5388,6 +5774,23 @@ func (c *ClientWithResponses) AcknowledgeJobWithResponse(ctx context.Context, jo return ParseAcknowledgeJobResponse(rsp) } +// CreatePolicyWithBodyWithResponse request with arbitrary body returning *CreatePolicyResponse +func (c *ClientWithResponses) CreatePolicyWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*CreatePolicyResponse, error) { + rsp, err := c.CreatePolicyWithBody(ctx, contentType, body, reqEditors...) + if err != nil { + return nil, err + } + return ParseCreatePolicyResponse(rsp) +} + +func (c *ClientWithResponses) CreatePolicyWithResponse(ctx context.Context, body CreatePolicyJSONRequestBody, reqEditors ...RequestEditorFn) (*CreatePolicyResponse, error) { + rsp, err := c.CreatePolicy(ctx, body, reqEditors...) + if err != nil { + return nil, err + } + return ParseCreatePolicyResponse(rsp) +} + // CreateJobToResourceRelationshipWithBodyWithResponse request with arbitrary body returning *CreateJobToResourceRelationshipResponse func (c *ClientWithResponses) CreateJobToResourceRelationshipWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*CreateJobToResourceRelationshipResponse, error) { rsp, err := c.CreateJobToResourceRelationshipWithBody(ctx, contentType, body, reqEditors...) @@ -5490,6 +5893,32 @@ func (c *ClientWithResponses) SetResourceProvidersResourcesWithResponse(ctx cont return ParseSetResourceProvidersResourcesResponse(rsp) } +// CreateResourceSchemaWithBodyWithResponse request with arbitrary body returning *CreateResourceSchemaResponse +func (c *ClientWithResponses) CreateResourceSchemaWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*CreateResourceSchemaResponse, error) { + rsp, err := c.CreateResourceSchemaWithBody(ctx, contentType, body, reqEditors...) + if err != nil { + return nil, err + } + return ParseCreateResourceSchemaResponse(rsp) +} + +func (c *ClientWithResponses) CreateResourceSchemaWithResponse(ctx context.Context, body CreateResourceSchemaJSONRequestBody, reqEditors ...RequestEditorFn) (*CreateResourceSchemaResponse, error) { + rsp, err := c.CreateResourceSchema(ctx, body, reqEditors...) + if err != nil { + return nil, err + } + return ParseCreateResourceSchemaResponse(rsp) +} + +// DeleteResourceSchemaWithResponse request returning *DeleteResourceSchemaResponse +func (c *ClientWithResponses) DeleteResourceSchemaWithResponse(ctx context.Context, schemaId openapi_types.UUID, reqEditors ...RequestEditorFn) (*DeleteResourceSchemaResponse, error) { + rsp, err := c.DeleteResourceSchema(ctx, schemaId, reqEditors...) + if err != nil { + return nil, err + } + return ParseDeleteResourceSchemaResponse(rsp) +} + // UpsertResourcesWithBodyWithResponse request with arbitrary body returning *UpsertResourcesResponse func (c *ClientWithResponses) UpsertResourcesWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*UpsertResourcesResponse, error) { rsp, err := c.UpsertResourcesWithBody(ctx, contentType, body, reqEditors...) @@ -6464,6 +6893,41 @@ func ParseAcknowledgeJobResponse(rsp *http.Response) (*AcknowledgeJobResponse, e return response, nil } +// ParseCreatePolicyResponse parses an HTTP response from a CreatePolicyWithResponse call +func ParseCreatePolicyResponse(rsp *http.Response) (*CreatePolicyResponse, error) { + bodyBytes, err := io.ReadAll(rsp.Body) + defer func() { _ = rsp.Body.Close() }() + if err != nil { + return nil, err + } + + response := &CreatePolicyResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest Policy1 + 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 == 500: + var dest struct { + Error *string `json:"error,omitempty"` + } + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON500 = &dest + + } + + return response, nil +} + // ParseCreateJobToResourceRelationshipResponse parses an HTTP response from a CreateJobToResourceRelationshipWithResponse call func ParseCreateJobToResourceRelationshipResponse(rsp *http.Response) (*CreateJobToResourceRelationshipResponse, error) { bodyBytes, err := io.ReadAll(rsp.Body) @@ -6740,6 +7204,94 @@ func ParseSetResourceProvidersResourcesResponse(rsp *http.Response) (*SetResourc return response, nil } +// ParseCreateResourceSchemaResponse parses an HTTP response from a CreateResourceSchemaWithResponse call +func ParseCreateResourceSchemaResponse(rsp *http.Response) (*CreateResourceSchemaResponse, error) { + bodyBytes, err := io.ReadAll(rsp.Body) + defer func() { _ = rsp.Body.Close() }() + if err != nil { + return nil, err + } + + response := &CreateResourceSchemaResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 201: + var dest struct { + Id *openapi_types.UUID `json:"id,omitempty"` + JsonSchema *map[string]interface{} `json:"jsonSchema,omitempty"` + Kind *string `json:"kind,omitempty"` + Version *string `json:"version,omitempty"` + WorkspaceId *openapi_types.UUID `json:"workspaceId,omitempty"` + } + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON201 = &dest + + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400: + var dest struct { + Error *string `json:"error,omitempty"` + } + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON400 = &dest + + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 409: + var dest struct { + Error *string `json:"error,omitempty"` + Id *openapi_types.UUID `json:"id,omitempty"` + } + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON409 = &dest + + } + + return response, nil +} + +// ParseDeleteResourceSchemaResponse parses an HTTP response from a DeleteResourceSchemaWithResponse call +func ParseDeleteResourceSchemaResponse(rsp *http.Response) (*DeleteResourceSchemaResponse, error) { + bodyBytes, err := io.ReadAll(rsp.Body) + defer func() { _ = rsp.Body.Close() }() + if err != nil { + return nil, err + } + + response := &DeleteResourceSchemaResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest struct { + Id *openapi_types.UUID `json:"id,omitempty"` + } + 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 == 404: + var dest struct { + Error *string `json:"error,omitempty"` + } + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON404 = &dest + + } + + return response, nil +} + // ParseUpsertResourcesResponse parses an HTTP response from a UpsertResourcesWithResponse call func ParseUpsertResourcesResponse(rsp *http.Response) (*UpsertResourcesResponse, error) { bodyBytes, err := io.ReadAll(rsp.Body)