diff --git a/NOTICE b/NOTICE index 1aeedd20..f2ca0ef5 100644 --- a/NOTICE +++ b/NOTICE @@ -165,6 +165,12 @@ Version: v0.4.3 License: MIT License URL: https://github.com/google/jsonschema-go/blob/v0.4.3/LICENSE +---------- +Module: github.com/google/uuid +Version: v1.6.0 +License: BSD-3-Clause +License URL: https://github.com/google/uuid/blob/v1.6.0/LICENSE + ---------- Module: github.com/hashicorp/go-cleanhttp Version: v0.5.2 diff --git a/api/client.go b/api/client.go index c3697311..51d794ae 100644 --- a/api/client.go +++ b/api/client.go @@ -145,8 +145,3 @@ func (c *Client) ListBaseimages() ([]Baseimage, error) { baseimages, r, err := c.api.MetadataAPI.MetadataGetWorkspaceBaseImages(c.ctx).Execute() return baseimages, errors.FormatAPIError(r, err) } - -func (c *Client) ListOrganizations() ([]Organization, error) { - organizations, r, err := c.api.OrganizationsAPI.OrganizationsListOrganizations(c.ctx).Execute() - return organizations, errors.FormatAPIError(r, err) -} diff --git a/api/openapi_client/api_managed_services.go b/api/openapi_client/api_managed_services.go index ea6db005..5f9053fc 100644 --- a/api/openapi_client/api_managed_services.go +++ b/api/openapi_client/api_managed_services.go @@ -63,10 +63,10 @@ type ManagedServicesAPI interface { @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). @param name - @param version + @param schemaVersion @return ApiManagedServicesDeleteProviderRequest */ - ManagedServicesDeleteProvider(ctx context.Context, name string, version string) ApiManagedServicesDeleteProviderRequest + ManagedServicesDeleteProvider(ctx context.Context, name string, schemaVersion string) ApiManagedServicesDeleteProviderRequest // ManagedServicesDeleteProviderExecute executes the request ManagedServicesDeleteProviderExecute(r ApiManagedServicesDeleteProviderRequest) (*http.Response, error) @@ -139,10 +139,10 @@ type ManagedServicesAPI interface { @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). @param name - @param version + @param schemaVersion @return ApiManagedServicesUpdateProviderRequest */ - ManagedServicesUpdateProvider(ctx context.Context, name string, version string) ApiManagedServicesUpdateProviderRequest + ManagedServicesUpdateProvider(ctx context.Context, name string, schemaVersion string) ApiManagedServicesUpdateProviderRequest // ManagedServicesUpdateProviderExecute executes the request // @return ManagedServicesListProviders200ResponseInnerAnyOf @@ -529,10 +529,10 @@ func (a *ManagedServicesAPIService) ManagedServicesDeleteExecute(r ApiManagedSer } type ApiManagedServicesDeleteProviderRequest struct { - ctx context.Context - ApiService ManagedServicesAPI - name string - version string + ctx context.Context + ApiService ManagedServicesAPI + name string + schemaVersion string } func (r ApiManagedServicesDeleteProviderRequest) Execute() (*http.Response, error) { @@ -544,15 +544,15 @@ ManagedServicesDeleteProvider deleteProvider @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). @param name - @param version + @param schemaVersion @return ApiManagedServicesDeleteProviderRequest */ -func (a *ManagedServicesAPIService) ManagedServicesDeleteProvider(ctx context.Context, name string, version string) ApiManagedServicesDeleteProviderRequest { +func (a *ManagedServicesAPIService) ManagedServicesDeleteProvider(ctx context.Context, name string, schemaVersion string) ApiManagedServicesDeleteProviderRequest { return ApiManagedServicesDeleteProviderRequest{ - ApiService: a, - ctx: ctx, - name: name, - version: version, + ApiService: a, + ctx: ctx, + name: name, + schemaVersion: schemaVersion, } } @@ -569,9 +569,9 @@ func (a *ManagedServicesAPIService) ManagedServicesDeleteProviderExecute(r ApiMa return nil, &GenericOpenAPIError{error: err.Error()} } - localVarPath := localBasePath + "/managed-services/providers/{name}/{version}" + localVarPath := localBasePath + "/managed-services/providers/{name}/{schemaVersion}" localVarPath = strings.Replace(localVarPath, "{"+"name"+"}", url.PathEscape(parameterValueToString(r.name, "name")), -1) - localVarPath = strings.Replace(localVarPath, "{"+"version"+"}", url.PathEscape(parameterValueToString(r.version, "version")), -1) + localVarPath = strings.Replace(localVarPath, "{"+"schemaVersion"+"}", url.PathEscape(parameterValueToString(r.schemaVersion, "schemaVersion")), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} @@ -1302,7 +1302,7 @@ type ApiManagedServicesUpdateProviderRequest struct { ctx context.Context ApiService ManagedServicesAPI name string - version string + schemaVersion string managedServicesUpdateProviderRequest *ManagedServicesUpdateProviderRequest } @@ -1320,15 +1320,15 @@ ManagedServicesUpdateProvider updateProvider @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). @param name - @param version + @param schemaVersion @return ApiManagedServicesUpdateProviderRequest */ -func (a *ManagedServicesAPIService) ManagedServicesUpdateProvider(ctx context.Context, name string, version string) ApiManagedServicesUpdateProviderRequest { +func (a *ManagedServicesAPIService) ManagedServicesUpdateProvider(ctx context.Context, name string, schemaVersion string) ApiManagedServicesUpdateProviderRequest { return ApiManagedServicesUpdateProviderRequest{ - ApiService: a, - ctx: ctx, - name: name, - version: version, + ApiService: a, + ctx: ctx, + name: name, + schemaVersion: schemaVersion, } } @@ -1348,9 +1348,9 @@ func (a *ManagedServicesAPIService) ManagedServicesUpdateProviderExecute(r ApiMa return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()} } - localVarPath := localBasePath + "/managed-services/providers/{name}/{version}" + localVarPath := localBasePath + "/managed-services/providers/{name}/{schemaVersion}" localVarPath = strings.Replace(localVarPath, "{"+"name"+"}", url.PathEscape(parameterValueToString(r.name, "name")), -1) - localVarPath = strings.Replace(localVarPath, "{"+"version"+"}", url.PathEscape(parameterValueToString(r.version, "version")), -1) + localVarPath = strings.Replace(localVarPath, "{"+"schemaVersion"+"}", url.PathEscape(parameterValueToString(r.schemaVersion, "schemaVersion")), -1) localVarHeaderParams := make(map[string]string) localVarQueryParams := url.Values{} diff --git a/api/openapi_client/api_organizations.go b/api/openapi_client/api_organizations.go index c73fc21b..302d5a4b 100644 --- a/api/openapi_client/api_organizations.go +++ b/api/openapi_client/api_organizations.go @@ -214,6 +214,17 @@ func (a *OrganizationsAPIService) OrganizationsAddOrgMemberExecute(r ApiOrganiza } newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) newErr.model = v + return localVarHTTPResponse, newErr + } + if localVarHTTPResponse.StatusCode == 409 { + var v DomainsUpdateDomain409Response + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.error = err.Error() + return localVarHTTPResponse, newErr + } + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarHTTPResponse, newErr } diff --git a/api/openapi_client/api_vault.go b/api/openapi_client/api_vault.go index 22eb6f5a..fdfdc08a 100644 --- a/api/openapi_client/api_vault.go +++ b/api/openapi_client/api_vault.go @@ -37,6 +37,22 @@ type VaultAPI interface { // VaultDeleteWorkspaceSecretsExecute executes the request VaultDeleteWorkspaceSecretsExecute(r ApiVaultDeleteWorkspaceSecretsRequest) (*http.Response, error) + /* + VaultGenerateSecrets generateSecrets + + Generate secrets in the vault for a given workspace based on the provided password policies + + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param teamId + @param workspaceId + @return ApiVaultGenerateSecretsRequest + */ + VaultGenerateSecrets(ctx context.Context, teamId float32, workspaceId float32) ApiVaultGenerateSecretsRequest + + // VaultGenerateSecretsExecute executes the request + // @return map[string]interface{} + VaultGenerateSecretsExecute(r ApiVaultGenerateSecretsRequest) (map[string]interface{}, *http.Response, error) + /* VaultListWorkspaceSecrets listWorkspaceSecrets @@ -198,6 +214,143 @@ func (a *VaultAPIService) VaultDeleteWorkspaceSecretsExecute(r ApiVaultDeleteWor return localVarHTTPResponse, nil } +type ApiVaultGenerateSecretsRequest struct { + ctx context.Context + ApiService VaultAPI + teamId float32 + workspaceId float32 + body *map[string]interface{} +} + +func (r ApiVaultGenerateSecretsRequest) Body(body map[string]interface{}) ApiVaultGenerateSecretsRequest { + r.body = &body + return r +} + +func (r ApiVaultGenerateSecretsRequest) Execute() (map[string]interface{}, *http.Response, error) { + return r.ApiService.VaultGenerateSecretsExecute(r) +} + +/* +VaultGenerateSecrets generateSecrets + +Generate secrets in the vault for a given workspace based on the provided password policies + + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param teamId + @param workspaceId + @return ApiVaultGenerateSecretsRequest +*/ +func (a *VaultAPIService) VaultGenerateSecrets(ctx context.Context, teamId float32, workspaceId float32) ApiVaultGenerateSecretsRequest { + return ApiVaultGenerateSecretsRequest{ + ApiService: a, + ctx: ctx, + teamId: teamId, + workspaceId: workspaceId, + } +} + +// Execute executes the request +// +// @return map[string]interface{} +func (a *VaultAPIService) VaultGenerateSecretsExecute(r ApiVaultGenerateSecretsRequest) (map[string]interface{}, *http.Response, error) { + var ( + localVarHTTPMethod = http.MethodPost + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue map[string]interface{} + ) + + localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "VaultAPIService.VaultGenerateSecrets") + if err != nil { + return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()} + } + + localVarPath := localBasePath + "/vault/teams/{teamId}/workspaces/{workspaceId}/generate" + localVarPath = strings.Replace(localVarPath, "{"+"teamId"+"}", url.PathEscape(parameterValueToString(r.teamId, "teamId")), -1) + localVarPath = strings.Replace(localVarPath, "{"+"workspaceId"+"}", url.PathEscape(parameterValueToString(r.workspaceId, "workspaceId")), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHTTPContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes) + if localVarHTTPContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHTTPContentType + } + + // to determine the Accept header + localVarHTTPHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts) + if localVarHTTPHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept + } + // body params + localVarPostBody = r.body + req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHTTPResponse, err := a.client.callAPI(req) + if err != nil || localVarHTTPResponse == nil { + return localVarReturnValue, localVarHTTPResponse, err + } + + localVarBody, err := io.ReadAll(localVarHTTPResponse.Body) + localVarHTTPResponse.Body.Close() + localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody)) + if err != nil { + return localVarReturnValue, localVarHTTPResponse, err + } + + if localVarHTTPResponse.StatusCode >= 300 { + newErr := &GenericOpenAPIError{ + body: localVarBody, + error: localVarHTTPResponse.Status, + } + if localVarHTTPResponse.StatusCode == 400 { + var v DomainsGetDomain400Response + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHTTPResponse, newErr + } + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v + return localVarReturnValue, localVarHTTPResponse, newErr + } + if localVarHTTPResponse.StatusCode == 401 { + var v DomainsGetDomain401Response + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHTTPResponse, newErr + } + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v + } + return localVarReturnValue, localVarHTTPResponse, newErr + } + + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr := &GenericOpenAPIError{ + body: localVarBody, + error: err.Error(), + } + return localVarReturnValue, localVarHTTPResponse, newErr + } + + return localVarReturnValue, localVarHTTPResponse, nil +} + type ApiVaultListWorkspaceSecretsRequest struct { ctx context.Context ApiService VaultAPI diff --git a/api/openapi_client/mocks.go b/api/openapi_client/mocks.go index 10da0a59..a71fd674 100644 --- a/api/openapi_client/mocks.go +++ b/api/openapi_client/mocks.go @@ -1343,8 +1343,8 @@ func (_c *MockManagedServicesAPI_ManagedServicesDeleteExecute_Call) RunAndReturn } // ManagedServicesDeleteProvider provides a mock function for the type MockManagedServicesAPI -func (_mock *MockManagedServicesAPI) ManagedServicesDeleteProvider(ctx context.Context, name string, version string) ApiManagedServicesDeleteProviderRequest { - ret := _mock.Called(ctx, name, version) +func (_mock *MockManagedServicesAPI) ManagedServicesDeleteProvider(ctx context.Context, name string, schemaVersion string) ApiManagedServicesDeleteProviderRequest { + ret := _mock.Called(ctx, name, schemaVersion) if len(ret) == 0 { panic("no return value specified for ManagedServicesDeleteProvider") @@ -1352,7 +1352,7 @@ func (_mock *MockManagedServicesAPI) ManagedServicesDeleteProvider(ctx context.C var r0 ApiManagedServicesDeleteProviderRequest if returnFunc, ok := ret.Get(0).(func(context.Context, string, string) ApiManagedServicesDeleteProviderRequest); ok { - r0 = returnFunc(ctx, name, version) + r0 = returnFunc(ctx, name, schemaVersion) } else { r0 = ret.Get(0).(ApiManagedServicesDeleteProviderRequest) } @@ -1367,12 +1367,12 @@ type MockManagedServicesAPI_ManagedServicesDeleteProvider_Call struct { // ManagedServicesDeleteProvider is a helper method to define mock.On call // - ctx context.Context // - name string -// - version string -func (_e *MockManagedServicesAPI_Expecter) ManagedServicesDeleteProvider(ctx any, name any, version any) *MockManagedServicesAPI_ManagedServicesDeleteProvider_Call { - return &MockManagedServicesAPI_ManagedServicesDeleteProvider_Call{Call: _e.mock.On("ManagedServicesDeleteProvider", ctx, name, version)} +// - schemaVersion string +func (_e *MockManagedServicesAPI_Expecter) ManagedServicesDeleteProvider(ctx any, name any, schemaVersion any) *MockManagedServicesAPI_ManagedServicesDeleteProvider_Call { + return &MockManagedServicesAPI_ManagedServicesDeleteProvider_Call{Call: _e.mock.On("ManagedServicesDeleteProvider", ctx, name, schemaVersion)} } -func (_c *MockManagedServicesAPI_ManagedServicesDeleteProvider_Call) Run(run func(ctx context.Context, name string, version string)) *MockManagedServicesAPI_ManagedServicesDeleteProvider_Call { +func (_c *MockManagedServicesAPI_ManagedServicesDeleteProvider_Call) Run(run func(ctx context.Context, name string, schemaVersion string)) *MockManagedServicesAPI_ManagedServicesDeleteProvider_Call { _c.Call.Run(func(args mock.Arguments) { var arg0 context.Context if args[0] != nil { @@ -1400,7 +1400,7 @@ func (_c *MockManagedServicesAPI_ManagedServicesDeleteProvider_Call) Return(apiM return _c } -func (_c *MockManagedServicesAPI_ManagedServicesDeleteProvider_Call) RunAndReturn(run func(ctx context.Context, name string, version string) ApiManagedServicesDeleteProviderRequest) *MockManagedServicesAPI_ManagedServicesDeleteProvider_Call { +func (_c *MockManagedServicesAPI_ManagedServicesDeleteProvider_Call) RunAndReturn(run func(ctx context.Context, name string, schemaVersion string) ApiManagedServicesDeleteProviderRequest) *MockManagedServicesAPI_ManagedServicesDeleteProvider_Call { _c.Call.Return(run) return _c } @@ -2091,8 +2091,8 @@ func (_c *MockManagedServicesAPI_ManagedServicesUpdateExecute_Call) RunAndReturn } // ManagedServicesUpdateProvider provides a mock function for the type MockManagedServicesAPI -func (_mock *MockManagedServicesAPI) ManagedServicesUpdateProvider(ctx context.Context, name string, version string) ApiManagedServicesUpdateProviderRequest { - ret := _mock.Called(ctx, name, version) +func (_mock *MockManagedServicesAPI) ManagedServicesUpdateProvider(ctx context.Context, name string, schemaVersion string) ApiManagedServicesUpdateProviderRequest { + ret := _mock.Called(ctx, name, schemaVersion) if len(ret) == 0 { panic("no return value specified for ManagedServicesUpdateProvider") @@ -2100,7 +2100,7 @@ func (_mock *MockManagedServicesAPI) ManagedServicesUpdateProvider(ctx context.C var r0 ApiManagedServicesUpdateProviderRequest if returnFunc, ok := ret.Get(0).(func(context.Context, string, string) ApiManagedServicesUpdateProviderRequest); ok { - r0 = returnFunc(ctx, name, version) + r0 = returnFunc(ctx, name, schemaVersion) } else { r0 = ret.Get(0).(ApiManagedServicesUpdateProviderRequest) } @@ -2115,12 +2115,12 @@ type MockManagedServicesAPI_ManagedServicesUpdateProvider_Call struct { // ManagedServicesUpdateProvider is a helper method to define mock.On call // - ctx context.Context // - name string -// - version string -func (_e *MockManagedServicesAPI_Expecter) ManagedServicesUpdateProvider(ctx any, name any, version any) *MockManagedServicesAPI_ManagedServicesUpdateProvider_Call { - return &MockManagedServicesAPI_ManagedServicesUpdateProvider_Call{Call: _e.mock.On("ManagedServicesUpdateProvider", ctx, name, version)} +// - schemaVersion string +func (_e *MockManagedServicesAPI_Expecter) ManagedServicesUpdateProvider(ctx any, name any, schemaVersion any) *MockManagedServicesAPI_ManagedServicesUpdateProvider_Call { + return &MockManagedServicesAPI_ManagedServicesUpdateProvider_Call{Call: _e.mock.On("ManagedServicesUpdateProvider", ctx, name, schemaVersion)} } -func (_c *MockManagedServicesAPI_ManagedServicesUpdateProvider_Call) Run(run func(ctx context.Context, name string, version string)) *MockManagedServicesAPI_ManagedServicesUpdateProvider_Call { +func (_c *MockManagedServicesAPI_ManagedServicesUpdateProvider_Call) Run(run func(ctx context.Context, name string, schemaVersion string)) *MockManagedServicesAPI_ManagedServicesUpdateProvider_Call { _c.Call.Run(func(args mock.Arguments) { var arg0 context.Context if args[0] != nil { @@ -2148,7 +2148,7 @@ func (_c *MockManagedServicesAPI_ManagedServicesUpdateProvider_Call) Return(apiM return _c } -func (_c *MockManagedServicesAPI_ManagedServicesUpdateProvider_Call) RunAndReturn(run func(ctx context.Context, name string, version string) ApiManagedServicesUpdateProviderRequest) *MockManagedServicesAPI_ManagedServicesUpdateProvider_Call { +func (_c *MockManagedServicesAPI_ManagedServicesUpdateProvider_Call) RunAndReturn(run func(ctx context.Context, name string, schemaVersion string) ApiManagedServicesUpdateProviderRequest) *MockManagedServicesAPI_ManagedServicesUpdateProvider_Call { _c.Call.Return(run) return _c } @@ -4953,6 +4953,139 @@ func (_c *MockVaultAPI_VaultDeleteWorkspaceSecretsExecute_Call) RunAndReturn(run return _c } +// VaultGenerateSecrets provides a mock function for the type MockVaultAPI +func (_mock *MockVaultAPI) VaultGenerateSecrets(ctx context.Context, teamId float32, workspaceId float32) ApiVaultGenerateSecretsRequest { + ret := _mock.Called(ctx, teamId, workspaceId) + + if len(ret) == 0 { + panic("no return value specified for VaultGenerateSecrets") + } + + var r0 ApiVaultGenerateSecretsRequest + if returnFunc, ok := ret.Get(0).(func(context.Context, float32, float32) ApiVaultGenerateSecretsRequest); ok { + r0 = returnFunc(ctx, teamId, workspaceId) + } else { + r0 = ret.Get(0).(ApiVaultGenerateSecretsRequest) + } + return r0 +} + +// MockVaultAPI_VaultGenerateSecrets_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'VaultGenerateSecrets' +type MockVaultAPI_VaultGenerateSecrets_Call struct { + *mock.Call +} + +// VaultGenerateSecrets is a helper method to define mock.On call +// - ctx context.Context +// - teamId float32 +// - workspaceId float32 +func (_e *MockVaultAPI_Expecter) VaultGenerateSecrets(ctx any, teamId any, workspaceId any) *MockVaultAPI_VaultGenerateSecrets_Call { + return &MockVaultAPI_VaultGenerateSecrets_Call{Call: _e.mock.On("VaultGenerateSecrets", ctx, teamId, workspaceId)} +} + +func (_c *MockVaultAPI_VaultGenerateSecrets_Call) Run(run func(ctx context.Context, teamId float32, workspaceId float32)) *MockVaultAPI_VaultGenerateSecrets_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + var arg1 float32 + if args[1] != nil { + arg1 = args[1].(float32) + } + var arg2 float32 + if args[2] != nil { + arg2 = args[2].(float32) + } + run( + arg0, + arg1, + arg2, + ) + }) + return _c +} + +func (_c *MockVaultAPI_VaultGenerateSecrets_Call) Return(apiVaultGenerateSecretsRequest ApiVaultGenerateSecretsRequest) *MockVaultAPI_VaultGenerateSecrets_Call { + _c.Call.Return(apiVaultGenerateSecretsRequest) + return _c +} + +func (_c *MockVaultAPI_VaultGenerateSecrets_Call) RunAndReturn(run func(ctx context.Context, teamId float32, workspaceId float32) ApiVaultGenerateSecretsRequest) *MockVaultAPI_VaultGenerateSecrets_Call { + _c.Call.Return(run) + return _c +} + +// VaultGenerateSecretsExecute provides a mock function for the type MockVaultAPI +func (_mock *MockVaultAPI) VaultGenerateSecretsExecute(r ApiVaultGenerateSecretsRequest) (map[string]interface{}, *http.Response, error) { + ret := _mock.Called(r) + + if len(ret) == 0 { + panic("no return value specified for VaultGenerateSecretsExecute") + } + + var r0 map[string]interface{} + var r1 *http.Response + var r2 error + if returnFunc, ok := ret.Get(0).(func(ApiVaultGenerateSecretsRequest) (map[string]interface{}, *http.Response, error)); ok { + return returnFunc(r) + } + if returnFunc, ok := ret.Get(0).(func(ApiVaultGenerateSecretsRequest) map[string]interface{}); ok { + r0 = returnFunc(r) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(map[string]interface{}) + } + } + if returnFunc, ok := ret.Get(1).(func(ApiVaultGenerateSecretsRequest) *http.Response); ok { + r1 = returnFunc(r) + } else { + if ret.Get(1) != nil { + r1 = ret.Get(1).(*http.Response) + } + } + if returnFunc, ok := ret.Get(2).(func(ApiVaultGenerateSecretsRequest) error); ok { + r2 = returnFunc(r) + } else { + r2 = ret.Error(2) + } + return r0, r1, r2 +} + +// MockVaultAPI_VaultGenerateSecretsExecute_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'VaultGenerateSecretsExecute' +type MockVaultAPI_VaultGenerateSecretsExecute_Call struct { + *mock.Call +} + +// VaultGenerateSecretsExecute is a helper method to define mock.On call +// - r ApiVaultGenerateSecretsRequest +func (_e *MockVaultAPI_Expecter) VaultGenerateSecretsExecute(r any) *MockVaultAPI_VaultGenerateSecretsExecute_Call { + return &MockVaultAPI_VaultGenerateSecretsExecute_Call{Call: _e.mock.On("VaultGenerateSecretsExecute", r)} +} + +func (_c *MockVaultAPI_VaultGenerateSecretsExecute_Call) Run(run func(r ApiVaultGenerateSecretsRequest)) *MockVaultAPI_VaultGenerateSecretsExecute_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 ApiVaultGenerateSecretsRequest + if args[0] != nil { + arg0 = args[0].(ApiVaultGenerateSecretsRequest) + } + run( + arg0, + ) + }) + return _c +} + +func (_c *MockVaultAPI_VaultGenerateSecretsExecute_Call) Return(stringToIfaceVal map[string]interface{}, response *http.Response, err error) *MockVaultAPI_VaultGenerateSecretsExecute_Call { + _c.Call.Return(stringToIfaceVal, response, err) + return _c +} + +func (_c *MockVaultAPI_VaultGenerateSecretsExecute_Call) RunAndReturn(run func(r ApiVaultGenerateSecretsRequest) (map[string]interface{}, *http.Response, error)) *MockVaultAPI_VaultGenerateSecretsExecute_Call { + _c.Call.Return(run) + return _c +} + // VaultListWorkspaceSecrets provides a mock function for the type MockVaultAPI func (_mock *MockVaultAPI) VaultListWorkspaceSecrets(ctx context.Context, teamId float32, workspaceId float32) ApiVaultListWorkspaceSecretsRequest { ret := _mock.Called(ctx, teamId, workspaceId) diff --git a/api/openapi_client/model_managed_services_create_provider_request_any_of.go b/api/openapi_client/model_managed_services_create_provider_request_any_of.go index a5e67ea4..e464c90c 100644 --- a/api/openapi_client/model_managed_services_create_provider_request_any_of.go +++ b/api/openapi_client/model_managed_services_create_provider_request_any_of.go @@ -22,8 +22,6 @@ var _ MappedNullable = &ManagedServicesCreateProviderRequestAnyOf{} // ManagedServicesCreateProviderRequestAnyOf struct for ManagedServicesCreateProviderRequestAnyOf type ManagedServicesCreateProviderRequestAnyOf struct { - Name string `json:"name" validate:"regexp=^[a-z0-9-_]+$"` - Version string `json:"version" validate:"regexp=^v[0-9][0-9a-z]*$"` Author string `json:"author"` Backups *ManagedServicesListProviders200ResponseInnerAnyOfBackups `json:"backups,omitempty"` Capabilities *ManagedServicesListProviders200ResponseInnerAnyOfCapabilities `json:"capabilities,omitempty"` @@ -36,10 +34,14 @@ type ManagedServicesCreateProviderRequestAnyOf struct { // JSON Schema DetailsSchema map[string]interface{} `json:"detailsSchema"` // JSON Schema - SecretsSchema map[string]interface{} `json:"secretsSchema"` - Plans []ManagedServicesListProviders200ResponseInnerAnyOfPlansInner `json:"plans"` - Backend ManagedServicesListProviders200ResponseInnerAnyOfBackend `json:"backend"` - Scope *ManagedServicesCreateProviderRequestAnyOfScope `json:"scope,omitempty"` + SecretsSchema map[string]interface{} `json:"secretsSchema"` + Plans []ManagedServicesListProviders200ResponseInnerAnyOfPlansInner `json:"plans"` + Versions *map[string]ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue `json:"versions,omitempty"` + Name string `json:"name" validate:"regexp=^[a-z0-9-_]+$"` + Version *string `json:"version,omitempty" validate:"regexp=^v[0-9][0-9a-z]*$"` + SchemaVersion *string `json:"schemaVersion,omitempty" validate:"regexp=^v[0-9][0-9a-z]*$"` + Backend ManagedServicesListProviders200ResponseInnerAnyOfBackend `json:"backend"` + Scope *ManagedServicesCreateProviderRequestAnyOfScope `json:"scope,omitempty"` } type _ManagedServicesCreateProviderRequestAnyOf ManagedServicesCreateProviderRequestAnyOf @@ -48,10 +50,8 @@ type _ManagedServicesCreateProviderRequestAnyOf ManagedServicesCreateProviderReq // This constructor will assign default values to properties that have it defined, // and makes sure properties required by API are set, but the set of arguments // will change when the set of required properties is changed -func NewManagedServicesCreateProviderRequestAnyOf(name string, version string, author string, category string, description string, displayName string, iconUrl string, configSchema map[string]interface{}, detailsSchema map[string]interface{}, secretsSchema map[string]interface{}, plans []ManagedServicesListProviders200ResponseInnerAnyOfPlansInner, backend ManagedServicesListProviders200ResponseInnerAnyOfBackend) *ManagedServicesCreateProviderRequestAnyOf { +func NewManagedServicesCreateProviderRequestAnyOf(author string, category string, description string, displayName string, iconUrl string, configSchema map[string]interface{}, detailsSchema map[string]interface{}, secretsSchema map[string]interface{}, plans []ManagedServicesListProviders200ResponseInnerAnyOfPlansInner, name string, backend ManagedServicesListProviders200ResponseInnerAnyOfBackend) *ManagedServicesCreateProviderRequestAnyOf { this := ManagedServicesCreateProviderRequestAnyOf{} - this.Name = name - this.Version = version this.Author = author this.Category = category this.Description = description @@ -61,6 +61,7 @@ func NewManagedServicesCreateProviderRequestAnyOf(name string, version string, a this.DetailsSchema = detailsSchema this.SecretsSchema = secretsSchema this.Plans = plans + this.Name = name this.Backend = backend return &this } @@ -73,54 +74,6 @@ func NewManagedServicesCreateProviderRequestAnyOfWithDefaults() *ManagedServices return &this } -// GetName returns the Name field value -func (o *ManagedServicesCreateProviderRequestAnyOf) GetName() string { - if o == nil { - var ret string - return ret - } - - return o.Name -} - -// GetNameOk returns a tuple with the Name field value -// and a boolean to check if the value has been set. -func (o *ManagedServicesCreateProviderRequestAnyOf) GetNameOk() (*string, bool) { - if o == nil { - return nil, false - } - return &o.Name, true -} - -// SetName sets field value -func (o *ManagedServicesCreateProviderRequestAnyOf) SetName(v string) { - o.Name = v -} - -// GetVersion returns the Version field value -func (o *ManagedServicesCreateProviderRequestAnyOf) GetVersion() string { - if o == nil { - var ret string - return ret - } - - return o.Version -} - -// GetVersionOk returns a tuple with the Version field value -// and a boolean to check if the value has been set. -func (o *ManagedServicesCreateProviderRequestAnyOf) GetVersionOk() (*string, bool) { - if o == nil { - return nil, false - } - return &o.Version, true -} - -// SetVersion sets field value -func (o *ManagedServicesCreateProviderRequestAnyOf) SetVersion(v string) { - o.Version = v -} - // GetAuthor returns the Author field value func (o *ManagedServicesCreateProviderRequestAnyOf) GetAuthor() string { if o == nil { @@ -401,6 +354,126 @@ func (o *ManagedServicesCreateProviderRequestAnyOf) SetPlans(v []ManagedServices o.Plans = v } +// GetVersions returns the Versions field value if set, zero value otherwise. +func (o *ManagedServicesCreateProviderRequestAnyOf) GetVersions() map[string]ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue { + if o == nil || IsNil(o.Versions) { + var ret map[string]ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue + return ret + } + return *o.Versions +} + +// GetVersionsOk returns a tuple with the Versions field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *ManagedServicesCreateProviderRequestAnyOf) GetVersionsOk() (*map[string]ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue, bool) { + if o == nil || IsNil(o.Versions) { + return nil, false + } + return o.Versions, true +} + +// HasVersions returns a boolean if a field has been set. +func (o *ManagedServicesCreateProviderRequestAnyOf) HasVersions() bool { + if o != nil && !IsNil(o.Versions) { + return true + } + + return false +} + +// SetVersions gets a reference to the given map[string]ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue and assigns it to the Versions field. +func (o *ManagedServicesCreateProviderRequestAnyOf) SetVersions(v map[string]ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue) { + o.Versions = &v +} + +// GetName returns the Name field value +func (o *ManagedServicesCreateProviderRequestAnyOf) GetName() string { + if o == nil { + var ret string + return ret + } + + return o.Name +} + +// GetNameOk returns a tuple with the Name field value +// and a boolean to check if the value has been set. +func (o *ManagedServicesCreateProviderRequestAnyOf) GetNameOk() (*string, bool) { + if o == nil { + return nil, false + } + return &o.Name, true +} + +// SetName sets field value +func (o *ManagedServicesCreateProviderRequestAnyOf) SetName(v string) { + o.Name = v +} + +// GetVersion returns the Version field value if set, zero value otherwise. +func (o *ManagedServicesCreateProviderRequestAnyOf) GetVersion() string { + if o == nil || IsNil(o.Version) { + var ret string + return ret + } + return *o.Version +} + +// GetVersionOk returns a tuple with the Version field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *ManagedServicesCreateProviderRequestAnyOf) GetVersionOk() (*string, bool) { + if o == nil || IsNil(o.Version) { + return nil, false + } + return o.Version, true +} + +// HasVersion returns a boolean if a field has been set. +func (o *ManagedServicesCreateProviderRequestAnyOf) HasVersion() bool { + if o != nil && !IsNil(o.Version) { + return true + } + + return false +} + +// SetVersion gets a reference to the given string and assigns it to the Version field. +func (o *ManagedServicesCreateProviderRequestAnyOf) SetVersion(v string) { + o.Version = &v +} + +// GetSchemaVersion returns the SchemaVersion field value if set, zero value otherwise. +func (o *ManagedServicesCreateProviderRequestAnyOf) GetSchemaVersion() string { + if o == nil || IsNil(o.SchemaVersion) { + var ret string + return ret + } + return *o.SchemaVersion +} + +// GetSchemaVersionOk returns a tuple with the SchemaVersion field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *ManagedServicesCreateProviderRequestAnyOf) GetSchemaVersionOk() (*string, bool) { + if o == nil || IsNil(o.SchemaVersion) { + return nil, false + } + return o.SchemaVersion, true +} + +// HasSchemaVersion returns a boolean if a field has been set. +func (o *ManagedServicesCreateProviderRequestAnyOf) HasSchemaVersion() bool { + if o != nil && !IsNil(o.SchemaVersion) { + return true + } + + return false +} + +// SetSchemaVersion gets a reference to the given string and assigns it to the SchemaVersion field. +func (o *ManagedServicesCreateProviderRequestAnyOf) SetSchemaVersion(v string) { + o.SchemaVersion = &v +} + // GetBackend returns the Backend field value func (o *ManagedServicesCreateProviderRequestAnyOf) GetBackend() ManagedServicesListProviders200ResponseInnerAnyOfBackend { if o == nil { @@ -467,8 +540,6 @@ func (o ManagedServicesCreateProviderRequestAnyOf) MarshalJSON() ([]byte, error) func (o ManagedServicesCreateProviderRequestAnyOf) ToMap() (map[string]interface{}, error) { toSerialize := map[string]interface{}{} - toSerialize["name"] = o.Name - toSerialize["version"] = o.Version toSerialize["author"] = o.Author if !IsNil(o.Backups) { toSerialize["backups"] = o.Backups @@ -484,6 +555,16 @@ func (o ManagedServicesCreateProviderRequestAnyOf) ToMap() (map[string]interface toSerialize["detailsSchema"] = o.DetailsSchema toSerialize["secretsSchema"] = o.SecretsSchema toSerialize["plans"] = o.Plans + if !IsNil(o.Versions) { + toSerialize["versions"] = o.Versions + } + toSerialize["name"] = o.Name + if !IsNil(o.Version) { + toSerialize["version"] = o.Version + } + if !IsNil(o.SchemaVersion) { + toSerialize["schemaVersion"] = o.SchemaVersion + } toSerialize["backend"] = o.Backend if !IsNil(o.Scope) { toSerialize["scope"] = o.Scope @@ -496,8 +577,6 @@ func (o *ManagedServicesCreateProviderRequestAnyOf) UnmarshalJSON(data []byte) ( // by unmarshalling the object into a generic map with string keys and checking // that every required field exists as a key in the generic map. requiredProperties := []string{ - "name", - "version", "author", "category", "description", @@ -507,6 +586,7 @@ func (o *ManagedServicesCreateProviderRequestAnyOf) UnmarshalJSON(data []byte) ( "detailsSchema", "secretsSchema", "plans", + "name", "backend", } diff --git a/api/openapi_client/model_managed_services_create_request.go b/api/openapi_client/model_managed_services_create_request.go index 61ceacab..a5cd15f5 100644 --- a/api/openapi_client/model_managed_services_create_request.go +++ b/api/openapi_client/model_managed_services_create_request.go @@ -22,14 +22,14 @@ var _ MappedNullable = &ManagedServicesCreateRequest{} // ManagedServicesCreateRequest struct for ManagedServicesCreateRequest type ManagedServicesCreateRequest struct { - Backups *ManagedServicesCreateRequestBackups `json:"backups,omitempty"` - Config map[string]interface{} `json:"config"` - Provider ManagedServicesList200ResponseInnerProvider `json:"provider"` - Name string `json:"name"` - Plan ManagedServicesList200ResponseInnerPlan `json:"plan"` - RecoverFrom *ManagedServicesCreateRequestRecoverFrom `json:"recoverFrom,omitempty"` - Secrets map[string]interface{} `json:"secrets"` - TeamId int `json:"teamId"` + Backups *ManagedServicesCreateRequestBackups `json:"backups,omitempty"` + Config map[string]interface{} `json:"config"` + Provider ManagedServicesCreateRequestProvider `json:"provider"` + Name string `json:"name"` + Plan ManagedServicesList200ResponseInnerPlan `json:"plan"` + RecoverFrom *ManagedServicesCreateRequestRecoverFrom `json:"recoverFrom,omitempty"` + Secrets map[string]interface{} `json:"secrets"` + TeamId int `json:"teamId"` } type _ManagedServicesCreateRequest ManagedServicesCreateRequest @@ -38,7 +38,7 @@ type _ManagedServicesCreateRequest ManagedServicesCreateRequest // This constructor will assign default values to properties that have it defined, // and makes sure properties required by API are set, but the set of arguments // will change when the set of required properties is changed -func NewManagedServicesCreateRequest(config map[string]interface{}, provider ManagedServicesList200ResponseInnerProvider, name string, plan ManagedServicesList200ResponseInnerPlan, secrets map[string]interface{}, teamId int) *ManagedServicesCreateRequest { +func NewManagedServicesCreateRequest(config map[string]interface{}, provider ManagedServicesCreateRequestProvider, name string, plan ManagedServicesList200ResponseInnerPlan, secrets map[string]interface{}, teamId int) *ManagedServicesCreateRequest { this := ManagedServicesCreateRequest{} this.Config = config this.Provider = provider @@ -114,9 +114,9 @@ func (o *ManagedServicesCreateRequest) SetConfig(v map[string]interface{}) { } // GetProvider returns the Provider field value -func (o *ManagedServicesCreateRequest) GetProvider() ManagedServicesList200ResponseInnerProvider { +func (o *ManagedServicesCreateRequest) GetProvider() ManagedServicesCreateRequestProvider { if o == nil { - var ret ManagedServicesList200ResponseInnerProvider + var ret ManagedServicesCreateRequestProvider return ret } @@ -125,7 +125,7 @@ func (o *ManagedServicesCreateRequest) GetProvider() ManagedServicesList200Respo // GetProviderOk returns a tuple with the Provider field value // and a boolean to check if the value has been set. -func (o *ManagedServicesCreateRequest) GetProviderOk() (*ManagedServicesList200ResponseInnerProvider, bool) { +func (o *ManagedServicesCreateRequest) GetProviderOk() (*ManagedServicesCreateRequestProvider, bool) { if o == nil { return nil, false } @@ -133,7 +133,7 @@ func (o *ManagedServicesCreateRequest) GetProviderOk() (*ManagedServicesList200R } // SetProvider sets field value -func (o *ManagedServicesCreateRequest) SetProvider(v ManagedServicesList200ResponseInnerProvider) { +func (o *ManagedServicesCreateRequest) SetProvider(v ManagedServicesCreateRequestProvider) { o.Provider = v } diff --git a/api/openapi_client/model_managed_services_create_request_provider.go b/api/openapi_client/model_managed_services_create_request_provider.go new file mode 100644 index 00000000..dd848afc --- /dev/null +++ b/api/openapi_client/model_managed_services_create_request_provider.go @@ -0,0 +1,229 @@ +// Copyright (c) Codesphere Inc. +// SPDX-License-Identifier: Apache-2.0 + +/* +Codesphere Public API + +API version: 0.1.0 +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package openapi_client + +import ( + "bytes" + "encoding/json" + "fmt" +) + +// checks if the ManagedServicesCreateRequestProvider type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &ManagedServicesCreateRequestProvider{} + +// ManagedServicesCreateRequestProvider struct for ManagedServicesCreateRequestProvider +type ManagedServicesCreateRequestProvider struct { + Name string `json:"name" validate:"regexp=^[a-z0-9-_]+$"` + Version *string `json:"version,omitempty" validate:"regexp=^v[0-9][0-9a-z]*$"` + SchemaVersion *string `json:"schemaVersion,omitempty" validate:"regexp=^v[0-9][0-9a-z]*$"` +} + +type _ManagedServicesCreateRequestProvider ManagedServicesCreateRequestProvider + +// NewManagedServicesCreateRequestProvider instantiates a new ManagedServicesCreateRequestProvider object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewManagedServicesCreateRequestProvider(name string) *ManagedServicesCreateRequestProvider { + this := ManagedServicesCreateRequestProvider{} + this.Name = name + return &this +} + +// NewManagedServicesCreateRequestProviderWithDefaults instantiates a new ManagedServicesCreateRequestProvider object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewManagedServicesCreateRequestProviderWithDefaults() *ManagedServicesCreateRequestProvider { + this := ManagedServicesCreateRequestProvider{} + return &this +} + +// GetName returns the Name field value +func (o *ManagedServicesCreateRequestProvider) GetName() string { + if o == nil { + var ret string + return ret + } + + return o.Name +} + +// GetNameOk returns a tuple with the Name field value +// and a boolean to check if the value has been set. +func (o *ManagedServicesCreateRequestProvider) GetNameOk() (*string, bool) { + if o == nil { + return nil, false + } + return &o.Name, true +} + +// SetName sets field value +func (o *ManagedServicesCreateRequestProvider) SetName(v string) { + o.Name = v +} + +// GetVersion returns the Version field value if set, zero value otherwise. +func (o *ManagedServicesCreateRequestProvider) GetVersion() string { + if o == nil || IsNil(o.Version) { + var ret string + return ret + } + return *o.Version +} + +// GetVersionOk returns a tuple with the Version field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *ManagedServicesCreateRequestProvider) GetVersionOk() (*string, bool) { + if o == nil || IsNil(o.Version) { + return nil, false + } + return o.Version, true +} + +// HasVersion returns a boolean if a field has been set. +func (o *ManagedServicesCreateRequestProvider) HasVersion() bool { + if o != nil && !IsNil(o.Version) { + return true + } + + return false +} + +// SetVersion gets a reference to the given string and assigns it to the Version field. +func (o *ManagedServicesCreateRequestProvider) SetVersion(v string) { + o.Version = &v +} + +// GetSchemaVersion returns the SchemaVersion field value if set, zero value otherwise. +func (o *ManagedServicesCreateRequestProvider) GetSchemaVersion() string { + if o == nil || IsNil(o.SchemaVersion) { + var ret string + return ret + } + return *o.SchemaVersion +} + +// GetSchemaVersionOk returns a tuple with the SchemaVersion field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *ManagedServicesCreateRequestProvider) GetSchemaVersionOk() (*string, bool) { + if o == nil || IsNil(o.SchemaVersion) { + return nil, false + } + return o.SchemaVersion, true +} + +// HasSchemaVersion returns a boolean if a field has been set. +func (o *ManagedServicesCreateRequestProvider) HasSchemaVersion() bool { + if o != nil && !IsNil(o.SchemaVersion) { + return true + } + + return false +} + +// SetSchemaVersion gets a reference to the given string and assigns it to the SchemaVersion field. +func (o *ManagedServicesCreateRequestProvider) SetSchemaVersion(v string) { + o.SchemaVersion = &v +} + +func (o ManagedServicesCreateRequestProvider) MarshalJSON() ([]byte, error) { + toSerialize, err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o ManagedServicesCreateRequestProvider) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + toSerialize["name"] = o.Name + if !IsNil(o.Version) { + toSerialize["version"] = o.Version + } + if !IsNil(o.SchemaVersion) { + toSerialize["schemaVersion"] = o.SchemaVersion + } + return toSerialize, nil +} + +func (o *ManagedServicesCreateRequestProvider) UnmarshalJSON(data []byte) (err error) { + // This validates that all required properties are included in the JSON object + // by unmarshalling the object into a generic map with string keys and checking + // that every required field exists as a key in the generic map. + requiredProperties := []string{ + "name", + } + + allProperties := make(map[string]interface{}) + + err = json.Unmarshal(data, &allProperties) + + if err != nil { + return err + } + + for _, requiredProperty := range requiredProperties { + if _, exists := allProperties[requiredProperty]; !exists { + return fmt.Errorf("no value given for required property %v", requiredProperty) + } + } + + varManagedServicesCreateRequestProvider := _ManagedServicesCreateRequestProvider{} + + decoder := json.NewDecoder(bytes.NewReader(data)) + //decoder.DisallowUnknownFields() + err = decoder.Decode(&varManagedServicesCreateRequestProvider) + + if err != nil { + return err + } + + *o = ManagedServicesCreateRequestProvider(varManagedServicesCreateRequestProvider) + + return err +} + +type NullableManagedServicesCreateRequestProvider struct { + value *ManagedServicesCreateRequestProvider + isSet bool +} + +func (v NullableManagedServicesCreateRequestProvider) Get() *ManagedServicesCreateRequestProvider { + return v.value +} + +func (v *NullableManagedServicesCreateRequestProvider) Set(val *ManagedServicesCreateRequestProvider) { + v.value = val + v.isSet = true +} + +func (v NullableManagedServicesCreateRequestProvider) IsSet() bool { + return v.isSet +} + +func (v *NullableManagedServicesCreateRequestProvider) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableManagedServicesCreateRequestProvider(val *ManagedServicesCreateRequestProvider) *NullableManagedServicesCreateRequestProvider { + return &NullableManagedServicesCreateRequestProvider{value: val, isSet: true} +} + +func (v NullableManagedServicesCreateRequestProvider) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableManagedServicesCreateRequestProvider) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} diff --git a/api/openapi_client/model_managed_services_list_200_response_inner_provider.go b/api/openapi_client/model_managed_services_list_200_response_inner_provider.go index 873a6a79..4b66e545 100644 --- a/api/openapi_client/model_managed_services_list_200_response_inner_provider.go +++ b/api/openapi_client/model_managed_services_list_200_response_inner_provider.go @@ -22,8 +22,9 @@ var _ MappedNullable = &ManagedServicesList200ResponseInnerProvider{} // ManagedServicesList200ResponseInnerProvider struct for ManagedServicesList200ResponseInnerProvider type ManagedServicesList200ResponseInnerProvider struct { - Name string `json:"name" validate:"regexp=^[a-z0-9-_]+$"` - Version string `json:"version" validate:"regexp=^v[0-9][0-9a-z]*$"` + Name string `json:"name" validate:"regexp=^[a-z0-9-_]+$"` + Version string `json:"version" validate:"regexp=^v[0-9][0-9a-z]*$"` + SchemaVersion string `json:"schemaVersion" validate:"regexp=^v[0-9][0-9a-z]*$"` } type _ManagedServicesList200ResponseInnerProvider ManagedServicesList200ResponseInnerProvider @@ -32,10 +33,11 @@ type _ManagedServicesList200ResponseInnerProvider ManagedServicesList200Response // This constructor will assign default values to properties that have it defined, // and makes sure properties required by API are set, but the set of arguments // will change when the set of required properties is changed -func NewManagedServicesList200ResponseInnerProvider(name string, version string) *ManagedServicesList200ResponseInnerProvider { +func NewManagedServicesList200ResponseInnerProvider(name string, version string, schemaVersion string) *ManagedServicesList200ResponseInnerProvider { this := ManagedServicesList200ResponseInnerProvider{} this.Name = name this.Version = version + this.SchemaVersion = schemaVersion return &this } @@ -95,6 +97,30 @@ func (o *ManagedServicesList200ResponseInnerProvider) SetVersion(v string) { o.Version = v } +// GetSchemaVersion returns the SchemaVersion field value +func (o *ManagedServicesList200ResponseInnerProvider) GetSchemaVersion() string { + if o == nil { + var ret string + return ret + } + + return o.SchemaVersion +} + +// GetSchemaVersionOk returns a tuple with the SchemaVersion field value +// and a boolean to check if the value has been set. +func (o *ManagedServicesList200ResponseInnerProvider) GetSchemaVersionOk() (*string, bool) { + if o == nil { + return nil, false + } + return &o.SchemaVersion, true +} + +// SetSchemaVersion sets field value +func (o *ManagedServicesList200ResponseInnerProvider) SetSchemaVersion(v string) { + o.SchemaVersion = v +} + func (o ManagedServicesList200ResponseInnerProvider) MarshalJSON() ([]byte, error) { toSerialize, err := o.ToMap() if err != nil { @@ -107,6 +133,7 @@ func (o ManagedServicesList200ResponseInnerProvider) ToMap() (map[string]interfa toSerialize := map[string]interface{}{} toSerialize["name"] = o.Name toSerialize["version"] = o.Version + toSerialize["schemaVersion"] = o.SchemaVersion return toSerialize, nil } @@ -117,6 +144,7 @@ func (o *ManagedServicesList200ResponseInnerProvider) UnmarshalJSON(data []byte) requiredProperties := []string{ "name", "version", + "schemaVersion", } allProperties := make(map[string]interface{}) diff --git a/api/openapi_client/model_managed_services_list_providers_200_response_inner_any_of.go b/api/openapi_client/model_managed_services_list_providers_200_response_inner_any_of.go index 914480f7..ecc9208a 100644 --- a/api/openapi_client/model_managed_services_list_providers_200_response_inner_any_of.go +++ b/api/openapi_client/model_managed_services_list_providers_200_response_inner_any_of.go @@ -22,23 +22,26 @@ var _ MappedNullable = &ManagedServicesListProviders200ResponseInnerAnyOf{} // ManagedServicesListProviders200ResponseInnerAnyOf struct for ManagedServicesListProviders200ResponseInnerAnyOf type ManagedServicesListProviders200ResponseInnerAnyOf struct { - Name string `json:"name" validate:"regexp=^[a-z0-9-_]+$"` - Version string `json:"version" validate:"regexp=^v[0-9][0-9a-z]*$"` - Author string `json:"author"` - Backups *ManagedServicesListProviders200ResponseInnerAnyOfBackups `json:"backups,omitempty"` - Capabilities *ManagedServicesListProviders200ResponseInnerAnyOfCapabilities `json:"capabilities,omitempty"` - Category string `json:"category"` - Description string `json:"description"` - DisplayName string `json:"displayName"` - IconUrl string `json:"iconUrl"` + Name string `json:"name" validate:"regexp=^[a-z0-9-_]+$"` + Version string `json:"version" validate:"regexp=^v[0-9][0-9a-z]*$"` + SchemaVersion string `json:"schemaVersion" validate:"regexp=^v[0-9][0-9a-z]*$"` + Scope *string `json:"scope,omitempty"` + Author string `json:"author"` + Backups *ManagedServicesListProviders200ResponseInnerAnyOfBackups `json:"backups,omitempty"` + Capabilities *ManagedServicesListProviders200ResponseInnerAnyOfCapabilities `json:"capabilities,omitempty"` + Category string `json:"category"` + Description string `json:"description"` + DisplayName string `json:"displayName"` + IconUrl string `json:"iconUrl"` // JSON Schema ConfigSchema map[string]interface{} `json:"configSchema"` // JSON Schema DetailsSchema map[string]interface{} `json:"detailsSchema"` // JSON Schema - SecretsSchema map[string]interface{} `json:"secretsSchema"` - Plans []ManagedServicesListProviders200ResponseInnerAnyOfPlansInner `json:"plans"` - Backend ManagedServicesListProviders200ResponseInnerAnyOfBackend `json:"backend"` + SecretsSchema map[string]interface{} `json:"secretsSchema"` + Plans []ManagedServicesListProviders200ResponseInnerAnyOfPlansInner `json:"plans"` + Versions *map[string]ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue `json:"versions,omitempty"` + Backend ManagedServicesListProviders200ResponseInnerAnyOfBackend `json:"backend"` } type _ManagedServicesListProviders200ResponseInnerAnyOf ManagedServicesListProviders200ResponseInnerAnyOf @@ -47,10 +50,11 @@ type _ManagedServicesListProviders200ResponseInnerAnyOf ManagedServicesListProvi // This constructor will assign default values to properties that have it defined, // and makes sure properties required by API are set, but the set of arguments // will change when the set of required properties is changed -func NewManagedServicesListProviders200ResponseInnerAnyOf(name string, version string, author string, category string, description string, displayName string, iconUrl string, configSchema map[string]interface{}, detailsSchema map[string]interface{}, secretsSchema map[string]interface{}, plans []ManagedServicesListProviders200ResponseInnerAnyOfPlansInner, backend ManagedServicesListProviders200ResponseInnerAnyOfBackend) *ManagedServicesListProviders200ResponseInnerAnyOf { +func NewManagedServicesListProviders200ResponseInnerAnyOf(name string, version string, schemaVersion string, author string, category string, description string, displayName string, iconUrl string, configSchema map[string]interface{}, detailsSchema map[string]interface{}, secretsSchema map[string]interface{}, plans []ManagedServicesListProviders200ResponseInnerAnyOfPlansInner, backend ManagedServicesListProviders200ResponseInnerAnyOfBackend) *ManagedServicesListProviders200ResponseInnerAnyOf { this := ManagedServicesListProviders200ResponseInnerAnyOf{} this.Name = name this.Version = version + this.SchemaVersion = schemaVersion this.Author = author this.Category = category this.Description = description @@ -120,6 +124,62 @@ func (o *ManagedServicesListProviders200ResponseInnerAnyOf) SetVersion(v string) o.Version = v } +// GetSchemaVersion returns the SchemaVersion field value +func (o *ManagedServicesListProviders200ResponseInnerAnyOf) GetSchemaVersion() string { + if o == nil { + var ret string + return ret + } + + return o.SchemaVersion +} + +// GetSchemaVersionOk returns a tuple with the SchemaVersion field value +// and a boolean to check if the value has been set. +func (o *ManagedServicesListProviders200ResponseInnerAnyOf) GetSchemaVersionOk() (*string, bool) { + if o == nil { + return nil, false + } + return &o.SchemaVersion, true +} + +// SetSchemaVersion sets field value +func (o *ManagedServicesListProviders200ResponseInnerAnyOf) SetSchemaVersion(v string) { + o.SchemaVersion = v +} + +// GetScope returns the Scope field value if set, zero value otherwise. +func (o *ManagedServicesListProviders200ResponseInnerAnyOf) GetScope() string { + if o == nil || IsNil(o.Scope) { + var ret string + return ret + } + return *o.Scope +} + +// GetScopeOk returns a tuple with the Scope field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *ManagedServicesListProviders200ResponseInnerAnyOf) GetScopeOk() (*string, bool) { + if o == nil || IsNil(o.Scope) { + return nil, false + } + return o.Scope, true +} + +// HasScope returns a boolean if a field has been set. +func (o *ManagedServicesListProviders200ResponseInnerAnyOf) HasScope() bool { + if o != nil && !IsNil(o.Scope) { + return true + } + + return false +} + +// SetScope gets a reference to the given string and assigns it to the Scope field. +func (o *ManagedServicesListProviders200ResponseInnerAnyOf) SetScope(v string) { + o.Scope = &v +} + // GetAuthor returns the Author field value func (o *ManagedServicesListProviders200ResponseInnerAnyOf) GetAuthor() string { if o == nil { @@ -400,6 +460,38 @@ func (o *ManagedServicesListProviders200ResponseInnerAnyOf) SetPlans(v []Managed o.Plans = v } +// GetVersions returns the Versions field value if set, zero value otherwise. +func (o *ManagedServicesListProviders200ResponseInnerAnyOf) GetVersions() map[string]ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue { + if o == nil || IsNil(o.Versions) { + var ret map[string]ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue + return ret + } + return *o.Versions +} + +// GetVersionsOk returns a tuple with the Versions field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *ManagedServicesListProviders200ResponseInnerAnyOf) GetVersionsOk() (*map[string]ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue, bool) { + if o == nil || IsNil(o.Versions) { + return nil, false + } + return o.Versions, true +} + +// HasVersions returns a boolean if a field has been set. +func (o *ManagedServicesListProviders200ResponseInnerAnyOf) HasVersions() bool { + if o != nil && !IsNil(o.Versions) { + return true + } + + return false +} + +// SetVersions gets a reference to the given map[string]ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue and assigns it to the Versions field. +func (o *ManagedServicesListProviders200ResponseInnerAnyOf) SetVersions(v map[string]ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue) { + o.Versions = &v +} + // GetBackend returns the Backend field value func (o *ManagedServicesListProviders200ResponseInnerAnyOf) GetBackend() ManagedServicesListProviders200ResponseInnerAnyOfBackend { if o == nil { @@ -436,6 +528,10 @@ func (o ManagedServicesListProviders200ResponseInnerAnyOf) ToMap() (map[string]i toSerialize := map[string]interface{}{} toSerialize["name"] = o.Name toSerialize["version"] = o.Version + toSerialize["schemaVersion"] = o.SchemaVersion + if !IsNil(o.Scope) { + toSerialize["scope"] = o.Scope + } toSerialize["author"] = o.Author if !IsNil(o.Backups) { toSerialize["backups"] = o.Backups @@ -451,6 +547,9 @@ func (o ManagedServicesListProviders200ResponseInnerAnyOf) ToMap() (map[string]i toSerialize["detailsSchema"] = o.DetailsSchema toSerialize["secretsSchema"] = o.SecretsSchema toSerialize["plans"] = o.Plans + if !IsNil(o.Versions) { + toSerialize["versions"] = o.Versions + } toSerialize["backend"] = o.Backend return toSerialize, nil } @@ -462,6 +561,7 @@ func (o *ManagedServicesListProviders200ResponseInnerAnyOf) UnmarshalJSON(data [ requiredProperties := []string{ "name", "version", + "schemaVersion", "author", "category", "description", diff --git a/api/openapi_client/model_managed_services_list_providers_200_response_inner_any_of_1.go b/api/openapi_client/model_managed_services_list_providers_200_response_inner_any_of_1.go index 9b187425..825eee07 100644 --- a/api/openapi_client/model_managed_services_list_providers_200_response_inner_any_of_1.go +++ b/api/openapi_client/model_managed_services_list_providers_200_response_inner_any_of_1.go @@ -22,23 +22,26 @@ var _ MappedNullable = &ManagedServicesListProviders200ResponseInnerAnyOf1{} // ManagedServicesListProviders200ResponseInnerAnyOf1 struct for ManagedServicesListProviders200ResponseInnerAnyOf1 type ManagedServicesListProviders200ResponseInnerAnyOf1 struct { - Name string `json:"name" validate:"regexp=^[a-z0-9-_]+$"` - Version string `json:"version" validate:"regexp=^v[0-9][0-9a-z]*$"` - Author string `json:"author"` - Backups *ManagedServicesListProviders200ResponseInnerAnyOfBackups `json:"backups,omitempty"` - Capabilities *ManagedServicesListProviders200ResponseInnerAnyOfCapabilities `json:"capabilities,omitempty"` - Category string `json:"category"` - Description string `json:"description"` - DisplayName string `json:"displayName"` - IconUrl string `json:"iconUrl"` + Name string `json:"name" validate:"regexp=^[a-z0-9-_]+$"` + Version string `json:"version" validate:"regexp=^v[0-9][0-9a-z]*$"` + SchemaVersion string `json:"schemaVersion" validate:"regexp=^v[0-9][0-9a-z]*$"` + Scope *string `json:"scope,omitempty"` + Author string `json:"author"` + Backups *ManagedServicesListProviders200ResponseInnerAnyOfBackups `json:"backups,omitempty"` + Capabilities *ManagedServicesListProviders200ResponseInnerAnyOfCapabilities `json:"capabilities,omitempty"` + Category string `json:"category"` + Description string `json:"description"` + DisplayName string `json:"displayName"` + IconUrl string `json:"iconUrl"` // JSON Schema ConfigSchema map[string]interface{} `json:"configSchema"` // JSON Schema DetailsSchema map[string]interface{} `json:"detailsSchema"` // JSON Schema - SecretsSchema map[string]interface{} `json:"secretsSchema"` - Plans []ManagedServicesListProviders200ResponseInnerAnyOfPlansInner `json:"plans"` - Backend ManagedServicesListProviders200ResponseInnerAnyOf1Backend `json:"backend"` + SecretsSchema map[string]interface{} `json:"secretsSchema"` + Plans []ManagedServicesListProviders200ResponseInnerAnyOfPlansInner `json:"plans"` + Versions *map[string]ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue `json:"versions,omitempty"` + Backend ManagedServicesListProviders200ResponseInnerAnyOf1Backend `json:"backend"` } type _ManagedServicesListProviders200ResponseInnerAnyOf1 ManagedServicesListProviders200ResponseInnerAnyOf1 @@ -47,10 +50,11 @@ type _ManagedServicesListProviders200ResponseInnerAnyOf1 ManagedServicesListProv // This constructor will assign default values to properties that have it defined, // and makes sure properties required by API are set, but the set of arguments // will change when the set of required properties is changed -func NewManagedServicesListProviders200ResponseInnerAnyOf1(name string, version string, author string, category string, description string, displayName string, iconUrl string, configSchema map[string]interface{}, detailsSchema map[string]interface{}, secretsSchema map[string]interface{}, plans []ManagedServicesListProviders200ResponseInnerAnyOfPlansInner, backend ManagedServicesListProviders200ResponseInnerAnyOf1Backend) *ManagedServicesListProviders200ResponseInnerAnyOf1 { +func NewManagedServicesListProviders200ResponseInnerAnyOf1(name string, version string, schemaVersion string, author string, category string, description string, displayName string, iconUrl string, configSchema map[string]interface{}, detailsSchema map[string]interface{}, secretsSchema map[string]interface{}, plans []ManagedServicesListProviders200ResponseInnerAnyOfPlansInner, backend ManagedServicesListProviders200ResponseInnerAnyOf1Backend) *ManagedServicesListProviders200ResponseInnerAnyOf1 { this := ManagedServicesListProviders200ResponseInnerAnyOf1{} this.Name = name this.Version = version + this.SchemaVersion = schemaVersion this.Author = author this.Category = category this.Description = description @@ -120,6 +124,62 @@ func (o *ManagedServicesListProviders200ResponseInnerAnyOf1) SetVersion(v string o.Version = v } +// GetSchemaVersion returns the SchemaVersion field value +func (o *ManagedServicesListProviders200ResponseInnerAnyOf1) GetSchemaVersion() string { + if o == nil { + var ret string + return ret + } + + return o.SchemaVersion +} + +// GetSchemaVersionOk returns a tuple with the SchemaVersion field value +// and a boolean to check if the value has been set. +func (o *ManagedServicesListProviders200ResponseInnerAnyOf1) GetSchemaVersionOk() (*string, bool) { + if o == nil { + return nil, false + } + return &o.SchemaVersion, true +} + +// SetSchemaVersion sets field value +func (o *ManagedServicesListProviders200ResponseInnerAnyOf1) SetSchemaVersion(v string) { + o.SchemaVersion = v +} + +// GetScope returns the Scope field value if set, zero value otherwise. +func (o *ManagedServicesListProviders200ResponseInnerAnyOf1) GetScope() string { + if o == nil || IsNil(o.Scope) { + var ret string + return ret + } + return *o.Scope +} + +// GetScopeOk returns a tuple with the Scope field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *ManagedServicesListProviders200ResponseInnerAnyOf1) GetScopeOk() (*string, bool) { + if o == nil || IsNil(o.Scope) { + return nil, false + } + return o.Scope, true +} + +// HasScope returns a boolean if a field has been set. +func (o *ManagedServicesListProviders200ResponseInnerAnyOf1) HasScope() bool { + if o != nil && !IsNil(o.Scope) { + return true + } + + return false +} + +// SetScope gets a reference to the given string and assigns it to the Scope field. +func (o *ManagedServicesListProviders200ResponseInnerAnyOf1) SetScope(v string) { + o.Scope = &v +} + // GetAuthor returns the Author field value func (o *ManagedServicesListProviders200ResponseInnerAnyOf1) GetAuthor() string { if o == nil { @@ -400,6 +460,38 @@ func (o *ManagedServicesListProviders200ResponseInnerAnyOf1) SetPlans(v []Manage o.Plans = v } +// GetVersions returns the Versions field value if set, zero value otherwise. +func (o *ManagedServicesListProviders200ResponseInnerAnyOf1) GetVersions() map[string]ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue { + if o == nil || IsNil(o.Versions) { + var ret map[string]ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue + return ret + } + return *o.Versions +} + +// GetVersionsOk returns a tuple with the Versions field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *ManagedServicesListProviders200ResponseInnerAnyOf1) GetVersionsOk() (*map[string]ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue, bool) { + if o == nil || IsNil(o.Versions) { + return nil, false + } + return o.Versions, true +} + +// HasVersions returns a boolean if a field has been set. +func (o *ManagedServicesListProviders200ResponseInnerAnyOf1) HasVersions() bool { + if o != nil && !IsNil(o.Versions) { + return true + } + + return false +} + +// SetVersions gets a reference to the given map[string]ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue and assigns it to the Versions field. +func (o *ManagedServicesListProviders200ResponseInnerAnyOf1) SetVersions(v map[string]ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue) { + o.Versions = &v +} + // GetBackend returns the Backend field value func (o *ManagedServicesListProviders200ResponseInnerAnyOf1) GetBackend() ManagedServicesListProviders200ResponseInnerAnyOf1Backend { if o == nil { @@ -436,6 +528,10 @@ func (o ManagedServicesListProviders200ResponseInnerAnyOf1) ToMap() (map[string] toSerialize := map[string]interface{}{} toSerialize["name"] = o.Name toSerialize["version"] = o.Version + toSerialize["schemaVersion"] = o.SchemaVersion + if !IsNil(o.Scope) { + toSerialize["scope"] = o.Scope + } toSerialize["author"] = o.Author if !IsNil(o.Backups) { toSerialize["backups"] = o.Backups @@ -451,6 +547,9 @@ func (o ManagedServicesListProviders200ResponseInnerAnyOf1) ToMap() (map[string] toSerialize["detailsSchema"] = o.DetailsSchema toSerialize["secretsSchema"] = o.SecretsSchema toSerialize["plans"] = o.Plans + if !IsNil(o.Versions) { + toSerialize["versions"] = o.Versions + } toSerialize["backend"] = o.Backend return toSerialize, nil } @@ -462,6 +561,7 @@ func (o *ManagedServicesListProviders200ResponseInnerAnyOf1) UnmarshalJSON(data requiredProperties := []string{ "name", "version", + "schemaVersion", "author", "category", "description", diff --git a/api/openapi_client/model_managed_services_list_providers_200_response_inner_any_of_versions_value.go b/api/openapi_client/model_managed_services_list_providers_200_response_inner_any_of_versions_value.go new file mode 100644 index 00000000..73a24a14 --- /dev/null +++ b/api/openapi_client/model_managed_services_list_providers_200_response_inner_any_of_versions_value.go @@ -0,0 +1,257 @@ +// Copyright (c) Codesphere Inc. +// SPDX-License-Identifier: Apache-2.0 + +/* +Codesphere Public API + +API version: 0.1.0 +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package openapi_client + +import ( + "bytes" + "encoding/json" + "fmt" +) + +// checks if the ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue{} + +// ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue struct for ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue +type ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue struct { + GitRef string `json:"gitRef"` + CiProfile string `json:"ciProfile"` + AppVersion *string `json:"appVersion,omitempty"` + Description *string `json:"description,omitempty"` +} + +type _ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue + +// NewManagedServicesListProviders200ResponseInnerAnyOfVersionsValue instantiates a new ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewManagedServicesListProviders200ResponseInnerAnyOfVersionsValue(gitRef string, ciProfile string) *ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue { + this := ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue{} + this.GitRef = gitRef + this.CiProfile = ciProfile + return &this +} + +// NewManagedServicesListProviders200ResponseInnerAnyOfVersionsValueWithDefaults instantiates a new ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewManagedServicesListProviders200ResponseInnerAnyOfVersionsValueWithDefaults() *ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue { + this := ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue{} + return &this +} + +// GetGitRef returns the GitRef field value +func (o *ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue) GetGitRef() string { + if o == nil { + var ret string + return ret + } + + return o.GitRef +} + +// GetGitRefOk returns a tuple with the GitRef field value +// and a boolean to check if the value has been set. +func (o *ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue) GetGitRefOk() (*string, bool) { + if o == nil { + return nil, false + } + return &o.GitRef, true +} + +// SetGitRef sets field value +func (o *ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue) SetGitRef(v string) { + o.GitRef = v +} + +// GetCiProfile returns the CiProfile field value +func (o *ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue) GetCiProfile() string { + if o == nil { + var ret string + return ret + } + + return o.CiProfile +} + +// GetCiProfileOk returns a tuple with the CiProfile field value +// and a boolean to check if the value has been set. +func (o *ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue) GetCiProfileOk() (*string, bool) { + if o == nil { + return nil, false + } + return &o.CiProfile, true +} + +// SetCiProfile sets field value +func (o *ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue) SetCiProfile(v string) { + o.CiProfile = v +} + +// GetAppVersion returns the AppVersion field value if set, zero value otherwise. +func (o *ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue) GetAppVersion() string { + if o == nil || IsNil(o.AppVersion) { + var ret string + return ret + } + return *o.AppVersion +} + +// GetAppVersionOk returns a tuple with the AppVersion field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue) GetAppVersionOk() (*string, bool) { + if o == nil || IsNil(o.AppVersion) { + return nil, false + } + return o.AppVersion, true +} + +// HasAppVersion returns a boolean if a field has been set. +func (o *ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue) HasAppVersion() bool { + if o != nil && !IsNil(o.AppVersion) { + return true + } + + return false +} + +// SetAppVersion gets a reference to the given string and assigns it to the AppVersion field. +func (o *ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue) SetAppVersion(v string) { + o.AppVersion = &v +} + +// GetDescription returns the Description field value if set, zero value otherwise. +func (o *ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue) GetDescription() string { + if o == nil || IsNil(o.Description) { + var ret string + return ret + } + return *o.Description +} + +// GetDescriptionOk returns a tuple with the Description field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue) GetDescriptionOk() (*string, bool) { + if o == nil || IsNil(o.Description) { + return nil, false + } + return o.Description, true +} + +// HasDescription returns a boolean if a field has been set. +func (o *ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue) HasDescription() bool { + if o != nil && !IsNil(o.Description) { + return true + } + + return false +} + +// SetDescription gets a reference to the given string and assigns it to the Description field. +func (o *ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue) SetDescription(v string) { + o.Description = &v +} + +func (o ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue) MarshalJSON() ([]byte, error) { + toSerialize, err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + toSerialize["gitRef"] = o.GitRef + toSerialize["ciProfile"] = o.CiProfile + if !IsNil(o.AppVersion) { + toSerialize["appVersion"] = o.AppVersion + } + if !IsNil(o.Description) { + toSerialize["description"] = o.Description + } + return toSerialize, nil +} + +func (o *ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue) UnmarshalJSON(data []byte) (err error) { + // This validates that all required properties are included in the JSON object + // by unmarshalling the object into a generic map with string keys and checking + // that every required field exists as a key in the generic map. + requiredProperties := []string{ + "gitRef", + "ciProfile", + } + + allProperties := make(map[string]interface{}) + + err = json.Unmarshal(data, &allProperties) + + if err != nil { + return err + } + + for _, requiredProperty := range requiredProperties { + if _, exists := allProperties[requiredProperty]; !exists { + return fmt.Errorf("no value given for required property %v", requiredProperty) + } + } + + varManagedServicesListProviders200ResponseInnerAnyOfVersionsValue := _ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue{} + + decoder := json.NewDecoder(bytes.NewReader(data)) + //decoder.DisallowUnknownFields() + err = decoder.Decode(&varManagedServicesListProviders200ResponseInnerAnyOfVersionsValue) + + if err != nil { + return err + } + + *o = ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue(varManagedServicesListProviders200ResponseInnerAnyOfVersionsValue) + + return err +} + +type NullableManagedServicesListProviders200ResponseInnerAnyOfVersionsValue struct { + value *ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue + isSet bool +} + +func (v NullableManagedServicesListProviders200ResponseInnerAnyOfVersionsValue) Get() *ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue { + return v.value +} + +func (v *NullableManagedServicesListProviders200ResponseInnerAnyOfVersionsValue) Set(val *ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue) { + v.value = val + v.isSet = true +} + +func (v NullableManagedServicesListProviders200ResponseInnerAnyOfVersionsValue) IsSet() bool { + return v.isSet +} + +func (v *NullableManagedServicesListProviders200ResponseInnerAnyOfVersionsValue) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableManagedServicesListProviders200ResponseInnerAnyOfVersionsValue(val *ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue) *NullableManagedServicesListProviders200ResponseInnerAnyOfVersionsValue { + return &NullableManagedServicesListProviders200ResponseInnerAnyOfVersionsValue{value: val, isSet: true} +} + +func (v NullableManagedServicesListProviders200ResponseInnerAnyOfVersionsValue) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableManagedServicesListProviders200ResponseInnerAnyOfVersionsValue) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} diff --git a/api/openapi_client/model_managed_services_update_provider_request.go b/api/openapi_client/model_managed_services_update_provider_request.go index 4ffc25e2..8f95fccf 100644 --- a/api/openapi_client/model_managed_services_update_provider_request.go +++ b/api/openapi_client/model_managed_services_update_provider_request.go @@ -32,10 +32,11 @@ type ManagedServicesUpdateProviderRequest struct { // JSON Schema DetailsSchema map[string]interface{} `json:"detailsSchema,omitempty"` // JSON Schema - SecretsSchema map[string]interface{} `json:"secretsSchema,omitempty"` - Plans []ManagedServicesListProviders200ResponseInnerAnyOfPlansInner `json:"plans,omitempty"` - Backend *ManagedServicesListProviders200ResponseInnerAnyOfBackend `json:"backend,omitempty"` - Scope *ManagedServicesCreateProviderRequestAnyOfScope `json:"scope,omitempty"` + SecretsSchema map[string]interface{} `json:"secretsSchema,omitempty"` + Plans []ManagedServicesListProviders200ResponseInnerAnyOfPlansInner `json:"plans,omitempty"` + Versions *map[string]ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue `json:"versions,omitempty"` + Backend *ManagedServicesListProviders200ResponseInnerAnyOfBackend `json:"backend,omitempty"` + Scope *ManagedServicesCreateProviderRequestAnyOfScope `json:"scope,omitempty"` } // NewManagedServicesUpdateProviderRequest instantiates a new ManagedServicesUpdateProviderRequest object @@ -407,6 +408,38 @@ func (o *ManagedServicesUpdateProviderRequest) SetPlans(v []ManagedServicesListP o.Plans = v } +// GetVersions returns the Versions field value if set, zero value otherwise. +func (o *ManagedServicesUpdateProviderRequest) GetVersions() map[string]ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue { + if o == nil || IsNil(o.Versions) { + var ret map[string]ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue + return ret + } + return *o.Versions +} + +// GetVersionsOk returns a tuple with the Versions field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *ManagedServicesUpdateProviderRequest) GetVersionsOk() (*map[string]ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue, bool) { + if o == nil || IsNil(o.Versions) { + return nil, false + } + return o.Versions, true +} + +// HasVersions returns a boolean if a field has been set. +func (o *ManagedServicesUpdateProviderRequest) HasVersions() bool { + if o != nil && !IsNil(o.Versions) { + return true + } + + return false +} + +// SetVersions gets a reference to the given map[string]ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue and assigns it to the Versions field. +func (o *ManagedServicesUpdateProviderRequest) SetVersions(v map[string]ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue) { + o.Versions = &v +} + // GetBackend returns the Backend field value if set, zero value otherwise. func (o *ManagedServicesUpdateProviderRequest) GetBackend() ManagedServicesListProviders200ResponseInnerAnyOfBackend { if o == nil || IsNil(o.Backend) { @@ -514,6 +547,9 @@ func (o ManagedServicesUpdateProviderRequest) ToMap() (map[string]interface{}, e if !IsNil(o.Plans) { toSerialize["plans"] = o.Plans } + if !IsNil(o.Versions) { + toSerialize["versions"] = o.Versions + } if !IsNil(o.Backend) { toSerialize["backend"] = o.Backend } diff --git a/api/openapi_client/model_managed_services_update_request.go b/api/openapi_client/model_managed_services_update_request.go index 35952ddb..44c23f19 100644 --- a/api/openapi_client/model_managed_services_update_request.go +++ b/api/openapi_client/model_managed_services_update_request.go @@ -20,12 +20,13 @@ var _ MappedNullable = &ManagedServicesUpdateRequest{} // ManagedServicesUpdateRequest struct for ManagedServicesUpdateRequest type ManagedServicesUpdateRequest struct { - Backups *ManagedServicesUpdateRequestBackups `json:"backups,omitempty"` - Config map[string]interface{} `json:"config,omitempty"` - Secrets map[string]interface{} `json:"secrets,omitempty"` - Name *string `json:"name,omitempty"` - Pause *bool `json:"pause,omitempty"` - Plan *ManagedServicesList200ResponseInnerPlan `json:"plan,omitempty"` + Backups *ManagedServicesUpdateRequestBackups `json:"backups,omitempty"` + Config map[string]interface{} `json:"config,omitempty"` + Secrets map[string]interface{} `json:"secrets,omitempty"` + Name *string `json:"name,omitempty"` + Pause *bool `json:"pause,omitempty"` + Plan *ManagedServicesList200ResponseInnerPlan `json:"plan,omitempty"` + Versions *map[string]ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue `json:"versions,omitempty"` } // NewManagedServicesUpdateRequest instantiates a new ManagedServicesUpdateRequest object @@ -237,6 +238,38 @@ func (o *ManagedServicesUpdateRequest) SetPlan(v ManagedServicesList200ResponseI o.Plan = &v } +// GetVersions returns the Versions field value if set, zero value otherwise. +func (o *ManagedServicesUpdateRequest) GetVersions() map[string]ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue { + if o == nil || IsNil(o.Versions) { + var ret map[string]ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue + return ret + } + return *o.Versions +} + +// GetVersionsOk returns a tuple with the Versions field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *ManagedServicesUpdateRequest) GetVersionsOk() (*map[string]ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue, bool) { + if o == nil || IsNil(o.Versions) { + return nil, false + } + return o.Versions, true +} + +// HasVersions returns a boolean if a field has been set. +func (o *ManagedServicesUpdateRequest) HasVersions() bool { + if o != nil && !IsNil(o.Versions) { + return true + } + + return false +} + +// SetVersions gets a reference to the given map[string]ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue and assigns it to the Versions field. +func (o *ManagedServicesUpdateRequest) SetVersions(v map[string]ManagedServicesListProviders200ResponseInnerAnyOfVersionsValue) { + o.Versions = &v +} + func (o ManagedServicesUpdateRequest) MarshalJSON() ([]byte, error) { toSerialize, err := o.ToMap() if err != nil { @@ -265,6 +298,9 @@ func (o ManagedServicesUpdateRequest) ToMap() (map[string]interface{}, error) { if !IsNil(o.Plan) { toSerialize["plan"] = o.Plan } + if !IsNil(o.Versions) { + toSerialize["versions"] = o.Versions + } return toSerialize, nil } diff --git a/api/openapi_client/model_workspaces_create_workspace_request.go b/api/openapi_client/model_workspaces_create_workspace_request.go index 6bf0c9e3..13388020 100644 --- a/api/openapi_client/model_workspaces_create_workspace_request.go +++ b/api/openapi_client/model_workspaces_create_workspace_request.go @@ -36,6 +36,8 @@ type WorkspacesCreateWorkspaceRequest struct { VpnConfig *string `json:"vpnConfig,omitempty"` Restricted *bool `json:"restricted,omitempty"` Env []WorkspacesCreateWorkspaceRequestEnvInner `json:"env,omitempty"` + StorageMib *int `json:"storageMib,omitempty"` + SharedVaultName *string `json:"sharedVaultName,omitempty"` } type _WorkspacesCreateWorkspaceRequest WorkspacesCreateWorkspaceRequest @@ -470,6 +472,70 @@ func (o *WorkspacesCreateWorkspaceRequest) SetEnv(v []WorkspacesCreateWorkspaceR o.Env = v } +// GetStorageMib returns the StorageMib field value if set, zero value otherwise. +func (o *WorkspacesCreateWorkspaceRequest) GetStorageMib() int { + if o == nil || IsNil(o.StorageMib) { + var ret int + return ret + } + return *o.StorageMib +} + +// GetStorageMibOk returns a tuple with the StorageMib field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *WorkspacesCreateWorkspaceRequest) GetStorageMibOk() (*int, bool) { + if o == nil || IsNil(o.StorageMib) { + return nil, false + } + return o.StorageMib, true +} + +// HasStorageMib returns a boolean if a field has been set. +func (o *WorkspacesCreateWorkspaceRequest) HasStorageMib() bool { + if o != nil && !IsNil(o.StorageMib) { + return true + } + + return false +} + +// SetStorageMib gets a reference to the given int and assigns it to the StorageMib field. +func (o *WorkspacesCreateWorkspaceRequest) SetStorageMib(v int) { + o.StorageMib = &v +} + +// GetSharedVaultName returns the SharedVaultName field value if set, zero value otherwise. +func (o *WorkspacesCreateWorkspaceRequest) GetSharedVaultName() string { + if o == nil || IsNil(o.SharedVaultName) { + var ret string + return ret + } + return *o.SharedVaultName +} + +// GetSharedVaultNameOk returns a tuple with the SharedVaultName field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *WorkspacesCreateWorkspaceRequest) GetSharedVaultNameOk() (*string, bool) { + if o == nil || IsNil(o.SharedVaultName) { + return nil, false + } + return o.SharedVaultName, true +} + +// HasSharedVaultName returns a boolean if a field has been set. +func (o *WorkspacesCreateWorkspaceRequest) HasSharedVaultName() bool { + if o != nil && !IsNil(o.SharedVaultName) { + return true + } + + return false +} + +// SetSharedVaultName gets a reference to the given string and assigns it to the SharedVaultName field. +func (o *WorkspacesCreateWorkspaceRequest) SetSharedVaultName(v string) { + o.SharedVaultName = &v +} + func (o WorkspacesCreateWorkspaceRequest) MarshalJSON() ([]byte, error) { toSerialize, err := o.ToMap() if err != nil { @@ -512,6 +578,12 @@ func (o WorkspacesCreateWorkspaceRequest) ToMap() (map[string]interface{}, error if !IsNil(o.Env) { toSerialize["env"] = o.Env } + if !IsNil(o.StorageMib) { + toSerialize["storageMib"] = o.StorageMib + } + if !IsNil(o.SharedVaultName) { + toSerialize["sharedVaultName"] = o.SharedVaultName + } return toSerialize, nil } diff --git a/api/openapi_client/model_workspaces_update_workspace_request.go b/api/openapi_client/model_workspaces_update_workspace_request.go index 06e1d951..cc58e6dd 100644 --- a/api/openapi_client/model_workspaces_update_workspace_request.go +++ b/api/openapi_client/model_workspaces_update_workspace_request.go @@ -20,12 +20,14 @@ var _ MappedNullable = &WorkspacesUpdateWorkspaceRequest{} // WorkspacesUpdateWorkspaceRequest struct for WorkspacesUpdateWorkspaceRequest type WorkspacesUpdateWorkspaceRequest struct { - PlanId *int `json:"planId,omitempty"` - BaseImage *string `json:"baseImage,omitempty"` - Name *string `json:"name,omitempty"` - Replicas *int `json:"replicas,omitempty"` - VpnConfig NullableString `json:"vpnConfig,omitempty"` - Restricted *bool `json:"restricted,omitempty"` + PlanId *int `json:"planId,omitempty"` + BaseImage *string `json:"baseImage,omitempty"` + Name *string `json:"name,omitempty"` + Replicas *int `json:"replicas,omitempty"` + VpnConfig NullableString `json:"vpnConfig,omitempty"` + Restricted *bool `json:"restricted,omitempty"` + StorageMib NullableInt `json:"storageMib,omitempty"` + SharedVaultName NullableString `json:"sharedVaultName,omitempty"` } // NewWorkspacesUpdateWorkspaceRequest instantiates a new WorkspacesUpdateWorkspaceRequest object @@ -248,6 +250,92 @@ func (o *WorkspacesUpdateWorkspaceRequest) SetRestricted(v bool) { o.Restricted = &v } +// GetStorageMib returns the StorageMib field value if set, zero value otherwise (both if not set or set to explicit null). +func (o *WorkspacesUpdateWorkspaceRequest) GetStorageMib() int { + if o == nil || IsNil(o.StorageMib.Get()) { + var ret int + return ret + } + return *o.StorageMib.Get() +} + +// GetStorageMibOk returns a tuple with the StorageMib field value if set, nil otherwise +// and a boolean to check if the value has been set. +// NOTE: If the value is an explicit nil, `nil, true` will be returned +func (o *WorkspacesUpdateWorkspaceRequest) GetStorageMibOk() (*int, bool) { + if o == nil { + return nil, false + } + return o.StorageMib.Get(), o.StorageMib.IsSet() +} + +// HasStorageMib returns a boolean if a field has been set. +func (o *WorkspacesUpdateWorkspaceRequest) HasStorageMib() bool { + if o != nil && o.StorageMib.IsSet() { + return true + } + + return false +} + +// SetStorageMib gets a reference to the given NullableInt and assigns it to the StorageMib field. +func (o *WorkspacesUpdateWorkspaceRequest) SetStorageMib(v int) { + o.StorageMib.Set(&v) +} + +// SetStorageMibNil sets the value for StorageMib to be an explicit nil +func (o *WorkspacesUpdateWorkspaceRequest) SetStorageMibNil() { + o.StorageMib.Set(nil) +} + +// UnsetStorageMib ensures that no value is present for StorageMib, not even an explicit nil +func (o *WorkspacesUpdateWorkspaceRequest) UnsetStorageMib() { + o.StorageMib.Unset() +} + +// GetSharedVaultName returns the SharedVaultName field value if set, zero value otherwise (both if not set or set to explicit null). +func (o *WorkspacesUpdateWorkspaceRequest) GetSharedVaultName() string { + if o == nil || IsNil(o.SharedVaultName.Get()) { + var ret string + return ret + } + return *o.SharedVaultName.Get() +} + +// GetSharedVaultNameOk returns a tuple with the SharedVaultName field value if set, nil otherwise +// and a boolean to check if the value has been set. +// NOTE: If the value is an explicit nil, `nil, true` will be returned +func (o *WorkspacesUpdateWorkspaceRequest) GetSharedVaultNameOk() (*string, bool) { + if o == nil { + return nil, false + } + return o.SharedVaultName.Get(), o.SharedVaultName.IsSet() +} + +// HasSharedVaultName returns a boolean if a field has been set. +func (o *WorkspacesUpdateWorkspaceRequest) HasSharedVaultName() bool { + if o != nil && o.SharedVaultName.IsSet() { + return true + } + + return false +} + +// SetSharedVaultName gets a reference to the given NullableString and assigns it to the SharedVaultName field. +func (o *WorkspacesUpdateWorkspaceRequest) SetSharedVaultName(v string) { + o.SharedVaultName.Set(&v) +} + +// SetSharedVaultNameNil sets the value for SharedVaultName to be an explicit nil +func (o *WorkspacesUpdateWorkspaceRequest) SetSharedVaultNameNil() { + o.SharedVaultName.Set(nil) +} + +// UnsetSharedVaultName ensures that no value is present for SharedVaultName, not even an explicit nil +func (o *WorkspacesUpdateWorkspaceRequest) UnsetSharedVaultName() { + o.SharedVaultName.Unset() +} + func (o WorkspacesUpdateWorkspaceRequest) MarshalJSON() ([]byte, error) { toSerialize, err := o.ToMap() if err != nil { @@ -276,6 +364,12 @@ func (o WorkspacesUpdateWorkspaceRequest) ToMap() (map[string]interface{}, error if !IsNil(o.Restricted) { toSerialize["restricted"] = o.Restricted } + if o.StorageMib.IsSet() { + toSerialize["storageMib"] = o.StorageMib.Get() + } + if o.SharedVaultName.IsSet() { + toSerialize["sharedVaultName"] = o.SharedVaultName.Get() + } return toSerialize, nil } diff --git a/api/organizations.go b/api/organizations.go new file mode 100644 index 00000000..b9410a68 --- /dev/null +++ b/api/organizations.go @@ -0,0 +1,19 @@ +// Copyright (c) Codesphere Inc. +// SPDX-License-Identifier: Apache-2.0 + +package api + +import ( + cserrors "github.com/codesphere-cloud/cs-go/api/errors" +) + +func (c *Client) ListOrganizations() ([]Organization, error) { + orgs, r, err := c.api.OrganizationsAPI.OrganizationsListOrganizations(c.ctx).Execute() + if err != nil { + return nil, cserrors.FormatAPIError(r, err) + } + + res := make([]Organization, len(orgs)) + copy(res, orgs) + return res, nil +} diff --git a/api/team.go b/api/team.go index 2f259ca6..66edc95f 100644 --- a/api/team.go +++ b/api/team.go @@ -16,7 +16,7 @@ import ( // Returns [NotFound] if no plan with the given Id could be found // Returns [Duplicated] if no plan with the given Id could be found func (client *Client) TeamIdByName(name string) (Team, error) { - teams, err := client.ListTeams() + teams, err := client.ListTeams("") if err != nil { return Team{}, err } @@ -39,27 +39,88 @@ func (client *Client) TeamIdByName(name string) (Team, error) { return matchingTeams[0], nil } -func (c *Client) ListTeams() ([]Team, error) { +func (c *Client) ListTeams(orgId string) ([]Team, error) { + if orgId != "" { + teams, r, err := c.api.OrganizationsAPI.OrganizationsListOrgTeams(c.ctx, orgId).Execute() + if err != nil { + return nil, cserrors.FormatAPIError(r, err) + } + + res := make([]Team, len(teams)) + for i, t := range teams { + res[i] = *ConvertOrgTeamToTeam(t, orgId) + } + return res, nil + } + teams, r, err := c.api.TeamsAPI.TeamsListTeams(c.ctx).Execute() return teams, cserrors.FormatAPIError(r, err) } func (c *Client) GetTeam(teamId int) (*Team, error) { team, r, err := c.api.TeamsAPI.TeamsGetTeam(c.ctx, float32(teamId)).Execute() - return ConvertToTeam(team), cserrors.FormatAPIError(r, err) + if err != nil { + return nil, cserrors.FormatAPIError(r, err) + } + return ConvertToTeam(team), nil } -func (c *Client) CreateTeam(name string, dc int) (*Team, error) { +func (c *Client) CreateTeam(orgId string, name string, dc int) (*Team, error) { + if orgId == "" { + return c.createTeam(name, dc) + } + return c.createOrgTeam(orgId, name, dc) + +} + +func (c *Client) createTeam(name string, dc int) (*Team, error) { team, r, err := c.api.TeamsAPI.TeamsCreateTeam(c.ctx). TeamsCreateTeamRequest(openapi_client.TeamsCreateTeamRequest{ Name: name, Dc: dc, }). Execute() - return ConvertToTeam(team), cserrors.FormatAPIError(r, err) + if err != nil { + return nil, cserrors.FormatAPIError(r, err) + } + return ConvertToTeam(team), nil } -func (c *Client) DeleteTeam(teamId int) error { +func (c *Client) createOrgTeam(orgId string, name string, dc int) (*Team, error) { + team, r, err := c.api.TeamsAPI.TeamsCreateTeam(c.ctx). + TeamsCreateTeamRequest(openapi_client.TeamsCreateTeamRequest{ + Name: name, + Dc: dc, + OrganizationId: &orgId, + }). + Execute() + if err != nil { + return nil, cserrors.FormatAPIError(r, err) + } + return ConvertToTeam(team), nil +} + +func (c *Client) DeleteTeam(orgId string, teamId int) error { r, err := c.api.TeamsAPI.TeamsDeleteTeam(c.ctx, float32(teamId)).Execute() return cserrors.FormatAPIError(r, err) } + +func (c *Client) AddTeamMember(teamId int, email string, role int) error { + r, err := c.api.TeamsAPI.TeamsInviteMember(c.ctx, float32(teamId)). + TeamsInviteMemberRequest(openapi_client.TeamsInviteMemberRequest{ + UserEmail: email, + Role: role, + }).Execute() + if err != nil { + return cserrors.FormatAPIError(r, err) + } + return nil +} + +func (c *Client) RemoveTeamMember(teamId int, userId int) error { + r, err := c.api.TeamsAPI.TeamsRemoveMember(c.ctx, float32(teamId), float32(userId)).Execute() + if err != nil { + return cserrors.FormatAPIError(r, err) + } + return nil +} diff --git a/api/types.go b/api/types.go index f49d55f0..b6be6d7b 100644 --- a/api/types.go +++ b/api/types.go @@ -39,6 +39,20 @@ func ConvertToTeam(t *openapi.TeamsGetTeam200Response) *Team { } } +func ConvertOrgTeamToTeam(t openapi.OrganizationsListOrgTeams200ResponseInner, orgId string) *Team { + return &Team{ + Id: t.Id, + DefaultDataCenterId: t.DefaultDataCenterId, + Name: t.Name, + Description: *openapi.NewNullableString(t.Description), + AvatarId: *openapi.NewNullableString(t.AvatarId), + AvatarUrl: *openapi.NewNullableString(t.AvatarUrl), + IsFirst: t.IsFirst, + OrganizationId: &orgId, + Role: 0, // Default to admin role if not specified by org API + } +} + type Time interface { Sleep(time.Duration) Now() time.Time diff --git a/cli/cmd/client.go b/cli/cmd/client.go index 5600c888..e26af1a1 100644 --- a/cli/cmd/client.go +++ b/cli/cmd/client.go @@ -16,7 +16,7 @@ import ( ) type Client interface { - ListTeams() ([]api.Team, error) + ListTeams(orgId string) ([]api.Team, error) ListWorkspaces(teamId int) ([]api.Workspace, error) ListBaseimages() ([]api.Baseimage, error) ListOrganizations() ([]api.Organization, error) @@ -34,6 +34,10 @@ type Client interface { GetPipelineState(wsId int, stage string) ([]api.PipelineStatus, error) GitPull(wsId int, remote string, branch string) error DeployLandscape(wsId int, profile string) error + CreateTeam(orgId string, name string, dcId int) (*api.Team, error) + DeleteTeam(orgId string, teamId int) error + AddTeamMember(teamId int, email string, role int) error + RemoveTeamMember(teamId int, userId int) error } // CommandExecutor abstracts command execution for testing diff --git a/cli/cmd/list_organizations_test.go b/cli/cmd/list_organizations_test.go index cdf1c71b..c7b197c8 100644 --- a/cli/cmd/list_organizations_test.go +++ b/cli/cmd/list_organizations_test.go @@ -33,7 +33,7 @@ var _ = Describe("Organization", func() { Opts: &cmd.ListOptions{ GlobalOptions: &cmd.GlobalOptions{ Env: mockEnv, - OrgId: -1, // force using the env mock to get a org ID + OrgId: "", // force using the env mock to get a org ID }, }, ClientFactory: cmd.NewClient, // Default to real client, will be overridden in specific tests @@ -164,8 +164,6 @@ var _ = Describe("Organization", func() { Expect(err).NotTo(HaveOccurred()) Expect(orgs).To(Equal(expectedOrgs)) - - // Restore Stdout err = w.Close() var buf bytes.Buffer diff --git a/cli/cmd/list_teams.go b/cli/cmd/list_teams.go index e7e87d33..812a2840 100644 --- a/cli/cmd/list_teams.go +++ b/cli/cmd/list_teams.go @@ -40,11 +40,10 @@ func (l *ListTeamsCmd) RunE(_ *cobra.Command, args []string) (err error) { return fmt.Errorf("failed to create Codesphere client: %w", err) } - teams, err := client.ListTeams() + teams, err := client.ListTeams(l.opts.OrgId) if err != nil { return fmt.Errorf("failed to list teams: %w", err) } - switch l.opts.OutputFormat { case OutputFormatJSON: return io.PrintJSON(teams) diff --git a/cli/cmd/list_workspaces.go b/cli/cmd/list_workspaces.go index 001f99ad..0f83ed62 100644 --- a/cli/cmd/list_workspaces.go +++ b/cli/cmd/list_workspaces.go @@ -96,7 +96,7 @@ func (l *ListWorkspacesCmd) getTeamIds(client Client) (teams []int, err error) { return } var allTeams []api.Team - allTeams, err = client.ListTeams() + allTeams, err = client.ListTeams(l.Opts.OrgId) if err != nil { return } diff --git a/cli/cmd/list_workspaces_test.go b/cli/cmd/list_workspaces_test.go index b38d6eca..79570700 100644 --- a/cli/cmd/list_workspaces_test.go +++ b/cli/cmd/list_workspaces_test.go @@ -53,7 +53,7 @@ var _ = Describe("Workspace", func() { Context("when team ID is not set", func() { It("lists workspaces of all teams when no team ID is set", func() { - mockClient.EXPECT().ListTeams().Return([]api.Team{{Id: 0}, {Id: 1}}, nil) + mockClient.EXPECT().ListTeams("").Return([]api.Team{{Id: 0}, {Id: 1}}, nil) expectedWorkspaces := []api.Workspace{ {Id: 0, Name: "fakeForTeam0"}, diff --git a/cli/cmd/mocks.go b/cli/cmd/mocks.go index 7935eff3..a6f96508 100644 --- a/cli/cmd/mocks.go +++ b/cli/cmd/mocks.go @@ -39,6 +39,200 @@ func (_m *MockClient) EXPECT() *MockClient_Expecter { return &MockClient_Expecter{mock: &_m.Mock} } +// AddTeamMember provides a mock function for the type MockClient +func (_mock *MockClient) AddTeamMember(teamId int, email string, role int) error { + ret := _mock.Called(teamId, email, role) + + if len(ret) == 0 { + panic("no return value specified for AddTeamMember") + } + + var r0 error + if returnFunc, ok := ret.Get(0).(func(int, string, int) error); ok { + r0 = returnFunc(teamId, email, role) + } else { + r0 = ret.Error(0) + } + return r0 +} + +// MockClient_AddTeamMember_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'AddTeamMember' +type MockClient_AddTeamMember_Call struct { + *mock.Call +} + +// AddTeamMember is a helper method to define mock.On call +// - teamId int +// - email string +// - role int +func (_e *MockClient_Expecter) AddTeamMember(teamId any, email any, role any) *MockClient_AddTeamMember_Call { + return &MockClient_AddTeamMember_Call{Call: _e.mock.On("AddTeamMember", teamId, email, role)} +} + +func (_c *MockClient_AddTeamMember_Call) Run(run func(teamId int, email string, role int)) *MockClient_AddTeamMember_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 int + if args[0] != nil { + arg0 = args[0].(int) + } + var arg1 string + if args[1] != nil { + arg1 = args[1].(string) + } + var arg2 int + if args[2] != nil { + arg2 = args[2].(int) + } + run( + arg0, + arg1, + arg2, + ) + }) + return _c +} + +func (_c *MockClient_AddTeamMember_Call) Return(err error) *MockClient_AddTeamMember_Call { + _c.Call.Return(err) + return _c +} + +func (_c *MockClient_AddTeamMember_Call) RunAndReturn(run func(teamId int, email string, role int) error) *MockClient_AddTeamMember_Call { + _c.Call.Return(run) + return _c +} + +// CreateTeam provides a mock function for the type MockClient +func (_mock *MockClient) CreateTeam(orgId string, name string, dcId int) (*api.Team, error) { + ret := _mock.Called(orgId, name, dcId) + + if len(ret) == 0 { + panic("no return value specified for CreateTeam") + } + + var r0 *api.Team + var r1 error + if returnFunc, ok := ret.Get(0).(func(string, string, int) (*api.Team, error)); ok { + return returnFunc(orgId, name, dcId) + } + if returnFunc, ok := ret.Get(0).(func(string, string, int) *api.Team); ok { + r0 = returnFunc(orgId, name, dcId) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*api.Team) + } + } + if returnFunc, ok := ret.Get(1).(func(string, string, int) error); ok { + r1 = returnFunc(orgId, name, dcId) + } else { + r1 = ret.Error(1) + } + return r0, r1 +} + +// MockClient_CreateTeam_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'CreateTeam' +type MockClient_CreateTeam_Call struct { + *mock.Call +} + +// CreateTeam is a helper method to define mock.On call +// - orgId string +// - name string +// - dcId int +func (_e *MockClient_Expecter) CreateTeam(orgId any, name any, dcId any) *MockClient_CreateTeam_Call { + return &MockClient_CreateTeam_Call{Call: _e.mock.On("CreateTeam", orgId, name, dcId)} +} + +func (_c *MockClient_CreateTeam_Call) Run(run func(orgId string, name string, dcId int)) *MockClient_CreateTeam_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 string + if args[0] != nil { + arg0 = args[0].(string) + } + var arg1 string + if args[1] != nil { + arg1 = args[1].(string) + } + var arg2 int + if args[2] != nil { + arg2 = args[2].(int) + } + run( + arg0, + arg1, + arg2, + ) + }) + return _c +} + +func (_c *MockClient_CreateTeam_Call) Return(v *api.Team, err error) *MockClient_CreateTeam_Call { + _c.Call.Return(v, err) + return _c +} + +func (_c *MockClient_CreateTeam_Call) RunAndReturn(run func(orgId string, name string, dcId int) (*api.Team, error)) *MockClient_CreateTeam_Call { + _c.Call.Return(run) + return _c +} + +// DeleteTeam provides a mock function for the type MockClient +func (_mock *MockClient) DeleteTeam(orgId string, teamId int) error { + ret := _mock.Called(orgId, teamId) + + if len(ret) == 0 { + panic("no return value specified for DeleteTeam") + } + + var r0 error + if returnFunc, ok := ret.Get(0).(func(string, int) error); ok { + r0 = returnFunc(orgId, teamId) + } else { + r0 = ret.Error(0) + } + return r0 +} + +// MockClient_DeleteTeam_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'DeleteTeam' +type MockClient_DeleteTeam_Call struct { + *mock.Call +} + +// DeleteTeam is a helper method to define mock.On call +// - orgId string +// - teamId int +func (_e *MockClient_Expecter) DeleteTeam(orgId any, teamId any) *MockClient_DeleteTeam_Call { + return &MockClient_DeleteTeam_Call{Call: _e.mock.On("DeleteTeam", orgId, teamId)} +} + +func (_c *MockClient_DeleteTeam_Call) Run(run func(orgId string, teamId int)) *MockClient_DeleteTeam_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 string + if args[0] != nil { + arg0 = args[0].(string) + } + var arg1 int + if args[1] != nil { + arg1 = args[1].(int) + } + run( + arg0, + arg1, + ) + }) + return _c +} + +func (_c *MockClient_DeleteTeam_Call) Return(err error) *MockClient_DeleteTeam_Call { + _c.Call.Return(err) + return _c +} + +func (_c *MockClient_DeleteTeam_Call) RunAndReturn(run func(orgId string, teamId int) error) *MockClient_DeleteTeam_Call { + _c.Call.Return(run) + return _c +} + // DeleteWorkspace provides a mock function for the type MockClient func (_mock *MockClient) DeleteWorkspace(wsId int) error { ret := _mock.Called(wsId) @@ -595,8 +789,8 @@ func (_c *MockClient_ListOrganizations_Call) RunAndReturn(run func() ([]api.Orga } // ListTeams provides a mock function for the type MockClient -func (_mock *MockClient) ListTeams() ([]api.Team, error) { - ret := _mock.Called() +func (_mock *MockClient) ListTeams(orgId string) ([]api.Team, error) { + ret := _mock.Called(orgId) if len(ret) == 0 { panic("no return value specified for ListTeams") @@ -604,18 +798,18 @@ func (_mock *MockClient) ListTeams() ([]api.Team, error) { var r0 []api.Team var r1 error - if returnFunc, ok := ret.Get(0).(func() ([]api.Team, error)); ok { - return returnFunc() + if returnFunc, ok := ret.Get(0).(func(string) ([]api.Team, error)); ok { + return returnFunc(orgId) } - if returnFunc, ok := ret.Get(0).(func() []api.Team); ok { - r0 = returnFunc() + if returnFunc, ok := ret.Get(0).(func(string) []api.Team); ok { + r0 = returnFunc(orgId) } else { if ret.Get(0) != nil { r0 = ret.Get(0).([]api.Team) } } - if returnFunc, ok := ret.Get(1).(func() error); ok { - r1 = returnFunc() + if returnFunc, ok := ret.Get(1).(func(string) error); ok { + r1 = returnFunc(orgId) } else { r1 = ret.Error(1) } @@ -628,13 +822,20 @@ type MockClient_ListTeams_Call struct { } // ListTeams is a helper method to define mock.On call -func (_e *MockClient_Expecter) ListTeams() *MockClient_ListTeams_Call { - return &MockClient_ListTeams_Call{Call: _e.mock.On("ListTeams")} +// - orgId string +func (_e *MockClient_Expecter) ListTeams(orgId any) *MockClient_ListTeams_Call { + return &MockClient_ListTeams_Call{Call: _e.mock.On("ListTeams", orgId)} } -func (_c *MockClient_ListTeams_Call) Run(run func()) *MockClient_ListTeams_Call { +func (_c *MockClient_ListTeams_Call) Run(run func(orgId string)) *MockClient_ListTeams_Call { _c.Call.Run(func(args mock.Arguments) { - run() + var arg0 string + if args[0] != nil { + arg0 = args[0].(string) + } + run( + arg0, + ) }) return _c } @@ -644,7 +845,7 @@ func (_c *MockClient_ListTeams_Call) Return(vs []api.Team, err error) *MockClien return _c } -func (_c *MockClient_ListTeams_Call) RunAndReturn(run func() ([]api.Team, error)) *MockClient_ListTeams_Call { +func (_c *MockClient_ListTeams_Call) RunAndReturn(run func(orgId string) ([]api.Team, error)) *MockClient_ListTeams_Call { _c.Call.Return(run) return _c } @@ -766,6 +967,63 @@ func (_c *MockClient_ListWorkspaces_Call) RunAndReturn(run func(teamId int) ([]a return _c } +// RemoveTeamMember provides a mock function for the type MockClient +func (_mock *MockClient) RemoveTeamMember(teamId int, userId int) error { + ret := _mock.Called(teamId, userId) + + if len(ret) == 0 { + panic("no return value specified for RemoveTeamMember") + } + + var r0 error + if returnFunc, ok := ret.Get(0).(func(int, int) error); ok { + r0 = returnFunc(teamId, userId) + } else { + r0 = ret.Error(0) + } + return r0 +} + +// MockClient_RemoveTeamMember_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'RemoveTeamMember' +type MockClient_RemoveTeamMember_Call struct { + *mock.Call +} + +// RemoveTeamMember is a helper method to define mock.On call +// - teamId int +// - userId int +func (_e *MockClient_Expecter) RemoveTeamMember(teamId any, userId any) *MockClient_RemoveTeamMember_Call { + return &MockClient_RemoveTeamMember_Call{Call: _e.mock.On("RemoveTeamMember", teamId, userId)} +} + +func (_c *MockClient_RemoveTeamMember_Call) Run(run func(teamId int, userId int)) *MockClient_RemoveTeamMember_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 int + if args[0] != nil { + arg0 = args[0].(int) + } + var arg1 int + if args[1] != nil { + arg1 = args[1].(int) + } + run( + arg0, + arg1, + ) + }) + return _c +} + +func (_c *MockClient_RemoveTeamMember_Call) Return(err error) *MockClient_RemoveTeamMember_Call { + _c.Call.Return(err) + return _c +} + +func (_c *MockClient_RemoveTeamMember_Call) RunAndReturn(run func(teamId int, userId int) error) *MockClient_RemoveTeamMember_Call { + _c.Call.Return(run) + return _c +} + // ScaleLandscapeServices provides a mock function for the type MockClient func (_mock *MockClient) ScaleLandscapeServices(wsId int, services map[string]int) error { ret := _mock.Called(wsId, services) @@ -1502,29 +1760,20 @@ func (_c *MockEnv_GetApiUrl_Call) RunAndReturn(run func() string) *MockEnv_GetAp } // GetOrgId provides a mock function for the type MockEnv -func (_mock *MockEnv) GetOrgId() (int, error) { +func (_mock *MockEnv) GetOrgId() string { ret := _mock.Called() if len(ret) == 0 { panic("no return value specified for GetOrgId") } - var r0 int - var r1 error - if returnFunc, ok := ret.Get(0).(func() (int, error)); ok { - return returnFunc() - } - if returnFunc, ok := ret.Get(0).(func() int); ok { + var r0 string + if returnFunc, ok := ret.Get(0).(func() string); ok { r0 = returnFunc() } else { - r0 = ret.Get(0).(int) - } - if returnFunc, ok := ret.Get(1).(func() error); ok { - r1 = returnFunc() - } else { - r1 = ret.Error(1) + r0 = ret.Get(0).(string) } - return r0, r1 + return r0 } // MockEnv_GetOrgId_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetOrgId' @@ -1544,12 +1793,12 @@ func (_c *MockEnv_GetOrgId_Call) Run(run func()) *MockEnv_GetOrgId_Call { return _c } -func (_c *MockEnv_GetOrgId_Call) Return(n int, err error) *MockEnv_GetOrgId_Call { - _c.Call.Return(n, err) +func (_c *MockEnv_GetOrgId_Call) Return(s string) *MockEnv_GetOrgId_Call { + _c.Call.Return(s) return _c } -func (_c *MockEnv_GetOrgId_Call) RunAndReturn(run func() (int, error)) *MockEnv_GetOrgId_Call { +func (_c *MockEnv_GetOrgId_Call) RunAndReturn(run func() string) *MockEnv_GetOrgId_Call { _c.Call.Return(run) return _c } diff --git a/cli/cmd/root.go b/cli/cmd/root.go index 0206d248..b98a73e7 100644 --- a/cli/cmd/root.go +++ b/cli/cmd/root.go @@ -5,9 +5,11 @@ package cmd import ( "errors" + "fmt" "os" "github.com/codesphere-cloud/cs-go/pkg/cs" + "github.com/google/uuid" "github.com/spf13/cobra" ) @@ -15,7 +17,7 @@ type GlobalOptions struct { ApiUrl string TeamId int WorkspaceId int - OrgId int + OrgId string Env Env Verbose bool } @@ -24,7 +26,7 @@ type Env interface { GetApiToken() (string, error) GetTeamId() (int, error) GetWorkspaceId() (int, error) - GetOrgId() (int, error) + GetOrgId() string GetApiUrl() string } @@ -63,18 +65,21 @@ func (o GlobalOptions) GetWorkspaceId() (int, error) { return wsId, nil } -func (o GlobalOptions) GetOrgId() (int, error) { - if o.OrgId != -1 { - return o.OrgId, nil +func (o GlobalOptions) GetOrgId() (string, error) { + orgId := o.OrgId + if orgId == "" { + orgId = o.Env.GetOrgId() } - orgId, err := o.Env.GetOrgId() - if err != nil { - return -1, err + + if orgId == "" { + return "", nil } - if orgId < 0 { - // Note: No global flag for org-id currently exists in GetRootCmd - return -1, errors.New("organization ID not set, use CS_ORG_ID to set it") + + _, err := uuid.Parse(orgId) + if err != nil { + return "", fmt.Errorf("invalid organization ID format: %w", err) } + return orgId, nil } @@ -102,6 +107,7 @@ func GetRootCmd() *cobra.Command { rootCmd.PersistentFlags().IntVarP(&opts.TeamId, "team", "t", -1, "Team ID (relevant for some commands, can also be CS_TEAM_ID)") rootCmd.PersistentFlags().IntVarP(&opts.WorkspaceId, "workspace", "w", -1, "Workspace ID (relevant for some commands, can also be CS_WORKSPACE_ID)") rootCmd.PersistentFlags().BoolVarP(&opts.Verbose, "verbose", "v", false, "Verbose output") + rootCmd.PersistentFlags().StringVarP(&opts.OrgId, "org", "O", "", "Organization ID (relevant for some commands)") AddExecCmd(rootCmd, &opts) AddLogCmd(rootCmd, &opts) @@ -124,6 +130,7 @@ func GetRootCmd() *cobra.Command { AddScaleCmd(rootCmd, &opts) AddMcpCmd(rootCmd) + AddTeamManageCmd(rootCmd, &opts) return rootCmd } diff --git a/cli/cmd/team.go b/cli/cmd/team.go new file mode 100644 index 00000000..d6d0c951 --- /dev/null +++ b/cli/cmd/team.go @@ -0,0 +1,40 @@ +// Copyright (c) Codesphere Inc. +// SPDX-License-Identifier: Apache-2.0 + +package cmd + +import ( + "github.com/spf13/cobra" +) + +type TeamManageCmd struct { + cmd *cobra.Command +} + +func AddTeamManageCmd(rootCmd *cobra.Command, opts *GlobalOptions) { + t := TeamManageCmd{ + cmd: &cobra.Command{ + Use: "team", + Short: "Manage Team", + Long: `Manage Team Resources like Members or Roles in Teams`, + }, + } + + AddCmd(rootCmd, t.cmd) + AddMemberCmd(t.cmd, opts) + AddCreateTeamCmd(t.cmd, opts) + AddRemoveTeamCmd(t.cmd, opts) +} + +func AddMemberCmd(t *cobra.Command, opts *GlobalOptions) { + + memberCmd := &cobra.Command{ + Use: "member", + Short: "Manage team members", + } + + AddAddTeamMemberCmd(memberCmd, opts) + AddRemoveTeamMemberCmd(memberCmd, opts) + + t.AddCommand(memberCmd) +} diff --git a/cli/cmd/team_add_member.go b/cli/cmd/team_add_member.go new file mode 100644 index 00000000..d3e08ccf --- /dev/null +++ b/cli/cmd/team_add_member.go @@ -0,0 +1,92 @@ +// Copyright (c) Codesphere Inc. +// SPDX-License-Identifier: Apache-2.0 + +package cmd + +import ( + "errors" + "fmt" + "net/mail" + + "github.com/codesphere-cloud/cs-go/pkg/cs" + "github.com/codesphere-cloud/cs-go/pkg/io" + "github.com/spf13/cobra" +) + +type AddTeamMemberCmd struct { + cmd *cobra.Command + Opts AddTeamMemberOpts + ClientFactory func(GlobalOptions) (Client, error) +} + +type AddTeamMemberOpts struct { + *GlobalOptions + Email string + Role int + TeamId int +} + +func AddAddTeamMemberCmd(team *cobra.Command, opts *GlobalOptions) { + t := AddTeamMemberCmd{ + cmd: &cobra.Command{ + Use: "add", + Short: "Add team member", + Long: io.Long(`Add team member to a team. + + To add a member to a team within an organization, the CS_ORG_ID environment variable or the -O/--org flag must be set.`), + Example: io.FormatExampleCommands("team member add", []io.Example{ + {Cmd: "-t -e user@example.com -r 1", Desc: "Add a user to a team as a member"}, + {Cmd: "-t -e admin@example.com -r 0", Desc: "Add a user to a team as an admin"}, + {Cmd: "-O -t -e user@example.com -r 1", Desc: "Add a user to a team within an organization"}, + }), + }, + Opts: AddTeamMemberOpts{ + GlobalOptions: opts, + }, + ClientFactory: NewClient, + } + t.cmd.RunE = t.RunE + t.cmd.Flags().StringVarP(&t.Opts.Email, "email", "e", "", "Team member email") + _ = t.cmd.MarkFlagRequired("email") + t.cmd.Flags().IntVarP(&t.Opts.Role, "role", "r", int(cs.RoleAdmin), "Team member role 0=admin, 1=member") + AddCmd(team, t.cmd) +} + +func (c *AddTeamMemberCmd) RunE(_ *cobra.Command, args []string) error { + client, err := c.ClientFactory(*c.Opts.GlobalOptions) + if err != nil { + return fmt.Errorf("failed to create Codespehre client: %w", err) + } + + teamId, err := c.Opts.GetTeamId() + if err != nil { + return err + } + + err = c.AddTeamMember(client, teamId, c.Opts.Email, c.Opts.Role) + return err + +} + +func (c *AddTeamMemberCmd) AddTeamMember(client Client, teamId int, email string, role int) error { + if email == "" { + return errors.New("email cannot be empty") + } + + if _, err := mail.ParseAddress(email); err != nil { + return fmt.Errorf("invalid email address: %w", err) + } + + if !cs.TeamRole(role).IsValid() { + return errors.New("invalid role: must be 0 for admin or 1 for member") + } + + fmt.Printf("add member: %s to team %d with role: %d", email, teamId, role) + + err := client.AddTeamMember(teamId, email, role) + if err != nil { + return fmt.Errorf("failed to add member to team: %w", err) + } + + return nil +} diff --git a/cli/cmd/team_add_member_test.go b/cli/cmd/team_add_member_test.go new file mode 100644 index 00000000..aacc1872 --- /dev/null +++ b/cli/cmd/team_add_member_test.go @@ -0,0 +1,134 @@ +// Copyright (c) Codesphere Inc. +// SPDX-License-Identifier: Apache-2.0 + +package cmd_test + +import ( + "errors" + + "github.com/codesphere-cloud/cs-go/cli/cmd" + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" +) + +var _ = Describe("AddTeamMember", func() { + var ( + mockEnv *cmd.MockEnv + mockClient *cmd.MockClient + c *cmd.AddTeamMemberCmd + teamId int + dcId int + email string + ) + + BeforeEach(func() { + mockClient = cmd.NewMockClient(GinkgoT()) + mockEnv = cmd.NewMockEnv(GinkgoT()) + teamId = 42 + email = "test@test.com" + dcId = 1 // Default data center ID for testing + c = &cmd.AddTeamMemberCmd{ + Opts: cmd.AddTeamMemberOpts{ + GlobalOptions: &cmd.GlobalOptions{ + Env: mockEnv, + TeamId: teamId, + // OrgId is intentionally left empty here, will be set in BeforeEach for specific contexts + }, + Email: email, + TeamId: teamId, + }, + ClientFactory: func(opts cmd.GlobalOptions) (cmd.Client, error) { + return mockClient, nil + }, + } + // Mock common environment calls needed for client creation + }) + + AfterEach(func() { + mockEnv.AssertExpectations(GinkgoT()) + mockClient.AssertExpectations(GinkgoT()) + }) + + Context("Validation", func() { + It("should fail if the mail is empty", func() { + + err := c.AddTeamMember(mockClient, teamId, "", dcId) + + Expect(err).To(HaveOccurred()) + Expect(err.Error()).To(Equal("email cannot be empty")) + }) + + It("should fail if the email is invalid", func() { + + err := c.AddTeamMember(mockClient, teamId, "invalid-email", dcId) + + Expect(err).To(HaveOccurred()) + Expect(err.Error()).To(ContainSubstring("invalid email address")) + }) + + It("should fail if the role is invalid", func() { + err := c.AddTeamMember(mockClient, teamId, "user@example.com", 2) + + Expect(err).To(HaveOccurred()) + Expect(err.Error()).To(Equal("invalid role: must be 0 for admin or 1 for member")) + }) + }) + + Context("RunE execution flow", func() { + It("should successfully add a member to a team", func() { + mockClient.EXPECT().AddTeamMember(teamId, email, 0).Return(nil).Once() + + err := c.RunE(nil, []string{}) + Expect(err).ToNot(HaveOccurred()) + }) + + It("should fail when the token is not allowed to add a member", func() { + mockClient.EXPECT().AddTeamMember(teamId, email, 0).Return(errors.New("failed")).Once() + + err := c.RunE(nil, []string{}) + Expect(err).To(HaveOccurred()) + Expect(err.Error()).To(ContainSubstring("failed to add member to team: ")) + }) + + It("should fail when client creation fails", func() { + c.ClientFactory = func(opts cmd.GlobalOptions) (cmd.Client, error) { + return nil, errors.New("client init failed") + } + + err := c.RunE(nil, []string{}) + Expect(err).To(HaveOccurred()) + Expect(err.Error()).To(ContainSubstring("failed to create Codespehre client: client init failed")) + }) + + It("should fail when team ID is unavailable", func() { + c.Opts.GlobalOptions.TeamId = -1 + mockEnv.EXPECT().GetTeamId().Return(-1, errors.New("CS_TEAM_ID env var required, but not set")).Once() + + err := c.RunE(nil, []string{}) + Expect(err).To(HaveOccurred()) + Expect(err.Error()).To(Equal("CS_TEAM_ID env var required, but not set")) + }) + + It("should fail when email is empty", func() { + c.Opts.Email = "" + err := c.RunE(nil, []string{}) + Expect(err).To(HaveOccurred()) + Expect(err.Error()).To(Equal("email cannot be empty")) + }) + + It("should fail when email is invalid", func() { + c.Opts.Email = "invalid-email" + err := c.RunE(nil, []string{}) + Expect(err).To(HaveOccurred()) + Expect(err.Error()).To(ContainSubstring("invalid email address")) + }) + + It("should fail when role is invalid", func() { + c.Opts.Role = 2 + err := c.RunE(nil, []string{}) + Expect(err).To(HaveOccurred()) + Expect(err.Error()).To(Equal("invalid role: must be 0 for admin or 1 for member")) + }) + }) + +}) diff --git a/cli/cmd/team_create.go b/cli/cmd/team_create.go new file mode 100644 index 00000000..e4590740 --- /dev/null +++ b/cli/cmd/team_create.go @@ -0,0 +1,78 @@ +// Copyright (c) Codesphere Inc. +// SPDX-License-Identifier: Apache-2.0 + +package cmd + +import ( + "errors" + "fmt" + "github.com/codesphere-cloud/cs-go/api" + "github.com/codesphere-cloud/cs-go/pkg/io" + "github.com/spf13/cobra" +) + +type CreateTeamCmd struct { + cmd *cobra.Command + Opts CreateTeamOpts + ClientFactory func(GlobalOptions) (Client, error) +} + +type CreateTeamOpts struct { + *GlobalOptions + Name string + DcId int +} + +func AddCreateTeamCmd(team *cobra.Command, opts *GlobalOptions) { + t := CreateTeamCmd{ + cmd: &cobra.Command{ + Use: "create", + Short: "Create team", + Long: `Create a team in Codesphere or an Organization`, + Example: io.FormatExampleCommands("team member add", []io.Example{ + {Cmd: "-d -n ", Desc: "Create a team in a specific datacenter"}, + {Cmd: "-d -n -O ", Desc: "Create a team in a specific datacenter within an organization"}, + }), + }, + Opts: CreateTeamOpts{ + GlobalOptions: opts, + }, + ClientFactory: NewClient, + } + t.cmd.RunE = t.RunE + t.cmd.Flags().StringVarP(&t.Opts.Name, "name", "n", "", "Team name") + t.cmd.Flags().IntVarP(&t.Opts.DcId, "dc-id", "d", 0, "Data center ID") + AddCmd(team, t.cmd) +} + +func (c *CreateTeamCmd) RunE(_ *cobra.Command, args []string) error { + client, err := c.ClientFactory(*c.Opts.GlobalOptions) + if err != nil { + return fmt.Errorf("failed to create Codesphere client: %w", err) + } + + orgId, err := c.Opts.GetOrgId() + if err != nil { + return errors.Join(err, errors.New("failed to get organization ID")) + } + + createdTeam, err := c.CreateTeam(client, orgId, c.Opts.Name, c.Opts.DcId) + if err != nil { + return err + } + + fmt.Printf("Team created: %+v in Organization: %+v\n", createdTeam.Id, orgId) + return nil +} + +func (c *CreateTeamCmd) CreateTeam(client Client, orgId string, teamName string, dcId int) (*api.Team, error) { + if teamName == "" { + return nil, errors.New("team name cannot be empty") + } + + createdTeam, err := client.CreateTeam(orgId, teamName, dcId) + if err != nil { + return nil, fmt.Errorf("failed to create team: %w", err) + } + return createdTeam, nil +} diff --git a/cli/cmd/team_create_test.go b/cli/cmd/team_create_test.go new file mode 100644 index 00000000..6083bd24 --- /dev/null +++ b/cli/cmd/team_create_test.go @@ -0,0 +1,145 @@ +// Copyright (c) Codesphere Inc. +// SPDX-License-Identifier: Apache-2.0 + +package cmd_test + +import ( + "fmt" + + "github.com/codesphere-cloud/cs-go/api" + "github.com/codesphere-cloud/cs-go/cli/cmd" + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" +) + +var _ = Describe("CreateTeam", func() { + var ( + mockEnv *cmd.MockEnv + mockClient *cmd.MockClient + c *cmd.CreateTeamCmd + teamId int + orgId string + teamName string + dcId int + ) + + BeforeEach(func() { + mockClient = cmd.NewMockClient(GinkgoT()) + mockEnv = cmd.NewMockEnv(GinkgoT()) + teamId = 42 + orgId = "d90e5f82-445e-4397-a90e-74d55cd4be3c" + teamName = "test-team" + dcId = 1 // Default data center ID for testing + c = &cmd.CreateTeamCmd{ + Opts: cmd.CreateTeamOpts{ + GlobalOptions: &cmd.GlobalOptions{ + Env: mockEnv, + TeamId: teamId, + // OrgId is intentionally left empty here, will be set in BeforeEach for specific contexts + }, + Name: teamName, + DcId: dcId, + }, + ClientFactory: func(opts cmd.GlobalOptions) (cmd.Client, error) { + return mockClient, nil + }, + } + // Mock common environment calls needed for client creation + }) + + AfterEach(func() { + mockEnv.AssertExpectations(GinkgoT()) + mockClient.AssertExpectations(GinkgoT()) + }) + + Context("Validation", func() { + It("should fail if the team name is empty", func() { + team, err := c.CreateTeam(mockClient, orgId, "", dcId) + Expect(err).To(HaveOccurred()) + Expect(err.Error()).To(Equal("team name cannot be empty")) + Expect(team).To(BeNil()) + }) + }) + + Context("RunE execution flow", func() { + It("should successfully create a team when organization ID is provided via environment", func() { + c.Opts.OrgId = "" // Ensure flag is empty + mockEnv.EXPECT().GetOrgId().Return(orgId).Once() + + expectedTeam := api.Team{ + Id: teamId, + Name: teamName, + OrganizationId: &orgId, + DefaultDataCenterId: dcId, + } + mockClient.EXPECT().CreateTeam(orgId, teamName, dcId).Return(&expectedTeam, nil).Once() + + err := c.RunE(nil, []string{}) + Expect(err).ToNot(HaveOccurred()) + }) + }) + + Context("when creating a team with an organization ID", func() { + BeforeEach(func() { + c.Opts.OrgId = orgId // Set OrgId via GlobalOptions (flag equivalent) + }) + + It("should successfully create the team and return the correct object", func() { + expectedTeam := api.Team{ + Id: teamId, + Name: teamName, + OrganizationId: &orgId, + DefaultDataCenterId: dcId, + } + // Expect CreateTeam API call with the provided orgId + mockClient.EXPECT().CreateTeam(orgId, teamName, dcId).Return(&expectedTeam, nil).Once() + + team, err := c.CreateTeam(mockClient, orgId, teamName, dcId) + Expect(err).ToNot(HaveOccurred()) + Expect(team.Name).To(Equal(teamName)) + Expect(*team.OrganizationId).To(Equal(orgId)) + }) + It("should fail to create with no permission in this orgId", func() { + // Change the return values to (nil, error) to simulate an API failure + mockClient.EXPECT().CreateTeam(orgId, teamName, dcId).Return(nil, fmt.Errorf("permission denied")).Once() + + team, err := c.CreateTeam(mockClient, orgId, teamName, dcId) + Expect(err).To(HaveOccurred()) + Expect(err.Error()).To(ContainSubstring("failed to create team: permission denied")) + Expect(team).To(BeNil()) + }) + }) + + Context("when creating a team without an organization ID", func() { + BeforeEach(func() { + c.Opts.OrgId = "" // Ensure OrgId is empty from flag + }) + + It("should create the team without orgID ", func() { + expectedTeam := api.Team{ + Id: teamId, + Name: teamName, + DefaultDataCenterId: dcId, + } + mockClient.EXPECT().CreateTeam("", teamName, dcId).Return(&expectedTeam, nil).Once() + mockEnv.EXPECT().GetOrgId().Return("").Once() + + team, err := c.CreateTeam(mockClient, mockEnv.GetOrgId(), teamName, dcId) + Expect(err).ToNot(HaveOccurred()) + Expect(team.Name).To(Equal(teamName)) + }) + }) + + Context("when an invalid organization ID format is provided via flag", func() { + BeforeEach(func() { + c.Opts.OrgId = "invalid-uuid-format" // Set an invalid UUID in GlobalOptions + }) + + It("should return an error due to invalid organization ID format", func() { + // The error should occur before the API call to CreateTeam. + err := c.RunE(nil, []string{}) + Expect(err).To(HaveOccurred()) + Expect(err.Error()).To(ContainSubstring("invalid organization ID format:")) + }) + }) +}) diff --git a/cli/cmd/team_remove.go b/cli/cmd/team_remove.go new file mode 100644 index 00000000..704a042b --- /dev/null +++ b/cli/cmd/team_remove.go @@ -0,0 +1,65 @@ +// Copyright (c) Codesphere Inc. +// SPDX-License-Identifier: Apache-2.0 + +package cmd + +import ( + "errors" + "fmt" + + "github.com/codesphere-cloud/cs-go/pkg/io" + "github.com/spf13/cobra" +) + +type RemoveTeamCmd struct { + cmd *cobra.Command + Opts RemoveTeamOpts + ClientFactory func(GlobalOptions) (Client, error) +} + +type RemoveTeamOpts struct { + *GlobalOptions +} + +func AddRemoveTeamCmd(team *cobra.Command, opts *GlobalOptions) { + t := RemoveTeamCmd{ + cmd: &cobra.Command{ + Use: "remove", + Short: "Remove team", + Long: `Remove a team from Codesphere or an Organization`, + Example: io.FormatExampleCommands("team remove", []io.Example{ + {Cmd: "-t ", Desc: "Remove a team that does not belong to an Organization"}, + {Cmd: "-O -t ", Desc: "Remove a team that does belong to an Organization"}, + }), + }, + Opts: RemoveTeamOpts{ + GlobalOptions: opts, + }, + ClientFactory: NewClient, + } + t.cmd.RunE = t.RunE + AddCmd(team, t.cmd) +} + +func (c *RemoveTeamCmd) RunE(_ *cobra.Command, args []string) error { + client, err := c.ClientFactory(*c.Opts.GlobalOptions) + if err != nil { + return fmt.Errorf("failed to create Codespehre client: %w", err) + } + + orgId, err := c.Opts.GetOrgId() + if err != nil { + return err + } + + teamId, err := c.Opts.GetTeamId() + if err != nil { + return errors.New("team ID not set, use -t or CS_TEAM_ID to set it") + } + + err = client.DeleteTeam(orgId, teamId) + if err != nil { + return fmt.Errorf("failed to delete team: %w", err) + } + return nil +} diff --git a/cli/cmd/team_remove_member.go b/cli/cmd/team_remove_member.go new file mode 100644 index 00000000..4316eebc --- /dev/null +++ b/cli/cmd/team_remove_member.go @@ -0,0 +1,74 @@ +// Copyright (c) Codesphere Inc. +// SPDX-License-Identifier: Apache-2.0 + +package cmd + +import ( + "errors" + "fmt" + + "github.com/codesphere-cloud/cs-go/pkg/io" + "github.com/spf13/cobra" +) + +type RemoveTeamMemberCmd struct { + cmd *cobra.Command + Opts RemoveTeamMemberOpts + ClientFactory func(GlobalOptions) (Client, error) +} + +type RemoveTeamMemberOpts struct { + *GlobalOptions + UserId int +} + +func AddRemoveTeamMemberCmd(team *cobra.Command, opts *GlobalOptions) { + res := RemoveTeamMemberCmd{ + cmd: &cobra.Command{ + Use: "remove", + Short: "Remove team member", + Long: io.Long(`Remove team member from a team. + + To add a member to a team within an organization, the CS_ORG_ID environment variable or the -O/--org flag must be set.`), + Example: io.FormatExampleCommands("team member remove", []io.Example{ + {Cmd: "-t -u ", Desc: "Remove a user from a team"}, + {Cmd: "-O -t -u ", Desc: "Remove a user from a team within an organization"}, + }), + }, + Opts: RemoveTeamMemberOpts{ + GlobalOptions: opts, + }, + ClientFactory: NewClient, + } + res.cmd.Flags().IntVarP(&res.Opts.UserId, "user", "u", 0, "Team member user ID") + _ = res.cmd.MarkFlagRequired("user") + res.cmd.RunE = res.RunE + AddCmd(team, res.cmd) +} + +func (c *RemoveTeamMemberCmd) RunE(_ *cobra.Command, args []string) error { + client, err := c.ClientFactory(*c.Opts.GlobalOptions) + if err != nil { + return fmt.Errorf("failed to create Codespehre client: %w", err) + } + + teamId, err := c.Opts.GetTeamId() + if err != nil { + return err + } + + return c.RemoveTeamMember(client, teamId, c.Opts.UserId) +} + +func (c *RemoveTeamMemberCmd) RemoveTeamMember(client Client, teamId int, userId int) error { + if userId <= 0 { + return errors.New("user ID has to be set") + } + + err := client.RemoveTeamMember(teamId, userId) + if err != nil { + return fmt.Errorf("failed to remove member from team: %w", err) + } + + return nil +} diff --git a/cli/cmd/team_remove_member_test.go b/cli/cmd/team_remove_member_test.go new file mode 100644 index 00000000..04735aed --- /dev/null +++ b/cli/cmd/team_remove_member_test.go @@ -0,0 +1,99 @@ +// Copyright (c) Codesphere Inc. +// SPDX-License-Identifier: Apache-2.0 + +package cmd_test + +import ( + "errors" + + "github.com/codesphere-cloud/cs-go/cli/cmd" + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" +) + +var _ = Describe("RemoveTeamMember", func() { + var ( + mockEnv *cmd.MockEnv + mockClient *cmd.MockClient + c *cmd.RemoveTeamMemberCmd + teamId int + userId int + ) + + BeforeEach(func() { + mockClient = cmd.NewMockClient(GinkgoT()) + mockEnv = cmd.NewMockEnv(GinkgoT()) + teamId = 42 + userId = 100 + c = &cmd.RemoveTeamMemberCmd{ + Opts: cmd.RemoveTeamMemberOpts{ + GlobalOptions: &cmd.GlobalOptions{ + Env: mockEnv, + TeamId: teamId, + }, + UserId: userId, + }, + ClientFactory: func(opts cmd.GlobalOptions) (cmd.Client, error) { + return mockClient, nil + }, + } + }) + + AfterEach(func() { + mockEnv.AssertExpectations(GinkgoT()) + mockClient.AssertExpectations(GinkgoT()) + }) + + Context("Validation", func() { + It("should fail if the user ID is empty", func() { + err := c.RemoveTeamMember(mockClient, teamId, 0) + + Expect(err).To(HaveOccurred()) + Expect(err.Error()).To(Equal("user ID has to be set")) + }) + }) + + Context("RunE execution flow", func() { + It("should successfully remove a member from a team", func() { + mockClient.EXPECT().RemoveTeamMember(teamId, userId).Return(nil).Once() + + err := c.RunE(nil, []string{}) + Expect(err).ToNot(HaveOccurred()) + }) + + It("should fail when the token is not allowed to remove a member", func() { + mockClient.EXPECT().RemoveTeamMember(teamId, userId).Return(errors.New("failed")).Once() + + err := c.RunE(nil, []string{}) + Expect(err).To(HaveOccurred()) + Expect(err.Error()).To(ContainSubstring("failed to remove member from team: ")) + }) + + It("should fail when client creation fails", func() { + c.ClientFactory = func(opts cmd.GlobalOptions) (cmd.Client, error) { + return nil, errors.New("client init failed") + } + + err := c.RunE(nil, []string{}) + Expect(err).To(HaveOccurred()) + Expect(err.Error()).To(ContainSubstring("failed to create Codespehre client: client init failed")) + }) + + It("should fail when team ID is unavailable", func() { + c.Opts.TeamId = -1 + mockEnv.EXPECT().GetTeamId().Return(-1, errors.New("CS_TEAM_ID env var required, but not set")).Once() + + err := c.RunE(nil, []string{}) + Expect(err).To(HaveOccurred()) + Expect(err.Error()).To(Equal("CS_TEAM_ID env var required, but not set")) + }) + + It("should fail when user ID is empty", func() { + c.Opts.UserId = 0 + err := c.RunE(nil, []string{}) + + Expect(err).To(HaveOccurred()) + Expect(err.Error()).To(Equal("user ID has to be set")) + }) + }) +}) diff --git a/cli/cmd/team_remove_test.go b/cli/cmd/team_remove_test.go new file mode 100644 index 00000000..a30b44fb --- /dev/null +++ b/cli/cmd/team_remove_test.go @@ -0,0 +1,81 @@ +// Copyright (c) Codesphere Inc. +// SPDX-License-Identifier: Apache-2.0 + +package cmd_test + +import ( + "errors" + + "github.com/codesphere-cloud/cs-go/cli/cmd" + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" +) + +var _ = Describe("RemoveTeam", func() { + var ( + mockEnv *cmd.MockEnv + mockClient *cmd.MockClient + c *cmd.RemoveTeamCmd + teamId int + ) + + BeforeEach(func() { + mockClient = cmd.NewMockClient(GinkgoT()) + mockEnv = cmd.NewMockEnv(GinkgoT()) + teamId = 42 + c = &cmd.RemoveTeamCmd{ + Opts: cmd.RemoveTeamOpts{ + GlobalOptions: &cmd.GlobalOptions{ + Env: mockEnv, + TeamId: teamId, + }, + }, + ClientFactory: func(opts cmd.GlobalOptions) (cmd.Client, error) { + return mockClient, nil + }, + } + }) + + AfterEach(func() { + mockEnv.AssertExpectations(GinkgoT()) + mockClient.AssertExpectations(GinkgoT()) + }) + + Context("RunE execution flow", func() { + It("should successfully remove a team", func() { + mockEnv.EXPECT().GetOrgId().Return("").Once() + mockClient.EXPECT().DeleteTeam("", teamId).Return(nil).Once() + + err := c.RunE(nil, []string{}) + Expect(err).ToNot(HaveOccurred()) + }) + + It("should fail when the token is not allowed to remove a team", func() { + mockEnv.EXPECT().GetOrgId().Return("").Once() + mockClient.EXPECT().DeleteTeam("", teamId).Return(errors.New("failed")).Once() + + err := c.RunE(nil, []string{}) + Expect(err).To(HaveOccurred()) + Expect(err.Error()).To(ContainSubstring("failed to delete team: ")) + }) + + It("should fail when client creation fails", func() { + c.ClientFactory = func(opts cmd.GlobalOptions) (cmd.Client, error) { + return nil, errors.New("client init failed") + } + + err := c.RunE(nil, []string{}) + Expect(err).To(HaveOccurred()) + Expect(err.Error()).To(ContainSubstring("failed to create Codespehre client: client init failed")) + }) + + It("should fail when team ID is unavailable", func() { + c.Opts.TeamId = -1 + mockEnv.EXPECT().GetOrgId().Return("").Once() + mockEnv.EXPECT().GetTeamId().Return(-1, errors.New("CS_TEAM_ID env var required, but not set")).Once() + + err := c.RunE(nil, []string{}) + Expect(err).To(MatchError("team ID not set, use -t or CS_TEAM_ID to set it")) + }) + }) +}) diff --git a/docs/README.md b/docs/README.md index cc5831a2..16c6426b 100644 --- a/docs/README.md +++ b/docs/README.md @@ -11,6 +11,7 @@ Manage and debug resources deployed in Codesphere via command line. ``` -a, --api string URL of Codesphere API (can also be CS_API) -h, --help help for cs + -O, --org string Organization ID (relevant for some commands) -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) -v, --verbose Verbose output -w, --workspace int Workspace ID (relevant for some commands, can also be CS_WORKSPACE_ID) (default -1) @@ -34,6 +35,7 @@ Manage and debug resources deployed in Codesphere via command line. * [cs set-env](cs_set-env.md) - Set environment variables * [cs start](cs_start.md) - Start workspace pipeline * [cs sync](cs_sync.md) - Sync Codesphere resources +* [cs team](cs_team.md) - Manage Team * [cs update](cs_update.md) - Update Codesphere CLI * [cs version](cs_version.md) - Print version * [cs wake-up](cs_wake-up.md) - Wake up an on-demand workspace diff --git a/docs/cs.md b/docs/cs.md index cc5831a2..16c6426b 100644 --- a/docs/cs.md +++ b/docs/cs.md @@ -11,6 +11,7 @@ Manage and debug resources deployed in Codesphere via command line. ``` -a, --api string URL of Codesphere API (can also be CS_API) -h, --help help for cs + -O, --org string Organization ID (relevant for some commands) -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) -v, --verbose Verbose output -w, --workspace int Workspace ID (relevant for some commands, can also be CS_WORKSPACE_ID) (default -1) @@ -34,6 +35,7 @@ Manage and debug resources deployed in Codesphere via command line. * [cs set-env](cs_set-env.md) - Set environment variables * [cs start](cs_start.md) - Start workspace pipeline * [cs sync](cs_sync.md) - Sync Codesphere resources +* [cs team](cs_team.md) - Manage Team * [cs update](cs_update.md) - Update Codesphere CLI * [cs version](cs_version.md) - Print version * [cs wake-up](cs_wake-up.md) - Wake up an on-demand workspace diff --git a/docs/cs_create.md b/docs/cs_create.md index 38bf3595..8d99eb7d 100644 --- a/docs/cs_create.md +++ b/docs/cs_create.md @@ -16,6 +16,7 @@ Create codesphere resources like workspaces. ``` -a, --api string URL of Codesphere API (can also be CS_API) + -O, --org string Organization ID (relevant for some commands) -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) -v, --verbose Verbose output -w, --workspace int Workspace ID (relevant for some commands, can also be CS_WORKSPACE_ID) (default -1) diff --git a/docs/cs_create_workspace.md b/docs/cs_create_workspace.md index d2565267..aa9f89c2 100644 --- a/docs/cs_create_workspace.md +++ b/docs/cs_create_workspace.md @@ -64,6 +64,7 @@ $ cs create workspace my-workspace -r https://github.com/my-org/my-private-proje ``` -a, --api string URL of Codesphere API (can also be CS_API) + -O, --org string Organization ID (relevant for some commands) -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) -v, --verbose Verbose output -w, --workspace int Workspace ID (relevant for some commands, can also be CS_WORKSPACE_ID) (default -1) diff --git a/docs/cs_curl.md b/docs/cs_curl.md index 73bd0221..b79302cf 100644 --- a/docs/cs_curl.md +++ b/docs/cs_curl.md @@ -46,6 +46,7 @@ $ cs curl / -- -I ``` -a, --api string URL of Codesphere API (can also be CS_API) + -O, --org string Organization ID (relevant for some commands) -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) -v, --verbose Verbose output -w, --workspace int Workspace ID (relevant for some commands, can also be CS_WORKSPACE_ID) (default -1) diff --git a/docs/cs_delete.md b/docs/cs_delete.md index f9770934..de17965f 100644 --- a/docs/cs_delete.md +++ b/docs/cs_delete.md @@ -16,6 +16,7 @@ Delete Codesphere resources, e.g. workspaces. ``` -a, --api string URL of Codesphere API (can also be CS_API) + -O, --org string Organization ID (relevant for some commands) -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) -v, --verbose Verbose output -w, --workspace int Workspace ID (relevant for some commands, can also be CS_WORKSPACE_ID) (default -1) diff --git a/docs/cs_delete_workspace.md b/docs/cs_delete_workspace.md index 4f3deeed..f0719f6e 100644 --- a/docs/cs_delete_workspace.md +++ b/docs/cs_delete_workspace.md @@ -23,6 +23,7 @@ cs delete workspace [flags] ``` -a, --api string URL of Codesphere API (can also be CS_API) + -O, --org string Organization ID (relevant for some commands) -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) -v, --verbose Verbose output -w, --workspace int Workspace ID (relevant for some commands, can also be CS_WORKSPACE_ID) (default -1) diff --git a/docs/cs_exec.md b/docs/cs_exec.md index 0505840a..47c79916 100644 --- a/docs/cs_exec.md +++ b/docs/cs_exec.md @@ -39,6 +39,7 @@ $ cs exec -e FOO=bar -- 'echo $FOO' ``` -a, --api string URL of Codesphere API (can also be CS_API) + -O, --org string Organization ID (relevant for some commands) -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) -v, --verbose Verbose output -w, --workspace int Workspace ID (relevant for some commands, can also be CS_WORKSPACE_ID) (default -1) diff --git a/docs/cs_generate.md b/docs/cs_generate.md index c0528bd0..66a9ef96 100644 --- a/docs/cs_generate.md +++ b/docs/cs_generate.md @@ -23,6 +23,7 @@ on your local machine to run the artifact generation. ``` -a, --api string URL of Codesphere API (can also be CS_API) + -O, --org string Organization ID (relevant for some commands) -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) -v, --verbose Verbose output -w, --workspace int Workspace ID (relevant for some commands, can also be CS_WORKSPACE_ID) (default -1) diff --git a/docs/cs_generate_docker.md b/docs/cs_generate_docker.md index 7c0373d6..2355f4fa 100644 --- a/docs/cs_generate_docker.md +++ b/docs/cs_generate_docker.md @@ -51,6 +51,7 @@ $ cs generate docker -w 1234 -i ci.prod.yml --branch string Branch of the repository to clone if the input file is not found (default "main") -f, --force Overwrite any files if existing -i, --input string CI profile to use as input for generation, relative to repository root (default "ci.yml") + -O, --org string Organization ID (relevant for some commands) -o, --output string Output path of the folder including generated artifacts, relative to repository root (default "export") --reporoot string root directory of the workspace repository to export. Will be used to clone the repository if it doesn't exist. (default "./workspace-repo") -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) diff --git a/docs/cs_generate_images.md b/docs/cs_generate_images.md index 2897bacb..2d80537a 100644 --- a/docs/cs_generate_images.md +++ b/docs/cs_generate_images.md @@ -38,6 +38,7 @@ $ cs generate images -r yourRegistry -p customImagePrefix --branch string Branch of the repository to clone if the input file is not found (default "main") -f, --force Overwrite any files if existing -i, --input string CI profile to use as input for generation, relative to repository root (default "ci.yml") + -O, --org string Organization ID (relevant for some commands) -o, --output string Output path of the folder including generated artifacts, relative to repository root (default "export") --reporoot string root directory of the workspace repository to export. Will be used to clone the repository if it doesn't exist. (default "./workspace-repo") -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) diff --git a/docs/cs_generate_kubernetes.md b/docs/cs_generate_kubernetes.md index b09337d2..73417665 100644 --- a/docs/cs_generate_kubernetes.md +++ b/docs/cs_generate_kubernetes.md @@ -57,6 +57,7 @@ $ cs generate kubernetes -w 1234 -i ci.prod.yml --branch string Branch of the repository to clone if the input file is not found (default "main") -f, --force Overwrite any files if existing -i, --input string CI profile to use as input for generation, relative to repository root (default "ci.yml") + -O, --org string Organization ID (relevant for some commands) -o, --output string Output path of the folder including generated artifacts, relative to repository root (default "export") --reporoot string root directory of the workspace repository to export. Will be used to clone the repository if it doesn't exist. (default "./workspace-repo") -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) diff --git a/docs/cs_git.md b/docs/cs_git.md index 57232110..d6c86e98 100644 --- a/docs/cs_git.md +++ b/docs/cs_git.md @@ -19,6 +19,7 @@ like pulling or switching to a specific branch. ``` -a, --api string URL of Codesphere API (can also be CS_API) + -O, --org string Organization ID (relevant for some commands) -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) -v, --verbose Verbose output -w, --workspace int Workspace ID (relevant for some commands, can also be CS_WORKSPACE_ID) (default -1) diff --git a/docs/cs_git_pull.md b/docs/cs_git_pull.md index e72c9035..d4090080 100644 --- a/docs/cs_git_pull.md +++ b/docs/cs_git_pull.md @@ -34,6 +34,7 @@ $ cs git pull --remote origin --branch staging ``` -a, --api string URL of Codesphere API (can also be CS_API) + -O, --org string Organization ID (relevant for some commands) -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) -v, --verbose Verbose output -w, --workspace int Workspace ID (relevant for some commands, can also be CS_WORKSPACE_ID) (default -1) diff --git a/docs/cs_licenses.md b/docs/cs_licenses.md index e08a52cf..5fb0665b 100644 --- a/docs/cs_licenses.md +++ b/docs/cs_licenses.md @@ -20,6 +20,7 @@ cs licenses [flags] ``` -a, --api string URL of Codesphere API (can also be CS_API) + -O, --org string Organization ID (relevant for some commands) -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) -v, --verbose Verbose output -w, --workspace int Workspace ID (relevant for some commands, can also be CS_WORKSPACE_ID) (default -1) diff --git a/docs/cs_list.md b/docs/cs_list.md index 26c1fbae..a03116bb 100644 --- a/docs/cs_list.md +++ b/docs/cs_list.md @@ -24,6 +24,7 @@ $ cs list workspaces ``` -a, --api string URL of Codesphere API (can also be CS_API) + -O, --org string Organization ID (relevant for some commands) -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) -v, --verbose Verbose output -w, --workspace int Workspace ID (relevant for some commands, can also be CS_WORKSPACE_ID) (default -1) diff --git a/docs/cs_list_baseimages.md b/docs/cs_list_baseimages.md index 481c1923..fb09f359 100644 --- a/docs/cs_list_baseimages.md +++ b/docs/cs_list_baseimages.md @@ -27,6 +27,7 @@ $ cs list baseimages ``` -a, --api string URL of Codesphere API (can also be CS_API) + -O, --org string Organization ID (relevant for some commands) -o, --output string Output format (table, json, yaml) (default "table") -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) -v, --verbose Verbose output diff --git a/docs/cs_list_org.md b/docs/cs_list_org.md index 8e0faf88..5aff0836 100644 --- a/docs/cs_list_org.md +++ b/docs/cs_list_org.md @@ -27,6 +27,7 @@ $ cs list org ``` -a, --api string URL of Codesphere API (can also be CS_API) + -O, --org string Organization ID (relevant for some commands) -o, --output string Output format (table, json, yaml) (default "table") -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) -v, --verbose Verbose output diff --git a/docs/cs_list_plans.md b/docs/cs_list_plans.md index ae417914..0d6531f1 100644 --- a/docs/cs_list_plans.md +++ b/docs/cs_list_plans.md @@ -22,6 +22,7 @@ cs list plans [flags] ``` -a, --api string URL of Codesphere API (can also be CS_API) + -O, --org string Organization ID (relevant for some commands) -o, --output string Output format (table, json, yaml) (default "table") -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) -v, --verbose Verbose output diff --git a/docs/cs_list_teams.md b/docs/cs_list_teams.md index 22a716fc..183f4da6 100644 --- a/docs/cs_list_teams.md +++ b/docs/cs_list_teams.md @@ -27,6 +27,7 @@ $ cs list teams ``` -a, --api string URL of Codesphere API (can also be CS_API) + -O, --org string Organization ID (relevant for some commands) -o, --output string Output format (table, json, yaml) (default "table") -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) -v, --verbose Verbose output diff --git a/docs/cs_list_workspaces.md b/docs/cs_list_workspaces.md index 27ac0e64..37400bde 100644 --- a/docs/cs_list_workspaces.md +++ b/docs/cs_list_workspaces.md @@ -27,6 +27,7 @@ $ cs list workspaces -t ``` -a, --api string URL of Codesphere API (can also be CS_API) + -O, --org string Organization ID (relevant for some commands) -o, --output string Output format (table, json, yaml) (default "table") -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) -v, --verbose Verbose output diff --git a/docs/cs_log.md b/docs/cs_log.md index 723a0f9d..aee74d46 100644 --- a/docs/cs_log.md +++ b/docs/cs_log.md @@ -43,6 +43,7 @@ $ cs log -w 637128 -r workspace-213d7a8c-48b4-42e2-8f70-c905ab04abb5-58d657cdc5- ``` -a, --api string URL of Codesphere API (can also be CS_API) + -O, --org string Organization ID (relevant for some commands) -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) -v, --verbose Verbose output -w, --workspace int Workspace ID (relevant for some commands, can also be CS_WORKSPACE_ID) (default -1) diff --git a/docs/cs_mcp.md b/docs/cs_mcp.md index adb52a38..c63b82c5 100644 --- a/docs/cs_mcp.md +++ b/docs/cs_mcp.md @@ -39,6 +39,7 @@ cs mcp [flags] ``` -a, --api string URL of Codesphere API (can also be CS_API) + -O, --org string Organization ID (relevant for some commands) -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) -v, --verbose Verbose output -w, --workspace int Workspace ID (relevant for some commands, can also be CS_WORKSPACE_ID) (default -1) diff --git a/docs/cs_monitor.md b/docs/cs_monitor.md index 7eb96e1f..20cde957 100644 --- a/docs/cs_monitor.md +++ b/docs/cs_monitor.md @@ -54,6 +54,7 @@ $ cs monitor --forward --ca-cert-file ca.crt -- ./my-app --healthcheck https://l ``` -a, --api string URL of Codesphere API (can also be CS_API) + -O, --org string Organization ID (relevant for some commands) -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) -v, --verbose Verbose output -w, --workspace int Workspace ID (relevant for some commands, can also be CS_WORKSPACE_ID) (default -1) diff --git a/docs/cs_open.md b/docs/cs_open.md index 5eb75540..71ff57d1 100644 --- a/docs/cs_open.md +++ b/docs/cs_open.md @@ -20,6 +20,7 @@ cs open [flags] ``` -a, --api string URL of Codesphere API (can also be CS_API) + -O, --org string Organization ID (relevant for some commands) -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) -v, --verbose Verbose output -w, --workspace int Workspace ID (relevant for some commands, can also be CS_WORKSPACE_ID) (default -1) diff --git a/docs/cs_open_workspace.md b/docs/cs_open_workspace.md index d870d33d..f497fe95 100644 --- a/docs/cs_open_workspace.md +++ b/docs/cs_open_workspace.md @@ -30,6 +30,7 @@ $ cs open workspace ``` -a, --api string URL of Codesphere API (can also be CS_API) + -O, --org string Organization ID (relevant for some commands) -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) -v, --verbose Verbose output -w, --workspace int Workspace ID (relevant for some commands, can also be CS_WORKSPACE_ID) (default -1) diff --git a/docs/cs_scale.md b/docs/cs_scale.md index 115570ea..4c9f6ed3 100644 --- a/docs/cs_scale.md +++ b/docs/cs_scale.md @@ -16,6 +16,7 @@ Scale Codesphere resources, like landscape services of a workspace. ``` -a, --api string URL of Codesphere API (can also be CS_API) + -O, --org string Organization ID (relevant for some commands) -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) -v, --verbose Verbose output -w, --workspace int Workspace ID (relevant for some commands, can also be CS_WORKSPACE_ID) (default -1) diff --git a/docs/cs_scale_workspace.md b/docs/cs_scale_workspace.md index 6e464edc..bc7cc349 100644 --- a/docs/cs_scale_workspace.md +++ b/docs/cs_scale_workspace.md @@ -34,6 +34,7 @@ $ cs scale workspace --service api=0 ``` -a, --api string URL of Codesphere API (can also be CS_API) + -O, --org string Organization ID (relevant for some commands) -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) -v, --verbose Verbose output -w, --workspace int Workspace ID (relevant for some commands, can also be CS_WORKSPACE_ID) (default -1) diff --git a/docs/cs_set-env.md b/docs/cs_set-env.md index f8ee408b..82d53467 100644 --- a/docs/cs_set-env.md +++ b/docs/cs_set-env.md @@ -31,6 +31,7 @@ $ cs set-env --workspace --env-var foo=bar --env-var hello=world ``` -a, --api string URL of Codesphere API (can also be CS_API) + -O, --org string Organization ID (relevant for some commands) -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) -v, --verbose Verbose output -w, --workspace int Workspace ID (relevant for some commands, can also be CS_WORKSPACE_ID) (default -1) diff --git a/docs/cs_start.md b/docs/cs_start.md index e1c88e37..925556a0 100644 --- a/docs/cs_start.md +++ b/docs/cs_start.md @@ -16,6 +16,7 @@ Start pipeline of a workspace using the pipeline subcommand ``` -a, --api string URL of Codesphere API (can also be CS_API) + -O, --org string Organization ID (relevant for some commands) -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) -v, --verbose Verbose output -w, --workspace int Workspace ID (relevant for some commands, can also be CS_WORKSPACE_ID) (default -1) diff --git a/docs/cs_start_pipeline.md b/docs/cs_start_pipeline.md index 454f620e..56651a5c 100644 --- a/docs/cs_start_pipeline.md +++ b/docs/cs_start_pipeline.md @@ -52,6 +52,7 @@ $ cs start pipeline -t 5m prepare ``` -a, --api string URL of Codesphere API (can also be CS_API) + -O, --org string Organization ID (relevant for some commands) -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) -v, --verbose Verbose output -w, --workspace int Workspace ID (relevant for some commands, can also be CS_WORKSPACE_ID) (default -1) diff --git a/docs/cs_sync.md b/docs/cs_sync.md index 87745fb1..94161123 100644 --- a/docs/cs_sync.md +++ b/docs/cs_sync.md @@ -16,6 +16,7 @@ Synchronize Codesphere resources, like infrastructure required to run services. ``` -a, --api string URL of Codesphere API (can also be CS_API) + -O, --org string Organization ID (relevant for some commands) -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) -v, --verbose Verbose output -w, --workspace int Workspace ID (relevant for some commands, can also be CS_WORKSPACE_ID) (default -1) diff --git a/docs/cs_sync_landscape.md b/docs/cs_sync_landscape.md index 6875dd00..c48e6c5c 100644 --- a/docs/cs_sync_landscape.md +++ b/docs/cs_sync_landscape.md @@ -21,6 +21,7 @@ cs sync landscape [flags] ``` -a, --api string URL of Codesphere API (can also be CS_API) + -O, --org string Organization ID (relevant for some commands) -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) -v, --verbose Verbose output -w, --workspace int Workspace ID (relevant for some commands, can also be CS_WORKSPACE_ID) (default -1) diff --git a/docs/cs_team.md b/docs/cs_team.md new file mode 100644 index 00000000..a4bfa1ac --- /dev/null +++ b/docs/cs_team.md @@ -0,0 +1,31 @@ +## cs team + +Manage Team + +### Synopsis + +Manage Team Resources like Members or Roles in Teams + +### Options + +``` + -h, --help help for team +``` + +### Options inherited from parent commands + +``` + -a, --api string URL of Codesphere API (can also be CS_API) + -O, --org string Organization ID (relevant for some commands) + -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) + -v, --verbose Verbose output + -w, --workspace int Workspace ID (relevant for some commands, can also be CS_WORKSPACE_ID) (default -1) +``` + +### SEE ALSO + +* [cs](cs.md) - The Codesphere CLI +* [cs team create](cs_team_create.md) - Create team +* [cs team member](cs_team_member.md) - Manage team members +* [cs team remove](cs_team_remove.md) - Remove team + diff --git a/docs/cs_team_create.md b/docs/cs_team_create.md new file mode 100644 index 00000000..d2b30167 --- /dev/null +++ b/docs/cs_team_create.md @@ -0,0 +1,44 @@ +## cs team create + +Create team + +### Synopsis + +Create a team in Codesphere or an Organization + +``` +cs team create [flags] +``` + +### Examples + +``` +# Create a team in a specific datacenter +$ cs team member add -d -n + +# Create a team in a specific datacenter within an organization +$ cs team member add -d -n -O +``` + +### Options + +``` + -d, --dc-id int Data center ID + -h, --help help for create + -n, --name string Team name +``` + +### Options inherited from parent commands + +``` + -a, --api string URL of Codesphere API (can also be CS_API) + -O, --org string Organization ID (relevant for some commands) + -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) + -v, --verbose Verbose output + -w, --workspace int Workspace ID (relevant for some commands, can also be CS_WORKSPACE_ID) (default -1) +``` + +### SEE ALSO + +* [cs team](cs_team.md) - Manage Team + diff --git a/docs/cs_team_member.md b/docs/cs_team_member.md new file mode 100644 index 00000000..a5960a22 --- /dev/null +++ b/docs/cs_team_member.md @@ -0,0 +1,26 @@ +## cs team member + +Manage team members + +### Options + +``` + -h, --help help for member +``` + +### Options inherited from parent commands + +``` + -a, --api string URL of Codesphere API (can also be CS_API) + -O, --org string Organization ID (relevant for some commands) + -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) + -v, --verbose Verbose output + -w, --workspace int Workspace ID (relevant for some commands, can also be CS_WORKSPACE_ID) (default -1) +``` + +### SEE ALSO + +* [cs team](cs_team.md) - Manage Team +* [cs team member add](cs_team_member_add.md) - Add team member +* [cs team member remove](cs_team_member_remove.md) - Remove team member + diff --git a/docs/cs_team_member_add.md b/docs/cs_team_member_add.md new file mode 100644 index 00000000..fbd24c0f --- /dev/null +++ b/docs/cs_team_member_add.md @@ -0,0 +1,49 @@ +## cs team member add + +Add team member + +### Synopsis + +Add team member to a team. + +To add a member to a team within an organization, the CS_ORG_ID environment variable or the -O/--org flag must be set. + +``` +cs team member add [flags] +``` + +### Examples + +``` +# Add a user to a team as a member +$ cs team member add -t -e user@example.com -r 1 + +# Add a user to a team as an admin +$ cs team member add -t -e admin@example.com -r 0 + +# Add a user to a team within an organization +$ cs team member add -O -t -e user@example.com -r 1 +``` + +### Options + +``` + -e, --email string Team member email + -h, --help help for add + -r, --role int Team member role 0=admin, 1=member +``` + +### Options inherited from parent commands + +``` + -a, --api string URL of Codesphere API (can also be CS_API) + -O, --org string Organization ID (relevant for some commands) + -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) + -v, --verbose Verbose output + -w, --workspace int Workspace ID (relevant for some commands, can also be CS_WORKSPACE_ID) (default -1) +``` + +### SEE ALSO + +* [cs team member](cs_team_member.md) - Manage team members + diff --git a/docs/cs_team_member_remove.md b/docs/cs_team_member_remove.md new file mode 100644 index 00000000..7d335c37 --- /dev/null +++ b/docs/cs_team_member_remove.md @@ -0,0 +1,45 @@ +## cs team member remove + +Remove team member + +### Synopsis + +Remove team member from a team. + +To add a member to a team within an organization, the CS_ORG_ID environment variable or the -O/--org flag must be set. + +``` +cs team member remove [flags] +``` + +### Examples + +``` +# Remove a user from a team +$ cs team member remove -t -u + +# Remove a user from a team within an organization +$ cs team member remove -O -t -u +``` + +### Options + +``` + -h, --help help for remove + -u, --user int Team member user ID +``` + +### Options inherited from parent commands + +``` + -a, --api string URL of Codesphere API (can also be CS_API) + -O, --org string Organization ID (relevant for some commands) + -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) + -v, --verbose Verbose output + -w, --workspace int Workspace ID (relevant for some commands, can also be CS_WORKSPACE_ID) (default -1) +``` + +### SEE ALSO + +* [cs team member](cs_team_member.md) - Manage team members + diff --git a/docs/cs_team_remove.md b/docs/cs_team_remove.md new file mode 100644 index 00000000..8df8a85c --- /dev/null +++ b/docs/cs_team_remove.md @@ -0,0 +1,42 @@ +## cs team remove + +Remove team + +### Synopsis + +Remove a team from Codesphere or an Organization + +``` +cs team remove [flags] +``` + +### Examples + +``` +# Remove a team that does not belong to an Organization +$ cs team remove -t + +# Remove a team that does belong to an Organization +$ cs team remove -O -t +``` + +### Options + +``` + -h, --help help for remove +``` + +### Options inherited from parent commands + +``` + -a, --api string URL of Codesphere API (can also be CS_API) + -O, --org string Organization ID (relevant for some commands) + -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) + -v, --verbose Verbose output + -w, --workspace int Workspace ID (relevant for some commands, can also be CS_WORKSPACE_ID) (default -1) +``` + +### SEE ALSO + +* [cs team](cs_team.md) - Manage Team + diff --git a/docs/cs_update.md b/docs/cs_update.md index 73ce7946..ba62d1b9 100644 --- a/docs/cs_update.md +++ b/docs/cs_update.md @@ -20,6 +20,7 @@ cs update [flags] ``` -a, --api string URL of Codesphere API (can also be CS_API) + -O, --org string Organization ID (relevant for some commands) -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) -v, --verbose Verbose output -w, --workspace int Workspace ID (relevant for some commands, can also be CS_WORKSPACE_ID) (default -1) diff --git a/docs/cs_version.md b/docs/cs_version.md index c54be562..5a4a39f3 100644 --- a/docs/cs_version.md +++ b/docs/cs_version.md @@ -20,6 +20,7 @@ cs version [flags] ``` -a, --api string URL of Codesphere API (can also be CS_API) + -O, --org string Organization ID (relevant for some commands) -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) -v, --verbose Verbose output -w, --workspace int Workspace ID (relevant for some commands, can also be CS_WORKSPACE_ID) (default -1) diff --git a/docs/cs_wake-up.md b/docs/cs_wake-up.md index 05d0ea0e..275e3f02 100644 --- a/docs/cs_wake-up.md +++ b/docs/cs_wake-up.md @@ -42,6 +42,7 @@ $ cs wake-up -w 1234 --sync-landscape --profile prod ``` -a, --api string URL of Codesphere API (can also be CS_API) + -O, --org string Organization ID (relevant for some commands) -t, --team int Team ID (relevant for some commands, can also be CS_TEAM_ID) (default -1) -v, --verbose Verbose output -w, --workspace int Workspace ID (relevant for some commands, can also be CS_WORKSPACE_ID) (default -1) diff --git a/mcp-server/team.go b/mcp-server/team.go index 944fde4b..5f2f7707 100644 --- a/mcp-server/team.go +++ b/mcp-server/team.go @@ -10,19 +10,23 @@ import ( "github.com/modelcontextprotocol/go-sdk/mcp" ) -type ListTeamsArgs struct{} +type ListTeamsArgs struct { + OrgId string `json:"orgId,omitempty" jsonschema:"Optional organization ID to list teams for"` +} type GetTeamArgs struct { TeamId int `json:"teamId" jsonschema:"ID of the team to get"` } type CreateTeamArgs struct { - Name string `json:"name" jsonschema:"Name of the new team"` - Dc int `json:"dc" jsonschema:"Default datacenter ID"` + OrgId string `json:"orgId,omitempty" jsonschema:"Optional organization ID to create the team in"` + Name string `json:"name" jsonschema:"Name of the new team"` + Dc int `json:"dc" jsonschema:"Default datacenter ID"` } type DeleteTeamArgs struct { - TeamId int `json:"teamId" jsonschema:"ID of the team to delete"` + OrgId string `json:"orgId,omitempty" jsonschema:"Optional organization ID the team belongs to"` + TeamId int `json:"teamId" jsonschema:"ID of the team to delete"` } func RegisterTeamTools(server *mcp.Server, client *api.Client) { @@ -30,7 +34,7 @@ func RegisterTeamTools(server *mcp.Server, client *api.Client) { Name: "list_teams", Description: "List all teams the authenticated user belongs to", }, func(ctx context.Context, req *mcp.CallToolRequest, args ListTeamsArgs) (*mcp.CallToolResult, any, error) { - teams, err := client.ListTeams() + teams, err := client.ListTeams(args.OrgId) if err != nil { return &mcp.CallToolResult{IsError: true}, nil, err } @@ -52,7 +56,7 @@ func RegisterTeamTools(server *mcp.Server, client *api.Client) { Name: "create_team", Description: "Create a new team", }, func(ctx context.Context, req *mcp.CallToolRequest, args CreateTeamArgs) (*mcp.CallToolResult, any, error) { - team, err := client.CreateTeam(args.Name, args.Dc) + team, err := client.CreateTeam(args.OrgId, args.Name, args.Dc) if err != nil { return &mcp.CallToolResult{IsError: true}, nil, err } @@ -63,7 +67,7 @@ func RegisterTeamTools(server *mcp.Server, client *api.Client) { Name: "delete_team", Description: "Delete a team by ID", }, func(ctx context.Context, req *mcp.CallToolRequest, args DeleteTeamArgs) (*mcp.CallToolResult, any, error) { - err := client.DeleteTeam(args.TeamId) + err := client.DeleteTeam(args.OrgId, args.TeamId) if err != nil { return &mcp.CallToolResult{IsError: true}, nil, err } diff --git a/pkg/cs/env.go b/pkg/cs/env.go index 7d7c35a7..59fea80a 100644 --- a/pkg/cs/env.go +++ b/pkg/cs/env.go @@ -38,8 +38,8 @@ func (e *Environment) GetTeamId() (int, error) { return e.ReadNumericEnv("CS_TEAM_ID") } -func (e *Environment) GetOrgId() (int, error) { - return e.ReadNumericEnv("CS_ORG_ID") +func (e *Environment) GetOrgId() string { + return os.Getenv("CS_ORG_ID") } func (e *Environment) ReadNumericEnv(env string) (int, error) { diff --git a/pkg/cs/util.go b/pkg/cs/util.go index d766f2ab..0b1f3d99 100644 --- a/pkg/cs/util.go +++ b/pkg/cs/util.go @@ -71,13 +71,28 @@ func SetAuthoriziationHeader(req *http.Request) error { return nil } -func GetRoleName(role int) string { - if role == 1 { +type TeamRole int + +const ( + RoleAdmin TeamRole = 0 + RoleMember TeamRole = 1 +) + +func (r TeamRole) IsValid() bool { + return r == RoleAdmin || r == RoleMember +} + +func (r TeamRole) String() string { + if r == RoleMember { return "Member" } return "Admin" } +func GetRoleName(role int) string { + return TeamRole(role).String() +} + func ArgToEnvVarMap(input []string) (map[string]string, error) { res := map[string]string{} for _, v := range input { diff --git a/pkg/tmpl/NOTICE b/pkg/tmpl/NOTICE index 1aeedd20..f2ca0ef5 100644 --- a/pkg/tmpl/NOTICE +++ b/pkg/tmpl/NOTICE @@ -165,6 +165,12 @@ Version: v0.4.3 License: MIT License URL: https://github.com/google/jsonschema-go/blob/v0.4.3/LICENSE +---------- +Module: github.com/google/uuid +Version: v1.6.0 +License: BSD-3-Clause +License URL: https://github.com/google/uuid/blob/v1.6.0/LICENSE + ---------- Module: github.com/hashicorp/go-cleanhttp Version: v0.5.2