diff --git a/README.md b/README.md index b7123e993d..25f90eec07 100644 --- a/README.md +++ b/README.md @@ -216,6 +216,7 @@ Azure | N1 | N | Y | Y | N GCP | Y | 4.7+ | Y | Y | 4.10+ IBMCloud | N | N | N | Y | N KubeVirt | N | N | Y | N | N +Nutanix | N | N | N | Y | N OpenStack | N | N | Y | N | N oVirt | N | N | Y | N | N VMWare | N | N | Y | N | N diff --git a/cmd/ccoctl/main.go b/cmd/ccoctl/main.go index 24be476e6a..9eb8a0f1c2 100644 --- a/cmd/ccoctl/main.go +++ b/cmd/ccoctl/main.go @@ -9,6 +9,7 @@ import ( "github.com/openshift/cloud-credential-operator/pkg/cmd/provisioning/aws" "github.com/openshift/cloud-credential-operator/pkg/cmd/provisioning/gcp" "github.com/openshift/cloud-credential-operator/pkg/cmd/provisioning/ibmcloud" + "github.com/openshift/cloud-credential-operator/pkg/cmd/provisioning/nutanix" ) func main() { @@ -21,6 +22,7 @@ func main() { rootCmd.AddCommand(gcp.NewGCPCmd()) rootCmd.AddCommand(ibmcloud.NewIBMCloudCmd()) rootCmd.AddCommand(alibabacloud.NewAliababaCloudCmd()) + rootCmd.AddCommand(nutanix.NewNutanixCmd()) if err := rootCmd.Execute(); err != nil { log.Fatal(err) diff --git a/docs/ccoctl.md b/docs/ccoctl.md index c0efc0b355..2fa821b98b 100644 --- a/docs/ccoctl.md +++ b/docs/ccoctl.md @@ -335,4 +335,94 @@ For alibaba cloud, the CCO utility (`ccoctl`) binary will create credentials Se ``` where: - `name` is the name used to tag any cloud resources that are created for tracking. - - `region` is the Alibaba Cloud region in which cloud resources will be created. \ No newline at end of file + - `region` is the Alibaba Cloud region in which cloud resources will be created. + +## Nutanix + +This is a guide for using manual mode on Nutanix, for more info about manual mode, please refer to [cco-mode-manual](https://github.com/openshift/cloud-credential-operator/blob/master/docs/mode-manual-creds.md). + +For Nutanix, the CCO utility (`ccoctl`) binary will create credentials Secret manifests for the OpenShift installer. + + +### Prerequisite + +1. Extract and prepare the ccoctl binary from the release image. + +2. Ensure the following environment variables are set: + - NUTANIX_ENDPOINT= + - NUTANIX_PORT= + - NUTANIX_USER= + - NUTANIX_PASSWORD= + +### Procedure + +1. Extract the list of CredentialsRequest custom resources (CRs) from the OpenShift Container Platform release image: + + ```bash + $ oc adm release extract --credentials-requests --cloud=nutanix --to=/credrequests quay.io//ocp-release: + ``` + + > step 2&3 are only needed when preparing for upgrading clusters with manually maintained credentials. When doing a fresh installation please skip step 2&3** + +2. For each CredentialsRequest CR in the release image, ensure that a namespace that matches the text in the spec.secretRef.namespace field exists in the cluster. You can check the list of namespaces on the cluster by running `oc get namespace`. This field is where the generated secrets that hold the credentials configuration are stored. + + Sample Nutanix CredentialsRequest object + ```yaml + apiVersion: cloudcredential.openshift.io/v1 + kind: CredentialsRequest + metadata: + annotations: + include.release.openshift.io/self-managed-high-availability: "true" + labels: + controller-tools.k8s.io: "1.0" + name: openshift-machine-api-nutanix + namespace: openshift-cloud-credential-operator + spec: + providerSpec: + apiVersion: cloudcredential.openshift.io/v1 + kind: NutanixProviderSpec + secretRef: + name: nutanix-credentials + namespace: openshift-machine-api + ``` + +3. For any `CredentialsRequest` CR for which the cluster does not already have a namespace with the name specified in `spec.secretRef.namespace`, create the namespace: + + ```bash + $ oc create namespace + ``` + +4. Use the `ccoctl` tool to process all `CredentialsRequest` objects in the `credrequests` directory: + + ```bash + $ ccoctl nutanix create-shared-secrets --credentials-requests-dir=/credrequests --output-dir=xxxxxx + ``` + + where: + + - `credentials-requests-dir` is the directory containing files of component CredentialsRequests. + - `output-dir` is the directory containing files of component credentials secret under the `manifests` directory. + +5. Prepare to run the OpenShift Container Platform installer: + + a. Create the install-config.yaml file: + ```bash + $ openshift-install create install-config --dir ./path/to/installation/dir + ``` + b. Configure the cluster to install with the CCO in manual mode: + + ```bash + $ echo "credentialsMode: Manual" >> ./path/to/installation/dir/install-config.yaml + ``` + + c. Create install manifests: + + ```bash + $ openshift-install create manifests --dir ./path/to/installation/dir + ``` + + d. Copy the generated credential files to the target manifests directory: + + ```bash + $ cp /manifests/*credentials.yaml ./path/to/installation/dir/manifests/ + ``` diff --git a/go.mod b/go.mod index 6e0ed3ebe1..ce00829d45 100644 --- a/go.mod +++ b/go.mod @@ -27,7 +27,7 @@ require ( github.com/hashicorp/go-retryablehttp v0.7.0 // indirect github.com/leodido/go-urn v1.2.1 // indirect github.com/mitchellh/mapstructure v1.4.1 // indirect - github.com/openshift/api v0.0.0-20211209135129-c58d9f695577 + github.com/openshift/api v0.0.0-20220203140920-bfe251c51d2d github.com/openshift/build-machinery-go v0.0.0-20211213093930-7e33a7eb4ce3 github.com/openshift/library-go v0.0.0-20220121154930-b7889002d63e github.com/pkg/errors v0.9.1 diff --git a/go.sum b/go.sum index ea07797156..05a3b6126a 100644 --- a/go.sum +++ b/go.sum @@ -646,8 +646,9 @@ github.com/onsi/gomega v1.17.0 h1:9Luw4uT5HTjHTN8+aNcSThgH1vdXnmdJ8xIfZ4wyTRE= github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/openshift/api v0.0.0-20211209135129-c58d9f695577 h1:NUe82M8wMYXbd5s+WBAJ2QAZZivs+nhZ3zYgZFwKfqw= github.com/openshift/api v0.0.0-20211209135129-c58d9f695577/go.mod h1:DoslCwtqUpr3d/gsbq4ZlkaMEdYqKxuypsDjorcHhME= +github.com/openshift/api v0.0.0-20220203140920-bfe251c51d2d h1:WuD14VS4SFKKH5hKeYiHTswlEByICzMNvaZrDXUjZiY= +github.com/openshift/api v0.0.0-20220203140920-bfe251c51d2d/go.mod h1:F/eU6jgr6Q2VhMu1mSpMmygxAELd7+BUxs3NHZ25jV4= github.com/openshift/build-machinery-go v0.0.0-20210712174854-1bb7fd1518d3/go.mod h1:b1BuldmJlbA/xYtdZvKi+7j5YGB44qJUJDZ9zwiNCfE= github.com/openshift/build-machinery-go v0.0.0-20211213093930-7e33a7eb4ce3 h1:65oBhJYHzYK5VL0gF1eiYY37lLzyLZ47b9y5Kib1nf8= github.com/openshift/build-machinery-go v0.0.0-20211213093930-7e33a7eb4ce3/go.mod h1:b1BuldmJlbA/xYtdZvKi+7j5YGB44qJUJDZ9zwiNCfE= diff --git a/pkg/alibabacloud/mock/client_generated.go b/pkg/alibabacloud/mock/client_generated.go index 2142c9a731..e4beda28c9 100644 --- a/pkg/alibabacloud/mock/client_generated.go +++ b/pkg/alibabacloud/mock/client_generated.go @@ -34,64 +34,64 @@ func (m *MockClient) EXPECT() *MockClientMockRecorder { return m.recorder } -// AttachPolicyToUser mocks base method. -func (m *MockClient) AttachPolicyToUser(arg0 *ram.AttachPolicyToUserRequest) (*ram.AttachPolicyToUserResponse, error) { +// CreatePolicy mocks base method. +func (m *MockClient) CreatePolicy(arg0 *ram.CreatePolicyRequest) (*ram.CreatePolicyResponse, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "AttachPolicyToUser", arg0) - ret0, _ := ret[0].(*ram.AttachPolicyToUserResponse) + ret := m.ctrl.Call(m, "CreatePolicy", arg0) + ret0, _ := ret[0].(*ram.CreatePolicyResponse) ret1, _ := ret[1].(error) return ret0, ret1 } -// AttachPolicyToUser indicates an expected call of AttachPolicyToUser. -func (mr *MockClientMockRecorder) AttachPolicyToUser(arg0 interface{}) *gomock.Call { +// CreatePolicy indicates an expected call of CreatePolicy. +func (mr *MockClientMockRecorder) CreatePolicy(arg0 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AttachPolicyToUser", reflect.TypeOf((*MockClient)(nil).AttachPolicyToUser), arg0) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreatePolicy", reflect.TypeOf((*MockClient)(nil).CreatePolicy), arg0) } -// CreateAccessKey mocks base method. -func (m *MockClient) CreateAccessKey(arg0 *ram.CreateAccessKeyRequest) (*ram.CreateAccessKeyResponse, error) { +// GetPolicy mocks base method. +func (m *MockClient) GetPolicy(arg0 *ram.GetPolicyRequest) (*ram.GetPolicyResponse, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CreateAccessKey", arg0) - ret0, _ := ret[0].(*ram.CreateAccessKeyResponse) + ret := m.ctrl.Call(m, "GetPolicy", arg0) + ret0, _ := ret[0].(*ram.GetPolicyResponse) ret1, _ := ret[1].(error) return ret0, ret1 } -// CreateAccessKey indicates an expected call of CreateAccessKey. -func (mr *MockClientMockRecorder) CreateAccessKey(arg0 interface{}) *gomock.Call { +// GetPolicy indicates an expected call of GetPolicy. +func (mr *MockClientMockRecorder) GetPolicy(arg0 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateAccessKey", reflect.TypeOf((*MockClient)(nil).CreateAccessKey), arg0) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPolicy", reflect.TypeOf((*MockClient)(nil).GetPolicy), arg0) } -// CreatePolicy mocks base method. -func (m *MockClient) CreatePolicy(arg0 *ram.CreatePolicyRequest) (*ram.CreatePolicyResponse, error) { +// CreatePolicyVersion mocks base method. +func (m *MockClient) CreatePolicyVersion(arg0 *ram.CreatePolicyVersionRequest) (*ram.CreatePolicyVersionResponse, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CreatePolicy", arg0) - ret0, _ := ret[0].(*ram.CreatePolicyResponse) + ret := m.ctrl.Call(m, "CreatePolicyVersion", arg0) + ret0, _ := ret[0].(*ram.CreatePolicyVersionResponse) ret1, _ := ret[1].(error) return ret0, ret1 } -// CreatePolicy indicates an expected call of CreatePolicy. -func (mr *MockClientMockRecorder) CreatePolicy(arg0 interface{}) *gomock.Call { +// CreatePolicyVersion indicates an expected call of CreatePolicyVersion. +func (mr *MockClientMockRecorder) CreatePolicyVersion(arg0 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreatePolicy", reflect.TypeOf((*MockClient)(nil).CreatePolicy), arg0) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreatePolicyVersion", reflect.TypeOf((*MockClient)(nil).CreatePolicyVersion), arg0) } -// CreatePolicyVersion mocks base method. -func (m *MockClient) CreatePolicyVersion(arg0 *ram.CreatePolicyVersionRequest) (*ram.CreatePolicyVersionResponse, error) { +// AttachPolicyToUser mocks base method. +func (m *MockClient) AttachPolicyToUser(arg0 *ram.AttachPolicyToUserRequest) (*ram.AttachPolicyToUserResponse, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CreatePolicyVersion", arg0) - ret0, _ := ret[0].(*ram.CreatePolicyVersionResponse) + ret := m.ctrl.Call(m, "AttachPolicyToUser", arg0) + ret0, _ := ret[0].(*ram.AttachPolicyToUserResponse) ret1, _ := ret[1].(error) return ret0, ret1 } -// CreatePolicyVersion indicates an expected call of CreatePolicyVersion. -func (mr *MockClientMockRecorder) CreatePolicyVersion(arg0 interface{}) *gomock.Call { +// AttachPolicyToUser indicates an expected call of AttachPolicyToUser. +func (mr *MockClientMockRecorder) AttachPolicyToUser(arg0 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreatePolicyVersion", reflect.TypeOf((*MockClient)(nil).CreatePolicyVersion), arg0) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AttachPolicyToUser", reflect.TypeOf((*MockClient)(nil).AttachPolicyToUser), arg0) } // CreateUser mocks base method. @@ -109,124 +109,124 @@ func (mr *MockClientMockRecorder) CreateUser(arg0 interface{}) *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateUser", reflect.TypeOf((*MockClient)(nil).CreateUser), arg0) } -// DeleteAccessKey mocks base method. -func (m *MockClient) DeleteAccessKey(arg0 *ram.DeleteAccessKeyRequest) (*ram.DeleteAccessKeyResponse, error) { +// GetUser mocks base method. +func (m *MockClient) GetUser(arg0 *ram.GetUserRequest) (*ram.GetUserResponse, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DeleteAccessKey", arg0) - ret0, _ := ret[0].(*ram.DeleteAccessKeyResponse) + ret := m.ctrl.Call(m, "GetUser", arg0) + ret0, _ := ret[0].(*ram.GetUserResponse) ret1, _ := ret[1].(error) return ret0, ret1 } -// DeleteAccessKey indicates an expected call of DeleteAccessKey. -func (mr *MockClientMockRecorder) DeleteAccessKey(arg0 interface{}) *gomock.Call { +// GetUser indicates an expected call of GetUser. +func (mr *MockClientMockRecorder) GetUser(arg0 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteAccessKey", reflect.TypeOf((*MockClient)(nil).DeleteAccessKey), arg0) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetUser", reflect.TypeOf((*MockClient)(nil).GetUser), arg0) } -// DeletePolicy mocks base method. -func (m *MockClient) DeletePolicy(request *ram.DeletePolicyRequest) (*ram.DeletePolicyResponse, error) { +// ListUsers mocks base method. +func (m *MockClient) ListUsers(arg0 *ram.ListUsersRequest) (*ram.ListUsersResponse, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DeletePolicy", request) - ret0, _ := ret[0].(*ram.DeletePolicyResponse) + ret := m.ctrl.Call(m, "ListUsers", arg0) + ret0, _ := ret[0].(*ram.ListUsersResponse) ret1, _ := ret[1].(error) return ret0, ret1 } -// DeletePolicy indicates an expected call of DeletePolicy. -func (mr *MockClientMockRecorder) DeletePolicy(request interface{}) *gomock.Call { +// ListUsers indicates an expected call of ListUsers. +func (mr *MockClientMockRecorder) ListUsers(arg0 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeletePolicy", reflect.TypeOf((*MockClient)(nil).DeletePolicy), request) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListUsers", reflect.TypeOf((*MockClient)(nil).ListUsers), arg0) } -// DeletePolicyVersion mocks base method. -func (m *MockClient) DeletePolicyVersion(request *ram.DeletePolicyVersionRequest) (*ram.DeletePolicyVersionResponse, error) { +// DeleteUser mocks base method. +func (m *MockClient) DeleteUser(arg0 *ram.DeleteUserRequest) (*ram.DeleteUserResponse, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DeletePolicyVersion", request) - ret0, _ := ret[0].(*ram.DeletePolicyVersionResponse) + ret := m.ctrl.Call(m, "DeleteUser", arg0) + ret0, _ := ret[0].(*ram.DeleteUserResponse) ret1, _ := ret[1].(error) return ret0, ret1 } -// DeletePolicyVersion indicates an expected call of DeletePolicyVersion. -func (mr *MockClientMockRecorder) DeletePolicyVersion(request interface{}) *gomock.Call { +// DeleteUser indicates an expected call of DeleteUser. +func (mr *MockClientMockRecorder) DeleteUser(arg0 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeletePolicyVersion", reflect.TypeOf((*MockClient)(nil).DeletePolicyVersion), request) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteUser", reflect.TypeOf((*MockClient)(nil).DeleteUser), arg0) } -// DeleteUser mocks base method. -func (m *MockClient) DeleteUser(arg0 *ram.DeleteUserRequest) (*ram.DeleteUserResponse, error) { +// CreateAccessKey mocks base method. +func (m *MockClient) CreateAccessKey(arg0 *ram.CreateAccessKeyRequest) (*ram.CreateAccessKeyResponse, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DeleteUser", arg0) - ret0, _ := ret[0].(*ram.DeleteUserResponse) + ret := m.ctrl.Call(m, "CreateAccessKey", arg0) + ret0, _ := ret[0].(*ram.CreateAccessKeyResponse) ret1, _ := ret[1].(error) return ret0, ret1 } -// DeleteUser indicates an expected call of DeleteUser. -func (mr *MockClientMockRecorder) DeleteUser(arg0 interface{}) *gomock.Call { +// CreateAccessKey indicates an expected call of CreateAccessKey. +func (mr *MockClientMockRecorder) CreateAccessKey(arg0 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteUser", reflect.TypeOf((*MockClient)(nil).DeleteUser), arg0) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateAccessKey", reflect.TypeOf((*MockClient)(nil).CreateAccessKey), arg0) } -// DetachPolicyFromUser mocks base method. -func (m *MockClient) DetachPolicyFromUser(request *ram.DetachPolicyFromUserRequest) (*ram.DetachPolicyFromUserResponse, error) { +// ListAccessKeys mocks base method. +func (m *MockClient) ListAccessKeys(arg0 *ram.ListAccessKeysRequest) (*ram.ListAccessKeysResponse, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DetachPolicyFromUser", request) - ret0, _ := ret[0].(*ram.DetachPolicyFromUserResponse) + ret := m.ctrl.Call(m, "ListAccessKeys", arg0) + ret0, _ := ret[0].(*ram.ListAccessKeysResponse) ret1, _ := ret[1].(error) return ret0, ret1 } -// DetachPolicyFromUser indicates an expected call of DetachPolicyFromUser. -func (mr *MockClientMockRecorder) DetachPolicyFromUser(request interface{}) *gomock.Call { +// ListAccessKeys indicates an expected call of ListAccessKeys. +func (mr *MockClientMockRecorder) ListAccessKeys(arg0 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DetachPolicyFromUser", reflect.TypeOf((*MockClient)(nil).DetachPolicyFromUser), request) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListAccessKeys", reflect.TypeOf((*MockClient)(nil).ListAccessKeys), arg0) } -// GetPolicy mocks base method. -func (m *MockClient) GetPolicy(arg0 *ram.GetPolicyRequest) (*ram.GetPolicyResponse, error) { +// DeleteAccessKey mocks base method. +func (m *MockClient) DeleteAccessKey(arg0 *ram.DeleteAccessKeyRequest) (*ram.DeleteAccessKeyResponse, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetPolicy", arg0) - ret0, _ := ret[0].(*ram.GetPolicyResponse) + ret := m.ctrl.Call(m, "DeleteAccessKey", arg0) + ret0, _ := ret[0].(*ram.DeleteAccessKeyResponse) ret1, _ := ret[1].(error) return ret0, ret1 } -// GetPolicy indicates an expected call of GetPolicy. -func (mr *MockClientMockRecorder) GetPolicy(arg0 interface{}) *gomock.Call { +// DeleteAccessKey indicates an expected call of DeleteAccessKey. +func (mr *MockClientMockRecorder) DeleteAccessKey(arg0 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPolicy", reflect.TypeOf((*MockClient)(nil).GetPolicy), arg0) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteAccessKey", reflect.TypeOf((*MockClient)(nil).DeleteAccessKey), arg0) } -// GetUser mocks base method. -func (m *MockClient) GetUser(arg0 *ram.GetUserRequest) (*ram.GetUserResponse, error) { +// DeletePolicy mocks base method. +func (m *MockClient) DeletePolicy(request *ram.DeletePolicyRequest) (*ram.DeletePolicyResponse, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetUser", arg0) - ret0, _ := ret[0].(*ram.GetUserResponse) + ret := m.ctrl.Call(m, "DeletePolicy", request) + ret0, _ := ret[0].(*ram.DeletePolicyResponse) ret1, _ := ret[1].(error) return ret0, ret1 } -// GetUser indicates an expected call of GetUser. -func (mr *MockClientMockRecorder) GetUser(arg0 interface{}) *gomock.Call { +// DeletePolicy indicates an expected call of DeletePolicy. +func (mr *MockClientMockRecorder) DeletePolicy(request interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetUser", reflect.TypeOf((*MockClient)(nil).GetUser), arg0) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeletePolicy", reflect.TypeOf((*MockClient)(nil).DeletePolicy), request) } -// ListAccessKeys mocks base method. -func (m *MockClient) ListAccessKeys(arg0 *ram.ListAccessKeysRequest) (*ram.ListAccessKeysResponse, error) { +// DetachPolicyFromUser mocks base method. +func (m *MockClient) DetachPolicyFromUser(request *ram.DetachPolicyFromUserRequest) (*ram.DetachPolicyFromUserResponse, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ListAccessKeys", arg0) - ret0, _ := ret[0].(*ram.ListAccessKeysResponse) + ret := m.ctrl.Call(m, "DetachPolicyFromUser", request) + ret0, _ := ret[0].(*ram.DetachPolicyFromUserResponse) ret1, _ := ret[1].(error) return ret0, ret1 } -// ListAccessKeys indicates an expected call of ListAccessKeys. -func (mr *MockClientMockRecorder) ListAccessKeys(arg0 interface{}) *gomock.Call { +// DetachPolicyFromUser indicates an expected call of DetachPolicyFromUser. +func (mr *MockClientMockRecorder) DetachPolicyFromUser(request interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListAccessKeys", reflect.TypeOf((*MockClient)(nil).ListAccessKeys), arg0) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DetachPolicyFromUser", reflect.TypeOf((*MockClient)(nil).DetachPolicyFromUser), request) } // ListPoliciesForUser mocks base method. @@ -244,32 +244,32 @@ func (mr *MockClientMockRecorder) ListPoliciesForUser(request interface{}) *gomo return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListPoliciesForUser", reflect.TypeOf((*MockClient)(nil).ListPoliciesForUser), request) } -// ListPolicyVersions mocks base method. -func (m *MockClient) ListPolicyVersions(request *ram.ListPolicyVersionsRequest) (*ram.ListPolicyVersionsResponse, error) { +// DeletePolicyVersion mocks base method. +func (m *MockClient) DeletePolicyVersion(request *ram.DeletePolicyVersionRequest) (*ram.DeletePolicyVersionResponse, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ListPolicyVersions", request) - ret0, _ := ret[0].(*ram.ListPolicyVersionsResponse) + ret := m.ctrl.Call(m, "DeletePolicyVersion", request) + ret0, _ := ret[0].(*ram.DeletePolicyVersionResponse) ret1, _ := ret[1].(error) return ret0, ret1 } -// ListPolicyVersions indicates an expected call of ListPolicyVersions. -func (mr *MockClientMockRecorder) ListPolicyVersions(request interface{}) *gomock.Call { +// DeletePolicyVersion indicates an expected call of DeletePolicyVersion. +func (mr *MockClientMockRecorder) DeletePolicyVersion(request interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListPolicyVersions", reflect.TypeOf((*MockClient)(nil).ListPolicyVersions), request) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeletePolicyVersion", reflect.TypeOf((*MockClient)(nil).DeletePolicyVersion), request) } -// ListUsers mocks base method. -func (m *MockClient) ListUsers(arg0 *ram.ListUsersRequest) (*ram.ListUsersResponse, error) { +// ListPolicyVersions mocks base method. +func (m *MockClient) ListPolicyVersions(request *ram.ListPolicyVersionsRequest) (*ram.ListPolicyVersionsResponse, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ListUsers", arg0) - ret0, _ := ret[0].(*ram.ListUsersResponse) + ret := m.ctrl.Call(m, "ListPolicyVersions", request) + ret0, _ := ret[0].(*ram.ListPolicyVersionsResponse) ret1, _ := ret[1].(error) return ret0, ret1 } -// ListUsers indicates an expected call of ListUsers. -func (mr *MockClientMockRecorder) ListUsers(arg0 interface{}) *gomock.Call { +// ListPolicyVersions indicates an expected call of ListPolicyVersions. +func (mr *MockClientMockRecorder) ListPolicyVersions(request interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListUsers", reflect.TypeOf((*MockClient)(nil).ListUsers), arg0) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListPolicyVersions", reflect.TypeOf((*MockClient)(nil).ListPolicyVersions), request) } diff --git a/pkg/apis/cloudcredential/v1/register.go b/pkg/apis/cloudcredential/v1/register.go index 7a01044f65..e596e7d097 100644 --- a/pkg/apis/cloudcredential/v1/register.go +++ b/pkg/apis/cloudcredential/v1/register.go @@ -60,6 +60,7 @@ func addKnownTypes(scheme *runtime.Scheme) error { &GCPProviderStatus{}, &GCPProviderSpec{}, &IBMCloudProviderStatus{}, &IBMCloudProviderSpec{}, &IBMCloudPowerVSProviderStatus{}, &IBMCloudPowerVSProviderSpec{}, + &NutanixProviderStatus{}, &NutanixProviderSpec{}, &VSphereProviderStatus{}, &VSphereProviderSpec{}, &KubevirtProviderStatus{}, &KubevirtProviderSpec{}, ) diff --git a/pkg/apis/cloudcredential/v1/types_nutanix.go b/pkg/apis/cloudcredential/v1/types_nutanix.go new file mode 100644 index 0000000000..236a0fd935 --- /dev/null +++ b/pkg/apis/cloudcredential/v1/types_nutanix.go @@ -0,0 +1,33 @@ +/* + Copyright 2019 The OpenShift Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// NutanixProviderSpec the specification of the credentials request in Nutanix. +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +type NutanixProviderSpec struct { + metav1.TypeMeta `json:",inline"` +} + +// NutanixProviderStatus contains the status of the credentials request in Nutanix. +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +type NutanixProviderStatus struct { + metav1.TypeMeta `json:",inline"` +} diff --git a/pkg/apis/cloudcredential/v1/zz_generated.deepcopy.go b/pkg/apis/cloudcredential/v1/zz_generated.deepcopy.go index 079831eca9..57edd8b110 100644 --- a/pkg/apis/cloudcredential/v1/zz_generated.deepcopy.go +++ b/pkg/apis/cloudcredential/v1/zz_generated.deepcopy.go @@ -582,6 +582,56 @@ func (in *KubevirtProviderStatus) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NutanixProviderSpec) DeepCopyInto(out *NutanixProviderSpec) { + *out = *in + out.TypeMeta = in.TypeMeta + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NutanixProviderSpec. +func (in *NutanixProviderSpec) DeepCopy() *NutanixProviderSpec { + if in == nil { + return nil + } + out := new(NutanixProviderSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *NutanixProviderSpec) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NutanixProviderStatus) DeepCopyInto(out *NutanixProviderStatus) { + *out = *in + out.TypeMeta = in.TypeMeta + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NutanixProviderStatus. +func (in *NutanixProviderStatus) DeepCopy() *NutanixProviderStatus { + if in == nil { + return nil + } + out := new(NutanixProviderStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *NutanixProviderStatus) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *OpenStackProviderSpec) DeepCopyInto(out *OpenStackProviderSpec) { *out = *in diff --git a/pkg/aws/mock/client_generated.go b/pkg/aws/mock/client_generated.go index d7781a19b8..e00d4fe786 100644 --- a/pkg/aws/mock/client_generated.go +++ b/pkg/aws/mock/client_generated.go @@ -50,21 +50,6 @@ func (mr *MockClientMockRecorder) CreateAccessKey(arg0 interface{}) *gomock.Call return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateAccessKey", reflect.TypeOf((*MockClient)(nil).CreateAccessKey), arg0) } -// CreateBucket mocks base method. -func (m *MockClient) CreateBucket(arg0 *s3.CreateBucketInput) (*s3.CreateBucketOutput, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CreateBucket", arg0) - ret0, _ := ret[0].(*s3.CreateBucketOutput) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// CreateBucket indicates an expected call of CreateBucket. -func (mr *MockClientMockRecorder) CreateBucket(arg0 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateBucket", reflect.TypeOf((*MockClient)(nil).CreateBucket), arg0) -} - // CreateOpenIDConnectProvider mocks base method. func (m *MockClient) CreateOpenIDConnectProvider(arg0 *iam.CreateOpenIDConnectProviderInput) (*iam.CreateOpenIDConnectProviderOutput, error) { m.ctrl.T.Helper() @@ -125,169 +110,124 @@ func (mr *MockClientMockRecorder) DeleteAccessKey(arg0 interface{}) *gomock.Call return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteAccessKey", reflect.TypeOf((*MockClient)(nil).DeleteAccessKey), arg0) } -// DeleteBucket mocks base method. -func (m *MockClient) DeleteBucket(input *s3.DeleteBucketInput) (*s3.DeleteBucketOutput, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DeleteBucket", input) - ret0, _ := ret[0].(*s3.DeleteBucketOutput) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// DeleteBucket indicates an expected call of DeleteBucket. -func (mr *MockClientMockRecorder) DeleteBucket(input interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteBucket", reflect.TypeOf((*MockClient)(nil).DeleteBucket), input) -} - -// DeleteObject mocks base method. -func (m *MockClient) DeleteObject(input *s3.DeleteObjectInput) (*s3.DeleteObjectOutput, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DeleteObject", input) - ret0, _ := ret[0].(*s3.DeleteObjectOutput) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// DeleteObject indicates an expected call of DeleteObject. -func (mr *MockClientMockRecorder) DeleteObject(input interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteObject", reflect.TypeOf((*MockClient)(nil).DeleteObject), input) -} - -// DeleteOpenIDConnectProvider mocks base method. -func (m *MockClient) DeleteOpenIDConnectProvider(input *iam.DeleteOpenIDConnectProviderInput) (*iam.DeleteOpenIDConnectProviderOutput, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DeleteOpenIDConnectProvider", input) - ret0, _ := ret[0].(*iam.DeleteOpenIDConnectProviderOutput) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// DeleteOpenIDConnectProvider indicates an expected call of DeleteOpenIDConnectProvider. -func (mr *MockClientMockRecorder) DeleteOpenIDConnectProvider(input interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteOpenIDConnectProvider", reflect.TypeOf((*MockClient)(nil).DeleteOpenIDConnectProvider), input) -} - -// DeleteRole mocks base method. -func (m *MockClient) DeleteRole(input *iam.DeleteRoleInput) (*iam.DeleteRoleOutput, error) { +// DeleteUser mocks base method. +func (m *MockClient) DeleteUser(arg0 *iam.DeleteUserInput) (*iam.DeleteUserOutput, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DeleteRole", input) - ret0, _ := ret[0].(*iam.DeleteRoleOutput) + ret := m.ctrl.Call(m, "DeleteUser", arg0) + ret0, _ := ret[0].(*iam.DeleteUserOutput) ret1, _ := ret[1].(error) return ret0, ret1 } -// DeleteRole indicates an expected call of DeleteRole. -func (mr *MockClientMockRecorder) DeleteRole(input interface{}) *gomock.Call { +// DeleteUser indicates an expected call of DeleteUser. +func (mr *MockClientMockRecorder) DeleteUser(arg0 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteRole", reflect.TypeOf((*MockClient)(nil).DeleteRole), input) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteUser", reflect.TypeOf((*MockClient)(nil).DeleteUser), arg0) } -// DeleteRolePolicy mocks base method. -func (m *MockClient) DeleteRolePolicy(input *iam.DeleteRolePolicyInput) (*iam.DeleteRolePolicyOutput, error) { +// DeleteUserPolicy mocks base method. +func (m *MockClient) DeleteUserPolicy(arg0 *iam.DeleteUserPolicyInput) (*iam.DeleteUserPolicyOutput, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DeleteRolePolicy", input) - ret0, _ := ret[0].(*iam.DeleteRolePolicyOutput) + ret := m.ctrl.Call(m, "DeleteUserPolicy", arg0) + ret0, _ := ret[0].(*iam.DeleteUserPolicyOutput) ret1, _ := ret[1].(error) return ret0, ret1 } -// DeleteRolePolicy indicates an expected call of DeleteRolePolicy. -func (mr *MockClientMockRecorder) DeleteRolePolicy(input interface{}) *gomock.Call { +// DeleteUserPolicy indicates an expected call of DeleteUserPolicy. +func (mr *MockClientMockRecorder) DeleteUserPolicy(arg0 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteRolePolicy", reflect.TypeOf((*MockClient)(nil).DeleteRolePolicy), input) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteUserPolicy", reflect.TypeOf((*MockClient)(nil).DeleteUserPolicy), arg0) } -// DeleteUser mocks base method. -func (m *MockClient) DeleteUser(arg0 *iam.DeleteUserInput) (*iam.DeleteUserOutput, error) { +// GetOpenIDConnectProvider mocks base method. +func (m *MockClient) GetOpenIDConnectProvider(input *iam.GetOpenIDConnectProviderInput) (*iam.GetOpenIDConnectProviderOutput, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DeleteUser", arg0) - ret0, _ := ret[0].(*iam.DeleteUserOutput) + ret := m.ctrl.Call(m, "GetOpenIDConnectProvider", input) + ret0, _ := ret[0].(*iam.GetOpenIDConnectProviderOutput) ret1, _ := ret[1].(error) return ret0, ret1 } -// DeleteUser indicates an expected call of DeleteUser. -func (mr *MockClientMockRecorder) DeleteUser(arg0 interface{}) *gomock.Call { +// GetOpenIDConnectProvider indicates an expected call of GetOpenIDConnectProvider. +func (mr *MockClientMockRecorder) GetOpenIDConnectProvider(input interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteUser", reflect.TypeOf((*MockClient)(nil).DeleteUser), arg0) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOpenIDConnectProvider", reflect.TypeOf((*MockClient)(nil).GetOpenIDConnectProvider), input) } -// DeleteUserPolicy mocks base method. -func (m *MockClient) DeleteUserPolicy(arg0 *iam.DeleteUserPolicyInput) (*iam.DeleteUserPolicyOutput, error) { +// GetRole mocks base method. +func (m *MockClient) GetRole(input *iam.GetRoleInput) (*iam.GetRoleOutput, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DeleteUserPolicy", arg0) - ret0, _ := ret[0].(*iam.DeleteUserPolicyOutput) + ret := m.ctrl.Call(m, "GetRole", input) + ret0, _ := ret[0].(*iam.GetRoleOutput) ret1, _ := ret[1].(error) return ret0, ret1 } -// DeleteUserPolicy indicates an expected call of DeleteUserPolicy. -func (mr *MockClientMockRecorder) DeleteUserPolicy(arg0 interface{}) *gomock.Call { +// GetRole indicates an expected call of GetRole. +func (mr *MockClientMockRecorder) GetRole(input interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteUserPolicy", reflect.TypeOf((*MockClient)(nil).DeleteUserPolicy), arg0) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetRole", reflect.TypeOf((*MockClient)(nil).GetRole), input) } -// GetBucketTagging mocks base method. -func (m *MockClient) GetBucketTagging(input *s3.GetBucketTaggingInput) (*s3.GetBucketTaggingOutput, error) { +// ListRoles mocks base method. +func (m *MockClient) ListRoles(input *iam.ListRolesInput) (*iam.ListRolesOutput, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetBucketTagging", input) - ret0, _ := ret[0].(*s3.GetBucketTaggingOutput) + ret := m.ctrl.Call(m, "ListRoles", input) + ret0, _ := ret[0].(*iam.ListRolesOutput) ret1, _ := ret[1].(error) return ret0, ret1 } -// GetBucketTagging indicates an expected call of GetBucketTagging. -func (mr *MockClientMockRecorder) GetBucketTagging(input interface{}) *gomock.Call { +// ListRoles indicates an expected call of ListRoles. +func (mr *MockClientMockRecorder) ListRoles(input interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetBucketTagging", reflect.TypeOf((*MockClient)(nil).GetBucketTagging), input) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListRoles", reflect.TypeOf((*MockClient)(nil).ListRoles), input) } -// GetObjectTagging mocks base method. -func (m *MockClient) GetObjectTagging(input *s3.GetObjectTaggingInput) (*s3.GetObjectTaggingOutput, error) { +// DeleteRole mocks base method. +func (m *MockClient) DeleteRole(input *iam.DeleteRoleInput) (*iam.DeleteRoleOutput, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetObjectTagging", input) - ret0, _ := ret[0].(*s3.GetObjectTaggingOutput) + ret := m.ctrl.Call(m, "DeleteRole", input) + ret0, _ := ret[0].(*iam.DeleteRoleOutput) ret1, _ := ret[1].(error) return ret0, ret1 } -// GetObjectTagging indicates an expected call of GetObjectTagging. -func (mr *MockClientMockRecorder) GetObjectTagging(input interface{}) *gomock.Call { +// DeleteRole indicates an expected call of DeleteRole. +func (mr *MockClientMockRecorder) DeleteRole(input interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetObjectTagging", reflect.TypeOf((*MockClient)(nil).GetObjectTagging), input) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteRole", reflect.TypeOf((*MockClient)(nil).DeleteRole), input) } -// GetOpenIDConnectProvider mocks base method. -func (m *MockClient) GetOpenIDConnectProvider(input *iam.GetOpenIDConnectProviderInput) (*iam.GetOpenIDConnectProviderOutput, error) { +// ListRolePolicies mocks base method. +func (m *MockClient) ListRolePolicies(input *iam.ListRolePoliciesInput) (*iam.ListRolePoliciesOutput, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetOpenIDConnectProvider", input) - ret0, _ := ret[0].(*iam.GetOpenIDConnectProviderOutput) + ret := m.ctrl.Call(m, "ListRolePolicies", input) + ret0, _ := ret[0].(*iam.ListRolePoliciesOutput) ret1, _ := ret[1].(error) return ret0, ret1 } -// GetOpenIDConnectProvider indicates an expected call of GetOpenIDConnectProvider. -func (mr *MockClientMockRecorder) GetOpenIDConnectProvider(input interface{}) *gomock.Call { +// ListRolePolicies indicates an expected call of ListRolePolicies. +func (mr *MockClientMockRecorder) ListRolePolicies(input interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetOpenIDConnectProvider", reflect.TypeOf((*MockClient)(nil).GetOpenIDConnectProvider), input) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListRolePolicies", reflect.TypeOf((*MockClient)(nil).ListRolePolicies), input) } -// GetRole mocks base method. -func (m *MockClient) GetRole(input *iam.GetRoleInput) (*iam.GetRoleOutput, error) { +// DeleteRolePolicy mocks base method. +func (m *MockClient) DeleteRolePolicy(input *iam.DeleteRolePolicyInput) (*iam.DeleteRolePolicyOutput, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetRole", input) - ret0, _ := ret[0].(*iam.GetRoleOutput) + ret := m.ctrl.Call(m, "DeleteRolePolicy", input) + ret0, _ := ret[0].(*iam.DeleteRolePolicyOutput) ret1, _ := ret[1].(error) return ret0, ret1 } -// GetRole indicates an expected call of GetRole. -func (mr *MockClientMockRecorder) GetRole(input interface{}) *gomock.Call { +// DeleteRolePolicy indicates an expected call of DeleteRolePolicy. +func (mr *MockClientMockRecorder) DeleteRolePolicy(input interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetRole", reflect.TypeOf((*MockClient)(nil).GetRole), input) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteRolePolicy", reflect.TypeOf((*MockClient)(nil).DeleteRolePolicy), input) } // GetUser mocks base method. @@ -335,21 +275,6 @@ func (mr *MockClientMockRecorder) ListAccessKeys(arg0 interface{}) *gomock.Call return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListAccessKeys", reflect.TypeOf((*MockClient)(nil).ListAccessKeys), arg0) } -// ListObjects mocks base method. -func (m *MockClient) ListObjects(input *s3.ListObjectsInput) (*s3.ListObjectsOutput, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ListObjects", input) - ret0, _ := ret[0].(*s3.ListObjectsOutput) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// ListObjects indicates an expected call of ListObjects. -func (mr *MockClientMockRecorder) ListObjects(input interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListObjects", reflect.TypeOf((*MockClient)(nil).ListObjects), input) -} - // ListOpenIDConnectProviders mocks base method. func (m *MockClient) ListOpenIDConnectProviders(arg0 *iam.ListOpenIDConnectProvidersInput) (*iam.ListOpenIDConnectProvidersOutput, error) { m.ctrl.T.Helper() @@ -365,34 +290,19 @@ func (mr *MockClientMockRecorder) ListOpenIDConnectProviders(arg0 interface{}) * return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListOpenIDConnectProviders", reflect.TypeOf((*MockClient)(nil).ListOpenIDConnectProviders), arg0) } -// ListRolePolicies mocks base method. -func (m *MockClient) ListRolePolicies(input *iam.ListRolePoliciesInput) (*iam.ListRolePoliciesOutput, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ListRolePolicies", input) - ret0, _ := ret[0].(*iam.ListRolePoliciesOutput) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// ListRolePolicies indicates an expected call of ListRolePolicies. -func (mr *MockClientMockRecorder) ListRolePolicies(input interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListRolePolicies", reflect.TypeOf((*MockClient)(nil).ListRolePolicies), input) -} - -// ListRoles mocks base method. -func (m *MockClient) ListRoles(input *iam.ListRolesInput) (*iam.ListRolesOutput, error) { +// DeleteOpenIDConnectProvider mocks base method. +func (m *MockClient) DeleteOpenIDConnectProvider(input *iam.DeleteOpenIDConnectProviderInput) (*iam.DeleteOpenIDConnectProviderOutput, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ListRoles", input) - ret0, _ := ret[0].(*iam.ListRolesOutput) + ret := m.ctrl.Call(m, "DeleteOpenIDConnectProvider", input) + ret0, _ := ret[0].(*iam.DeleteOpenIDConnectProviderOutput) ret1, _ := ret[1].(error) return ret0, ret1 } -// ListRoles indicates an expected call of ListRoles. -func (mr *MockClientMockRecorder) ListRoles(input interface{}) *gomock.Call { +// DeleteOpenIDConnectProvider indicates an expected call of DeleteOpenIDConnectProvider. +func (mr *MockClientMockRecorder) DeleteOpenIDConnectProvider(input interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListRoles", reflect.TypeOf((*MockClient)(nil).ListRoles), input) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteOpenIDConnectProvider", reflect.TypeOf((*MockClient)(nil).DeleteOpenIDConnectProvider), input) } // ListUserPolicies mocks base method. @@ -410,36 +320,6 @@ func (mr *MockClientMockRecorder) ListUserPolicies(arg0 interface{}) *gomock.Cal return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListUserPolicies", reflect.TypeOf((*MockClient)(nil).ListUserPolicies), arg0) } -// PutBucketTagging mocks base method. -func (m *MockClient) PutBucketTagging(arg0 *s3.PutBucketTaggingInput) (*s3.PutBucketTaggingOutput, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "PutBucketTagging", arg0) - ret0, _ := ret[0].(*s3.PutBucketTaggingOutput) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// PutBucketTagging indicates an expected call of PutBucketTagging. -func (mr *MockClientMockRecorder) PutBucketTagging(arg0 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PutBucketTagging", reflect.TypeOf((*MockClient)(nil).PutBucketTagging), arg0) -} - -// PutObject mocks base method. -func (m *MockClient) PutObject(arg0 *s3.PutObjectInput) (*s3.PutObjectOutput, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "PutObject", arg0) - ret0, _ := ret[0].(*s3.PutObjectOutput) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// PutObject indicates an expected call of PutObject. -func (mr *MockClientMockRecorder) PutObject(arg0 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PutObject", reflect.TypeOf((*MockClient)(nil).PutObject), arg0) -} - // PutRolePolicy mocks base method. func (m *MockClient) PutRolePolicy(arg0 *iam.PutRolePolicyInput) (*iam.PutRolePolicyOutput, error) { m.ctrl.T.Helper() @@ -543,3 +423,123 @@ func (mr *MockClientMockRecorder) UpdateAssumeRolePolicy(arg0 interface{}) *gomo mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateAssumeRolePolicy", reflect.TypeOf((*MockClient)(nil).UpdateAssumeRolePolicy), arg0) } + +// CreateBucket mocks base method. +func (m *MockClient) CreateBucket(arg0 *s3.CreateBucketInput) (*s3.CreateBucketOutput, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CreateBucket", arg0) + ret0, _ := ret[0].(*s3.CreateBucketOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// CreateBucket indicates an expected call of CreateBucket. +func (mr *MockClientMockRecorder) CreateBucket(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateBucket", reflect.TypeOf((*MockClient)(nil).CreateBucket), arg0) +} + +// PutBucketTagging mocks base method. +func (m *MockClient) PutBucketTagging(arg0 *s3.PutBucketTaggingInput) (*s3.PutBucketTaggingOutput, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PutBucketTagging", arg0) + ret0, _ := ret[0].(*s3.PutBucketTaggingOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PutBucketTagging indicates an expected call of PutBucketTagging. +func (mr *MockClientMockRecorder) PutBucketTagging(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PutBucketTagging", reflect.TypeOf((*MockClient)(nil).PutBucketTagging), arg0) +} + +// GetBucketTagging mocks base method. +func (m *MockClient) GetBucketTagging(input *s3.GetBucketTaggingInput) (*s3.GetBucketTaggingOutput, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetBucketTagging", input) + ret0, _ := ret[0].(*s3.GetBucketTaggingOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetBucketTagging indicates an expected call of GetBucketTagging. +func (mr *MockClientMockRecorder) GetBucketTagging(input interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetBucketTagging", reflect.TypeOf((*MockClient)(nil).GetBucketTagging), input) +} + +// DeleteBucket mocks base method. +func (m *MockClient) DeleteBucket(input *s3.DeleteBucketInput) (*s3.DeleteBucketOutput, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteBucket", input) + ret0, _ := ret[0].(*s3.DeleteBucketOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// DeleteBucket indicates an expected call of DeleteBucket. +func (mr *MockClientMockRecorder) DeleteBucket(input interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteBucket", reflect.TypeOf((*MockClient)(nil).DeleteBucket), input) +} + +// PutObject mocks base method. +func (m *MockClient) PutObject(arg0 *s3.PutObjectInput) (*s3.PutObjectOutput, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PutObject", arg0) + ret0, _ := ret[0].(*s3.PutObjectOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PutObject indicates an expected call of PutObject. +func (mr *MockClientMockRecorder) PutObject(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PutObject", reflect.TypeOf((*MockClient)(nil).PutObject), arg0) +} + +// ListObjects mocks base method. +func (m *MockClient) ListObjects(input *s3.ListObjectsInput) (*s3.ListObjectsOutput, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ListObjects", input) + ret0, _ := ret[0].(*s3.ListObjectsOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ListObjects indicates an expected call of ListObjects. +func (mr *MockClientMockRecorder) ListObjects(input interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListObjects", reflect.TypeOf((*MockClient)(nil).ListObjects), input) +} + +// GetObjectTagging mocks base method. +func (m *MockClient) GetObjectTagging(input *s3.GetObjectTaggingInput) (*s3.GetObjectTaggingOutput, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetObjectTagging", input) + ret0, _ := ret[0].(*s3.GetObjectTaggingOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetObjectTagging indicates an expected call of GetObjectTagging. +func (mr *MockClientMockRecorder) GetObjectTagging(input interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetObjectTagging", reflect.TypeOf((*MockClient)(nil).GetObjectTagging), input) +} + +// DeleteObject mocks base method. +func (m *MockClient) DeleteObject(input *s3.DeleteObjectInput) (*s3.DeleteObjectOutput, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteObject", input) + ret0, _ := ret[0].(*s3.DeleteObjectOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// DeleteObject indicates an expected call of DeleteObject. +func (mr *MockClientMockRecorder) DeleteObject(input interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteObject", reflect.TypeOf((*MockClient)(nil).DeleteObject), input) +} diff --git a/pkg/azure/mock/client_generated.go b/pkg/azure/mock/client_generated.go index 9180e372f1..5db1974e8c 100644 --- a/pkg/azure/mock/client_generated.go +++ b/pkg/azure/mock/client_generated.go @@ -35,20 +35,6 @@ func (m *MockAppClient) EXPECT() *MockAppClientMockRecorder { return m.recorder } -// Delete mocks base method. -func (m *MockAppClient) Delete(ctx context.Context, applicationObjectID string) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Delete", ctx, applicationObjectID) - ret0, _ := ret[0].(error) - return ret0 -} - -// Delete indicates an expected call of Delete. -func (mr *MockAppClientMockRecorder) Delete(ctx, applicationObjectID interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockAppClient)(nil).Delete), ctx, applicationObjectID) -} - // List mocks base method. func (m *MockAppClient) List(ctx context.Context, filter string) ([]graphrbac.Application, error) { m.ctrl.T.Helper() @@ -63,3 +49,17 @@ func (mr *MockAppClientMockRecorder) List(ctx, filter interface{}) *gomock.Call mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "List", reflect.TypeOf((*MockAppClient)(nil).List), ctx, filter) } + +// Delete mocks base method. +func (m *MockAppClient) Delete(ctx context.Context, applicationObjectID string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Delete", ctx, applicationObjectID) + ret0, _ := ret[0].(error) + return ret0 +} + +// Delete indicates an expected call of Delete. +func (mr *MockAppClientMockRecorder) Delete(ctx, applicationObjectID interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockAppClient)(nil).Delete), ctx, applicationObjectID) +} diff --git a/pkg/cmd/provisioning/nutanix/create_shared_secrets.go b/pkg/cmd/provisioning/nutanix/create_shared_secrets.go new file mode 100644 index 0000000000..0ad37f0bed --- /dev/null +++ b/pkg/cmd/provisioning/nutanix/create_shared_secrets.go @@ -0,0 +1,182 @@ +package nutanix + +import ( + "encoding/base64" + "fmt" + "io/ioutil" + "log" + "os" + "path/filepath" + + "github.com/pkg/errors" + "github.com/spf13/cobra" + + credreqv1 "github.com/openshift/cloud-credential-operator/pkg/apis/cloudcredential/v1" + "github.com/openshift/cloud-credential-operator/pkg/cmd/provisioning" +) + +const ( + manifestsDirName = "manifests" + + secretManifestsTemplate = `apiVersion: v1 +kind: Secret +metadata: + name: %s + namespace: %s +type: Opaque +data: + NUTANIX_ENDPOINT: %s + NUTANIX_PORT: %s + NUTANIX_USER: %s + NUTANIX_PASSWORD: %s` + + endpointKeyEnvVar = "NUTANIX_ENDPOINT" + usernameKeyEnvVar = "NUTANIX_USER" + passwordKeyEnvVar = "NUTANIX_PASSWORD" + portKeyEnvVar = "NUTANIX_PORT" +) + +type Credentials struct { + NutanixEndpoint string `json:"NUTANIX_ENDPOINT"` + NutanixUser string `json:"NUTANIX_USER"` + NutanixPassword string `json:"NUTANIX_PASSWORD"` + NutanixPort string `json:"NUTANIX_PORT"` +} + +var ( + // CreateSharedSecretsOpts captures the options that affect creation of the generated + // objects. + CreateSharedSecretsOpts = options{ + TargetDir: "", + EnableTechPreview: false, + } +) + +// createSharedSecretsCmd implements the "create-secrets" command for the credentials provisioning +func createSharedSecretsCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "create-shared-secrets", + Short: "Create credentials objects", + Long: "Creating objects related to cloud credentials", + RunE: createSecretsCmd, + PersistentPreRun: initEnvForCreateCmd, + } + + cmd.PersistentFlags().StringVar(&CreateSharedSecretsOpts.CredRequestDir, "credentials-requests-dir", "", "Directory containing files of CredentialsRequests (can be created by running 'oc adm release extract --credentials-requests --cloud=nutanix' against an OpenShift release image)") + cmd.MarkPersistentFlagRequired("credentials-requests-dir") + cmd.PersistentFlags().StringVar(&CreateSharedSecretsOpts.TargetDir, "output-dir", "", "Directory to place generated files (defaults to current directory)") + cmd.PersistentFlags().BoolVar(&CreateSharedSecretsOpts.EnableTechPreview, "enable-tech-preview", false, "Opt into processing CredentialsRequests marked as tech-preview") + + return cmd +} + +func createSecretsCmd(cmd *cobra.Command, args []string) error { + endpoint := os.Getenv(endpointKeyEnvVar) + if endpoint == "" { + return fmt.Errorf("%s environment variable not set", endpointKeyEnvVar) + } + port := os.Getenv(portKeyEnvVar) + if port == "" { + return fmt.Errorf("%s environment variable not set", portKeyEnvVar) + } + uname := os.Getenv(usernameKeyEnvVar) + if uname == "" { + return fmt.Errorf("%s environment variable not set", usernameKeyEnvVar) + } + pass := os.Getenv(passwordKeyEnvVar) + if pass == "" { + return fmt.Errorf("%s environment variable not set", passwordKeyEnvVar) + } + + err := createSecrets(CreateSharedSecretsOpts.CredRequestDir, CreateSharedSecretsOpts.TargetDir, endpoint, port, uname, pass, CreateSharedSecretsOpts.EnableTechPreview) + if err != nil { + return errors.Wrap(err, "Failed to create credentials secrets") + } + return nil +} + +func createSecrets(credReqDir, targetDir, endpoint, port, username, password string, enableTechPreview bool) error { + credRequests, err := provisioning.GetListOfCredentialsRequests(credReqDir, enableTechPreview) + if err != nil { + return errors.Wrap(err, "Failed to process files containing CredentialsRequests") + } + + for _, cr := range credRequests { + if err := processCredReq(cr, targetDir, endpoint, port, username, password); err != nil { + return errors.Wrap(err, "Failed to process CredentialsReqeust") + } + } + return nil +} + +func writeCredReqSecret(cr *credreqv1.CredentialsRequest, targetDir, endpoint, port, username, password string) error { + manifestsDir := filepath.Join(targetDir, manifestsDirName) + + fileName := fmt.Sprintf("%s-%s-credentials.yaml", cr.Spec.SecretRef.Namespace, cr.Spec.SecretRef.Name) + filePath := filepath.Join(manifestsDir, fileName) + + b64Endpoint := base64.StdEncoding.EncodeToString([]byte(endpoint)) + b64Port := base64.StdEncoding.EncodeToString([]byte(port)) + b64Username := base64.StdEncoding.EncodeToString([]byte(username)) + b64Password := base64.StdEncoding.EncodeToString([]byte(password)) + + fileData := fmt.Sprintf(secretManifestsTemplate, cr.Spec.SecretRef.Name, cr.Spec.SecretRef.Namespace, b64Endpoint, b64Port, b64Username, b64Password) + + if err := ioutil.WriteFile(filePath, []byte(fileData), 0600); err != nil { + return errors.Wrap(err, "Failed to save Secret file") + } + + log.Printf("Saved credentials configuration to: %s", filePath) + + return nil +} + +func processCredReq(cr *credreqv1.CredentialsRequest, targetDir, endpoint, port, username, password string) error { + // Decode NutanixProviderSpec + codec, err := credreqv1.NewCodec() + if err != nil { + return errors.Wrap(err, "Failed to create credReq codec") + } + + nutanixProviderSpec := credreqv1.NutanixProviderSpec{} + if err := codec.DecodeProviderSpec(cr.Spec.ProviderSpec, &nutanixProviderSpec); err != nil { + return errors.Wrap(err, "Failed to decode the provider spec") + } + + if nutanixProviderSpec.Kind != "NutanixProviderSpec" { + return fmt.Errorf("CredentialsRequest %s/%s is not of type Nutanix", cr.Namespace, cr.Name) + } + + return writeCredReqSecret(cr, targetDir, endpoint, port, username, password) +} + +// initEnvForCreateCmd will ensure the destination directory is ready to +// receive the generated files, and will create the directory if necessary. +func initEnvForCreateCmd(cmd *cobra.Command, args []string) { + if CreateSharedSecretsOpts.TargetDir == "" { + pwd, err := os.Getwd() + if err != nil { + log.Fatalf("Failed to get current directory: %s", err) + } + + CreateSharedSecretsOpts.TargetDir = pwd + } + + fPath, err := filepath.Abs(CreateSharedSecretsOpts.TargetDir) + if err != nil { + log.Fatalf("Failed to resolve full path: %s", err) + } + + // create target dir if necessary + err = provisioning.EnsureDir(fPath) + if err != nil { + log.Fatalf("failed to create target directory at %s", fPath) + } + + // create manifests dir if necessary + manifestsDir := filepath.Join(fPath, manifestsDirName) + err = provisioning.EnsureDir(manifestsDir) + if err != nil { + log.Fatalf("failed to create manifests directory at %s", manifestsDir) + } +} diff --git a/pkg/cmd/provisioning/nutanix/nutanix.go b/pkg/cmd/provisioning/nutanix/nutanix.go new file mode 100644 index 0000000000..b77f3a4f59 --- /dev/null +++ b/pkg/cmd/provisioning/nutanix/nutanix.go @@ -0,0 +1,24 @@ +package nutanix + +import ( + "github.com/spf13/cobra" +) + +type options struct { + TargetDir string + CredRequestDir string + EnableTechPreview bool +} + +// NewNutanixCmd implements the "nutanix" subcommand for the credentials provisioning +func NewNutanixCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "nutanix", + Short: "Manage credentials objects for Nutanix", + Long: "Creating cloud credentials objects for Nutanix", + } + + cmd.AddCommand(createSharedSecretsCmd()) + + return cmd +} diff --git a/pkg/gcp/mock/client_generated.go b/pkg/gcp/mock/client_generated.go index 125862c9e7..99dfb24297 100644 --- a/pkg/gcp/mock/client_generated.go +++ b/pkg/gcp/mock/client_generated.go @@ -39,20 +39,6 @@ func (m *MockClient) EXPECT() *MockClientMockRecorder { return m.recorder } -// CreateBucket mocks base method. -func (m *MockClient) CreateBucket(arg0 context.Context, arg1, arg2 string, arg3 *storage.BucketAttrs) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CreateBucket", arg0, arg1, arg2, arg3) - ret0, _ := ret[0].(error) - return ret0 -} - -// CreateBucket indicates an expected call of CreateBucket. -func (mr *MockClientMockRecorder) CreateBucket(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateBucket", reflect.TypeOf((*MockClient)(nil).CreateBucket), arg0, arg1, arg2, arg3) -} - // CreateServiceAccount mocks base method. func (m *MockClient) CreateServiceAccount(arg0 context.Context, arg1 *admin.CreateServiceAccountRequest) (*admin.ServiceAccount, error) { m.ctrl.T.Helper() @@ -83,64 +69,6 @@ func (mr *MockClientMockRecorder) CreateServiceAccountKey(arg0, arg1 interface{} return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateServiceAccountKey", reflect.TypeOf((*MockClient)(nil).CreateServiceAccountKey), arg0, arg1) } -// CreateWorkloadIdentityPool mocks base method. -func (m *MockClient) CreateWorkloadIdentityPool(arg0 context.Context, arg1, arg2 string, arg3 *iam0.WorkloadIdentityPool) (*iam0.Operation, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CreateWorkloadIdentityPool", arg0, arg1, arg2, arg3) - ret0, _ := ret[0].(*iam0.Operation) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// CreateWorkloadIdentityPool indicates an expected call of CreateWorkloadIdentityPool. -func (mr *MockClientMockRecorder) CreateWorkloadIdentityPool(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateWorkloadIdentityPool", reflect.TypeOf((*MockClient)(nil).CreateWorkloadIdentityPool), arg0, arg1, arg2, arg3) -} - -// CreateWorkloadIdentityProvider mocks base method. -func (m *MockClient) CreateWorkloadIdentityProvider(arg0 context.Context, arg1, arg2 string, arg3 *iam0.WorkloadIdentityPoolProvider) (*iam0.Operation, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CreateWorkloadIdentityProvider", arg0, arg1, arg2, arg3) - ret0, _ := ret[0].(*iam0.Operation) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// CreateWorkloadIdentityProvider indicates an expected call of CreateWorkloadIdentityProvider. -func (mr *MockClientMockRecorder) CreateWorkloadIdentityProvider(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateWorkloadIdentityProvider", reflect.TypeOf((*MockClient)(nil).CreateWorkloadIdentityProvider), arg0, arg1, arg2, arg3) -} - -// DeleteBucket mocks base method. -func (m *MockClient) DeleteBucket(arg0 context.Context, arg1 string) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DeleteBucket", arg0, arg1) - ret0, _ := ret[0].(error) - return ret0 -} - -// DeleteBucket indicates an expected call of DeleteBucket. -func (mr *MockClientMockRecorder) DeleteBucket(arg0, arg1 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteBucket", reflect.TypeOf((*MockClient)(nil).DeleteBucket), arg0, arg1) -} - -// DeleteObject mocks base method. -func (m *MockClient) DeleteObject(arg0 context.Context, arg1, arg2 string) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DeleteObject", arg0, arg1, arg2) - ret0, _ := ret[0].(error) - return ret0 -} - -// DeleteObject indicates an expected call of DeleteObject. -func (mr *MockClientMockRecorder) DeleteObject(arg0, arg1, arg2 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteObject", reflect.TypeOf((*MockClient)(nil).DeleteObject), arg0, arg1, arg2) -} - // DeleteServiceAccount mocks base method. func (m *MockClient) DeleteServiceAccount(arg0 context.Context, arg1 *admin.DeleteServiceAccountRequest) error { m.ctrl.T.Helper() @@ -169,153 +97,154 @@ func (mr *MockClientMockRecorder) DeleteServiceAccountKey(arg0, arg1 interface{} return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteServiceAccountKey", reflect.TypeOf((*MockClient)(nil).DeleteServiceAccountKey), arg0, arg1) } -// DeleteWorkloadIdentityPool mocks base method. -func (m *MockClient) DeleteWorkloadIdentityPool(arg0 context.Context, arg1 string) (*iam0.Operation, error) { +// GetRole mocks base method. +func (m *MockClient) GetRole(arg0 context.Context, arg1 *admin.GetRoleRequest) (*admin.Role, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DeleteWorkloadIdentityPool", arg0, arg1) - ret0, _ := ret[0].(*iam0.Operation) + ret := m.ctrl.Call(m, "GetRole", arg0, arg1) + ret0, _ := ret[0].(*admin.Role) ret1, _ := ret[1].(error) return ret0, ret1 } -// DeleteWorkloadIdentityPool indicates an expected call of DeleteWorkloadIdentityPool. -func (mr *MockClientMockRecorder) DeleteWorkloadIdentityPool(arg0, arg1 interface{}) *gomock.Call { +// GetRole indicates an expected call of GetRole. +func (mr *MockClientMockRecorder) GetRole(arg0, arg1 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteWorkloadIdentityPool", reflect.TypeOf((*MockClient)(nil).DeleteWorkloadIdentityPool), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetRole", reflect.TypeOf((*MockClient)(nil).GetRole), arg0, arg1) } -// GetBucketAttrs mocks base method. -func (m *MockClient) GetBucketAttrs(arg0 context.Context, arg1 string) (*storage.BucketAttrs, error) { +// GetServiceAccount mocks base method. +func (m *MockClient) GetServiceAccount(arg0 context.Context, arg1 *admin.GetServiceAccountRequest) (*admin.ServiceAccount, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetBucketAttrs", arg0, arg1) - ret0, _ := ret[0].(*storage.BucketAttrs) + ret := m.ctrl.Call(m, "GetServiceAccount", arg0, arg1) + ret0, _ := ret[0].(*admin.ServiceAccount) ret1, _ := ret[1].(error) return ret0, ret1 } -// GetBucketAttrs indicates an expected call of GetBucketAttrs. -func (mr *MockClientMockRecorder) GetBucketAttrs(arg0, arg1 interface{}) *gomock.Call { +// GetServiceAccount indicates an expected call of GetServiceAccount. +func (mr *MockClientMockRecorder) GetServiceAccount(arg0, arg1 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetBucketAttrs", reflect.TypeOf((*MockClient)(nil).GetBucketAttrs), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetServiceAccount", reflect.TypeOf((*MockClient)(nil).GetServiceAccount), arg0, arg1) } -// GetBucketPolicy mocks base method. -func (m *MockClient) GetBucketPolicy(arg0 context.Context, arg1 string) (*iam.Policy3, error) { +// ListServiceAccountKeys mocks base method. +func (m *MockClient) ListServiceAccountKeys(arg0 context.Context, arg1 *admin.ListServiceAccountKeysRequest) (*admin.ListServiceAccountKeysResponse, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetBucketPolicy", arg0, arg1) - ret0, _ := ret[0].(*iam.Policy3) + ret := m.ctrl.Call(m, "ListServiceAccountKeys", arg0, arg1) + ret0, _ := ret[0].(*admin.ListServiceAccountKeysResponse) ret1, _ := ret[1].(error) return ret0, ret1 } -// GetBucketPolicy indicates an expected call of GetBucketPolicy. -func (mr *MockClientMockRecorder) GetBucketPolicy(arg0, arg1 interface{}) *gomock.Call { +// ListServiceAccountKeys indicates an expected call of ListServiceAccountKeys. +func (mr *MockClientMockRecorder) ListServiceAccountKeys(arg0, arg1 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetBucketPolicy", reflect.TypeOf((*MockClient)(nil).GetBucketPolicy), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListServiceAccountKeys", reflect.TypeOf((*MockClient)(nil).ListServiceAccountKeys), arg0, arg1) } -// GetProject mocks base method. -func (m *MockClient) GetProject(ctx context.Context, projectName string) (*cloudresourcemanager.Project, error) { +// ListServiceAccounts mocks base method. +func (m *MockClient) ListServiceAccounts(arg0 context.Context, arg1 *admin.ListServiceAccountsRequest) ([]*admin.ServiceAccount, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetProject", ctx, projectName) - ret0, _ := ret[0].(*cloudresourcemanager.Project) + ret := m.ctrl.Call(m, "ListServiceAccounts", arg0, arg1) + ret0, _ := ret[0].([]*admin.ServiceAccount) ret1, _ := ret[1].(error) return ret0, ret1 } -// GetProject indicates an expected call of GetProject. -func (mr *MockClientMockRecorder) GetProject(ctx, projectName interface{}) *gomock.Call { +// ListServiceAccounts indicates an expected call of ListServiceAccounts. +func (mr *MockClientMockRecorder) ListServiceAccounts(arg0, arg1 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetProject", reflect.TypeOf((*MockClient)(nil).GetProject), ctx, projectName) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListServiceAccounts", reflect.TypeOf((*MockClient)(nil).ListServiceAccounts), arg0, arg1) } -// GetProjectIamPolicy mocks base method. -func (m *MockClient) GetProjectIamPolicy(arg0 string, arg1 *cloudresourcemanager.GetIamPolicyRequest) (*cloudresourcemanager.Policy, error) { +// QueryTestablePermissions mocks base method. +func (m *MockClient) QueryTestablePermissions(arg0 context.Context, arg1 *admin.QueryTestablePermissionsRequest) (*admin.QueryTestablePermissionsResponse, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetProjectIamPolicy", arg0, arg1) - ret0, _ := ret[0].(*cloudresourcemanager.Policy) + ret := m.ctrl.Call(m, "QueryTestablePermissions", arg0, arg1) + ret0, _ := ret[0].(*admin.QueryTestablePermissionsResponse) ret1, _ := ret[1].(error) return ret0, ret1 } -// GetProjectIamPolicy indicates an expected call of GetProjectIamPolicy. -func (mr *MockClientMockRecorder) GetProjectIamPolicy(arg0, arg1 interface{}) *gomock.Call { +// QueryTestablePermissions indicates an expected call of QueryTestablePermissions. +func (mr *MockClientMockRecorder) QueryTestablePermissions(arg0, arg1 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetProjectIamPolicy", reflect.TypeOf((*MockClient)(nil).GetProjectIamPolicy), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "QueryTestablePermissions", reflect.TypeOf((*MockClient)(nil).QueryTestablePermissions), arg0, arg1) } -// GetProjectName mocks base method. -func (m *MockClient) GetProjectName() string { +// CreateWorkloadIdentityPool mocks base method. +func (m *MockClient) CreateWorkloadIdentityPool(arg0 context.Context, arg1, arg2 string, arg3 *iam0.WorkloadIdentityPool) (*iam0.Operation, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetProjectName") - ret0, _ := ret[0].(string) - return ret0 + ret := m.ctrl.Call(m, "CreateWorkloadIdentityPool", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(*iam0.Operation) + ret1, _ := ret[1].(error) + return ret0, ret1 } -// GetProjectName indicates an expected call of GetProjectName. -func (mr *MockClientMockRecorder) GetProjectName() *gomock.Call { +// CreateWorkloadIdentityPool indicates an expected call of CreateWorkloadIdentityPool. +func (mr *MockClientMockRecorder) CreateWorkloadIdentityPool(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetProjectName", reflect.TypeOf((*MockClient)(nil).GetProjectName)) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateWorkloadIdentityPool", reflect.TypeOf((*MockClient)(nil).CreateWorkloadIdentityPool), arg0, arg1, arg2, arg3) } -// GetRole mocks base method. -func (m *MockClient) GetRole(arg0 context.Context, arg1 *admin.GetRoleRequest) (*admin.Role, error) { +// GetWorkloadIdentityPool mocks base method. +func (m *MockClient) GetWorkloadIdentityPool(arg0 context.Context, arg1 string) (*iam0.WorkloadIdentityPool, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetRole", arg0, arg1) - ret0, _ := ret[0].(*admin.Role) + ret := m.ctrl.Call(m, "GetWorkloadIdentityPool", arg0, arg1) + ret0, _ := ret[0].(*iam0.WorkloadIdentityPool) ret1, _ := ret[1].(error) return ret0, ret1 } -// GetRole indicates an expected call of GetRole. -func (mr *MockClientMockRecorder) GetRole(arg0, arg1 interface{}) *gomock.Call { +// GetWorkloadIdentityPool indicates an expected call of GetWorkloadIdentityPool. +func (mr *MockClientMockRecorder) GetWorkloadIdentityPool(arg0, arg1 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetRole", reflect.TypeOf((*MockClient)(nil).GetRole), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetWorkloadIdentityPool", reflect.TypeOf((*MockClient)(nil).GetWorkloadIdentityPool), arg0, arg1) } -// GetServiceAccount mocks base method. -func (m *MockClient) GetServiceAccount(arg0 context.Context, arg1 *admin.GetServiceAccountRequest) (*admin.ServiceAccount, error) { +// DeleteWorkloadIdentityPool mocks base method. +func (m *MockClient) DeleteWorkloadIdentityPool(arg0 context.Context, arg1 string) (*iam0.Operation, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetServiceAccount", arg0, arg1) - ret0, _ := ret[0].(*admin.ServiceAccount) + ret := m.ctrl.Call(m, "DeleteWorkloadIdentityPool", arg0, arg1) + ret0, _ := ret[0].(*iam0.Operation) ret1, _ := ret[1].(error) return ret0, ret1 } -// GetServiceAccount indicates an expected call of GetServiceAccount. -func (mr *MockClientMockRecorder) GetServiceAccount(arg0, arg1 interface{}) *gomock.Call { +// DeleteWorkloadIdentityPool indicates an expected call of DeleteWorkloadIdentityPool. +func (mr *MockClientMockRecorder) DeleteWorkloadIdentityPool(arg0, arg1 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetServiceAccount", reflect.TypeOf((*MockClient)(nil).GetServiceAccount), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteWorkloadIdentityPool", reflect.TypeOf((*MockClient)(nil).DeleteWorkloadIdentityPool), arg0, arg1) } -// GetServiceAccountIamPolicy mocks base method. -func (m *MockClient) GetServiceAccountIamPolicy(arg0 string) (*iam0.Policy, error) { +// UndeleteWorkloadIdentityPool mocks base method. +func (m *MockClient) UndeleteWorkloadIdentityPool(arg0 context.Context, arg1 string, arg2 *iam0.UndeleteWorkloadIdentityPoolRequest) (*iam0.Operation, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetServiceAccountIamPolicy", arg0) - ret0, _ := ret[0].(*iam0.Policy) + ret := m.ctrl.Call(m, "UndeleteWorkloadIdentityPool", arg0, arg1, arg2) + ret0, _ := ret[0].(*iam0.Operation) ret1, _ := ret[1].(error) return ret0, ret1 } -// GetServiceAccountIamPolicy indicates an expected call of GetServiceAccountIamPolicy. -func (mr *MockClientMockRecorder) GetServiceAccountIamPolicy(arg0 interface{}) *gomock.Call { +// UndeleteWorkloadIdentityPool indicates an expected call of UndeleteWorkloadIdentityPool. +func (mr *MockClientMockRecorder) UndeleteWorkloadIdentityPool(arg0, arg1, arg2 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetServiceAccountIamPolicy", reflect.TypeOf((*MockClient)(nil).GetServiceAccountIamPolicy), arg0) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UndeleteWorkloadIdentityPool", reflect.TypeOf((*MockClient)(nil).UndeleteWorkloadIdentityPool), arg0, arg1, arg2) } -// GetWorkloadIdentityPool mocks base method. -func (m *MockClient) GetWorkloadIdentityPool(arg0 context.Context, arg1 string) (*iam0.WorkloadIdentityPool, error) { +// CreateWorkloadIdentityProvider mocks base method. +func (m *MockClient) CreateWorkloadIdentityProvider(arg0 context.Context, arg1, arg2 string, arg3 *iam0.WorkloadIdentityPoolProvider) (*iam0.Operation, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetWorkloadIdentityPool", arg0, arg1) - ret0, _ := ret[0].(*iam0.WorkloadIdentityPool) + ret := m.ctrl.Call(m, "CreateWorkloadIdentityProvider", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(*iam0.Operation) ret1, _ := ret[1].(error) return ret0, ret1 } -// GetWorkloadIdentityPool indicates an expected call of GetWorkloadIdentityPool. -func (mr *MockClientMockRecorder) GetWorkloadIdentityPool(arg0, arg1 interface{}) *gomock.Call { +// CreateWorkloadIdentityProvider indicates an expected call of CreateWorkloadIdentityProvider. +func (mr *MockClientMockRecorder) CreateWorkloadIdentityProvider(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetWorkloadIdentityPool", reflect.TypeOf((*MockClient)(nil).GetWorkloadIdentityPool), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateWorkloadIdentityProvider", reflect.TypeOf((*MockClient)(nil).CreateWorkloadIdentityProvider), arg0, arg1, arg2, arg3) } // GetWorkloadIdentityProvider mocks base method. @@ -333,49 +262,108 @@ func (mr *MockClientMockRecorder) GetWorkloadIdentityProvider(arg0, arg1 interfa return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetWorkloadIdentityProvider", reflect.TypeOf((*MockClient)(nil).GetWorkloadIdentityProvider), arg0, arg1) } -// ListObjects mocks base method. -func (m *MockClient) ListObjects(arg0 context.Context, arg1 string) ([]*storage.ObjectAttrs, error) { +// GetProjectName mocks base method. +func (m *MockClient) GetProjectName() string { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ListObjects", arg0, arg1) - ret0, _ := ret[0].([]*storage.ObjectAttrs) + ret := m.ctrl.Call(m, "GetProjectName") + ret0, _ := ret[0].(string) + return ret0 +} + +// GetProjectName indicates an expected call of GetProjectName. +func (mr *MockClientMockRecorder) GetProjectName() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetProjectName", reflect.TypeOf((*MockClient)(nil).GetProjectName)) +} + +// GetProject mocks base method. +func (m *MockClient) GetProject(ctx context.Context, projectName string) (*cloudresourcemanager.Project, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetProject", ctx, projectName) + ret0, _ := ret[0].(*cloudresourcemanager.Project) ret1, _ := ret[1].(error) return ret0, ret1 } -// ListObjects indicates an expected call of ListObjects. -func (mr *MockClientMockRecorder) ListObjects(arg0, arg1 interface{}) *gomock.Call { +// GetProject indicates an expected call of GetProject. +func (mr *MockClientMockRecorder) GetProject(ctx, projectName interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListObjects", reflect.TypeOf((*MockClient)(nil).ListObjects), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetProject", reflect.TypeOf((*MockClient)(nil).GetProject), ctx, projectName) } -// ListServiceAccountKeys mocks base method. -func (m *MockClient) ListServiceAccountKeys(arg0 context.Context, arg1 *admin.ListServiceAccountKeysRequest) (*admin.ListServiceAccountKeysResponse, error) { +// GetProjectIamPolicy mocks base method. +func (m *MockClient) GetProjectIamPolicy(arg0 string, arg1 *cloudresourcemanager.GetIamPolicyRequest) (*cloudresourcemanager.Policy, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ListServiceAccountKeys", arg0, arg1) - ret0, _ := ret[0].(*admin.ListServiceAccountKeysResponse) + ret := m.ctrl.Call(m, "GetProjectIamPolicy", arg0, arg1) + ret0, _ := ret[0].(*cloudresourcemanager.Policy) ret1, _ := ret[1].(error) return ret0, ret1 } -// ListServiceAccountKeys indicates an expected call of ListServiceAccountKeys. -func (mr *MockClientMockRecorder) ListServiceAccountKeys(arg0, arg1 interface{}) *gomock.Call { +// GetProjectIamPolicy indicates an expected call of GetProjectIamPolicy. +func (mr *MockClientMockRecorder) GetProjectIamPolicy(arg0, arg1 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListServiceAccountKeys", reflect.TypeOf((*MockClient)(nil).ListServiceAccountKeys), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetProjectIamPolicy", reflect.TypeOf((*MockClient)(nil).GetProjectIamPolicy), arg0, arg1) } -// ListServiceAccounts mocks base method. -func (m *MockClient) ListServiceAccounts(arg0 context.Context, arg1 *admin.ListServiceAccountsRequest) ([]*admin.ServiceAccount, error) { +// SetProjectIamPolicy mocks base method. +func (m *MockClient) SetProjectIamPolicy(arg0 string, arg1 *cloudresourcemanager.SetIamPolicyRequest) (*cloudresourcemanager.Policy, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ListServiceAccounts", arg0, arg1) - ret0, _ := ret[0].([]*admin.ServiceAccount) + ret := m.ctrl.Call(m, "SetProjectIamPolicy", arg0, arg1) + ret0, _ := ret[0].(*cloudresourcemanager.Policy) ret1, _ := ret[1].(error) return ret0, ret1 } -// ListServiceAccounts indicates an expected call of ListServiceAccounts. -func (mr *MockClientMockRecorder) ListServiceAccounts(arg0, arg1 interface{}) *gomock.Call { +// SetProjectIamPolicy indicates an expected call of SetProjectIamPolicy. +func (mr *MockClientMockRecorder) SetProjectIamPolicy(arg0, arg1 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListServiceAccounts", reflect.TypeOf((*MockClient)(nil).ListServiceAccounts), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetProjectIamPolicy", reflect.TypeOf((*MockClient)(nil).SetProjectIamPolicy), arg0, arg1) +} + +// GetServiceAccountIamPolicy mocks base method. +func (m *MockClient) GetServiceAccountIamPolicy(arg0 string) (*iam0.Policy, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetServiceAccountIamPolicy", arg0) + ret0, _ := ret[0].(*iam0.Policy) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetServiceAccountIamPolicy indicates an expected call of GetServiceAccountIamPolicy. +func (mr *MockClientMockRecorder) GetServiceAccountIamPolicy(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetServiceAccountIamPolicy", reflect.TypeOf((*MockClient)(nil).GetServiceAccountIamPolicy), arg0) +} + +// SetServiceAccountIamPolicy mocks base method. +func (m *MockClient) SetServiceAccountIamPolicy(arg0 string, arg1 *iam0.SetIamPolicyRequest) (*iam0.Policy, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SetServiceAccountIamPolicy", arg0, arg1) + ret0, _ := ret[0].(*iam0.Policy) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SetServiceAccountIamPolicy indicates an expected call of SetServiceAccountIamPolicy. +func (mr *MockClientMockRecorder) SetServiceAccountIamPolicy(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetServiceAccountIamPolicy", reflect.TypeOf((*MockClient)(nil).SetServiceAccountIamPolicy), arg0, arg1) +} + +// TestIamPermissions mocks base method. +func (m *MockClient) TestIamPermissions(arg0 string, arg1 *cloudresourcemanager.TestIamPermissionsRequest) (*cloudresourcemanager.TestIamPermissionsResponse, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "TestIamPermissions", arg0, arg1) + ret0, _ := ret[0].(*cloudresourcemanager.TestIamPermissionsResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// TestIamPermissions indicates an expected call of TestIamPermissions. +func (mr *MockClientMockRecorder) TestIamPermissions(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "TestIamPermissions", reflect.TypeOf((*MockClient)(nil).TestIamPermissions), arg0, arg1) } // ListServicesEnabled mocks base method. @@ -393,33 +381,48 @@ func (mr *MockClientMockRecorder) ListServicesEnabled() *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListServicesEnabled", reflect.TypeOf((*MockClient)(nil).ListServicesEnabled)) } -// PutObject mocks base method. -func (m *MockClient) PutObject(arg0 context.Context, arg1, arg2 string, arg3 []byte) error { +// CreateBucket mocks base method. +func (m *MockClient) CreateBucket(arg0 context.Context, arg1, arg2 string, arg3 *storage.BucketAttrs) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "PutObject", arg0, arg1, arg2, arg3) + ret := m.ctrl.Call(m, "CreateBucket", arg0, arg1, arg2, arg3) ret0, _ := ret[0].(error) return ret0 } -// PutObject indicates an expected call of PutObject. -func (mr *MockClientMockRecorder) PutObject(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { +// CreateBucket indicates an expected call of CreateBucket. +func (mr *MockClientMockRecorder) CreateBucket(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PutObject", reflect.TypeOf((*MockClient)(nil).PutObject), arg0, arg1, arg2, arg3) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateBucket", reflect.TypeOf((*MockClient)(nil).CreateBucket), arg0, arg1, arg2, arg3) } -// QueryTestablePermissions mocks base method. -func (m *MockClient) QueryTestablePermissions(arg0 context.Context, arg1 *admin.QueryTestablePermissionsRequest) (*admin.QueryTestablePermissionsResponse, error) { +// GetBucketAttrs mocks base method. +func (m *MockClient) GetBucketAttrs(arg0 context.Context, arg1 string) (*storage.BucketAttrs, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "QueryTestablePermissions", arg0, arg1) - ret0, _ := ret[0].(*admin.QueryTestablePermissionsResponse) + ret := m.ctrl.Call(m, "GetBucketAttrs", arg0, arg1) + ret0, _ := ret[0].(*storage.BucketAttrs) ret1, _ := ret[1].(error) return ret0, ret1 } -// QueryTestablePermissions indicates an expected call of QueryTestablePermissions. -func (mr *MockClientMockRecorder) QueryTestablePermissions(arg0, arg1 interface{}) *gomock.Call { +// GetBucketAttrs indicates an expected call of GetBucketAttrs. +func (mr *MockClientMockRecorder) GetBucketAttrs(arg0, arg1 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "QueryTestablePermissions", reflect.TypeOf((*MockClient)(nil).QueryTestablePermissions), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetBucketAttrs", reflect.TypeOf((*MockClient)(nil).GetBucketAttrs), arg0, arg1) +} + +// GetBucketPolicy mocks base method. +func (m *MockClient) GetBucketPolicy(arg0 context.Context, arg1 string) (*iam.Policy3, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetBucketPolicy", arg0, arg1) + ret0, _ := ret[0].(*iam.Policy3) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetBucketPolicy indicates an expected call of GetBucketPolicy. +func (mr *MockClientMockRecorder) GetBucketPolicy(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetBucketPolicy", reflect.TypeOf((*MockClient)(nil).GetBucketPolicy), arg0, arg1) } // SetBucketPolicy mocks base method. @@ -436,62 +439,59 @@ func (mr *MockClientMockRecorder) SetBucketPolicy(arg0, arg1, arg2 interface{}) return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetBucketPolicy", reflect.TypeOf((*MockClient)(nil).SetBucketPolicy), arg0, arg1, arg2) } -// SetProjectIamPolicy mocks base method. -func (m *MockClient) SetProjectIamPolicy(arg0 string, arg1 *cloudresourcemanager.SetIamPolicyRequest) (*cloudresourcemanager.Policy, error) { +// DeleteBucket mocks base method. +func (m *MockClient) DeleteBucket(arg0 context.Context, arg1 string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "SetProjectIamPolicy", arg0, arg1) - ret0, _ := ret[0].(*cloudresourcemanager.Policy) - ret1, _ := ret[1].(error) - return ret0, ret1 + ret := m.ctrl.Call(m, "DeleteBucket", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 } -// SetProjectIamPolicy indicates an expected call of SetProjectIamPolicy. -func (mr *MockClientMockRecorder) SetProjectIamPolicy(arg0, arg1 interface{}) *gomock.Call { +// DeleteBucket indicates an expected call of DeleteBucket. +func (mr *MockClientMockRecorder) DeleteBucket(arg0, arg1 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetProjectIamPolicy", reflect.TypeOf((*MockClient)(nil).SetProjectIamPolicy), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteBucket", reflect.TypeOf((*MockClient)(nil).DeleteBucket), arg0, arg1) } -// SetServiceAccountIamPolicy mocks base method. -func (m *MockClient) SetServiceAccountIamPolicy(arg0 string, arg1 *iam0.SetIamPolicyRequest) (*iam0.Policy, error) { +// ListObjects mocks base method. +func (m *MockClient) ListObjects(arg0 context.Context, arg1 string) ([]*storage.ObjectAttrs, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "SetServiceAccountIamPolicy", arg0, arg1) - ret0, _ := ret[0].(*iam0.Policy) + ret := m.ctrl.Call(m, "ListObjects", arg0, arg1) + ret0, _ := ret[0].([]*storage.ObjectAttrs) ret1, _ := ret[1].(error) return ret0, ret1 } -// SetServiceAccountIamPolicy indicates an expected call of SetServiceAccountIamPolicy. -func (mr *MockClientMockRecorder) SetServiceAccountIamPolicy(arg0, arg1 interface{}) *gomock.Call { +// ListObjects indicates an expected call of ListObjects. +func (mr *MockClientMockRecorder) ListObjects(arg0, arg1 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetServiceAccountIamPolicy", reflect.TypeOf((*MockClient)(nil).SetServiceAccountIamPolicy), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListObjects", reflect.TypeOf((*MockClient)(nil).ListObjects), arg0, arg1) } -// TestIamPermissions mocks base method. -func (m *MockClient) TestIamPermissions(arg0 string, arg1 *cloudresourcemanager.TestIamPermissionsRequest) (*cloudresourcemanager.TestIamPermissionsResponse, error) { +// PutObject mocks base method. +func (m *MockClient) PutObject(arg0 context.Context, arg1, arg2 string, arg3 []byte) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "TestIamPermissions", arg0, arg1) - ret0, _ := ret[0].(*cloudresourcemanager.TestIamPermissionsResponse) - ret1, _ := ret[1].(error) - return ret0, ret1 + ret := m.ctrl.Call(m, "PutObject", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(error) + return ret0 } -// TestIamPermissions indicates an expected call of TestIamPermissions. -func (mr *MockClientMockRecorder) TestIamPermissions(arg0, arg1 interface{}) *gomock.Call { +// PutObject indicates an expected call of PutObject. +func (mr *MockClientMockRecorder) PutObject(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "TestIamPermissions", reflect.TypeOf((*MockClient)(nil).TestIamPermissions), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PutObject", reflect.TypeOf((*MockClient)(nil).PutObject), arg0, arg1, arg2, arg3) } -// UndeleteWorkloadIdentityPool mocks base method. -func (m *MockClient) UndeleteWorkloadIdentityPool(arg0 context.Context, arg1 string, arg2 *iam0.UndeleteWorkloadIdentityPoolRequest) (*iam0.Operation, error) { +// DeleteObject mocks base method. +func (m *MockClient) DeleteObject(arg0 context.Context, arg1, arg2 string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "UndeleteWorkloadIdentityPool", arg0, arg1, arg2) - ret0, _ := ret[0].(*iam0.Operation) - ret1, _ := ret[1].(error) - return ret0, ret1 + ret := m.ctrl.Call(m, "DeleteObject", arg0, arg1, arg2) + ret0, _ := ret[0].(error) + return ret0 } -// UndeleteWorkloadIdentityPool indicates an expected call of UndeleteWorkloadIdentityPool. -func (mr *MockClientMockRecorder) UndeleteWorkloadIdentityPool(arg0, arg1, arg2 interface{}) *gomock.Call { +// DeleteObject indicates an expected call of DeleteObject. +func (mr *MockClientMockRecorder) DeleteObject(arg0, arg1, arg2 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UndeleteWorkloadIdentityPool", reflect.TypeOf((*MockClient)(nil).UndeleteWorkloadIdentityPool), arg0, arg1, arg2) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteObject", reflect.TypeOf((*MockClient)(nil).DeleteObject), arg0, arg1, arg2) } diff --git a/pkg/ibmcloud/mock/client_generated.go b/pkg/ibmcloud/mock/client_generated.go index 96be955fe7..f324503019 100644 --- a/pkg/ibmcloud/mock/client_generated.go +++ b/pkg/ibmcloud/mock/client_generated.go @@ -37,22 +37,6 @@ func (m *MockClient) EXPECT() *MockClientMockRecorder { return m.recorder } -// CreateAPIKey mocks base method. -func (m *MockClient) CreateAPIKey(arg0 *iamidentityv1.CreateAPIKeyOptions) (*iamidentityv1.APIKey, *core.DetailedResponse, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "CreateAPIKey", arg0) - ret0, _ := ret[0].(*iamidentityv1.APIKey) - ret1, _ := ret[1].(*core.DetailedResponse) - ret2, _ := ret[2].(error) - return ret0, ret1, ret2 -} - -// CreateAPIKey indicates an expected call of CreateAPIKey. -func (mr *MockClientMockRecorder) CreateAPIKey(arg0 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateAPIKey", reflect.TypeOf((*MockClient)(nil).CreateAPIKey), arg0) -} - // CreatePolicy mocks base method. func (m *MockClient) CreatePolicy(arg0 *iampolicymanagementv1.CreatePolicyOptions) (*iampolicymanagementv1.Policy, *core.DetailedResponse, error) { m.ctrl.T.Helper() @@ -85,19 +69,20 @@ func (mr *MockClientMockRecorder) CreateServiceID(arg0 interface{}) *gomock.Call return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateServiceID", reflect.TypeOf((*MockClient)(nil).CreateServiceID), arg0) } -// DeleteAPIKey mocks base method. -func (m *MockClient) DeleteAPIKey(arg0 *iamidentityv1.DeleteAPIKeyOptions) (*core.DetailedResponse, error) { +// ListServiceID mocks base method. +func (m *MockClient) ListServiceID(arg0 *iamidentityv1.ListServiceIdsOptions) (*iamidentityv1.ServiceIDList, *core.DetailedResponse, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DeleteAPIKey", arg0) - ret0, _ := ret[0].(*core.DetailedResponse) - ret1, _ := ret[1].(error) - return ret0, ret1 + ret := m.ctrl.Call(m, "ListServiceID", arg0) + ret0, _ := ret[0].(*iamidentityv1.ServiceIDList) + ret1, _ := ret[1].(*core.DetailedResponse) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 } -// DeleteAPIKey indicates an expected call of DeleteAPIKey. -func (mr *MockClientMockRecorder) DeleteAPIKey(arg0 interface{}) *gomock.Call { +// ListServiceID indicates an expected call of ListServiceID. +func (mr *MockClientMockRecorder) ListServiceID(arg0 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteAPIKey", reflect.TypeOf((*MockClient)(nil).DeleteAPIKey), arg0) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListServiceID", reflect.TypeOf((*MockClient)(nil).ListServiceID), arg0) } // DeleteServiceID mocks base method. @@ -115,20 +100,20 @@ func (mr *MockClientMockRecorder) DeleteServiceID(arg0 interface{}) *gomock.Call return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteServiceID", reflect.TypeOf((*MockClient)(nil).DeleteServiceID), arg0) } -// GetAPIKeysDetails mocks base method. -func (m *MockClient) GetAPIKeysDetails(arg0 *iamidentityv1.GetAPIKeysDetailsOptions) (*iamidentityv1.APIKey, *core.DetailedResponse, error) { +// CreateAPIKey mocks base method. +func (m *MockClient) CreateAPIKey(arg0 *iamidentityv1.CreateAPIKeyOptions) (*iamidentityv1.APIKey, *core.DetailedResponse, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetAPIKeysDetails", arg0) + ret := m.ctrl.Call(m, "CreateAPIKey", arg0) ret0, _ := ret[0].(*iamidentityv1.APIKey) ret1, _ := ret[1].(*core.DetailedResponse) ret2, _ := ret[2].(error) return ret0, ret1, ret2 } -// GetAPIKeysDetails indicates an expected call of GetAPIKeysDetails. -func (mr *MockClientMockRecorder) GetAPIKeysDetails(arg0 interface{}) *gomock.Call { +// CreateAPIKey indicates an expected call of CreateAPIKey. +func (mr *MockClientMockRecorder) CreateAPIKey(arg0 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAPIKeysDetails", reflect.TypeOf((*MockClient)(nil).GetAPIKeysDetails), arg0) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateAPIKey", reflect.TypeOf((*MockClient)(nil).CreateAPIKey), arg0) } // ListAPIKeys mocks base method. @@ -147,36 +132,35 @@ func (mr *MockClientMockRecorder) ListAPIKeys(arg0 interface{}) *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListAPIKeys", reflect.TypeOf((*MockClient)(nil).ListAPIKeys), arg0) } -// ListResourceGroups mocks base method. -func (m *MockClient) ListResourceGroups(arg0 *resourcemanagerv2.ListResourceGroupsOptions) (*resourcemanagerv2.ResourceGroupList, *core.DetailedResponse, error) { +// DeleteAPIKey mocks base method. +func (m *MockClient) DeleteAPIKey(arg0 *iamidentityv1.DeleteAPIKeyOptions) (*core.DetailedResponse, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ListResourceGroups", arg0) - ret0, _ := ret[0].(*resourcemanagerv2.ResourceGroupList) - ret1, _ := ret[1].(*core.DetailedResponse) - ret2, _ := ret[2].(error) - return ret0, ret1, ret2 + ret := m.ctrl.Call(m, "DeleteAPIKey", arg0) + ret0, _ := ret[0].(*core.DetailedResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 } -// ListResourceGroups indicates an expected call of ListResourceGroups. -func (mr *MockClientMockRecorder) ListResourceGroups(arg0 interface{}) *gomock.Call { +// DeleteAPIKey indicates an expected call of DeleteAPIKey. +func (mr *MockClientMockRecorder) DeleteAPIKey(arg0 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListResourceGroups", reflect.TypeOf((*MockClient)(nil).ListResourceGroups), arg0) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteAPIKey", reflect.TypeOf((*MockClient)(nil).DeleteAPIKey), arg0) } -// ListServiceID mocks base method. -func (m *MockClient) ListServiceID(arg0 *iamidentityv1.ListServiceIdsOptions) (*iamidentityv1.ServiceIDList, *core.DetailedResponse, error) { +// GetAPIKeysDetails mocks base method. +func (m *MockClient) GetAPIKeysDetails(arg0 *iamidentityv1.GetAPIKeysDetailsOptions) (*iamidentityv1.APIKey, *core.DetailedResponse, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ListServiceID", arg0) - ret0, _ := ret[0].(*iamidentityv1.ServiceIDList) + ret := m.ctrl.Call(m, "GetAPIKeysDetails", arg0) + ret0, _ := ret[0].(*iamidentityv1.APIKey) ret1, _ := ret[1].(*core.DetailedResponse) ret2, _ := ret[2].(error) return ret0, ret1, ret2 } -// ListServiceID indicates an expected call of ListServiceID. -func (mr *MockClientMockRecorder) ListServiceID(arg0 interface{}) *gomock.Call { +// GetAPIKeysDetails indicates an expected call of GetAPIKeysDetails. +func (mr *MockClientMockRecorder) GetAPIKeysDetails(arg0 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListServiceID", reflect.TypeOf((*MockClient)(nil).ListServiceID), arg0) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAPIKeysDetails", reflect.TypeOf((*MockClient)(nil).GetAPIKeysDetails), arg0) } // NewGetAPIKeysDetailsOptions mocks base method. @@ -192,3 +176,19 @@ func (mr *MockClientMockRecorder) NewGetAPIKeysDetailsOptions() *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewGetAPIKeysDetailsOptions", reflect.TypeOf((*MockClient)(nil).NewGetAPIKeysDetailsOptions)) } + +// ListResourceGroups mocks base method. +func (m *MockClient) ListResourceGroups(arg0 *resourcemanagerv2.ListResourceGroupsOptions) (*resourcemanagerv2.ResourceGroupList, *core.DetailedResponse, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ListResourceGroups", arg0) + ret0, _ := ret[0].(*resourcemanagerv2.ResourceGroupList) + ret1, _ := ret[1].(*core.DetailedResponse) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// ListResourceGroups indicates an expected call of ListResourceGroups. +func (mr *MockClientMockRecorder) ListResourceGroups(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListResourceGroups", reflect.TypeOf((*MockClient)(nil).ListResourceGroups), arg0) +} diff --git a/vendor/github.com/openshift/api/build/v1/generated.pb.go b/vendor/github.com/openshift/api/build/v1/generated.pb.go index 15a4b69949..39cae29c11 100644 --- a/vendor/github.com/openshift/api/build/v1/generated.pb.go +++ b/vendor/github.com/openshift/api/build/v1/generated.pb.go @@ -1782,280 +1782,281 @@ func init() { } var fileDescriptor_2ba579f6f004cb75 = []byte{ - // 4362 bytes of a gzipped FileDescriptorProto + // 4383 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5b, 0x4d, 0x6c, 0x1c, 0x47, 0x76, 0x56, 0xcf, 0x0f, 0x39, 0xf3, 0x86, 0x22, 0xa9, 0xa2, 0x64, 0x8d, 0xb4, 0x5a, 0x8e, 0xdc, - 0x8e, 0x0d, 0x39, 0xb6, 0x87, 0x4b, 0x59, 0x52, 0x64, 0x1b, 0xd9, 0x80, 0x43, 0x52, 0x32, 0xb5, - 0x23, 0x89, 0xa8, 0xa1, 0x65, 0xef, 0x5a, 0xd8, 0xa4, 0xd9, 0x53, 0x33, 0x6c, 0x73, 0xa6, 0x7b, - 0xdc, 0xd5, 0x43, 0x9b, 0x0b, 0x04, 0x58, 0x04, 0x58, 0x24, 0xeb, 0xbd, 0x64, 0x2f, 0x8b, 0x24, - 0x97, 0x24, 0x58, 0xe4, 0x94, 0x53, 0x0e, 0x01, 0x36, 0xd8, 0x4b, 0x80, 0xec, 0xc1, 0x87, 0x04, - 0xd8, 0x20, 0x01, 0x62, 0x60, 0x17, 0x83, 0x98, 0x39, 0x04, 0xc8, 0x21, 0x40, 0x72, 0xd4, 0x21, - 0x08, 0xea, 0xa7, 0xbb, 0xab, 0x7a, 0x7a, 0xa8, 0x1e, 0x4a, 0x56, 0x9c, 0xe4, 0x36, 0x53, 0xef, - 0xbd, 0xef, 0xd5, 0xcf, 0xab, 0x57, 0xef, 0xbd, 0xaa, 0x86, 0xd5, 0xae, 0x13, 0xec, 0x0d, 0x77, - 0xeb, 0xb6, 0xd7, 0x5f, 0xf1, 0x06, 0xc4, 0xa5, 0x7b, 0x4e, 0x27, 0x58, 0xb1, 0x06, 0xce, 0xca, - 0xee, 0xd0, 0xe9, 0xb5, 0x57, 0x0e, 0x56, 0x57, 0xba, 0xc4, 0x25, 0xbe, 0x15, 0x90, 0x76, 0x7d, - 0xe0, 0x7b, 0x81, 0x87, 0x9e, 0x8f, 0x45, 0xea, 0x91, 0x48, 0xdd, 0x1a, 0x38, 0x75, 0x2e, 0x52, - 0x3f, 0x58, 0xbd, 0xf8, 0x9a, 0x82, 0xda, 0xf5, 0xba, 0xde, 0x0a, 0x97, 0xdc, 0x1d, 0x76, 0xf8, - 0x3f, 0xfe, 0x87, 0xff, 0x12, 0x88, 0x17, 0xcd, 0xfd, 0x9b, 0xb4, 0xee, 0x78, 0x5c, 0xad, 0xed, - 0xf9, 0x24, 0x45, 0xeb, 0xc5, 0x6b, 0x31, 0x4f, 0xdf, 0xb2, 0xf7, 0x1c, 0x97, 0xf8, 0x87, 0x2b, - 0x83, 0xfd, 0x2e, 0x6b, 0xa0, 0x2b, 0x7d, 0x12, 0x58, 0x69, 0x52, 0x37, 0x26, 0x49, 0xf9, 0x43, - 0x37, 0x70, 0xfa, 0x64, 0x85, 0xda, 0x7b, 0xa4, 0x6f, 0x25, 0xe5, 0xcc, 0xbf, 0x2e, 0xc0, 0x85, - 0x86, 0xe3, 0x5a, 0xfe, 0x61, 0x83, 0x8d, 0x09, 0x93, 0x0f, 0x87, 0x84, 0x06, 0xf7, 0x07, 0x81, - 0xe3, 0xb9, 0x14, 0xfd, 0x16, 0x94, 0x98, 0xc2, 0xb6, 0x15, 0x58, 0x55, 0xe3, 0xb2, 0x71, 0xa5, - 0x72, 0xf5, 0x6b, 0x75, 0xa1, 0xa8, 0xae, 0x2a, 0xaa, 0x0f, 0xf6, 0xbb, 0xac, 0x81, 0xd6, 0x19, - 0x77, 0xfd, 0x60, 0xb5, 0x7e, 0x7f, 0xf7, 0x03, 0x62, 0x07, 0x77, 0x49, 0x60, 0x35, 0xd0, 0xa7, - 0xa3, 0xda, 0xa9, 0xa3, 0x51, 0x0d, 0xe2, 0x36, 0x1c, 0xa1, 0xa2, 0x97, 0x60, 0xc6, 0xa2, 0xb7, - 0x9c, 0x1e, 0xa9, 0xe6, 0x2e, 0x1b, 0x57, 0xca, 0x8d, 0x79, 0xc9, 0x3d, 0xb3, 0xc6, 0x5b, 0xb1, - 0xa4, 0xa2, 0x1b, 0x30, 0xef, 0x93, 0x03, 0x87, 0x3a, 0x9e, 0xbb, 0xee, 0xf5, 0xfb, 0x4e, 0x50, - 0xcd, 0xeb, 0xfc, 0xa2, 0x15, 0x27, 0xb8, 0xd0, 0x1b, 0xb0, 0x10, 0xb6, 0xdc, 0x25, 0x94, 0x5a, - 0x5d, 0x52, 0x2d, 0x70, 0xc1, 0x05, 0x29, 0x38, 0x2b, 0x9b, 0x71, 0x92, 0x0f, 0x35, 0x00, 0x85, - 0x4d, 0x6b, 0xc3, 0x60, 0xcf, 0xf3, 0xef, 0x59, 0x7d, 0x52, 0x2d, 0x72, 0xe9, 0x68, 0x50, 0x31, - 0x05, 0xa7, 0x70, 0xa3, 0x4d, 0x58, 0xd2, 0x5b, 0x37, 0xfb, 0x96, 0xd3, 0xab, 0xce, 0x70, 0x90, - 0x25, 0x09, 0x52, 0x51, 0x48, 0x38, 0x8d, 0x1f, 0x7d, 0x03, 0xce, 0xe9, 0xe3, 0x0a, 0x88, 0xe8, - 0xcd, 0x2c, 0x07, 0x3a, 0x27, 0x81, 0x4e, 0x6b, 0x44, 0x9c, 0x2e, 0x83, 0xee, 0xc1, 0x73, 0x63, - 0x04, 0xd1, 0xad, 0x12, 0x47, 0x7b, 0x4e, 0xa2, 0xcd, 0xeb, 0x54, 0x3c, 0x41, 0xca, 0x7c, 0x0b, - 0xce, 0x28, 0x16, 0xd4, 0xf2, 0x86, 0xbe, 0x4d, 0x94, 0x75, 0x35, 0x8e, 0x5b, 0x57, 0xf3, 0x13, - 0x03, 0xce, 0x35, 0x9c, 0x60, 0x77, 0x68, 0xef, 0x93, 0xe0, 0x5d, 0xb2, 0xfb, 0xb6, 0xe7, 0xed, - 0xaf, 0x5b, 0x43, 0x4a, 0xd0, 0x87, 0x00, 0xb6, 0xd7, 0xef, 0x7b, 0x6e, 0x6b, 0x40, 0x6c, 0x69, - 0x7d, 0xd7, 0xeb, 0x8f, 0xdd, 0x92, 0xf5, 0x75, 0x2e, 0xa4, 0x42, 0x35, 0x2e, 0x4a, 0xe5, 0x68, - 0x9c, 0x86, 0x15, 0x25, 0xe6, 0x0f, 0x73, 0x50, 0xe4, 0x83, 0x78, 0x06, 0x86, 0x7f, 0x0f, 0x0a, - 0x94, 0x0d, 0x2c, 0xc7, 0xd1, 0x5f, 0xcd, 0x30, 0x30, 0x31, 0xbd, 0x03, 0x62, 0x37, 0xe6, 0x24, - 0x72, 0x81, 0xfd, 0xc3, 0x1c, 0x07, 0x3d, 0x80, 0x19, 0x1a, 0x58, 0xc1, 0x90, 0xf2, 0x8d, 0x51, - 0xb9, 0x5a, 0xcf, 0x8c, 0xc8, 0xa5, 0xe2, 0x05, 0x12, 0xff, 0xb1, 0x44, 0x33, 0xff, 0x2e, 0x0f, - 0xf3, 0x9c, 0x6f, 0xdd, 0x73, 0xdb, 0x0e, 0x73, 0x0b, 0xe8, 0x06, 0x14, 0x82, 0xc3, 0x41, 0xb8, - 0xb2, 0x66, 0xd8, 0x99, 0x9d, 0xc3, 0x01, 0x79, 0x34, 0xaa, 0x21, 0x9d, 0x9b, 0xb5, 0x62, 0xce, - 0x8f, 0x9a, 0x51, 0x17, 0xc5, 0x5e, 0xbf, 0xa6, 0xab, 0x7c, 0x34, 0xaa, 0xa5, 0xf8, 0xc7, 0x7a, - 0x84, 0xa4, 0x77, 0x0c, 0x7d, 0x00, 0xf3, 0x3d, 0x8b, 0x06, 0xef, 0x0c, 0xda, 0x56, 0x40, 0x76, - 0x9c, 0x3e, 0xe1, 0xbb, 0xaa, 0x72, 0xf5, 0x57, 0xb3, 0x2d, 0x14, 0x93, 0x88, 0x4d, 0xbd, 0xa9, - 0x21, 0xe1, 0x04, 0x32, 0x3a, 0x00, 0xc4, 0x5a, 0x76, 0x7c, 0xcb, 0xa5, 0x62, 0x54, 0x4c, 0x5f, - 0x7e, 0x6a, 0x7d, 0x91, 0x21, 0x36, 0xc7, 0xd0, 0x70, 0x8a, 0x06, 0xb6, 0x8b, 0x7c, 0x62, 0x51, - 0xcf, 0x95, 0x4e, 0x2b, 0x5a, 0x24, 0xcc, 0x5b, 0xb1, 0xa4, 0xa2, 0x97, 0x61, 0xb6, 0x2f, 0xbd, - 0x5b, 0x31, 0xdd, 0xbb, 0x85, 0x74, 0xf3, 0xc7, 0x39, 0xa8, 0x84, 0x2b, 0xd4, 0x71, 0xba, 0xcf, - 0xc0, 0xd2, 0x77, 0x34, 0x4b, 0xbf, 0x9a, 0xd5, 0x2e, 0x45, 0xff, 0x26, 0xda, 0xfb, 0xc3, 0x84, - 0xbd, 0x5f, 0x9b, 0x12, 0xf7, 0x78, 0xab, 0xff, 0x99, 0x01, 0x0b, 0x0a, 0x77, 0xd3, 0xa1, 0x01, - 0x7a, 0x38, 0x36, 0x53, 0xf5, 0x6c, 0x33, 0xc5, 0xa4, 0xf9, 0x3c, 0x2d, 0x4a, 0x6d, 0xa5, 0xb0, - 0x45, 0x99, 0xa5, 0x16, 0x14, 0x9d, 0x80, 0xf4, 0xd9, 0xde, 0xc8, 0x4f, 0xb3, 0x7d, 0x45, 0x07, - 0x1b, 0xa7, 0x25, 0x74, 0x71, 0x8b, 0x81, 0x60, 0x81, 0x65, 0xfe, 0x32, 0xaf, 0x0d, 0x83, 0x4d, - 0x1f, 0xb2, 0xa1, 0x14, 0xf8, 0x4e, 0xb7, 0x4b, 0x7c, 0x5a, 0x35, 0xb8, 0xae, 0xeb, 0x59, 0x75, - 0xed, 0x08, 0xb9, 0x6d, 0xaf, 0xe7, 0xd8, 0x87, 0xf1, 0x68, 0x64, 0x33, 0xc5, 0x11, 0x30, 0x5a, - 0x83, 0xb2, 0x3f, 0x74, 0x05, 0xa3, 0xdc, 0xed, 0x2f, 0x48, 0xf6, 0x32, 0x0e, 0x09, 0x8f, 0x46, - 0x35, 0xe1, 0x5a, 0xa2, 0x16, 0x1c, 0x4b, 0x21, 0x4b, 0xf3, 0xff, 0x62, 0x91, 0x5f, 0xcb, 0xec, - 0xff, 0xb9, 0xdd, 0x44, 0x76, 0x19, 0xb7, 0xa9, 0xfe, 0x1e, 0xb5, 0xe1, 0x12, 0x1d, 0xda, 0x36, - 0xa1, 0xb4, 0x33, 0xec, 0xf1, 0x9e, 0xd0, 0xb7, 0x1d, 0x1a, 0x78, 0xfe, 0x61, 0xd3, 0x61, 0x21, - 0x06, 0xdb, 0x74, 0xc5, 0xc6, 0xe5, 0xa3, 0x51, 0xed, 0x52, 0xeb, 0x18, 0x3e, 0x7c, 0x2c, 0x0a, - 0x7a, 0x0f, 0xaa, 0x1d, 0xcb, 0xe9, 0x91, 0x76, 0x8a, 0x86, 0x22, 0xd7, 0x70, 0xe9, 0x68, 0x54, - 0xab, 0xde, 0x9a, 0xc0, 0x83, 0x27, 0x4a, 0x9b, 0xff, 0x64, 0xc0, 0x99, 0x31, 0x9b, 0x46, 0xd7, - 0xa1, 0xc2, 0x5c, 0xc9, 0x03, 0xe2, 0xb3, 0xc3, 0x9a, 0x9b, 0x6a, 0x3e, 0x8e, 0x35, 0x9a, 0x31, - 0x09, 0xab, 0x7c, 0xe8, 0x13, 0x03, 0x96, 0x9c, 0xbe, 0xd5, 0x25, 0xeb, 0x7b, 0x96, 0xdb, 0x25, - 0xe1, 0xa2, 0x4a, 0x7b, 0x7c, 0x2b, 0xc3, 0xcc, 0x6f, 0x8d, 0x49, 0xcb, 0x5d, 0xf6, 0x15, 0xa9, - 0x7c, 0x69, 0x9c, 0x83, 0xe2, 0x34, 0xa5, 0xe6, 0x4f, 0x0c, 0x28, 0xf3, 0x91, 0x3d, 0x83, 0x9d, - 0x77, 0x57, 0xdf, 0x79, 0x57, 0xb2, 0xee, 0x86, 0x09, 0x7b, 0x0e, 0xa0, 0x24, 0x7a, 0xee, 0x75, - 0xcd, 0xff, 0x28, 0xc8, 0xfd, 0xd7, 0xf4, 0xba, 0x61, 0x4c, 0xbd, 0x02, 0x65, 0xdb, 0x73, 0x03, - 0x8b, 0x75, 0x59, 0x1e, 0xa1, 0x67, 0xc2, 0xad, 0xb1, 0x1e, 0x12, 0x70, 0xcc, 0xc3, 0x0e, 0x81, - 0x8e, 0xd7, 0xeb, 0x79, 0x1f, 0xf1, 0x8d, 0x54, 0x8a, 0x7d, 0xd6, 0x2d, 0xde, 0x8a, 0x25, 0x15, - 0xbd, 0x0a, 0xa5, 0x01, 0x0b, 0xd1, 0x3c, 0xe9, 0x13, 0x4b, 0xf1, 0xa8, 0xb7, 0x65, 0x3b, 0x8e, - 0x38, 0xd0, 0x35, 0x98, 0xa3, 0x8e, 0x6b, 0x93, 0x16, 0xb1, 0x3d, 0xb7, 0x4d, 0xb9, 0xad, 0xe7, - 0x1b, 0x8b, 0x47, 0xa3, 0xda, 0x5c, 0x4b, 0x69, 0xc7, 0x1a, 0x17, 0x7a, 0x17, 0xca, 0xfc, 0x3f, - 0x3f, 0xff, 0x8a, 0x53, 0x9f, 0x7f, 0xa7, 0xd9, 0x20, 0x5b, 0x21, 0x00, 0x8e, 0xb1, 0xd0, 0x55, - 0x00, 0x96, 0xa6, 0xd0, 0xc0, 0xea, 0x0f, 0x28, 0x3f, 0xc9, 0x4b, 0xf1, 0xf6, 0xdd, 0x89, 0x28, - 0x58, 0xe1, 0x42, 0xaf, 0x40, 0x39, 0xb0, 0x9c, 0x5e, 0xd3, 0x71, 0x09, 0xe5, 0x91, 0x70, 0x5e, - 0x28, 0xd8, 0x09, 0x1b, 0x71, 0x4c, 0x47, 0x75, 0x80, 0x1e, 0xdb, 0x34, 0x8d, 0xc3, 0x80, 0x50, - 0x1e, 0xe9, 0xe6, 0x1b, 0xf3, 0x0c, 0xbc, 0x19, 0xb5, 0x62, 0x85, 0x83, 0xcd, 0xba, 0xeb, 0x7d, - 0x64, 0x39, 0x41, 0xb5, 0xac, 0xcf, 0xfa, 0x3d, 0xef, 0x5d, 0xcb, 0x09, 0xb0, 0xa4, 0xa2, 0x17, - 0x61, 0xf6, 0x40, 0xee, 0x34, 0xe0, 0xa0, 0x15, 0x76, 0xec, 0x86, 0x3b, 0x2c, 0xa4, 0xa1, 0x3d, - 0xb8, 0xe4, 0xb8, 0x94, 0xd8, 0x43, 0x9f, 0xb4, 0xf6, 0x9d, 0xc1, 0x4e, 0xb3, 0xf5, 0x80, 0xf8, - 0x4e, 0xe7, 0xb0, 0x61, 0xd9, 0xfb, 0xc4, 0x6d, 0x57, 0x2b, 0x5c, 0xc9, 0xaf, 0x48, 0x25, 0x97, - 0xb6, 0x8e, 0xe1, 0xc5, 0xc7, 0x22, 0x99, 0x9f, 0x84, 0x07, 0xfc, 0xfd, 0x61, 0x30, 0x18, 0x06, - 0xe8, 0x2d, 0xc8, 0x05, 0x9e, 0xdc, 0x36, 0x2f, 0x28, 0x6b, 0x55, 0x67, 0x01, 0x56, 0x7c, 0x90, - 0x63, 0xd2, 0x21, 0x3e, 0x71, 0x6d, 0xd2, 0x98, 0x39, 0x1a, 0xd5, 0x72, 0x3b, 0x1e, 0xce, 0x05, - 0x1e, 0x7a, 0x0f, 0x60, 0x30, 0xa4, 0x7b, 0x2d, 0x62, 0xfb, 0x24, 0x90, 0x27, 0xf8, 0x95, 0x34, - 0x90, 0xa6, 0x67, 0x5b, 0xbd, 0x24, 0x12, 0x9f, 0xdf, 0xed, 0x48, 0x1e, 0x2b, 0x58, 0xa8, 0x0d, - 0x15, 0xbe, 0xf1, 0x9b, 0xd6, 0x2e, 0xe9, 0x31, 0x83, 0xcd, 0x67, 0xf4, 0xef, 0x5b, 0x91, 0x54, - 0xec, 0xd4, 0xe2, 0x36, 0x8a, 0x55, 0x58, 0xf3, 0x77, 0x0c, 0x58, 0xe2, 0x93, 0xb1, 0xed, 0xd1, - 0x40, 0xe4, 0x2d, 0xdc, 0xf3, 0xbf, 0x08, 0xb3, 0xec, 0x1c, 0xb0, 0xdc, 0x36, 0x3f, 0x03, 0xcb, - 0x62, 0xd5, 0xd6, 0x45, 0x13, 0x0e, 0x69, 0xe8, 0x12, 0x14, 0x2c, 0xbf, 0x2b, 0x3c, 0x43, 0xb9, - 0x51, 0x62, 0x21, 0xc8, 0x9a, 0xdf, 0xa5, 0x98, 0xb7, 0x32, 0x13, 0xa1, 0xb6, 0xef, 0x0c, 0xc6, - 0x72, 0xd1, 0x16, 0x6f, 0xc5, 0x92, 0x6a, 0xfe, 0x6c, 0x16, 0xe6, 0xd4, 0xec, 0xfa, 0x19, 0xc4, - 0x5c, 0xef, 0x43, 0x29, 0xcc, 0xd6, 0xe4, 0xaa, 0xad, 0x66, 0x98, 0x5a, 0x91, 0xbb, 0x61, 0x29, - 0xd8, 0x98, 0x63, 0xae, 0x23, 0xfc, 0x87, 0x23, 0x40, 0x44, 0x60, 0x51, 0x1e, 0xf4, 0xa4, 0xdd, - 0x38, 0xe4, 0x73, 0x2f, 0xcf, 0xe7, 0x4c, 0xf6, 0x75, 0xf6, 0x68, 0x54, 0x5b, 0xdc, 0x49, 0x00, - 0xe0, 0x31, 0x48, 0xb4, 0x06, 0x85, 0x8e, 0xef, 0xf5, 0xb9, 0x67, 0xca, 0x08, 0xcd, 0x57, 0xe8, - 0x96, 0xef, 0xf5, 0x31, 0x17, 0x45, 0xef, 0xc1, 0xcc, 0x2e, 0x4f, 0x4d, 0xa5, 0xaf, 0xca, 0x14, - 0x24, 0x26, 0x73, 0xd9, 0x06, 0xb0, 0x35, 0x15, 0xcd, 0x58, 0xe2, 0xa1, 0x55, 0xfd, 0x90, 0x9d, - 0xe1, 0x5b, 0x7f, 0xe1, 0xd8, 0x03, 0xf6, 0x0d, 0xc8, 0x13, 0xf7, 0xa0, 0x3a, 0xcb, 0x2d, 0xfd, - 0x62, 0xda, 0x70, 0x36, 0xdd, 0x83, 0x07, 0x96, 0xdf, 0xa8, 0xc8, 0xa5, 0xcd, 0x6f, 0xba, 0x07, - 0x98, 0xc9, 0xa0, 0x7d, 0xa8, 0x28, 0xd3, 0x53, 0x2d, 0x71, 0x88, 0x6b, 0x53, 0x86, 0x6d, 0x22, - 0x17, 0x8e, 0xf6, 0x8c, 0xb2, 0x02, 0x58, 0x45, 0x47, 0xdf, 0x37, 0xe0, 0x5c, 0xdb, 0xb3, 0xf7, - 0xd9, 0xf1, 0xed, 0x5b, 0x01, 0xe9, 0x1e, 0xca, 0xa3, 0x8b, 0x7b, 0xc2, 0xca, 0xd5, 0x9b, 0x19, - 0xf4, 0x6e, 0xa4, 0xc9, 0x37, 0x2e, 0x1c, 0x8d, 0x6a, 0xe7, 0x52, 0x49, 0x38, 0x5d, 0x23, 0xef, - 0x0b, 0xe5, 0xab, 0x90, 0xec, 0x0b, 0x64, 0xee, 0x4b, 0x2b, 0x4d, 0x5e, 0xf4, 0x25, 0x95, 0x84, - 0xd3, 0x35, 0x9a, 0xff, 0x58, 0x94, 0x8e, 0x55, 0x96, 0x38, 0x5e, 0xd7, 0xd2, 0xe0, 0x5a, 0x22, - 0x0d, 0x5e, 0x50, 0x58, 0x95, 0x1c, 0x38, 0xb6, 0xc8, 0xdc, 0x53, 0xb6, 0xc8, 0x3a, 0x80, 0x98, - 0xc3, 0x8e, 0xd3, 0x23, 0xa1, 0x47, 0x62, 0x0e, 0x62, 0x23, 0x6a, 0xc5, 0x0a, 0x07, 0x6a, 0x42, - 0xbe, 0x2b, 0x63, 0xdc, 0x6c, 0xde, 0xe1, 0xb6, 0x13, 0xa8, 0x7d, 0x98, 0x65, 0x16, 0x7a, 0xdb, - 0x09, 0x30, 0x83, 0x41, 0x0f, 0x60, 0x86, 0xfb, 0x5d, 0x5a, 0x2d, 0x66, 0xce, 0x5f, 0xf8, 0x36, - 0x97, 0x68, 0x91, 0xef, 0xe4, 0x8d, 0x14, 0x4b, 0x34, 0x16, 0x17, 0xb0, 0x48, 0x88, 0x7c, 0x1c, - 0x6c, 0x38, 0xbe, 0xac, 0x9b, 0x29, 0x61, 0x7d, 0x48, 0xc1, 0x0a, 0x17, 0xfa, 0x36, 0xcc, 0xc9, - 0x15, 0x14, 0xc7, 0xd6, 0xec, 0x94, 0xc7, 0x96, 0x08, 0x82, 0x14, 0x04, 0xac, 0xe1, 0xa1, 0xdf, - 0x84, 0x59, 0xca, 0x7f, 0xd1, 0x29, 0x76, 0xa2, 0x90, 0x55, 0x27, 0x30, 0xca, 0xd1, 0x05, 0x89, - 0xe2, 0x10, 0x15, 0xed, 0xf3, 0x41, 0x77, 0x9c, 0xee, 0x5d, 0x6b, 0xc0, 0x76, 0x1d, 0xd3, 0xf1, - 0x6b, 0x99, 0x52, 0x1f, 0x29, 0xa4, 0xaa, 0x51, 0x67, 0x4b, 0x42, 0x62, 0x05, 0xde, 0xfc, 0x45, - 0x18, 0x6a, 0xf3, 0x83, 0xd1, 0x4a, 0xa9, 0xba, 0x3d, 0xe5, 0xac, 0x2b, 0xe1, 0xcc, 0x72, 0x5f, - 0xa4, 0x33, 0x33, 0xff, 0x7d, 0x36, 0xdc, 0xb4, 0x22, 0x39, 0x5a, 0x85, 0xe2, 0x60, 0xcf, 0xa2, - 0xe1, 0xae, 0x0d, 0x33, 0x93, 0xe2, 0x36, 0x6b, 0x7c, 0x34, 0xaa, 0x81, 0x88, 0x16, 0xd8, 0x3f, - 0x2c, 0x38, 0x79, 0xc0, 0x6e, 0xb9, 0x36, 0xe9, 0xf5, 0x48, 0x5b, 0x86, 0xe0, 0x71, 0xc0, 0x1e, - 0x12, 0x70, 0xcc, 0x83, 0x6e, 0x44, 0x55, 0x1b, 0xb1, 0x0b, 0x97, 0xf5, 0xaa, 0xcd, 0x23, 0x66, - 0x5d, 0xa2, 0xdc, 0x30, 0xb1, 0x8a, 0x53, 0x38, 0xbe, 0x8a, 0x83, 0x3a, 0x30, 0x4f, 0x03, 0xcb, - 0x0f, 0xa2, 0xc8, 0xf8, 0x04, 0xc1, 0x38, 0x3a, 0x1a, 0xd5, 0xe6, 0x5b, 0x1a, 0x0a, 0x4e, 0xa0, - 0xa2, 0x21, 0x2c, 0xd9, 0x5e, 0x7f, 0xd0, 0x23, 0x61, 0x49, 0x4a, 0x28, 0x9b, 0xbe, 0xd2, 0x76, - 0x9e, 0xa5, 0x7f, 0xeb, 0xe3, 0x50, 0x38, 0x0d, 0x1f, 0xfd, 0x3a, 0x94, 0xda, 0x43, 0xdf, 0x62, - 0x8d, 0x32, 0xb0, 0x7f, 0x3e, 0x4c, 0x65, 0x36, 0x64, 0xfb, 0xa3, 0x51, 0xed, 0x34, 0xcb, 0x05, - 0xea, 0x61, 0x03, 0x8e, 0x44, 0xd0, 0x2e, 0x5c, 0xf4, 0x78, 0xf0, 0x2b, 0x5c, 0x9f, 0x08, 0x30, - 0xc2, 0xed, 0x2d, 0xab, 0xdc, 0x61, 0xd9, 0xf2, 0xe2, 0xfd, 0x89, 0x9c, 0xf8, 0x18, 0x14, 0x74, - 0x1b, 0x66, 0xc4, 0x26, 0x92, 0xa7, 0x62, 0xa6, 0xf8, 0x04, 0xc4, 0x4d, 0x05, 0x13, 0xc3, 0x52, - 0x1c, 0x3d, 0x84, 0x19, 0xa1, 0x46, 0x1e, 0x69, 0xd7, 0xa6, 0x2b, 0xdc, 0x8a, 0xee, 0xc7, 0xfe, - 0x53, 0xfc, 0xc7, 0x12, 0x13, 0xed, 0xf0, 0x32, 0x19, 0xf3, 0xcb, 0x15, 0xbe, 0xcf, 0xb2, 0x14, - 0x9a, 0x5b, 0x4c, 0x60, 0xcb, 0xed, 0x78, 0x5a, 0x79, 0x8c, 0x7b, 0x65, 0x81, 0xc5, 0xbc, 0x72, - 0xcf, 0xeb, 0xb6, 0x5c, 0x67, 0x30, 0x20, 0x41, 0x75, 0x4e, 0xf7, 0xca, 0xcd, 0x88, 0x82, 0x15, - 0x2e, 0x44, 0xb8, 0x53, 0x13, 0xa5, 0x5c, 0x5a, 0x3d, 0xcd, 0x7b, 0xb3, 0x3a, 0x45, 0x95, 0x4b, - 0x48, 0x6a, 0xee, 0x4c, 0x82, 0x61, 0x05, 0xd8, 0xb4, 0x65, 0x49, 0x44, 0x9d, 0x1d, 0x74, 0x4f, - 0xc9, 0x81, 0x6e, 0x9c, 0x64, 0x7e, 0x77, 0x3c, 0x35, 0x2d, 0x32, 0x9b, 0x32, 0xab, 0xd0, 0x59, - 0xd0, 0x75, 0x99, 0xd3, 0x6c, 0x38, 0x5d, 0x42, 0x03, 0xe9, 0x62, 0xf4, 0x24, 0x45, 0x90, 0xb0, - 0xca, 0x67, 0xfe, 0xb4, 0x00, 0xa7, 0x25, 0x9c, 0x88, 0x38, 0xd0, 0x75, 0x2d, 0xb4, 0x78, 0x3e, - 0x11, 0x5a, 0x9c, 0xd1, 0x98, 0x95, 0xe0, 0xc2, 0x87, 0x79, 0x3d, 0x8c, 0x92, 0x41, 0xc6, 0x8d, - 0xcc, 0x11, 0x9b, 0x86, 0x2c, 0x3c, 0x84, 0x1e, 0xaf, 0xe1, 0x84, 0x06, 0xa6, 0x53, 0x0f, 0x97, - 0x64, 0x2a, 0x70, 0x23, 0x73, 0x64, 0x96, 0xa2, 0x53, 0x8f, 0xcb, 0x70, 0x42, 0x03, 0xd3, 0x69, - 0x0f, 0x69, 0xe0, 0xf5, 0x23, 0x9d, 0x85, 0xcc, 0x3a, 0xd7, 0xb9, 0x60, 0x8a, 0xce, 0x75, 0x0d, - 0x11, 0x27, 0x34, 0xa0, 0x1f, 0x19, 0x70, 0xfe, 0x03, 0xe2, 0xee, 0x3b, 0x2e, 0xdd, 0x76, 0x06, - 0xa4, 0xe7, 0xb8, 0xf1, 0x88, 0x85, 0xef, 0xfd, 0x8d, 0x0c, 0xda, 0xef, 0xe8, 0x08, 0x7a, 0x37, - 0xbe, 0x72, 0x34, 0xaa, 0x9d, 0xbf, 0x93, 0xae, 0x03, 0x4f, 0x52, 0x6e, 0x7e, 0xaf, 0x28, 0x2d, - 0x5e, 0x3d, 0x19, 0xd5, 0xb3, 0xc4, 0x78, 0xcc, 0x59, 0xe2, 0xc3, 0x3c, 0xbf, 0x15, 0x76, 0x6c, - 0x79, 0x31, 0x36, 0x85, 0xd5, 0xdc, 0xd6, 0x04, 0xc5, 0xa1, 0xcc, 0x67, 0x53, 0x27, 0xe0, 0x84, - 0x06, 0xe4, 0xc2, 0x69, 0x01, 0x1e, 0xaa, 0xcc, 0x67, 0xbe, 0xdf, 0xbb, 0xed, 0x04, 0x6f, 0x47, - 0x72, 0x42, 0xe3, 0x99, 0xa3, 0x51, 0xed, 0xb4, 0xd6, 0x8e, 0x75, 0x78, 0x34, 0x84, 0x45, 0xa5, - 0xcc, 0xc8, 0xa7, 0x4b, 0xda, 0xcc, 0xeb, 0xd3, 0x15, 0x36, 0x85, 0x42, 0x9e, 0xc2, 0x6e, 0x25, - 0x00, 0xf1, 0x98, 0x0a, 0x39, 0xcc, 0x9e, 0x15, 0x0d, 0xb3, 0x38, 0xcd, 0x30, 0x9b, 0x56, 0xfa, - 0x30, 0xe3, 0x76, 0xac, 0xc3, 0xa3, 0xef, 0xc0, 0xe2, 0x6e, 0xe2, 0x32, 0x55, 0x9e, 0xd5, 0x37, - 0x33, 0xe5, 0x19, 0x29, 0xf7, 0xb0, 0x62, 0xac, 0x49, 0x12, 0x1e, 0xd3, 0x63, 0xfe, 0xa4, 0x00, - 0x68, 0xfc, 0x96, 0x00, 0x5d, 0xd3, 0x5c, 0xd9, 0xe5, 0x84, 0x2b, 0x5b, 0x54, 0x25, 0x14, 0x4f, - 0xf6, 0x10, 0x66, 0x44, 0x7f, 0xa7, 0xa8, 0x5e, 0xc8, 0x8e, 0x48, 0xb0, 0x34, 0xa3, 0x90, 0x98, - 0x2c, 0x80, 0x97, 0xf6, 0x28, 0xed, 0xee, 0x04, 0xf0, 0x69, 0x56, 0x1e, 0xa2, 0xa2, 0x3d, 0x79, - 0x10, 0x08, 0x5b, 0x90, 0x96, 0x76, 0xfd, 0x44, 0x25, 0x74, 0x51, 0x54, 0x50, 0xda, 0xb1, 0x0a, - 0x2d, 0x27, 0xaa, 0x67, 0xed, 0x4a, 0xd3, 0x7a, 0x82, 0x89, 0x52, 0xcc, 0x4a, 0x62, 0x22, 0x02, - 0xe5, 0x68, 0x9d, 0xa5, 0x21, 0x9d, 0x40, 0x41, 0xba, 0x05, 0xc5, 0xc8, 0xe6, 0xbf, 0x19, 0x32, - 0x48, 0x7f, 0xe0, 0xf5, 0x86, 0x7d, 0x82, 0x2e, 0x43, 0xc1, 0xb5, 0xfa, 0xa1, 0xcd, 0x44, 0xb7, - 0x7f, 0xfc, 0x51, 0x03, 0xa7, 0xf0, 0xdb, 0x3f, 0x7e, 0x26, 0x4c, 0x93, 0x46, 0xc7, 0x1a, 0x92, - 0x49, 0xa7, 0x2c, 0x7c, 0x49, 0x4c, 0xf4, 0x3e, 0xcc, 0xf4, 0xbd, 0xa1, 0x1b, 0x84, 0x65, 0xc9, - 0xd7, 0xa7, 0x43, 0xbf, 0xcb, 0x64, 0x63, 0x70, 0xfe, 0x97, 0x62, 0x09, 0x69, 0xbe, 0x03, 0x8b, - 0x49, 0x5e, 0xb4, 0x06, 0x0b, 0x6d, 0x42, 0x03, 0xc7, 0xe5, 0xf1, 0xeb, 0xb6, 0x15, 0xec, 0xc9, - 0xb1, 0x9f, 0x97, 0x20, 0x0b, 0x1b, 0x3a, 0x19, 0x27, 0xf9, 0xcd, 0xff, 0x0c, 0xef, 0x82, 0xd4, - 0x11, 0xa2, 0x37, 0xb4, 0xdd, 0xf7, 0x62, 0x62, 0xf7, 0x9d, 0x1b, 0x13, 0x50, 0xb6, 0xe0, 0x1d, - 0x98, 0xa1, 0x6a, 0xd9, 0xf7, 0xa5, 0xb4, 0x00, 0x57, 0xa4, 0xae, 0xda, 0xa4, 0xf2, 0x18, 0x57, - 0xe6, 0xcd, 0x12, 0x01, 0x3d, 0xe0, 0x77, 0x1e, 0x22, 0xe3, 0x94, 0x5b, 0xee, 0xe5, 0x34, 0xb8, - 0x28, 0x45, 0xd5, 0x10, 0x4f, 0xcb, 0xab, 0x11, 0x41, 0xc2, 0x31, 0x94, 0xf9, 0x7b, 0xb3, 0xa0, - 0x64, 0x99, 0xe8, 0xeb, 0x30, 0x4f, 0x89, 0x7f, 0xe0, 0xd8, 0x64, 0xcd, 0xb6, 0xd9, 0xc4, 0xca, - 0x71, 0x47, 0xd7, 0xfc, 0x2d, 0x8d, 0x8a, 0x13, 0xdc, 0xfc, 0x0d, 0x85, 0x6a, 0x55, 0xd9, 0xdf, - 0x50, 0x3c, 0xce, 0x9e, 0xe2, 0x6a, 0x6c, 0xfe, 0x69, 0x57, 0x63, 0xbf, 0x0d, 0x25, 0xaa, 0x87, - 0x41, 0x5f, 0xcb, 0x1e, 0xe1, 0xca, 0xc8, 0x23, 0xba, 0x28, 0x8a, 0xc2, 0x8d, 0x08, 0x93, 0x4d, - 0x8a, 0xcc, 0x4f, 0x8a, 0xd3, 0x4d, 0xca, 0x63, 0x32, 0x93, 0x6f, 0x42, 0xd9, 0x27, 0x62, 0x82, - 0xa8, 0xf4, 0x2d, 0xa9, 0x25, 0x1a, 0x2c, 0x99, 0x30, 0xf9, 0x70, 0xe8, 0xf8, 0xa4, 0x4f, 0xdc, - 0x80, 0xc6, 0x09, 0x78, 0x48, 0xa5, 0x38, 0x46, 0x43, 0x1f, 0x00, 0x0c, 0xa2, 0x7a, 0xbf, 0x2c, - 0xff, 0x64, 0x0e, 0xfb, 0xf5, 0x9b, 0x82, 0x38, 0xdf, 0x88, 0xdb, 0xb1, 0x82, 0x8e, 0xde, 0x87, - 0x0b, 0x71, 0x06, 0xbb, 0x41, 0xac, 0x36, 0x0f, 0xce, 0xe4, 0xa5, 0x9a, 0xb8, 0x66, 0xfa, 0xea, - 0xd1, 0xa8, 0x76, 0x61, 0x7d, 0x12, 0x13, 0x9e, 0x2c, 0x8f, 0xfa, 0x30, 0xe7, 0x7a, 0x6d, 0xd2, - 0x22, 0x3d, 0x62, 0x07, 0x9e, 0x2f, 0x53, 0xcd, 0x2c, 0xa5, 0x20, 0x51, 0xb4, 0xb4, 0x7a, 0xf7, - 0x14, 0x71, 0x51, 0xd8, 0x52, 0x5b, 0xb0, 0x06, 0x8f, 0xde, 0x84, 0x79, 0xee, 0xa4, 0x76, 0xfc, - 0x21, 0x0d, 0x48, 0x7b, 0x7d, 0x8d, 0xa7, 0xa4, 0x25, 0x71, 0xd6, 0xdd, 0xd5, 0x28, 0x38, 0xc1, - 0x69, 0xfe, 0xa1, 0x01, 0x29, 0xcf, 0xab, 0x34, 0xd3, 0x37, 0x9e, 0xb6, 0xe9, 0xbf, 0xa4, 0xb9, - 0x28, 0xf5, 0x02, 0x46, 0x73, 0x3f, 0xe6, 0x5f, 0x18, 0x70, 0x36, 0xad, 0x36, 0xc6, 0x6c, 0x30, - 0xf6, 0x4b, 0xc6, 0x94, 0x65, 0x42, 0xf5, 0xd6, 0x76, 0xcc, 0x35, 0x31, 0x5f, 0xa4, 0xb8, 0xe8, - 0x0d, 0xc7, 0x97, 0x7d, 0x8c, 0x7c, 0xd1, 0x86, 0x46, 0xc5, 0x09, 0x6e, 0xf3, 0x07, 0x05, 0x58, - 0x4a, 0xc9, 0x55, 0xd0, 0xa6, 0xbc, 0x15, 0x99, 0xe2, 0x42, 0x2f, 0x3a, 0x40, 0xb5, 0x9b, 0x11, - 0x18, 0x0c, 0x7b, 0xbd, 0x27, 0xbb, 0xd8, 0x0b, 0xe5, 0xb1, 0x82, 0x15, 0x5e, 0x73, 0xe4, 0x4f, - 0x70, 0xcd, 0x71, 0x07, 0x10, 0xf9, 0x78, 0xe0, 0x51, 0x22, 0x73, 0x4e, 0x8f, 0xc7, 0x1d, 0x05, - 0x6e, 0x83, 0xd1, 0xd3, 0xa9, 0xcd, 0x31, 0x0e, 0x9c, 0x22, 0x85, 0x56, 0xa0, 0xdc, 0xf1, 0x7c, - 0x9b, 0xb0, 0x5e, 0x72, 0xcf, 0xa5, 0x54, 0xed, 0x6e, 0x85, 0x04, 0x1c, 0xf3, 0xa0, 0xf7, 0xe2, - 0xaa, 0xee, 0x4c, 0xe6, 0xcb, 0x48, 0x31, 0x66, 0xee, 0x28, 0x26, 0x97, 0x73, 0xd7, 0x60, 0x81, - 0x0b, 0xac, 0x6d, 0x6f, 0x85, 0xf7, 0x45, 0xb3, 0xfa, 0xe9, 0xde, 0xd0, 0xc9, 0x38, 0xc9, 0x6f, - 0xfe, 0xb8, 0x08, 0x4b, 0x29, 0x19, 0x7a, 0x74, 0x47, 0x66, 0x3c, 0xc9, 0x1d, 0xd9, 0x17, 0x65, - 0x09, 0x2f, 0xc3, 0xac, 0xeb, 0xad, 0x5b, 0xf6, 0x1e, 0x91, 0xef, 0x11, 0xa2, 0x29, 0xba, 0x27, - 0x9a, 0x71, 0x48, 0x0f, 0x8d, 0xa6, 0x70, 0x02, 0xa3, 0x99, 0x7a, 0xa1, 0xbf, 0x1e, 0x56, 0x49, - 0x3a, 0x4e, 0x8f, 0xf0, 0x58, 0x6b, 0x26, 0xb1, 0x33, 0x35, 0x2a, 0x4e, 0x70, 0xa3, 0x6f, 0x40, - 0x59, 0x2c, 0x8f, 0xdf, 0xa5, 0x19, 0x6e, 0xf3, 0xa2, 0xce, 0x34, 0x42, 0x21, 0x1c, 0xcb, 0xa3, - 0x01, 0x9c, 0xe7, 0xe1, 0x3c, 0xf3, 0xd7, 0x7d, 0xe7, 0x3b, 0x22, 0x9e, 0x13, 0xcf, 0xa6, 0x44, - 0x9d, 0xf2, 0xc6, 0xd1, 0xa8, 0x76, 0x7e, 0x2b, 0x9d, 0xe5, 0xd1, 0x64, 0x12, 0x9e, 0x04, 0x8b, - 0xbe, 0x09, 0xb3, 0x07, 0x3c, 0xba, 0x0a, 0x6f, 0x16, 0xea, 0xd3, 0x45, 0xb7, 0xf1, 0x2a, 0x8a, - 0xff, 0x14, 0x87, 0x78, 0xe6, 0x0f, 0x0c, 0x48, 0xbf, 0xde, 0xd3, 0xe7, 0xcc, 0x78, 0xc2, 0x39, - 0x7b, 0x31, 0xb6, 0x2b, 0x51, 0x8e, 0xaf, 0xa4, 0xd9, 0x94, 0xf9, 0x47, 0x06, 0x2c, 0xa5, 0xd4, - 0x27, 0xbe, 0x1c, 0x47, 0xd2, 0x67, 0xb9, 0x64, 0xe7, 0x36, 0x0f, 0x88, 0x1b, 0x9c, 0xec, 0x52, - 0x71, 0x53, 0x5c, 0xe5, 0xe5, 0x64, 0x55, 0x3e, 0x53, 0x71, 0x81, 0xd7, 0x77, 0xf5, 0x3b, 0xbc, - 0x27, 0xf0, 0xdc, 0x93, 0xef, 0x8c, 0x0b, 0xcf, 0xfa, 0xce, 0xd8, 0xfc, 0x4b, 0x03, 0xe6, 0xf5, - 0xbb, 0x4a, 0xf4, 0x55, 0xc8, 0x0f, 0x7d, 0x47, 0x4e, 0x6a, 0xd4, 0xfb, 0x77, 0xf0, 0x16, 0x66, - 0xed, 0x8c, 0xec, 0x93, 0x8e, 0x5c, 0xb1, 0x88, 0x8c, 0x49, 0x07, 0xb3, 0x76, 0x44, 0xa0, 0x32, - 0xf0, 0xbd, 0x8f, 0x0f, 0xc5, 0x39, 0x3f, 0xc5, 0xfb, 0xea, 0xed, 0x58, 0x2a, 0x2e, 0x03, 0x2b, - 0x8d, 0x58, 0xc5, 0xe5, 0x11, 0xd4, 0x78, 0x71, 0xeb, 0xcb, 0x61, 0xae, 0x7f, 0x9b, 0x83, 0x59, - 0x69, 0x34, 0xe8, 0x43, 0x98, 0xef, 0x6a, 0xd3, 0x3b, 0x45, 0xb7, 0x12, 0x77, 0xc8, 0x91, 0xcb, - 0xd5, 0xdb, 0x71, 0x42, 0x01, 0xfa, 0x6d, 0x38, 0xd3, 0x75, 0x02, 0x7d, 0x4c, 0x53, 0x64, 0xfe, - 0xb7, 0x93, 0xb2, 0x8d, 0x0b, 0x52, 0xf1, 0x99, 0x31, 0x12, 0x1e, 0xd7, 0x84, 0xee, 0x43, 0xc1, - 0x27, 0x9d, 0x69, 0x1e, 0x29, 0xb1, 0x3d, 0x45, 0x3a, 0x7c, 0x8f, 0x45, 0xd1, 0x17, 0x26, 0x1d, - 0x8a, 0x39, 0x90, 0xf9, 0xbb, 0x62, 0xa9, 0x13, 0x05, 0xbe, 0xff, 0x89, 0x4f, 0x1e, 0xfe, 0xcb, - 0x00, 0x88, 0x3b, 0xfb, 0xff, 0x6f, 0x6d, 0xcd, 0x3f, 0xcf, 0xc1, 0x38, 0x23, 0xdb, 0x17, 0xb6, - 0xc8, 0x1e, 0x8d, 0xd4, 0xcf, 0x8c, 0x24, 0x15, 0x3d, 0x84, 0x19, 0x8b, 0x7f, 0xa7, 0x33, 0x45, - 0x8f, 0x85, 0xaa, 0x75, 0xcf, 0x0d, 0x7c, 0xaf, 0xf7, 0x0e, 0x25, 0xbe, 0xf2, 0x71, 0x0c, 0xc7, - 0xc2, 0x12, 0x13, 0x11, 0x96, 0x9e, 0xc8, 0x6f, 0x6d, 0xa6, 0x78, 0xe6, 0x3e, 0xae, 0x40, 0x49, - 0x55, 0x24, 0x1c, 0x8e, 0x91, 0xa7, 0xb8, 0x77, 0x36, 0xbf, 0x6f, 0xc0, 0x62, 0xb2, 0x1a, 0xce, - 0xe4, 0x79, 0xb0, 0xb1, 0xb5, 0x91, 0xbc, 0x6b, 0xd8, 0x12, 0xcd, 0x38, 0xa4, 0xa3, 0x3b, 0x30, - 0xcb, 0x82, 0x4e, 0x2c, 0xbd, 0x6d, 0xc6, 0x90, 0x95, 0x9f, 0xef, 0xb7, 0x84, 0x1c, 0x0e, 0x01, - 0xcc, 0xbf, 0x37, 0x00, 0x8d, 0xd7, 0x4b, 0xd1, 0x36, 0x9c, 0x15, 0x5f, 0x52, 0xc8, 0x47, 0x00, - 0x5b, 0x5a, 0xd7, 0x2e, 0xc9, 0xae, 0x9d, 0x6d, 0xa6, 0xf0, 0xe0, 0x54, 0xc9, 0x28, 0xc8, 0xce, - 0x9d, 0x3c, 0xc8, 0x7e, 0x09, 0x66, 0x06, 0x6c, 0xae, 0xda, 0x32, 0x12, 0x8e, 0x56, 0x7c, 0x9b, - 0xb7, 0x62, 0x49, 0x35, 0xff, 0x2a, 0x07, 0xd5, 0x49, 0xcf, 0xa8, 0xbf, 0x80, 0x91, 0x3d, 0xd4, - 0x46, 0xf6, 0x66, 0xe6, 0x37, 0x3b, 0x81, 0x4f, 0xac, 0xfe, 0x8e, 0xd5, 0x3d, 0x3e, 0xc7, 0xec, - 0xc3, 0x82, 0xa2, 0xf5, 0x84, 0x9f, 0xcc, 0x44, 0x39, 0x52, 0x53, 0x87, 0xc2, 0x49, 0x6c, 0xb3, - 0x05, 0x10, 0xbf, 0x03, 0xcd, 0x50, 0x43, 0x7e, 0x01, 0x8a, 0x07, 0x56, 0x6f, 0x18, 0x7e, 0x79, - 0x18, 0xbd, 0xe6, 0x7e, 0xc0, 0x1a, 0xb1, 0xa0, 0x99, 0x7f, 0x9c, 0x83, 0x8a, 0xf2, 0x4e, 0xe9, - 0x69, 0xa5, 0xdf, 0xcf, 0x41, 0xce, 0xa2, 0x3c, 0xdd, 0x29, 0x8b, 0x8b, 0xe5, 0x35, 0x8a, 0x73, - 0x16, 0x45, 0xef, 0x42, 0x71, 0x60, 0x05, 0x7b, 0xe1, 0x5b, 0xf4, 0xab, 0xd3, 0xbd, 0xa2, 0x62, - 0xe9, 0x49, 0x3c, 0x0e, 0xf6, 0x8f, 0x62, 0x81, 0x97, 0xc8, 0xf2, 0xf2, 0x4f, 0x2f, 0xcb, 0x33, - 0xbf, 0x67, 0xc0, 0x42, 0xa2, 0x0f, 0xe8, 0x2a, 0x00, 0x8d, 0xfe, 0xc9, 0x25, 0x88, 0x0a, 0x69, - 0x31, 0x1f, 0x56, 0xb8, 0x9e, 0xb8, 0x60, 0xd2, 0x83, 0xf3, 0x13, 0x8c, 0x93, 0xa5, 0x88, 0x6c, - 0xc5, 0xe9, 0xc0, 0xb2, 0x49, 0xf2, 0xc9, 0xfd, 0xbd, 0x90, 0x80, 0x63, 0x9e, 0xc8, 0x78, 0x72, - 0x93, 0x8c, 0xc7, 0xfc, 0x07, 0x03, 0x2e, 0x1d, 0x77, 0x99, 0xcb, 0x92, 0x7e, 0x79, 0x63, 0x1b, - 0xa5, 0x99, 0x89, 0x92, 0xfe, 0x1d, 0x9d, 0x8c, 0x93, 0xfc, 0xe8, 0x3a, 0x54, 0x94, 0x26, 0xd9, - 0x99, 0x28, 0x8e, 0x54, 0xc4, 0xb1, 0xca, 0xf7, 0x04, 0x61, 0xbc, 0xf9, 0x37, 0x06, 0x9c, 0x4d, - 0xab, 0x1c, 0xa2, 0x6e, 0xf8, 0x8d, 0x84, 0xc8, 0xdd, 0x1a, 0x27, 0xac, 0x40, 0xd6, 0xf9, 0x97, - 0x12, 0x9b, 0x6e, 0xe0, 0x1f, 0xa6, 0x7f, 0x3d, 0x71, 0xf1, 0x26, 0x40, 0xcc, 0x83, 0x16, 0x21, - 0xbf, 0x4f, 0x0e, 0xc5, 0xc4, 0x61, 0xf6, 0x13, 0x9d, 0xd5, 0x36, 0xad, 0xdc, 0xa5, 0x6f, 0xe6, - 0x6e, 0x1a, 0x6f, 0x96, 0xfe, 0xe0, 0x4f, 0x6a, 0xa7, 0xbe, 0xfb, 0xcb, 0xcb, 0xa7, 0xcc, 0x1f, - 0x1a, 0xa0, 0x46, 0xd9, 0xe8, 0x15, 0x28, 0xef, 0x05, 0xc1, 0x80, 0x37, 0xc9, 0x27, 0x59, 0xfc, - 0x4a, 0xe1, 0xed, 0x9d, 0x9d, 0x6d, 0xde, 0x88, 0x63, 0x3a, 0xaa, 0x03, 0xb0, 0x3f, 0x54, 0x70, - 0x17, 0xe2, 0x67, 0x94, 0x8c, 0xbb, 0x25, 0xd8, 0x15, 0x0e, 0x91, 0x8c, 0x0a, 0x66, 0xf1, 0xe9, - 0x9d, 0x4c, 0x46, 0x05, 0x67, 0x48, 0x33, 0xff, 0xcc, 0x80, 0x33, 0x63, 0x4f, 0x00, 0xd1, 0x76, - 0x14, 0x7e, 0x4f, 0x5b, 0x7c, 0x9c, 0x10, 0xa8, 0x3f, 0xf1, 0x2e, 0xba, 0x09, 0x67, 0x05, 0x22, - 0xd7, 0x1a, 0x6f, 0xa1, 0xc7, 0xba, 0x53, 0xf3, 0x4f, 0x0d, 0x80, 0xb8, 0x1c, 0x86, 0x76, 0x61, - 0x4e, 0x74, 0x49, 0x8b, 0x23, 0xb3, 0x0f, 0xf0, 0xac, 0x54, 0x31, 0xd7, 0x52, 0x50, 0xb0, 0x86, - 0xc9, 0xf6, 0x35, 0xaf, 0x42, 0xf3, 0xdd, 0x95, 0xd3, 0xf7, 0xf5, 0xdd, 0x90, 0x80, 0x63, 0x1e, - 0xf3, 0x17, 0x79, 0x58, 0x4a, 0x79, 0x74, 0xf2, 0x7f, 0xba, 0xa8, 0xfa, 0x32, 0xcc, 0x8a, 0xef, - 0x10, 0x68, 0x32, 0xba, 0x13, 0x9f, 0x29, 0x50, 0x1c, 0xd2, 0xd1, 0x2a, 0x54, 0x1c, 0xd7, 0x16, - 0x77, 0x2c, 0x56, 0x58, 0x4c, 0x13, 0xf7, 0xcf, 0x71, 0x33, 0x56, 0x79, 0xf4, 0xea, 0xdb, 0x4c, - 0x86, 0xea, 0xdb, 0x17, 0x58, 0x7e, 0xfa, 0x16, 0x9c, 0x19, 0x0b, 0x7d, 0xb3, 0xc5, 0x01, 0x84, - 0x7f, 0xfe, 0x9e, 0x88, 0x03, 0xc4, 0x57, 0xef, 0x82, 0x66, 0xfe, 0xc8, 0x80, 0xf9, 0x44, 0x8e, - 0x70, 0xa2, 0x52, 0xcd, 0x7d, 0xb5, 0x54, 0x73, 0xb2, 0xfc, 0x46, 0x2b, 0xda, 0x98, 0x77, 0x20, - 0xfd, 0x15, 0x7b, 0x72, 0x31, 0x8d, 0xc7, 0x2f, 0xa6, 0xf9, 0xd3, 0x1c, 0x94, 0xa3, 0xc7, 0x7f, - 0xe8, 0x35, 0x6d, 0xe6, 0x2e, 0xa8, 0x33, 0xf7, 0x68, 0x54, 0x13, 0x8c, 0xca, 0x34, 0xbe, 0x0f, - 0xe5, 0xe8, 0xf1, 0x68, 0x54, 0x8a, 0xca, 0x1e, 0xe7, 0x45, 0x56, 0x13, 0xbd, 0x48, 0xc5, 0x31, - 0x1e, 0x0b, 0x7d, 0xc3, 0xd7, 0x9d, 0x77, 0x9d, 0x5e, 0xcf, 0xa1, 0xf2, 0x82, 0x2d, 0xcf, 0x2f, - 0xd8, 0xa2, 0xd0, 0x77, 0x23, 0x85, 0x07, 0xa7, 0x4a, 0xa2, 0x6d, 0x28, 0xd2, 0x80, 0x0c, 0xa8, - 0xac, 0x39, 0xbf, 0x92, 0xe9, 0x5d, 0x24, 0x19, 0xf0, 0x94, 0x3e, 0x32, 0x11, 0xd6, 0x42, 0xb1, - 0x00, 0x32, 0xff, 0xd5, 0x80, 0x52, 0xc8, 0x82, 0x5e, 0xd5, 0x26, 0xaf, 0x9a, 0x98, 0x3c, 0xce, - 0xf7, 0xbf, 0x76, 0xee, 0xcc, 0x91, 0x01, 0xf3, 0xfa, 0x1b, 0x0f, 0xa5, 0x90, 0x64, 0x1c, 0x57, - 0x48, 0x42, 0xaf, 0x42, 0xc9, 0xea, 0xf5, 0xbc, 0x8f, 0x36, 0xdd, 0x03, 0x59, 0xbc, 0x8d, 0xee, - 0x9e, 0xd7, 0x64, 0x3b, 0x8e, 0x38, 0xd0, 0x01, 0x2c, 0x08, 0xb9, 0xf8, 0xf5, 0x6e, 0x3e, 0xf3, - 0x15, 0x68, 0xda, 0x39, 0xd6, 0x58, 0x62, 0x91, 0x57, 0x4b, 0xc7, 0xc4, 0x49, 0x25, 0x8d, 0x2b, - 0x9f, 0x7e, 0xbe, 0x7c, 0xea, 0xe7, 0x9f, 0x2f, 0x9f, 0xfa, 0xec, 0xf3, 0xe5, 0x53, 0xdf, 0x3d, - 0x5a, 0x36, 0x3e, 0x3d, 0x5a, 0x36, 0x7e, 0x7e, 0xb4, 0x6c, 0x7c, 0x76, 0xb4, 0x6c, 0xfc, 0xf3, - 0xd1, 0xb2, 0xf1, 0xfb, 0xff, 0xb2, 0x7c, 0xea, 0x5b, 0xb9, 0x83, 0xd5, 0xff, 0x0e, 0x00, 0x00, - 0xff, 0xff, 0x58, 0xc4, 0x75, 0x0c, 0x57, 0x46, 0x00, 0x00, + 0x8e, 0x0d, 0x39, 0xb6, 0x87, 0x4b, 0x59, 0x52, 0x64, 0x1b, 0x71, 0xc0, 0x21, 0x29, 0x99, 0xda, + 0x91, 0x44, 0xd4, 0xd0, 0xb2, 0x77, 0x2d, 0x6c, 0xd2, 0xec, 0xa9, 0x19, 0xb6, 0x39, 0xd3, 0x3d, + 0xee, 0xea, 0xa1, 0xcd, 0x05, 0x02, 0x2c, 0x02, 0x2c, 0x92, 0xf5, 0x5e, 0xb2, 0x97, 0x45, 0x92, + 0x4b, 0x12, 0x2c, 0x72, 0xca, 0x29, 0x01, 0x02, 0x6c, 0xb0, 0x97, 0x00, 0xd9, 0x83, 0x0f, 0x09, + 0xb0, 0x41, 0x02, 0xc4, 0xc0, 0x2e, 0x06, 0x31, 0x73, 0x08, 0x90, 0x43, 0x80, 0x5c, 0x75, 0x08, + 0x82, 0xfa, 0xe9, 0xee, 0xaa, 0x9e, 0x1e, 0xaa, 0x87, 0x92, 0x95, 0x4d, 0x72, 0x9b, 0xa9, 0xf7, + 0xde, 0xf7, 0xea, 0xe7, 0xd5, 0xab, 0xf7, 0x5e, 0x55, 0xc3, 0x6a, 0xd7, 0x09, 0xf6, 0x86, 0xbb, + 0x75, 0xdb, 0xeb, 0xaf, 0x78, 0x03, 0xe2, 0xd2, 0x3d, 0xa7, 0x13, 0xac, 0x58, 0x03, 0x67, 0x65, + 0x77, 0xe8, 0xf4, 0xda, 0x2b, 0x07, 0xab, 0x2b, 0x5d, 0xe2, 0x12, 0xdf, 0x0a, 0x48, 0xbb, 0x3e, + 0xf0, 0xbd, 0xc0, 0x43, 0xcf, 0xc7, 0x22, 0xf5, 0x48, 0xa4, 0x6e, 0x0d, 0x9c, 0x3a, 0x17, 0xa9, + 0x1f, 0xac, 0x5e, 0x7c, 0x4d, 0x41, 0xed, 0x7a, 0x5d, 0x6f, 0x85, 0x4b, 0xee, 0x0e, 0x3b, 0xfc, + 0x1f, 0xff, 0xc3, 0x7f, 0x09, 0xc4, 0x8b, 0xe6, 0xfe, 0x4d, 0x5a, 0x77, 0x3c, 0xae, 0xd6, 0xf6, + 0x7c, 0x92, 0xa2, 0xf5, 0xe2, 0xb5, 0x98, 0xa7, 0x6f, 0xd9, 0x7b, 0x8e, 0x4b, 0xfc, 0xc3, 0x95, + 0xc1, 0x7e, 0x97, 0x35, 0xd0, 0x95, 0x3e, 0x09, 0xac, 0x34, 0xa9, 0x1b, 0x93, 0xa4, 0xfc, 0xa1, + 0x1b, 0x38, 0x7d, 0xb2, 0x42, 0xed, 0x3d, 0xd2, 0xb7, 0x92, 0x72, 0xe6, 0xdf, 0x14, 0xe0, 0x42, + 0xc3, 0x71, 0x2d, 0xff, 0xb0, 0xc1, 0xc6, 0x84, 0xc9, 0x47, 0x43, 0x42, 0x83, 0xfb, 0x83, 0xc0, + 0xf1, 0x5c, 0x8a, 0x7e, 0x0b, 0x4a, 0x4c, 0x61, 0xdb, 0x0a, 0xac, 0xaa, 0x71, 0xd9, 0xb8, 0x52, + 0xb9, 0xfa, 0xb5, 0xba, 0x50, 0x54, 0x57, 0x15, 0xd5, 0x07, 0xfb, 0x5d, 0xd6, 0x40, 0xeb, 0x8c, + 0xbb, 0x7e, 0xb0, 0x5a, 0xbf, 0xbf, 0xfb, 0x21, 0xb1, 0x83, 0xbb, 0x24, 0xb0, 0x1a, 0xe8, 0xb3, + 0x51, 0xed, 0xd4, 0xd1, 0xa8, 0x06, 0x71, 0x1b, 0x8e, 0x50, 0xd1, 0x4b, 0x30, 0x63, 0xd1, 0x5b, + 0x4e, 0x8f, 0x54, 0x73, 0x97, 0x8d, 0x2b, 0xe5, 0xc6, 0xbc, 0xe4, 0x9e, 0x59, 0xe3, 0xad, 0x58, + 0x52, 0xd1, 0x0d, 0x98, 0xf7, 0xc9, 0x81, 0x43, 0x1d, 0xcf, 0x5d, 0xf7, 0xfa, 0x7d, 0x27, 0xa8, + 0xe6, 0x75, 0x7e, 0xd1, 0x8a, 0x13, 0x5c, 0xe8, 0x0d, 0x58, 0x08, 0x5b, 0xee, 0x12, 0x4a, 0xad, + 0x2e, 0xa9, 0x16, 0xb8, 0xe0, 0x82, 0x14, 0x9c, 0x95, 0xcd, 0x38, 0xc9, 0x87, 0x1a, 0x80, 0xc2, + 0xa6, 0xb5, 0x61, 0xb0, 0xe7, 0xf9, 0xf7, 0xac, 0x3e, 0xa9, 0x16, 0xb9, 0x74, 0x34, 0xa8, 0x98, + 0x82, 0x53, 0xb8, 0xd1, 0x26, 0x2c, 0xe9, 0xad, 0x9b, 0x7d, 0xcb, 0xe9, 0x55, 0x67, 0x38, 0xc8, + 0x92, 0x04, 0xa9, 0x28, 0x24, 0x9c, 0xc6, 0x8f, 0xbe, 0x0e, 0xe7, 0xf4, 0x71, 0x05, 0x44, 0xf4, + 0x66, 0x96, 0x03, 0x9d, 0x93, 0x40, 0xa7, 0x35, 0x22, 0x4e, 0x97, 0x41, 0xf7, 0xe0, 0xb9, 0x31, + 0x82, 0xe8, 0x56, 0x89, 0xa3, 0x3d, 0x27, 0xd1, 0xe6, 0x75, 0x2a, 0x9e, 0x20, 0x65, 0xbe, 0x05, + 0x67, 0x14, 0x0b, 0x6a, 0x79, 0x43, 0xdf, 0x26, 0xca, 0xba, 0x1a, 0xc7, 0xad, 0xab, 0xf9, 0xa9, + 0x01, 0xe7, 0x1a, 0x4e, 0xb0, 0x3b, 0xb4, 0xf7, 0x49, 0xf0, 0x1e, 0xd9, 0x7d, 0xc7, 0xf3, 0xf6, + 0xd7, 0xad, 0x21, 0x25, 0xe8, 0x23, 0x00, 0xdb, 0xeb, 0xf7, 0x3d, 0xb7, 0x35, 0x20, 0xb6, 0xb4, + 0xbe, 0xeb, 0xf5, 0xc7, 0x6e, 0xc9, 0xfa, 0x3a, 0x17, 0x52, 0xa1, 0x1a, 0x17, 0xa5, 0x72, 0x34, + 0x4e, 0xc3, 0x8a, 0x12, 0xf3, 0x07, 0x39, 0x28, 0xf2, 0x41, 0x3c, 0x03, 0xc3, 0xbf, 0x07, 0x05, + 0xca, 0x06, 0x96, 0xe3, 0xe8, 0xaf, 0x66, 0x18, 0x98, 0x98, 0xde, 0x01, 0xb1, 0x1b, 0x73, 0x12, + 0xb9, 0xc0, 0xfe, 0x61, 0x8e, 0x83, 0x1e, 0xc0, 0x0c, 0x0d, 0xac, 0x60, 0x48, 0xf9, 0xc6, 0xa8, + 0x5c, 0xad, 0x67, 0x46, 0xe4, 0x52, 0xf1, 0x02, 0x89, 0xff, 0x58, 0xa2, 0x99, 0x7f, 0x9f, 0x87, + 0x79, 0xce, 0xb7, 0xee, 0xb9, 0x6d, 0x87, 0xb9, 0x05, 0x74, 0x03, 0x0a, 0xc1, 0xe1, 0x20, 0x5c, + 0x59, 0x33, 0xec, 0xcc, 0xce, 0xe1, 0x80, 0x3c, 0x1a, 0xd5, 0x90, 0xce, 0xcd, 0x5a, 0x31, 0xe7, + 0x47, 0xcd, 0xa8, 0x8b, 0x62, 0xaf, 0x5f, 0xd3, 0x55, 0x3e, 0x1a, 0xd5, 0x52, 0xfc, 0x63, 0x3d, + 0x42, 0xd2, 0x3b, 0x86, 0x3e, 0x84, 0xf9, 0x9e, 0x45, 0x83, 0x77, 0x07, 0x6d, 0x2b, 0x20, 0x3b, + 0x4e, 0x9f, 0xf0, 0x5d, 0x55, 0xb9, 0xfa, 0xab, 0xd9, 0x16, 0x8a, 0x49, 0xc4, 0xa6, 0xde, 0xd4, + 0x90, 0x70, 0x02, 0x19, 0x1d, 0x00, 0x62, 0x2d, 0x3b, 0xbe, 0xe5, 0x52, 0x31, 0x2a, 0xa6, 0x2f, + 0x3f, 0xb5, 0xbe, 0xc8, 0x10, 0x9b, 0x63, 0x68, 0x38, 0x45, 0x03, 0xdb, 0x45, 0x3e, 0xb1, 0xa8, + 0xe7, 0x4a, 0xa7, 0x15, 0x2d, 0x12, 0xe6, 0xad, 0x58, 0x52, 0xd1, 0xcb, 0x30, 0xdb, 0x97, 0xde, + 0xad, 0x98, 0xee, 0xdd, 0x42, 0xba, 0xf9, 0xa3, 0x1c, 0x54, 0xc2, 0x15, 0xea, 0x38, 0xdd, 0x67, + 0x60, 0xe9, 0x3b, 0x9a, 0xa5, 0x5f, 0xcd, 0x6a, 0x97, 0xa2, 0x7f, 0x13, 0xed, 0xfd, 0x61, 0xc2, + 0xde, 0xaf, 0x4d, 0x89, 0x7b, 0xbc, 0xd5, 0xff, 0xd4, 0x80, 0x05, 0x85, 0xbb, 0xe9, 0xd0, 0x00, + 0x3d, 0x1c, 0x9b, 0xa9, 0x7a, 0xb6, 0x99, 0x62, 0xd2, 0x7c, 0x9e, 0x16, 0xa5, 0xb6, 0x52, 0xd8, + 0xa2, 0xcc, 0x52, 0x0b, 0x8a, 0x4e, 0x40, 0xfa, 0x6c, 0x6f, 0xe4, 0xa7, 0xd9, 0xbe, 0xa2, 0x83, + 0x8d, 0xd3, 0x12, 0xba, 0xb8, 0xc5, 0x40, 0xb0, 0xc0, 0x32, 0x7f, 0x91, 0xd7, 0x86, 0xc1, 0xa6, + 0x0f, 0xd9, 0x50, 0x0a, 0x7c, 0xa7, 0xdb, 0x25, 0x3e, 0xad, 0x1a, 0x5c, 0xd7, 0xf5, 0xac, 0xba, + 0x76, 0x84, 0xdc, 0xb6, 0xd7, 0x73, 0xec, 0xc3, 0x78, 0x34, 0xb2, 0x99, 0xe2, 0x08, 0x18, 0xad, + 0x41, 0xd9, 0x1f, 0xba, 0x82, 0x51, 0xee, 0xf6, 0x17, 0x24, 0x7b, 0x19, 0x87, 0x84, 0x47, 0xa3, + 0x9a, 0x70, 0x2d, 0x51, 0x0b, 0x8e, 0xa5, 0x90, 0xa5, 0xf9, 0x7f, 0xb1, 0xc8, 0xaf, 0x65, 0xf6, + 0xff, 0xdc, 0x6e, 0x22, 0xbb, 0x8c, 0xdb, 0x54, 0x7f, 0x8f, 0xda, 0x70, 0x89, 0x0e, 0x6d, 0x9b, + 0x50, 0xda, 0x19, 0xf6, 0x78, 0x4f, 0xe8, 0x3b, 0x0e, 0x0d, 0x3c, 0xff, 0xb0, 0xe9, 0xb0, 0x10, + 0x83, 0x6d, 0xba, 0x62, 0xe3, 0xf2, 0xd1, 0xa8, 0x76, 0xa9, 0x75, 0x0c, 0x1f, 0x3e, 0x16, 0x05, + 0xbd, 0x0f, 0xd5, 0x8e, 0xe5, 0xf4, 0x48, 0x3b, 0x45, 0x43, 0x91, 0x6b, 0xb8, 0x74, 0x34, 0xaa, + 0x55, 0x6f, 0x4d, 0xe0, 0xc1, 0x13, 0xa5, 0xcd, 0x7f, 0x36, 0xe0, 0xcc, 0x98, 0x4d, 0xa3, 0xeb, + 0x50, 0x61, 0xae, 0xe4, 0x01, 0xf1, 0xd9, 0x61, 0xcd, 0x4d, 0x35, 0x1f, 0xc7, 0x1a, 0xcd, 0x98, + 0x84, 0x55, 0x3e, 0xf4, 0xa9, 0x01, 0x4b, 0x4e, 0xdf, 0xea, 0x92, 0xf5, 0x3d, 0xcb, 0xed, 0x92, + 0x70, 0x51, 0xa5, 0x3d, 0xbe, 0x95, 0x61, 0xe6, 0xb7, 0xc6, 0xa4, 0xe5, 0x2e, 0xfb, 0x8a, 0x54, + 0xbe, 0x34, 0xce, 0x41, 0x71, 0x9a, 0x52, 0xf3, 0xc7, 0x06, 0x94, 0xf9, 0xc8, 0x9e, 0xc1, 0xce, + 0xbb, 0xab, 0xef, 0xbc, 0x2b, 0x59, 0x77, 0xc3, 0x84, 0x3d, 0x07, 0x50, 0x12, 0x3d, 0xf7, 0xba, + 0xe6, 0x7f, 0x16, 0xe4, 0xfe, 0x6b, 0x7a, 0xdd, 0x30, 0xa6, 0x5e, 0x81, 0xb2, 0xed, 0xb9, 0x81, + 0xc5, 0xba, 0x2c, 0x8f, 0xd0, 0x33, 0xe1, 0xd6, 0x58, 0x0f, 0x09, 0x38, 0xe6, 0x61, 0x87, 0x40, + 0xc7, 0xeb, 0xf5, 0xbc, 0x8f, 0xf9, 0x46, 0x2a, 0xc5, 0x3e, 0xeb, 0x16, 0x6f, 0xc5, 0x92, 0x8a, + 0x5e, 0x85, 0xd2, 0x80, 0x85, 0x68, 0x9e, 0xf4, 0x89, 0xa5, 0x78, 0xd4, 0xdb, 0xb2, 0x1d, 0x47, + 0x1c, 0xe8, 0x1a, 0xcc, 0x51, 0xc7, 0xb5, 0x49, 0x8b, 0xd8, 0x9e, 0xdb, 0xa6, 0xdc, 0xd6, 0xf3, + 0x8d, 0xc5, 0xa3, 0x51, 0x6d, 0xae, 0xa5, 0xb4, 0x63, 0x8d, 0x0b, 0xbd, 0x07, 0x65, 0xfe, 0x9f, + 0x9f, 0x7f, 0xc5, 0xa9, 0xcf, 0xbf, 0xd3, 0x6c, 0x90, 0xad, 0x10, 0x00, 0xc7, 0x58, 0xe8, 0x2a, + 0x00, 0x4b, 0x53, 0x68, 0x60, 0xf5, 0x07, 0x94, 0x9f, 0xe4, 0xa5, 0x78, 0xfb, 0xee, 0x44, 0x14, + 0xac, 0x70, 0xa1, 0x57, 0xa0, 0x1c, 0x58, 0x4e, 0xaf, 0xe9, 0xb8, 0x84, 0xf2, 0x48, 0x38, 0x2f, + 0x14, 0xec, 0x84, 0x8d, 0x38, 0xa6, 0xa3, 0x3a, 0x40, 0x8f, 0x6d, 0x9a, 0xc6, 0x61, 0x40, 0x28, + 0x8f, 0x74, 0xf3, 0x8d, 0x79, 0x06, 0xde, 0x8c, 0x5a, 0xb1, 0xc2, 0xc1, 0x66, 0xdd, 0xf5, 0x3e, + 0xb6, 0x9c, 0xa0, 0x5a, 0xd6, 0x67, 0xfd, 0x9e, 0xf7, 0x9e, 0xe5, 0x04, 0x58, 0x52, 0xd1, 0x8b, + 0x30, 0x7b, 0x20, 0x77, 0x1a, 0x70, 0xd0, 0x0a, 0x3b, 0x76, 0xc3, 0x1d, 0x16, 0xd2, 0xd0, 0x1e, + 0x5c, 0x72, 0x5c, 0x4a, 0xec, 0xa1, 0x4f, 0x5a, 0xfb, 0xce, 0x60, 0xa7, 0xd9, 0x7a, 0x40, 0x7c, + 0xa7, 0x73, 0xd8, 0xb0, 0xec, 0x7d, 0xe2, 0xb6, 0xab, 0x15, 0xae, 0xe4, 0x57, 0xa4, 0x92, 0x4b, + 0x5b, 0xc7, 0xf0, 0xe2, 0x63, 0x91, 0xcc, 0x4f, 0xc3, 0x03, 0xfe, 0xfe, 0x30, 0x18, 0x0c, 0x03, + 0xf4, 0x16, 0xe4, 0x02, 0x4f, 0x6e, 0x9b, 0x17, 0x94, 0xb5, 0xaa, 0xb3, 0x00, 0x2b, 0x3e, 0xc8, + 0x31, 0xe9, 0x10, 0x9f, 0xb8, 0x36, 0x69, 0xcc, 0x1c, 0x8d, 0x6a, 0xb9, 0x1d, 0x0f, 0xe7, 0x02, + 0x0f, 0xbd, 0x0f, 0x30, 0x18, 0xd2, 0xbd, 0x16, 0xb1, 0x7d, 0x12, 0xc8, 0x13, 0xfc, 0x4a, 0x1a, + 0x48, 0xd3, 0xb3, 0xad, 0x5e, 0x12, 0x89, 0xcf, 0xef, 0x76, 0x24, 0x8f, 0x15, 0x2c, 0xd4, 0x86, + 0x0a, 0xdf, 0xf8, 0x4d, 0x6b, 0x97, 0xf4, 0x98, 0xc1, 0xe6, 0x33, 0xfa, 0xf7, 0xad, 0x48, 0x2a, + 0x76, 0x6a, 0x71, 0x1b, 0xc5, 0x2a, 0xac, 0xf9, 0x3b, 0x06, 0x2c, 0xf1, 0xc9, 0xd8, 0xf6, 0x68, + 0x20, 0xf2, 0x16, 0xee, 0xf9, 0x5f, 0x84, 0x59, 0x76, 0x0e, 0x58, 0x6e, 0x9b, 0x9f, 0x81, 0x65, + 0xb1, 0x6a, 0xeb, 0xa2, 0x09, 0x87, 0x34, 0x74, 0x09, 0x0a, 0x96, 0xdf, 0x15, 0x9e, 0xa1, 0xdc, + 0x28, 0xb1, 0x10, 0x64, 0xcd, 0xef, 0x52, 0xcc, 0x5b, 0x99, 0x89, 0x50, 0xdb, 0x77, 0x06, 0x63, + 0xb9, 0x68, 0x8b, 0xb7, 0x62, 0x49, 0x35, 0x7f, 0x3a, 0x0b, 0x73, 0x6a, 0x76, 0xfd, 0x0c, 0x62, + 0xae, 0x0f, 0xa0, 0x14, 0x66, 0x6b, 0x72, 0xd5, 0x56, 0x33, 0x4c, 0xad, 0xc8, 0xdd, 0xb0, 0x14, + 0x6c, 0xcc, 0x31, 0xd7, 0x11, 0xfe, 0xc3, 0x11, 0x20, 0x22, 0xb0, 0x28, 0x0f, 0x7a, 0xd2, 0x6e, + 0x1c, 0xf2, 0xb9, 0x97, 0xe7, 0x73, 0x26, 0xfb, 0x3a, 0x7b, 0x34, 0xaa, 0x2d, 0xee, 0x24, 0x00, + 0xf0, 0x18, 0x24, 0x5a, 0x83, 0x42, 0xc7, 0xf7, 0xfa, 0xdc, 0x33, 0x65, 0x84, 0xe6, 0x2b, 0x74, + 0xcb, 0xf7, 0xfa, 0x98, 0x8b, 0xa2, 0xf7, 0x61, 0x66, 0x97, 0xa7, 0xa6, 0xd2, 0x57, 0x65, 0x0a, + 0x12, 0x93, 0xb9, 0x6c, 0x03, 0xd8, 0x9a, 0x8a, 0x66, 0x2c, 0xf1, 0xd0, 0xaa, 0x7e, 0xc8, 0xce, + 0xf0, 0xad, 0xbf, 0x70, 0xec, 0x01, 0xfb, 0x06, 0xe4, 0x89, 0x7b, 0x50, 0x9d, 0xe5, 0x96, 0x7e, + 0x31, 0x6d, 0x38, 0x9b, 0xee, 0xc1, 0x03, 0xcb, 0x6f, 0x54, 0xe4, 0xd2, 0xe6, 0x37, 0xdd, 0x03, + 0xcc, 0x64, 0xd0, 0x3e, 0x54, 0x94, 0xe9, 0xa9, 0x96, 0x38, 0xc4, 0xb5, 0x29, 0xc3, 0x36, 0x91, + 0x0b, 0x47, 0x7b, 0x46, 0x59, 0x01, 0xac, 0xa2, 0xa3, 0xef, 0x19, 0x70, 0xae, 0xed, 0xd9, 0xfb, + 0xec, 0xf8, 0xf6, 0xad, 0x80, 0x74, 0x0f, 0xe5, 0xd1, 0xc5, 0x3d, 0x61, 0xe5, 0xea, 0xcd, 0x0c, + 0x7a, 0x37, 0xd2, 0xe4, 0x1b, 0x17, 0x8e, 0x46, 0xb5, 0x73, 0xa9, 0x24, 0x9c, 0xae, 0x91, 0xf7, + 0x85, 0xf2, 0x55, 0x48, 0xf6, 0x05, 0x32, 0xf7, 0xa5, 0x95, 0x26, 0x2f, 0xfa, 0x92, 0x4a, 0xc2, + 0xe9, 0x1a, 0xcd, 0x7f, 0x2a, 0x4a, 0xc7, 0x2a, 0x4b, 0x1c, 0xaf, 0x6b, 0x69, 0x70, 0x2d, 0x91, + 0x06, 0x2f, 0x28, 0xac, 0x4a, 0x0e, 0x1c, 0x5b, 0x64, 0xee, 0x29, 0x5b, 0x64, 0x1d, 0x40, 0xcc, + 0x61, 0xc7, 0xe9, 0x91, 0xd0, 0x23, 0x31, 0x07, 0xb1, 0x11, 0xb5, 0x62, 0x85, 0x03, 0x35, 0x21, + 0xdf, 0x95, 0x31, 0x6e, 0x36, 0xef, 0x70, 0xdb, 0x09, 0xd4, 0x3e, 0xcc, 0x32, 0x0b, 0xbd, 0xed, + 0x04, 0x98, 0xc1, 0xa0, 0x07, 0x30, 0xc3, 0xfd, 0x2e, 0xad, 0x16, 0x33, 0xe7, 0x2f, 0x7c, 0x9b, + 0x4b, 0xb4, 0xc8, 0x77, 0xf2, 0x46, 0x8a, 0x25, 0x1a, 0x8b, 0x0b, 0x58, 0x24, 0x44, 0x3e, 0x09, + 0x36, 0x1c, 0x5f, 0xd6, 0xcd, 0x94, 0xb0, 0x3e, 0xa4, 0x60, 0x85, 0x0b, 0x7d, 0x0b, 0xe6, 0xe4, + 0x0a, 0x8a, 0x63, 0x6b, 0x76, 0xca, 0x63, 0x4b, 0x04, 0x41, 0x0a, 0x02, 0xd6, 0xf0, 0xd0, 0x6f, + 0xc2, 0x2c, 0xe5, 0xbf, 0xe8, 0x14, 0x3b, 0x51, 0xc8, 0xaa, 0x13, 0x18, 0xe5, 0xe8, 0x82, 0x44, + 0x71, 0x88, 0x8a, 0xf6, 0xf9, 0xa0, 0x3b, 0x4e, 0xf7, 0xae, 0x35, 0x60, 0xbb, 0x8e, 0xe9, 0xf8, + 0xb5, 0x4c, 0xa9, 0x8f, 0x14, 0x52, 0xd5, 0xa8, 0xb3, 0x25, 0x21, 0xb1, 0x02, 0x6f, 0xfe, 0x3c, + 0x0c, 0xb5, 0xf9, 0xc1, 0x68, 0xa5, 0x54, 0xdd, 0x9e, 0x72, 0xd6, 0x95, 0x70, 0x66, 0xb9, 0x2f, + 0xd3, 0x99, 0x99, 0xff, 0x31, 0x1b, 0x6e, 0x5a, 0x91, 0x1c, 0xad, 0x42, 0x71, 0xb0, 0x67, 0xd1, + 0x70, 0xd7, 0x86, 0x99, 0x49, 0x71, 0x9b, 0x35, 0x3e, 0x1a, 0xd5, 0x40, 0x44, 0x0b, 0xec, 0x1f, + 0x16, 0x9c, 0x3c, 0x60, 0xb7, 0x5c, 0x9b, 0xf4, 0x7a, 0xa4, 0x2d, 0x43, 0xf0, 0x38, 0x60, 0x0f, + 0x09, 0x38, 0xe6, 0x41, 0x37, 0xa2, 0xaa, 0x8d, 0xd8, 0x85, 0xcb, 0x7a, 0xd5, 0xe6, 0x11, 0xb3, + 0x2e, 0x51, 0x6e, 0x98, 0x58, 0xc5, 0x29, 0x1c, 0x5f, 0xc5, 0x41, 0x1d, 0x98, 0xa7, 0x81, 0xe5, + 0x07, 0x51, 0x64, 0x7c, 0x82, 0x60, 0x1c, 0x1d, 0x8d, 0x6a, 0xf3, 0x2d, 0x0d, 0x05, 0x27, 0x50, + 0xd1, 0x10, 0x96, 0x6c, 0xaf, 0x3f, 0xe8, 0x91, 0xb0, 0x24, 0x25, 0x94, 0x4d, 0x5f, 0x69, 0x3b, + 0xcf, 0xd2, 0xbf, 0xf5, 0x71, 0x28, 0x9c, 0x86, 0x8f, 0x7e, 0x1d, 0x4a, 0xed, 0xa1, 0x6f, 0xb1, + 0x46, 0x19, 0xd8, 0x3f, 0x1f, 0xa6, 0x32, 0x1b, 0xb2, 0xfd, 0xd1, 0xa8, 0x76, 0x9a, 0xe5, 0x02, + 0xf5, 0xb0, 0x01, 0x47, 0x22, 0x68, 0x17, 0x2e, 0x7a, 0x3c, 0xf8, 0x15, 0xae, 0x4f, 0x04, 0x18, + 0xe1, 0xf6, 0x96, 0x55, 0xee, 0xb0, 0x6c, 0x79, 0xf1, 0xfe, 0x44, 0x4e, 0x7c, 0x0c, 0x0a, 0xba, + 0x0d, 0x33, 0x62, 0x13, 0xc9, 0x53, 0x31, 0x53, 0x7c, 0x02, 0xe2, 0xa6, 0x82, 0x89, 0x61, 0x29, + 0x8e, 0x1e, 0xc2, 0x8c, 0x50, 0x23, 0x8f, 0xb4, 0x6b, 0xd3, 0x15, 0x6e, 0x45, 0xf7, 0x63, 0xff, + 0x29, 0xfe, 0x63, 0x89, 0x89, 0x76, 0x78, 0x99, 0x8c, 0xf9, 0xe5, 0x0a, 0xdf, 0x67, 0x59, 0x0a, + 0xcd, 0x2d, 0x26, 0xb0, 0xe5, 0x76, 0x3c, 0xad, 0x3c, 0xc6, 0xbd, 0xb2, 0xc0, 0x62, 0x5e, 0xb9, + 0xe7, 0x75, 0x5b, 0xae, 0x33, 0x18, 0x90, 0xa0, 0x3a, 0xa7, 0x7b, 0xe5, 0x66, 0x44, 0xc1, 0x0a, + 0x17, 0x22, 0xdc, 0xa9, 0x89, 0x52, 0x2e, 0xad, 0x9e, 0xe6, 0xbd, 0x59, 0x9d, 0xa2, 0xca, 0x25, + 0x24, 0x35, 0x77, 0x26, 0xc1, 0xb0, 0x02, 0x6c, 0xda, 0xb2, 0x24, 0xa2, 0xce, 0x0e, 0xba, 0xa7, + 0xe4, 0x40, 0x37, 0x4e, 0x32, 0xbf, 0x3b, 0x9e, 0x9a, 0x16, 0x99, 0x4d, 0x99, 0x55, 0xe8, 0x2c, + 0xe8, 0xba, 0xcc, 0x69, 0x36, 0x9c, 0x2e, 0xa1, 0x81, 0x74, 0x31, 0x7a, 0x92, 0x22, 0x48, 0x58, + 0xe5, 0x33, 0x7f, 0x52, 0x80, 0xd3, 0x12, 0x4e, 0x44, 0x1c, 0xe8, 0xba, 0x16, 0x5a, 0x3c, 0x9f, + 0x08, 0x2d, 0xce, 0x68, 0xcc, 0x4a, 0x70, 0xe1, 0xc3, 0xbc, 0x1e, 0x46, 0xc9, 0x20, 0xe3, 0x46, + 0xe6, 0x88, 0x4d, 0x43, 0x16, 0x1e, 0x42, 0x8f, 0xd7, 0x70, 0x42, 0x03, 0xd3, 0xa9, 0x87, 0x4b, + 0x32, 0x15, 0xb8, 0x91, 0x39, 0x32, 0x4b, 0xd1, 0xa9, 0xc7, 0x65, 0x38, 0xa1, 0x81, 0xe9, 0xb4, + 0x87, 0x34, 0xf0, 0xfa, 0x91, 0xce, 0x42, 0x66, 0x9d, 0xeb, 0x5c, 0x30, 0x45, 0xe7, 0xba, 0x86, + 0x88, 0x13, 0x1a, 0xd0, 0x0f, 0x0d, 0x38, 0xff, 0x21, 0x71, 0xf7, 0x1d, 0x97, 0x6e, 0x3b, 0x03, + 0xd2, 0x73, 0xdc, 0x78, 0xc4, 0xc2, 0xf7, 0xfe, 0x46, 0x06, 0xed, 0x77, 0x74, 0x04, 0xbd, 0x1b, + 0x5f, 0x39, 0x1a, 0xd5, 0xce, 0xdf, 0x49, 0xd7, 0x81, 0x27, 0x29, 0x37, 0xbf, 0x5b, 0x94, 0x16, + 0xaf, 0x9e, 0x8c, 0xea, 0x59, 0x62, 0x3c, 0xe6, 0x2c, 0xf1, 0x61, 0x9e, 0xdf, 0x0a, 0x3b, 0xb6, + 0xbc, 0x18, 0x9b, 0xc2, 0x6a, 0x6e, 0x6b, 0x82, 0xe2, 0x50, 0xe6, 0xb3, 0xa9, 0x13, 0x70, 0x42, + 0x03, 0x72, 0xe1, 0xb4, 0x00, 0x0f, 0x55, 0xe6, 0x33, 0xdf, 0xef, 0xdd, 0x76, 0x82, 0x77, 0x22, + 0x39, 0xa1, 0xf1, 0xcc, 0xd1, 0xa8, 0x76, 0x5a, 0x6b, 0xc7, 0x3a, 0x3c, 0x1a, 0xc2, 0xa2, 0x52, + 0x66, 0xe4, 0xd3, 0x25, 0x6d, 0xe6, 0xf5, 0xe9, 0x0a, 0x9b, 0x42, 0x21, 0x4f, 0x61, 0xb7, 0x12, + 0x80, 0x78, 0x4c, 0x85, 0x1c, 0x66, 0xcf, 0x8a, 0x86, 0x59, 0x9c, 0x66, 0x98, 0x4d, 0x2b, 0x7d, + 0x98, 0x71, 0x3b, 0xd6, 0xe1, 0xd1, 0xb7, 0x61, 0x71, 0x37, 0x71, 0x99, 0x2a, 0xcf, 0xea, 0x9b, + 0x99, 0xf2, 0x8c, 0x94, 0x7b, 0x58, 0x31, 0xd6, 0x24, 0x09, 0x8f, 0xe9, 0x31, 0x7f, 0x5c, 0x00, + 0x34, 0x7e, 0x4b, 0x80, 0xae, 0x69, 0xae, 0xec, 0x72, 0xc2, 0x95, 0x2d, 0xaa, 0x12, 0x8a, 0x27, + 0x7b, 0x08, 0x33, 0xa2, 0xbf, 0x53, 0x54, 0x2f, 0x64, 0x47, 0x24, 0x58, 0x9a, 0x51, 0x48, 0x4c, + 0x16, 0xc0, 0x4b, 0x7b, 0x94, 0x76, 0x77, 0x02, 0xf8, 0x34, 0x2b, 0x0f, 0x51, 0xd1, 0x9e, 0x3c, + 0x08, 0x84, 0x2d, 0x48, 0x4b, 0xbb, 0x7e, 0xa2, 0x12, 0xba, 0x28, 0x2a, 0x28, 0xed, 0x58, 0x85, + 0x96, 0x13, 0xd5, 0xb3, 0x76, 0xa5, 0x69, 0x3d, 0xc1, 0x44, 0x29, 0x66, 0x25, 0x31, 0x11, 0x81, + 0x72, 0xb4, 0xce, 0xd2, 0x90, 0x4e, 0xa0, 0x20, 0xdd, 0x82, 0x62, 0x64, 0xf3, 0xdf, 0x0d, 0x19, + 0xa4, 0x3f, 0xf0, 0x7a, 0xc3, 0x3e, 0x41, 0x97, 0xa1, 0xe0, 0x5a, 0xfd, 0xd0, 0x66, 0xa2, 0xdb, + 0x3f, 0xfe, 0xa8, 0x81, 0x53, 0xf8, 0xed, 0x1f, 0x3f, 0x13, 0xa6, 0x49, 0xa3, 0x63, 0x0d, 0xc9, + 0xa4, 0x53, 0x16, 0xbe, 0x24, 0x26, 0xfa, 0x00, 0x66, 0xfa, 0xde, 0xd0, 0x0d, 0xc2, 0xb2, 0xe4, + 0xeb, 0xd3, 0xa1, 0xdf, 0x65, 0xb2, 0x31, 0x38, 0xff, 0x4b, 0xb1, 0x84, 0x34, 0xdf, 0x85, 0xc5, + 0x24, 0x2f, 0x5a, 0x83, 0x85, 0x36, 0xa1, 0x81, 0xe3, 0xf2, 0xf8, 0x75, 0xdb, 0x0a, 0xf6, 0xe4, + 0xd8, 0xcf, 0x4b, 0x90, 0x85, 0x0d, 0x9d, 0x8c, 0x93, 0xfc, 0xe6, 0x5f, 0xe6, 0xe4, 0x31, 0xa0, + 0x8e, 0x10, 0xbd, 0xa1, 0xed, 0xbe, 0x17, 0x13, 0xbb, 0xef, 0xdc, 0x98, 0x80, 0xb2, 0x05, 0xef, + 0xc0, 0x0c, 0x55, 0xcb, 0xbe, 0x2f, 0xa5, 0x05, 0xb8, 0x22, 0x75, 0xd5, 0x26, 0x95, 0xc7, 0xb8, + 0x32, 0x6f, 0x96, 0x08, 0xe8, 0x01, 0xbf, 0xf3, 0x10, 0x19, 0xa7, 0xdc, 0x72, 0x2f, 0xa7, 0xc1, + 0x45, 0x29, 0xaa, 0x86, 0x78, 0x5a, 0x5e, 0x8d, 0x08, 0x12, 0x8e, 0xa1, 0xd0, 0xdb, 0x90, 0xb7, + 0xa9, 0x73, 0x5c, 0x85, 0x70, 0xbd, 0xb5, 0xa5, 0x61, 0xf1, 0xaa, 0xc5, 0x7a, 0x6b, 0x0b, 0x33, + 0x41, 0xf3, 0xf7, 0x66, 0x41, 0xc9, 0x52, 0xd1, 0xdb, 0x30, 0x4f, 0x89, 0x7f, 0xe0, 0xd8, 0x64, + 0xcd, 0xb6, 0xd9, 0xc2, 0xc8, 0x79, 0x8b, 0x9e, 0x09, 0xb4, 0x34, 0x2a, 0x4e, 0x70, 0xf3, 0x37, + 0x18, 0xaa, 0x55, 0x66, 0x7f, 0x83, 0xf1, 0x38, 0x7b, 0x8c, 0xab, 0xb9, 0xf9, 0xa7, 0x5d, 0xcd, + 0xfd, 0x16, 0x94, 0xa8, 0x1e, 0x46, 0x7d, 0x2d, 0x7b, 0x84, 0x2c, 0x23, 0x97, 0xe8, 0xa2, 0x29, + 0x0a, 0x57, 0x22, 0x4c, 0x36, 0x29, 0x32, 0xbf, 0x29, 0x4e, 0x37, 0x29, 0x8f, 0xc9, 0x6c, 0xbe, + 0x01, 0x65, 0x9f, 0x88, 0x09, 0xa2, 0xd2, 0x37, 0xa5, 0x96, 0x78, 0xb0, 0x64, 0xc2, 0xe4, 0xa3, + 0xa1, 0xe3, 0x93, 0x3e, 0x71, 0x03, 0x1a, 0x27, 0xf0, 0x21, 0x95, 0xe2, 0x18, 0x0d, 0x7d, 0x08, + 0x30, 0x88, 0xee, 0x0b, 0x64, 0xf9, 0x28, 0x73, 0xda, 0xa0, 0xdf, 0x34, 0xc4, 0xf9, 0x4a, 0xdc, + 0x8e, 0x15, 0x74, 0xf4, 0x01, 0x5c, 0x88, 0x33, 0xe0, 0x0d, 0x62, 0xb5, 0x79, 0x70, 0x27, 0x2f, + 0xe5, 0xc4, 0x35, 0xd5, 0x57, 0x8f, 0x46, 0xb5, 0x0b, 0xeb, 0x93, 0x98, 0xf0, 0x64, 0x79, 0xd4, + 0x87, 0x39, 0xd7, 0x6b, 0x93, 0x16, 0xe9, 0x11, 0x3b, 0xf0, 0x7c, 0x99, 0xaa, 0x66, 0x29, 0x25, + 0x89, 0xa2, 0xa7, 0xd5, 0xbb, 0xa7, 0x88, 0x8b, 0xc2, 0x98, 0xda, 0x82, 0x35, 0x78, 0xf4, 0x26, + 0xcc, 0x73, 0x27, 0xb7, 0xe3, 0x0f, 0x69, 0x40, 0xda, 0xeb, 0x6b, 0x3c, 0xa5, 0x2d, 0x89, 0xb3, + 0xf2, 0xae, 0x46, 0xc1, 0x09, 0x4e, 0xf3, 0x0f, 0x0d, 0x48, 0x79, 0x9e, 0xa5, 0x99, 0xbe, 0xf1, + 0xb4, 0x4d, 0xff, 0x25, 0xcd, 0xc5, 0xa9, 0x17, 0x38, 0x9a, 0xfb, 0x32, 0xff, 0xc2, 0x80, 0xb3, + 0x69, 0xb5, 0x35, 0x66, 0x83, 0xb1, 0x5f, 0x33, 0xa6, 0x2c, 0x33, 0xaa, 0xb7, 0xbe, 0x69, 0xae, + 0x6d, 0x5e, 0x71, 0xf1, 0x1b, 0x8e, 0x2f, 0xfb, 0x18, 0xf9, 0xa2, 0x0d, 0x8d, 0x8a, 0x13, 0xdc, + 0xe6, 0xf7, 0x0b, 0xb0, 0x94, 0x92, 0xeb, 0xa0, 0x4d, 0x79, 0xab, 0x32, 0xc5, 0x85, 0x60, 0x74, + 0x00, 0x6b, 0x37, 0x2b, 0x30, 0x18, 0xf6, 0x7a, 0x4f, 0x76, 0x31, 0x18, 0xca, 0x63, 0x05, 0x2b, + 0xbc, 0x26, 0xc9, 0x9f, 0xe0, 0x9a, 0xe4, 0x0e, 0x20, 0xf2, 0xc9, 0xc0, 0xa3, 0x44, 0xe6, 0xac, + 0x1e, 0x8f, 0x5b, 0x0a, 0xdc, 0x06, 0xa3, 0xa7, 0x57, 0x9b, 0x63, 0x1c, 0x38, 0x45, 0x0a, 0xad, + 0x40, 0xb9, 0xe3, 0xf9, 0x36, 0x61, 0xbd, 0xe4, 0x9e, 0x4b, 0xa9, 0xfa, 0xdd, 0x0a, 0x09, 0x38, + 0xe6, 0x41, 0xef, 0xc7, 0x55, 0xe1, 0x99, 0xcc, 0x97, 0x99, 0x62, 0xcc, 0xdc, 0x51, 0x4c, 0x2e, + 0x07, 0xaf, 0xc1, 0x02, 0x17, 0x58, 0xdb, 0xde, 0x0a, 0xef, 0x9b, 0x66, 0xf5, 0xe8, 0xa0, 0xa1, + 0x93, 0x71, 0x92, 0xdf, 0xfc, 0x51, 0x11, 0x96, 0x52, 0x32, 0xfc, 0xe8, 0x8e, 0xcd, 0x78, 0x92, + 0x3b, 0xb6, 0x2f, 0xcb, 0x12, 0x5e, 0x86, 0x59, 0xd7, 0x5b, 0xb7, 0xec, 0x3d, 0x22, 0xdf, 0x33, + 0x44, 0x53, 0x74, 0x4f, 0x34, 0xe3, 0x90, 0x1e, 0x1a, 0x4d, 0xe1, 0x04, 0x46, 0x33, 0xf5, 0x42, + 0xbf, 0x1d, 0x56, 0x59, 0x3a, 0x4e, 0x8f, 0xf0, 0x58, 0x6d, 0x26, 0xb1, 0x33, 0x35, 0x2a, 0x4e, + 0x70, 0xa3, 0xaf, 0x43, 0x59, 0x2c, 0x8f, 0xdf, 0xa5, 0x19, 0x6e, 0x03, 0xa3, 0xce, 0x34, 0x42, + 0x21, 0x1c, 0xcb, 0xa3, 0x01, 0x9c, 0xe7, 0xe9, 0x00, 0xf3, 0xd7, 0x7d, 0xe7, 0xdb, 0x22, 0x1e, + 0x14, 0xcf, 0xae, 0x44, 0x9d, 0xf3, 0xc6, 0xd1, 0xa8, 0x76, 0x7e, 0x2b, 0x9d, 0xe5, 0xd1, 0x64, + 0x12, 0x9e, 0x04, 0x8b, 0xbe, 0x01, 0xb3, 0x07, 0x3c, 0xa2, 0x0a, 0x6f, 0x26, 0xea, 0xd3, 0x45, + 0xc7, 0xf1, 0x2a, 0x8a, 0xff, 0x14, 0x87, 0x78, 0xe6, 0xf7, 0x0d, 0x48, 0xbf, 0x1e, 0xd4, 0xe7, + 0xcc, 0x78, 0xc2, 0x39, 0x7b, 0x31, 0xb6, 0x2b, 0x51, 0xce, 0xaf, 0xa4, 0xd9, 0x94, 0xf9, 0x47, + 0x06, 0x2c, 0xa5, 0xd4, 0x37, 0x7e, 0x39, 0x8e, 0xa4, 0xcf, 0x73, 0xc9, 0xce, 0x6d, 0x1e, 0x10, + 0x37, 0x38, 0xd9, 0xa5, 0xe4, 0xa6, 0xb8, 0x0a, 0xcc, 0xc9, 0xaa, 0x7e, 0xa6, 0xe2, 0x04, 0xaf, + 0x0f, 0xeb, 0x77, 0x80, 0x4f, 0xe0, 0xb9, 0x27, 0xdf, 0x39, 0x17, 0x9e, 0xf5, 0x9d, 0xb3, 0xf9, + 0x57, 0x06, 0xcc, 0xeb, 0x77, 0x9d, 0xe8, 0xab, 0x90, 0x1f, 0xfa, 0x8e, 0x9c, 0xd4, 0xa8, 0xf7, + 0xef, 0xe2, 0x2d, 0xcc, 0xda, 0x19, 0xd9, 0x27, 0x1d, 0xb9, 0x62, 0x11, 0x19, 0x93, 0x0e, 0x66, + 0xed, 0x88, 0x40, 0x65, 0xe0, 0x7b, 0x9f, 0x1c, 0x8a, 0x73, 0x7e, 0x8a, 0xf7, 0xd9, 0xdb, 0xb1, + 0x54, 0x5c, 0x46, 0x56, 0x1a, 0xb1, 0x8a, 0xcb, 0x23, 0xa8, 0xf1, 0xe2, 0xd8, 0x2f, 0x87, 0xb9, + 0xfe, 0x5d, 0x0e, 0x66, 0xa5, 0xd1, 0xa0, 0x8f, 0x60, 0xbe, 0xab, 0x4d, 0xef, 0x14, 0xdd, 0x4a, + 0xdc, 0x41, 0x47, 0x2e, 0x57, 0x6f, 0xc7, 0x09, 0x05, 0xe8, 0xb7, 0xe1, 0x4c, 0xd7, 0x09, 0xf4, + 0x31, 0x4d, 0x51, 0x39, 0xb8, 0x9d, 0x94, 0x6d, 0x5c, 0x90, 0x8a, 0xcf, 0x8c, 0x91, 0xf0, 0xb8, + 0x26, 0x74, 0x1f, 0x0a, 0x3e, 0xe9, 0x4c, 0xf3, 0xc8, 0x89, 0xed, 0x29, 0xd2, 0xe1, 0x7b, 0x2c, + 0x8a, 0xbe, 0x30, 0xe9, 0x50, 0xcc, 0x81, 0xcc, 0xdf, 0x15, 0x4b, 0x9d, 0x28, 0x10, 0xfe, 0x4f, + 0x7c, 0x32, 0xf1, 0x5f, 0x06, 0x40, 0xdc, 0xd9, 0xff, 0x7f, 0x6b, 0x6b, 0xfe, 0x79, 0x0e, 0xc6, + 0x19, 0xd9, 0xbe, 0xb0, 0x45, 0xf6, 0x68, 0xa4, 0x7e, 0xa6, 0x24, 0xa9, 0xe8, 0x21, 0xcc, 0x58, + 0xfc, 0x3b, 0x9f, 0x29, 0x7a, 0x2c, 0x54, 0xad, 0x7b, 0x6e, 0xe0, 0x7b, 0xbd, 0x77, 0x29, 0xf1, + 0x95, 0x8f, 0x6b, 0x38, 0x16, 0x96, 0x98, 0x88, 0xb0, 0xf4, 0x44, 0x7e, 0xab, 0x33, 0xc5, 0x33, + 0xf9, 0x71, 0x05, 0x4a, 0xaa, 0x22, 0xe1, 0x70, 0x8c, 0x3c, 0xc5, 0xbd, 0xb5, 0xf9, 0x3d, 0x03, + 0x16, 0x93, 0xd5, 0x74, 0x26, 0xcf, 0x83, 0x8d, 0xad, 0x8d, 0xe4, 0x5d, 0xc5, 0x96, 0x68, 0xc6, + 0x21, 0x1d, 0xdd, 0x81, 0x59, 0x16, 0x74, 0x62, 0xe9, 0x6d, 0x33, 0x86, 0xac, 0xfc, 0x7c, 0xbf, + 0x25, 0xe4, 0x70, 0x08, 0x60, 0xfe, 0x83, 0x01, 0x68, 0xbc, 0xde, 0x8a, 0xb6, 0xe1, 0xac, 0xf8, + 0x12, 0x43, 0x3e, 0x22, 0xd8, 0xd2, 0xba, 0x76, 0x49, 0x76, 0xed, 0x6c, 0x33, 0x85, 0x07, 0xa7, + 0x4a, 0x46, 0x41, 0x76, 0xee, 0xe4, 0x41, 0xf6, 0x4b, 0x30, 0x33, 0x60, 0x73, 0xd5, 0x96, 0x91, + 0x70, 0xb4, 0xe2, 0xdb, 0xbc, 0x15, 0x4b, 0xaa, 0xf9, 0xd7, 0x39, 0xa8, 0x4e, 0x7a, 0x86, 0xfd, + 0x25, 0x8c, 0xec, 0xa1, 0x36, 0xb2, 0x37, 0x33, 0xbf, 0xf9, 0x09, 0x7c, 0x62, 0xf5, 0x77, 0xac, + 0xee, 0xf1, 0x39, 0x66, 0x1f, 0x16, 0x14, 0xad, 0x27, 0xfc, 0xe4, 0x26, 0xca, 0x91, 0x9a, 0x3a, + 0x14, 0x4e, 0x62, 0x9b, 0x2d, 0x80, 0xf8, 0x1d, 0x69, 0x86, 0x1a, 0xf4, 0x0b, 0x50, 0x3c, 0xb0, + 0x7a, 0xc3, 0xf0, 0xcb, 0xc5, 0xe8, 0x35, 0xf8, 0x03, 0xd6, 0x88, 0x05, 0xcd, 0xfc, 0xe3, 0x1c, + 0x54, 0x94, 0x77, 0x4e, 0x4f, 0x2b, 0xfd, 0x7e, 0x0e, 0x72, 0x16, 0xe5, 0xe9, 0x4e, 0x59, 0x5c, + 0x4c, 0xaf, 0x51, 0x9c, 0xb3, 0x28, 0x7a, 0x0f, 0x8a, 0x03, 0x2b, 0xd8, 0x0b, 0xdf, 0xb2, 0x5f, + 0x9d, 0xee, 0x15, 0x16, 0x4b, 0x4f, 0xe2, 0x71, 0xb0, 0x7f, 0x14, 0x0b, 0xbc, 0x44, 0x96, 0x97, + 0x7f, 0x7a, 0x59, 0x9e, 0xf9, 0x5d, 0x03, 0x16, 0x12, 0x7d, 0x40, 0x57, 0x01, 0x68, 0xf4, 0x4f, + 0x2e, 0x41, 0x54, 0x48, 0x8b, 0xf9, 0xb0, 0xc2, 0xf5, 0xc4, 0x05, 0x93, 0x1e, 0x9c, 0x9f, 0x60, + 0x9c, 0x2c, 0x45, 0x64, 0x2b, 0x4e, 0x07, 0x96, 0x4d, 0x92, 0x4f, 0xf6, 0xef, 0x85, 0x04, 0x1c, + 0xf3, 0x44, 0xc6, 0x93, 0x9b, 0x64, 0x3c, 0xe6, 0x3f, 0x1a, 0x70, 0xe9, 0xb8, 0xcb, 0x60, 0x96, + 0xf4, 0xcb, 0x1b, 0xdf, 0x28, 0xcd, 0x4c, 0x5c, 0x09, 0xdc, 0xd1, 0xc9, 0x38, 0xc9, 0x8f, 0xae, + 0x43, 0x45, 0x69, 0x92, 0x9d, 0x89, 0xe2, 0x48, 0x45, 0x1c, 0xab, 0x7c, 0x4f, 0x10, 0xc6, 0x9b, + 0x7f, 0x6b, 0xc0, 0xd9, 0xb4, 0xca, 0x21, 0xea, 0x86, 0xdf, 0x58, 0x88, 0xdc, 0xad, 0x71, 0xc2, + 0x0a, 0x64, 0x9d, 0x7f, 0x69, 0xb1, 0xe9, 0x06, 0xfe, 0x61, 0xfa, 0xd7, 0x17, 0x17, 0x6f, 0x02, + 0xc4, 0x3c, 0x68, 0x11, 0xf2, 0xfb, 0xe4, 0x50, 0x4c, 0x1c, 0x66, 0x3f, 0xd1, 0x59, 0x6d, 0xd3, + 0xca, 0x5d, 0xfa, 0x66, 0xee, 0xa6, 0xf1, 0x66, 0xe9, 0x0f, 0xfe, 0xa4, 0x76, 0xea, 0x3b, 0xbf, + 0xb8, 0x7c, 0xca, 0xfc, 0x81, 0x01, 0x6a, 0x94, 0x8d, 0x5e, 0x81, 0xf2, 0x5e, 0x10, 0x0c, 0x78, + 0x93, 0x7c, 0xd2, 0xc5, 0xaf, 0x24, 0xde, 0xd9, 0xd9, 0xd9, 0xe6, 0x8d, 0x38, 0xa6, 0xa3, 0x3a, + 0x00, 0xfb, 0x43, 0x05, 0x77, 0x21, 0x7e, 0x86, 0xc9, 0xb8, 0x5b, 0x82, 0x5d, 0xe1, 0x10, 0xc9, + 0xa8, 0x60, 0x16, 0x9f, 0xee, 0xc9, 0x64, 0x54, 0x70, 0x86, 0x34, 0xf3, 0xcf, 0x0c, 0x38, 0x33, + 0xf6, 0x84, 0x10, 0x6d, 0x47, 0xe1, 0xf7, 0xb4, 0xc5, 0xc7, 0x09, 0x81, 0xfa, 0x13, 0xef, 0xa2, + 0x9b, 0x70, 0x56, 0x20, 0x72, 0xad, 0xf1, 0x16, 0x7a, 0xac, 0x3b, 0x35, 0xff, 0xd4, 0x00, 0x88, + 0xcb, 0x61, 0x68, 0x17, 0xe6, 0x44, 0x97, 0xb4, 0x38, 0x32, 0xfb, 0x00, 0xcf, 0x4a, 0x15, 0x73, + 0x2d, 0x05, 0x05, 0x6b, 0x98, 0x6c, 0x5f, 0xf3, 0x2a, 0x34, 0xdf, 0x5d, 0x39, 0x7d, 0x5f, 0xdf, + 0x0d, 0x09, 0x38, 0xe6, 0x31, 0x7f, 0x9e, 0x87, 0xa5, 0x94, 0x47, 0x2b, 0xff, 0xa7, 0x8b, 0xaa, + 0x2f, 0xc3, 0xac, 0xf8, 0x8e, 0x81, 0x26, 0xa3, 0x3b, 0xf1, 0x99, 0x03, 0xc5, 0x21, 0x1d, 0xad, + 0x42, 0xc5, 0x71, 0x6d, 0x71, 0xc7, 0x62, 0x85, 0xc5, 0x34, 0x71, 0x7f, 0x1d, 0x37, 0x63, 0x95, + 0x47, 0xaf, 0xbe, 0xcd, 0x64, 0xa8, 0xbe, 0x7d, 0x89, 0xe5, 0xa7, 0x6f, 0xc2, 0x99, 0xb1, 0xd0, + 0x37, 0x5b, 0x1c, 0x40, 0xf8, 0xe7, 0xf3, 0x89, 0x38, 0x40, 0x7c, 0x35, 0x2f, 0x68, 0xe6, 0x0f, + 0x0d, 0x98, 0x4f, 0xe4, 0x08, 0x27, 0x2a, 0xd5, 0xdc, 0x57, 0x4b, 0x35, 0x27, 0xcb, 0x6f, 0xb4, + 0xa2, 0x8d, 0x79, 0x07, 0xd2, 0x5f, 0xc1, 0x27, 0x17, 0xd3, 0x78, 0xfc, 0x62, 0x9a, 0x3f, 0xc9, + 0x41, 0x39, 0x7a, 0x3c, 0x88, 0x5e, 0xd3, 0x66, 0xee, 0x82, 0x3a, 0x73, 0x8f, 0x46, 0x35, 0xc1, + 0xa8, 0x4c, 0xe3, 0x07, 0x50, 0x8e, 0x1e, 0x9f, 0x46, 0xa5, 0xa8, 0xec, 0x71, 0x5e, 0x64, 0x35, + 0xd1, 0x8b, 0x56, 0x1c, 0xe3, 0xb1, 0xd0, 0x37, 0x7c, 0x1d, 0x7a, 0xd7, 0xe9, 0xf5, 0x1c, 0x2a, + 0x2f, 0xd8, 0xf2, 0xfc, 0x82, 0x2d, 0x0a, 0x7d, 0x37, 0x52, 0x78, 0x70, 0xaa, 0x24, 0xda, 0x86, + 0x22, 0x0d, 0xc8, 0x80, 0xca, 0x9a, 0xf3, 0x2b, 0x99, 0xde, 0x55, 0x92, 0x01, 0x4f, 0xe9, 0x23, + 0x13, 0x61, 0x2d, 0x14, 0x0b, 0x20, 0xf3, 0xdf, 0x0c, 0x28, 0x85, 0x2c, 0xe8, 0x55, 0x6d, 0xf2, + 0xaa, 0x89, 0xc9, 0xe3, 0x7c, 0xff, 0x6b, 0xe7, 0xce, 0x1c, 0x19, 0x30, 0xaf, 0xbf, 0x11, 0x51, + 0x0a, 0x49, 0xc6, 0x71, 0x85, 0x24, 0xf4, 0x2a, 0x94, 0xac, 0x5e, 0xcf, 0xfb, 0x78, 0xd3, 0x3d, + 0x90, 0xc5, 0xdb, 0xe8, 0xee, 0x79, 0x4d, 0xb6, 0xe3, 0x88, 0x03, 0x1d, 0xc0, 0x82, 0x90, 0x8b, + 0x5f, 0xff, 0xe6, 0x33, 0x5f, 0x81, 0xa6, 0x9d, 0x63, 0x8d, 0x25, 0x16, 0x79, 0xb5, 0x74, 0x4c, + 0x9c, 0x54, 0xd2, 0xb8, 0xf2, 0xd9, 0x17, 0xcb, 0xa7, 0x7e, 0xf6, 0xc5, 0xf2, 0xa9, 0xcf, 0xbf, + 0x58, 0x3e, 0xf5, 0x9d, 0xa3, 0x65, 0xe3, 0xb3, 0xa3, 0x65, 0xe3, 0x67, 0x47, 0xcb, 0xc6, 0xe7, + 0x47, 0xcb, 0xc6, 0xbf, 0x1c, 0x2d, 0x1b, 0xbf, 0xff, 0xaf, 0xcb, 0xa7, 0xbe, 0x99, 0x3b, 0x58, + 0xfd, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd4, 0x45, 0xd5, 0xb9, 0x97, 0x46, 0x00, 0x00, } func (m *BinaryBuildRequestOptions) Marshal() (dAtA []byte, err error) { @@ -3633,6 +3634,18 @@ func (m *BuildVolumeSource) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.CSI != nil { + { + size, err := m.CSI.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } if m.ConfigMap != nil { { size, err := m.ConfigMap.MarshalToSizedBuffer(dAtA[:i]) @@ -5975,6 +5988,10 @@ func (m *BuildVolumeSource) Size() (n int) { l = m.ConfigMap.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.CSI != nil { + l = m.CSI.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -7008,6 +7025,7 @@ func (this *BuildVolumeSource) String() string { `Type:` + fmt.Sprintf("%v", this.Type) + `,`, `Secret:` + strings.Replace(fmt.Sprintf("%v", this.Secret), "SecretVolumeSource", "v11.SecretVolumeSource", 1) + `,`, `ConfigMap:` + strings.Replace(fmt.Sprintf("%v", this.ConfigMap), "ConfigMapVolumeSource", "v11.ConfigMapVolumeSource", 1) + `,`, + `CSI:` + strings.Replace(fmt.Sprintf("%v", this.CSI), "CSIVolumeSource", "v11.CSIVolumeSource", 1) + `,`, `}`, }, "") return s @@ -12277,6 +12295,42 @@ func (m *BuildVolumeSource) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CSI", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.CSI == nil { + m.CSI = &v11.CSIVolumeSource{} + } + if err := m.CSI.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/vendor/github.com/openshift/api/build/v1/generated.proto b/vendor/github.com/openshift/api/build/v1/generated.proto index e57b73a65c..5a0f84bb12 100644 --- a/vendor/github.com/openshift/api/build/v1/generated.proto +++ b/vendor/github.com/openshift/api/build/v1/generated.proto @@ -670,6 +670,10 @@ message BuildVolumeSource { // configMap represents a ConfigMap that should populate this volume // +optional optional k8s.io.api.core.v1.ConfigMapVolumeSource configMap = 3; + + // csi represents ephemeral storage provided by external CSI drivers which support this capability + // +optional + optional k8s.io.api.core.v1.CSIVolumeSource csi = 4; } // CommonSpec encapsulates all the inputs necessary to represent a build. diff --git a/vendor/github.com/openshift/api/build/v1/types.go b/vendor/github.com/openshift/api/build/v1/types.go index 55ccddfa66..8988907a34 100644 --- a/vendor/github.com/openshift/api/build/v1/types.go +++ b/vendor/github.com/openshift/api/build/v1/types.go @@ -1411,6 +1411,9 @@ const ( // BuildVolumeSourceTypeConfigmap is the ConfigMap build source volume type BuildVolumeSourceTypeConfigMap BuildVolumeSourceType = "ConfigMap" + + // BuildVolumeSourceTypeCSI is the CSI build source volume type + BuildVolumeSourceTypeCSI BuildVolumeSourceType = "CSI" ) // BuildVolumeSource represents the source of a volume to mount @@ -1430,6 +1433,10 @@ type BuildVolumeSource struct { // configMap represents a ConfigMap that should populate this volume // +optional ConfigMap *corev1.ConfigMapVolumeSource `json:"configMap,omitempty" protobuf:"bytes,3,opt,name=configMap"` + + // csi represents ephemeral storage provided by external CSI drivers which support this capability + // +optional + CSI *corev1.CSIVolumeSource `json:"csi,omitempty" protobuf:"bytes,4,opt,name=csi"` } // BuildVolumeMount describes the mounting of a Volume within buildah's runtime environment. diff --git a/vendor/github.com/openshift/api/build/v1/zz_generated.deepcopy.go b/vendor/github.com/openshift/api/build/v1/zz_generated.deepcopy.go index 9e25a4e417..d36b28c82b 100644 --- a/vendor/github.com/openshift/api/build/v1/zz_generated.deepcopy.go +++ b/vendor/github.com/openshift/api/build/v1/zz_generated.deepcopy.go @@ -799,6 +799,11 @@ func (in *BuildVolumeSource) DeepCopyInto(out *BuildVolumeSource) { *out = new(corev1.ConfigMapVolumeSource) (*in).DeepCopyInto(*out) } + if in.CSI != nil { + in, out := &in.CSI, &out.CSI + *out = new(corev1.CSIVolumeSource) + (*in).DeepCopyInto(*out) + } return } diff --git a/vendor/github.com/openshift/api/build/v1/zz_generated.swagger_doc_generated.go b/vendor/github.com/openshift/api/build/v1/zz_generated.swagger_doc_generated.go index c9f55607de..e8f9077e7f 100644 --- a/vendor/github.com/openshift/api/build/v1/zz_generated.swagger_doc_generated.go +++ b/vendor/github.com/openshift/api/build/v1/zz_generated.swagger_doc_generated.go @@ -314,6 +314,7 @@ var map_BuildVolumeSource = map[string]string{ "type": "type is the BuildVolumeSourceType for the volume source. Type must match the populated volume source. Valid types are: Secret, ConfigMap", "secret": "secret represents a Secret that should populate this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret", "configMap": "configMap represents a ConfigMap that should populate this volume", + "csi": "csi represents ephemeral storage provided by external CSI drivers which support this capability", } func (BuildVolumeSource) SwaggerDoc() map[string]string { diff --git a/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_infrastructure.crd.yaml b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_infrastructure.crd.yaml index 78fc97266d..e91245de60 100644 --- a/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_infrastructure.crd.yaml +++ b/vendor/github.com/openshift/api/config/v1/0000_10_config-operator_01_infrastructure.crd.yaml @@ -89,6 +89,9 @@ spec: kubevirt: description: Kubevirt contains settings specific to the kubevirt infrastructure provider. type: object + nutanix: + description: Nutanix contains settings specific to the Nutanix infrastructure provider. + type: object openstack: description: OpenStack contains settings specific to the OpenStack infrastructure provider. type: object @@ -122,7 +125,7 @@ spec: - name x-kubernetes-list-type: map type: - description: type is the underlying infrastructure provider for the cluster. This value controls whether infrastructure automation such as service load balancers, dynamic volume provisioning, machine creation and deletion, and other integrations are enabled. If None, no infrastructure automation is enabled. Allowed values are "AWS", "Azure", "BareMetal", "GCP", "Libvirt", "OpenStack", "VSphere", "oVirt", "KubeVirt", "EquinixMetal", "PowerVS", "AlibabaCloud" and "None". Individual components may not support all platforms, and must handle unrecognized platforms as None if they do not support that platform. + description: type is the underlying infrastructure provider for the cluster. This value controls whether infrastructure automation such as service load balancers, dynamic volume provisioning, machine creation and deletion, and other integrations are enabled. If None, no infrastructure automation is enabled. Allowed values are "AWS", "Azure", "BareMetal", "GCP", "Libvirt", "OpenStack", "VSphere", "oVirt", "KubeVirt", "EquinixMetal", "PowerVS", "AlibabaCloud", "Nutanix" and "None". Individual components may not support all platforms, and must handle unrecognized platforms as None if they do not support that platform. type: string enum: - "" @@ -140,6 +143,7 @@ spec: - EquinixMetal - PowerVS - AlibabaCloud + - Nutanix vsphere: description: VSphere contains settings specific to the VSphere infrastructure provider. type: object @@ -193,6 +197,7 @@ spec: - EquinixMetal - PowerVS - AlibabaCloud + - Nutanix platformStatus: description: platformStatus holds status information specific to the underlying infrastructure provider. type: object @@ -202,7 +207,6 @@ spec: type: object required: - region - - resourceGroupID properties: region: description: region specifies the region for Alibaba Cloud resources created for the cluster. @@ -211,7 +215,7 @@ spec: resourceGroupID: description: resourceGroupID is the ID of the resource group for the cluster. type: string - pattern: ^rg-[0-9A-Za-z]+$ + pattern: ^(rg-[0-9A-Za-z]+)?$ resourceTags: description: resourceTags is a list of additional tags to apply to Alibaba Cloud resources created for the cluster. type: array @@ -363,6 +367,16 @@ spec: ingressIP: description: ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names. type: string + nutanix: + description: Nutanix contains settings specific to the Nutanix infrastructure provider. + type: object + properties: + apiServerInternalIP: + description: apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI points to. It is the IP for a self-hosted load balancer in front of the API servers. + type: string + ingressIP: + description: ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names. + type: string openstack: description: OpenStack contains settings specific to the OpenStack infrastructure provider. type: object @@ -425,7 +439,7 @@ spec: description: 'zone holds the default zone for the new Power VS resources created by the cluster. Note: Currently only single-zone OCP clusters are supported' type: string type: - description: "type is the underlying infrastructure provider for the cluster. This value controls whether infrastructure automation such as service load balancers, dynamic volume provisioning, machine creation and deletion, and other integrations are enabled. If None, no infrastructure automation is enabled. Allowed values are \"AWS\", \"Azure\", \"BareMetal\", \"GCP\", \"Libvirt\", \"OpenStack\", \"VSphere\", \"oVirt\", \"EquinixMetal\", \"PowerVS\", \"AlibabaCloud\" and \"None\". Individual components may not support all platforms, and must handle unrecognized platforms as None if they do not support that platform. \n This value will be synced with to the `status.platform` and `status.platformStatus.type`. Currently this value cannot be changed once set." + description: "type is the underlying infrastructure provider for the cluster. This value controls whether infrastructure automation such as service load balancers, dynamic volume provisioning, machine creation and deletion, and other integrations are enabled. If None, no infrastructure automation is enabled. Allowed values are \"AWS\", \"Azure\", \"BareMetal\", \"GCP\", \"Libvirt\", \"OpenStack\", \"VSphere\", \"oVirt\", \"EquinixMetal\", \"PowerVS\", \"AlibabaCloud\", \"Nutanix\" and \"None\". Individual components may not support all platforms, and must handle unrecognized platforms as None if they do not support that platform. \n This value will be synced with to the `status.platform` and `status.platformStatus.type`. Currently this value cannot be changed once set." type: string enum: - "" @@ -443,6 +457,7 @@ spec: - EquinixMetal - PowerVS - AlibabaCloud + - Nutanix vsphere: description: VSphere contains settings specific to the VSphere infrastructure provider. type: object diff --git a/vendor/github.com/openshift/api/config/v1/types_feature.go b/vendor/github.com/openshift/api/config/v1/types_feature.go index 149cf8e6f6..032673069f 100644 --- a/vendor/github.com/openshift/api/config/v1/types_feature.go +++ b/vendor/github.com/openshift/api/config/v1/types_feature.go @@ -121,7 +121,6 @@ var FeatureSets = map[FeatureSet]*FeatureGateEnabledDisabled{ with("CSIMigrationAzureFile"). // sig-storage, fbertina, Kubernetes feature gate with("CSIMigrationvSphere"). // sig-storage, fbertina, Kubernetes feature gate with("ExternalCloudProvider"). // sig-cloud-provider, jspeed, OCP specific - with("InsightsOperatorPullingSCA"). // insights-operator/ccx, tremes, OCP specific with("CSIDriverSharedResource"). // sig-build, adkaplan, OCP specific with("BuildCSIVolumes"). // sig-build, adkaplan, OCP specific with("NodeSwap"). // sig-node, ehashman, Kubernetes feature gate @@ -143,14 +142,16 @@ var defaultFeatures = &FeatureGateEnabledDisabled{ Enabled: []string{ "APIPriorityAndFairness", // sig-apimachinery, deads2k "RotateKubeletServerCertificate", // sig-pod, sjenning - "SupportPodPidsLimit", // sig-pod, sjenning - "NodeDisruptionExclusion", // sig-scheduling, ccoleman - "ServiceNodeExclusion", // sig-scheduling, ccoleman "DownwardAPIHugePages", // sig-node, rphillips "PodSecurity", // sig-auth, s-urbaniak }, Disabled: []string{ - "LegacyNodeRoleBehavior", // sig-scheduling, ccoleman + "CSIMigrationAWS", // sig-storage, jsafrane + "CSIMigrationOpenStack", // sig-storage, jsafrane + "CSIMigrationGCE", // sig-storage, jsafrane + "CSIMigrationAzureDisk", // sig-storage, jsafrane + "CSIMigrationAzureFile", // sig-storage, jsafrane + "CSIMigrationvSphere", // sig-storage, jsafrane }, } diff --git a/vendor/github.com/openshift/api/config/v1/types_infrastructure.go b/vendor/github.com/openshift/api/config/v1/types_infrastructure.go index 92f7305041..30e808c919 100644 --- a/vendor/github.com/openshift/api/config/v1/types_infrastructure.go +++ b/vendor/github.com/openshift/api/config/v1/types_infrastructure.go @@ -124,7 +124,7 @@ const ( ) // PlatformType is a specific supported infrastructure provider. -// +kubebuilder:validation:Enum="";AWS;Azure;BareMetal;GCP;Libvirt;OpenStack;None;VSphere;oVirt;IBMCloud;KubeVirt;EquinixMetal;PowerVS;AlibabaCloud +// +kubebuilder:validation:Enum="";AWS;Azure;BareMetal;GCP;Libvirt;OpenStack;None;VSphere;oVirt;IBMCloud;KubeVirt;EquinixMetal;PowerVS;AlibabaCloud;Nutanix type PlatformType string const ( @@ -169,6 +169,9 @@ const ( // AlibabaCloudPlatformType represents Alibaba Cloud infrastructure. AlibabaCloudPlatformType PlatformType = "AlibabaCloud" + + // NutanixPlatformType represents Nutanix infrastructure. + NutanixPlatformType PlatformType = "Nutanix" ) // IBMCloudProviderType is a specific supported IBM Cloud provider cluster type @@ -196,7 +199,7 @@ type PlatformSpec struct { // other integrations are enabled. If None, no infrastructure automation is // enabled. Allowed values are "AWS", "Azure", "BareMetal", "GCP", "Libvirt", // "OpenStack", "VSphere", "oVirt", "KubeVirt", "EquinixMetal", "PowerVS", - // "AlibabaCloud" and "None". Individual components may not support all platforms, + // "AlibabaCloud", "Nutanix" and "None". Individual components may not support all platforms, // and must handle unrecognized platforms as None if they do not support that platform. // // +unionDiscriminator @@ -249,6 +252,10 @@ type PlatformSpec struct { // AlibabaCloud contains settings specific to the Alibaba Cloud infrastructure provider. // +optional AlibabaCloud *AlibabaCloudPlatformSpec `json:"alibabaCloud,omitempty"` + + // Nutanix contains settings specific to the Nutanix infrastructure provider. + // +optional + Nutanix *NutanixPlatformSpec `json:"nutanix,omitempty"` } // PlatformStatus holds the current status specific to the underlying infrastructure provider @@ -260,7 +267,7 @@ type PlatformStatus struct { // balancers, dynamic volume provisioning, machine creation and deletion, and // other integrations are enabled. If None, no infrastructure automation is // enabled. Allowed values are "AWS", "Azure", "BareMetal", "GCP", "Libvirt", - // "OpenStack", "VSphere", "oVirt", "EquinixMetal", "PowerVS", "AlibabaCloud" and "None". + // "OpenStack", "VSphere", "oVirt", "EquinixMetal", "PowerVS", "AlibabaCloud", "Nutanix" and "None". // Individual components may not support all platforms, and must handle // unrecognized platforms as None if they do not support that platform. // @@ -315,6 +322,10 @@ type PlatformStatus struct { // AlibabaCloud contains settings specific to the Alibaba Cloud infrastructure provider. // +optional AlibabaCloud *AlibabaCloudPlatformStatus `json:"alibabaCloud,omitempty"` + + // Nutanix contains settings specific to the Nutanix infrastructure provider. + // +optional + Nutanix *NutanixPlatformStatus `json:"nutanix,omitempty"` } // AWSServiceEndpoint store the configuration of a custom url to @@ -665,10 +676,9 @@ type AlibabaCloudPlatformStatus struct { // +required Region string `json:"region"` // resourceGroupID is the ID of the resource group for the cluster. - // +kubebuilder:validation:Required - // +kubebuilder:validation:Pattern=`^rg-[0-9A-Za-z]+$` - // +required - ResourceGroupID string `json:"resourceGroupID"` + // +kubebuilder:validation:Pattern=`^(rg-[0-9A-Za-z]+)?$` + // +optional + ResourceGroupID string `json:"resourceGroupID,omitempty"` // resourceTags is a list of additional tags to apply to Alibaba Cloud resources created for the cluster. // +kubebuilder:validation:MaxItems=20 // +listType=map @@ -693,6 +703,23 @@ type AlibabaCloudResourceTag struct { Value string `json:"value"` } +// NutanixPlatformSpec holds the desired state of the Nutanix infrastructure provider. +// This only includes fields that can be modified in the cluster. +type NutanixPlatformSpec struct{} + +// NutanixPlatformStatus holds the current status of the Nutanix infrastructure provider. +type NutanixPlatformStatus struct { + // apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used + // by components inside the cluster, like kubelets using the infrastructure rather + // than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI + // points to. It is the IP for a self-hosted load balancer in front of the API servers. + APIServerInternalIP string `json:"apiServerInternalIP,omitempty"` + + // ingressIP is an external IP which routes to the default ingress controller. + // The IP is a suitable target of a wildcard DNS record used to resolve default route host names. + IngressIP string `json:"ingressIP,omitempty"` +} + // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // InfrastructureList is diff --git a/vendor/github.com/openshift/api/config/v1/zz_generated.deepcopy.go b/vendor/github.com/openshift/api/config/v1/zz_generated.deepcopy.go index 00ffa32335..97ddfece0b 100644 --- a/vendor/github.com/openshift/api/config/v1/zz_generated.deepcopy.go +++ b/vendor/github.com/openshift/api/config/v1/zz_generated.deepcopy.go @@ -2992,6 +2992,38 @@ func (in *NetworkStatus) DeepCopy() *NetworkStatus { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NutanixPlatformSpec) DeepCopyInto(out *NutanixPlatformSpec) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NutanixPlatformSpec. +func (in *NutanixPlatformSpec) DeepCopy() *NutanixPlatformSpec { + if in == nil { + return nil + } + out := new(NutanixPlatformSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NutanixPlatformStatus) DeepCopyInto(out *NutanixPlatformStatus) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NutanixPlatformStatus. +func (in *NutanixPlatformStatus) DeepCopy() *NutanixPlatformStatus { + if in == nil { + return nil + } + out := new(NutanixPlatformStatus) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *OAuth) DeepCopyInto(out *OAuth) { *out = *in @@ -3477,6 +3509,11 @@ func (in *PlatformSpec) DeepCopyInto(out *PlatformSpec) { *out = new(AlibabaCloudPlatformSpec) **out = **in } + if in.Nutanix != nil { + in, out := &in.Nutanix, &out.Nutanix + *out = new(NutanixPlatformSpec) + **out = **in + } return } @@ -3553,6 +3590,11 @@ func (in *PlatformStatus) DeepCopyInto(out *PlatformStatus) { *out = new(AlibabaCloudPlatformStatus) (*in).DeepCopyInto(*out) } + if in.Nutanix != nil { + in, out := &in.Nutanix, &out.Nutanix + *out = new(NutanixPlatformStatus) + **out = **in + } return } diff --git a/vendor/github.com/openshift/api/config/v1/zz_generated.swagger_doc_generated.go b/vendor/github.com/openshift/api/config/v1/zz_generated.swagger_doc_generated.go index 326fc10bb1..811becd56e 100644 --- a/vendor/github.com/openshift/api/config/v1/zz_generated.swagger_doc_generated.go +++ b/vendor/github.com/openshift/api/config/v1/zz_generated.swagger_doc_generated.go @@ -1108,6 +1108,24 @@ func (KubevirtPlatformStatus) SwaggerDoc() map[string]string { return map_KubevirtPlatformStatus } +var map_NutanixPlatformSpec = map[string]string{ + "": "NutanixPlatformSpec holds the desired state of the Nutanix infrastructure provider. This only includes fields that can be modified in the cluster.", +} + +func (NutanixPlatformSpec) SwaggerDoc() map[string]string { + return map_NutanixPlatformSpec +} + +var map_NutanixPlatformStatus = map[string]string{ + "": "NutanixPlatformStatus holds the current status of the Nutanix infrastructure provider.", + "apiServerInternalIP": "apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI points to. It is the IP for a self-hosted load balancer in front of the API servers.", + "ingressIP": "ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names.", +} + +func (NutanixPlatformStatus) SwaggerDoc() map[string]string { + return map_NutanixPlatformStatus +} + var map_OpenStackPlatformSpec = map[string]string{ "": "OpenStackPlatformSpec holds the desired state of the OpenStack infrastructure provider. This only includes fields that can be modified in the cluster.", } @@ -1149,7 +1167,7 @@ func (OvirtPlatformStatus) SwaggerDoc() map[string]string { var map_PlatformSpec = map[string]string{ "": "PlatformSpec holds the desired state specific to the underlying infrastructure provider of the current cluster. Since these are used at spec-level for the underlying cluster, it is supposed that only one of the spec structs is set.", - "type": "type is the underlying infrastructure provider for the cluster. This value controls whether infrastructure automation such as service load balancers, dynamic volume provisioning, machine creation and deletion, and other integrations are enabled. If None, no infrastructure automation is enabled. Allowed values are \"AWS\", \"Azure\", \"BareMetal\", \"GCP\", \"Libvirt\", \"OpenStack\", \"VSphere\", \"oVirt\", \"KubeVirt\", \"EquinixMetal\", \"PowerVS\", \"AlibabaCloud\" and \"None\". Individual components may not support all platforms, and must handle unrecognized platforms as None if they do not support that platform.", + "type": "type is the underlying infrastructure provider for the cluster. This value controls whether infrastructure automation such as service load balancers, dynamic volume provisioning, machine creation and deletion, and other integrations are enabled. If None, no infrastructure automation is enabled. Allowed values are \"AWS\", \"Azure\", \"BareMetal\", \"GCP\", \"Libvirt\", \"OpenStack\", \"VSphere\", \"oVirt\", \"KubeVirt\", \"EquinixMetal\", \"PowerVS\", \"AlibabaCloud\", \"Nutanix\" and \"None\". Individual components may not support all platforms, and must handle unrecognized platforms as None if they do not support that platform.", "aws": "AWS contains settings specific to the Amazon Web Services infrastructure provider.", "azure": "Azure contains settings specific to the Azure infrastructure provider.", "gcp": "GCP contains settings specific to the Google Cloud Platform infrastructure provider.", @@ -1162,6 +1180,7 @@ var map_PlatformSpec = map[string]string{ "equinixMetal": "EquinixMetal contains settings specific to the Equinix Metal infrastructure provider.", "powervs": "PowerVS contains settings specific to the IBM Power Systems Virtual Servers infrastructure provider.", "alibabaCloud": "AlibabaCloud contains settings specific to the Alibaba Cloud infrastructure provider.", + "nutanix": "Nutanix contains settings specific to the Nutanix infrastructure provider.", } func (PlatformSpec) SwaggerDoc() map[string]string { @@ -1170,7 +1189,7 @@ func (PlatformSpec) SwaggerDoc() map[string]string { var map_PlatformStatus = map[string]string{ "": "PlatformStatus holds the current status specific to the underlying infrastructure provider of the current cluster. Since these are used at status-level for the underlying cluster, it is supposed that only one of the status structs is set.", - "type": "type is the underlying infrastructure provider for the cluster. This value controls whether infrastructure automation such as service load balancers, dynamic volume provisioning, machine creation and deletion, and other integrations are enabled. If None, no infrastructure automation is enabled. Allowed values are \"AWS\", \"Azure\", \"BareMetal\", \"GCP\", \"Libvirt\", \"OpenStack\", \"VSphere\", \"oVirt\", \"EquinixMetal\", \"PowerVS\", \"AlibabaCloud\" and \"None\". Individual components may not support all platforms, and must handle unrecognized platforms as None if they do not support that platform.\n\nThis value will be synced with to the `status.platform` and `status.platformStatus.type`. Currently this value cannot be changed once set.", + "type": "type is the underlying infrastructure provider for the cluster. This value controls whether infrastructure automation such as service load balancers, dynamic volume provisioning, machine creation and deletion, and other integrations are enabled. If None, no infrastructure automation is enabled. Allowed values are \"AWS\", \"Azure\", \"BareMetal\", \"GCP\", \"Libvirt\", \"OpenStack\", \"VSphere\", \"oVirt\", \"EquinixMetal\", \"PowerVS\", \"AlibabaCloud\", \"Nutanix\" and \"None\". Individual components may not support all platforms, and must handle unrecognized platforms as None if they do not support that platform.\n\nThis value will be synced with to the `status.platform` and `status.platformStatus.type`. Currently this value cannot be changed once set.", "aws": "AWS contains settings specific to the Amazon Web Services infrastructure provider.", "azure": "Azure contains settings specific to the Azure infrastructure provider.", "gcp": "GCP contains settings specific to the Google Cloud Platform infrastructure provider.", @@ -1183,6 +1202,7 @@ var map_PlatformStatus = map[string]string{ "equinixMetal": "EquinixMetal contains settings specific to the Equinix Metal infrastructure provider.", "powervs": "PowerVS contains settings specific to the Power Systems Virtual Servers infrastructure provider.", "alibabaCloud": "AlibabaCloud contains settings specific to the Alibaba Cloud infrastructure provider.", + "nutanix": "Nutanix contains settings specific to the Nutanix infrastructure provider.", } func (PlatformStatus) SwaggerDoc() map[string]string { diff --git a/vendor/github.com/openshift/api/helm/v1beta1/0000_10-helm-chart-repository.crd.yaml b/vendor/github.com/openshift/api/helm/v1beta1/0000_10-helm-chart-repository.crd.yaml index 3280637836..aa3ff6644b 100644 --- a/vendor/github.com/openshift/api/helm/v1beta1/0000_10-helm-chart-repository.crd.yaml +++ b/vendor/github.com/openshift/api/helm/v1beta1/0000_10-helm-chart-repository.crd.yaml @@ -69,7 +69,7 @@ spec: maxLength: 2048 minLength: 1 disabled: - description: If set to true, disable the repo usage in the cluster + description: If set to true, disable the repo usage in the cluster/namespace type: boolean name: description: Optional associated human readable repository name, it can be used by UI for displaying purposes diff --git a/vendor/github.com/openshift/api/helm/v1beta1/0000_10-project-helm-chart-repository.crd.yaml b/vendor/github.com/openshift/api/helm/v1beta1/0000_10-project-helm-chart-repository.crd.yaml new file mode 100644 index 0000000000..d039edaa65 --- /dev/null +++ b/vendor/github.com/openshift/api/helm/v1beta1/0000_10-project-helm-chart-repository.crd.yaml @@ -0,0 +1,130 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + api-approved.openshift.io: https://github.com/openshift/api/pull/1084 + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + name: projecthelmchartrepositories.helm.openshift.io +spec: + group: helm.openshift.io + names: + kind: ProjectHelmChartRepository + listKind: ProjectHelmChartRepositoryList + plural: projecthelmchartrepositories + singular: projecthelmchartrepository + scope: Namespaced + versions: + - name: v1beta1 + served: true + storage: true + subresources: + status: {} + schema: + openAPIV3Schema: + description: "ProjectHelmChartRepository holds namespace-wide configuration for proxied Helm chart repository \n Compatibility level 2: Stable within a major release for a minimum of 9 months or 3 minor releases (whichever is longer)." + type: object + required: + - spec + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: spec holds user settable values for configuration + type: object + properties: + connectionConfig: + description: Required configuration for connecting to the chart repo + type: object + properties: + ca: + description: ca is an optional reference to a config map by name containing the PEM-encoded CA bundle. It is used as a trust anchor to validate the TLS certificate presented by the remote server. The key "ca-bundle.crt" is used to locate the data. If empty, the default system roots are used. The namespace for this config map is openshift-config. + type: object + required: + - name + properties: + name: + description: name is the metadata.name of the referenced config map + type: string + tlsClientConfig: + description: tlsClientConfig is an optional reference to a secret by name that contains the PEM-encoded TLS client certificate and private key to present when connecting to the server. The key "tls.crt" is used to locate the client certificate. The key "tls.key" is used to locate the private key. The namespace for this secret is openshift-config. + type: object + required: + - name + properties: + name: + description: name is the metadata.name of the referenced secret + type: string + url: + description: Chart repository URL + type: string + maxLength: 2048 + pattern: ^https?:\/\/ + description: + description: Optional human readable repository description, it can be used by UI for displaying purposes + type: string + maxLength: 2048 + minLength: 1 + disabled: + description: If set to true, disable the repo usage in the cluster/namespace + type: boolean + name: + description: Optional associated human readable repository name, it can be used by UI for displaying purposes + type: string + maxLength: 100 + minLength: 1 + status: + description: Observed status of the repository within the namespace.. + type: object + properties: + conditions: + description: conditions is a list of conditions and their statuses + type: array + items: + description: "Condition contains details for one aspect of the current state of this API Resource. --- This struct is intended for direct use as an array at the field path .status.conditions. For example, type FooStatus struct{ // Represents the observations of a foo's current state. // Known .status.conditions.type are: \"Available\", \"Progressing\", and \"Degraded\" // +patchMergeKey=type // +patchStrategy=merge // +listType=map // +listMapKey=type Conditions []metav1.Condition `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` \n // other fields }" + type: object + required: + - lastTransitionTime + - message + - reason + - status + - type + properties: + lastTransitionTime: + description: lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + type: string + format: date-time + message: + description: message is a human readable message indicating details about the transition. This may be an empty string. + type: string + maxLength: 32768 + observedGeneration: + description: observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance. + type: integer + format: int64 + minimum: 0 + reason: + description: reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty. + type: string + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + status: + description: status of the condition, one of True, False, Unknown. + type: string + enum: + - "True" + - "False" + - Unknown + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. --- Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) + type: string + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ diff --git a/vendor/github.com/openshift/api/helm/v1beta1/register.go b/vendor/github.com/openshift/api/helm/v1beta1/register.go index 890474569a..1301eb008e 100644 --- a/vendor/github.com/openshift/api/helm/v1beta1/register.go +++ b/vendor/github.com/openshift/api/helm/v1beta1/register.go @@ -32,6 +32,8 @@ func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(GroupVersion, &HelmChartRepository{}, &HelmChartRepositoryList{}, + &ProjectHelmChartRepository{}, + &ProjectHelmChartRepositoryList{}, ) metav1.AddToGroupVersion(scheme, GroupVersion) return nil diff --git a/vendor/github.com/openshift/api/helm/v1beta1/types_helm.go b/vendor/github.com/openshift/api/helm/v1beta1/types_helm_chart_repository.go similarity index 97% rename from vendor/github.com/openshift/api/helm/v1beta1/types_helm.go rename to vendor/github.com/openshift/api/helm/v1beta1/types_helm_chart_repository.go index 1b4e69dee8..4c963b6244 100644 --- a/vendor/github.com/openshift/api/helm/v1beta1/types_helm.go +++ b/vendor/github.com/openshift/api/helm/v1beta1/types_helm_chart_repository.go @@ -41,7 +41,7 @@ type HelmChartRepositoryList struct { // Helm chart repository exposed within the cluster type HelmChartRepositorySpec struct { - // If set to true, disable the repo usage in the cluster + // If set to true, disable the repo usage in the cluster/namespace // +optional Disabled bool `json:"disabled,omitempty"` diff --git a/vendor/github.com/openshift/api/helm/v1beta1/types_project_helm_chart_repository.go b/vendor/github.com/openshift/api/helm/v1beta1/types_project_helm_chart_repository.go new file mode 100644 index 0000000000..7d199a7096 --- /dev/null +++ b/vendor/github.com/openshift/api/helm/v1beta1/types_project_helm_chart_repository.go @@ -0,0 +1,37 @@ +package v1beta1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +kubebuilder:plural=projecthelmchartrepositories + +// ProjectHelmChartRepository holds namespace-wide configuration for proxied Helm chart repository +// +// Compatibility level 2: Stable within a major release for a minimum of 9 months or 3 minor releases (whichever is longer). +// +openshift:compatibility-gen:level=2 +type ProjectHelmChartRepository struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + // spec holds user settable values for configuration + // +kubebuilder:validation:Required + // +required + Spec HelmChartRepositorySpec `json:"spec"` + + // Observed status of the repository within the namespace.. + // +optional + Status HelmChartRepositoryStatus `json:"status"` +} + +// Compatibility level 2: Stable within a major release for a minimum of 9 months or 3 minor releases (whichever is longer). +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +openshift:compatibility-gen:level=2 +type ProjectHelmChartRepositoryList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata"` + + Items []ProjectHelmChartRepository `json:"items"` +} diff --git a/vendor/github.com/openshift/api/helm/v1beta1/zz_generated.deepcopy.go b/vendor/github.com/openshift/api/helm/v1beta1/zz_generated.deepcopy.go index f656c69522..483dc4efcd 100644 --- a/vendor/github.com/openshift/api/helm/v1beta1/zz_generated.deepcopy.go +++ b/vendor/github.com/openshift/api/helm/v1beta1/zz_generated.deepcopy.go @@ -128,3 +128,64 @@ func (in *HelmChartRepositoryStatus) DeepCopy() *HelmChartRepositoryStatus { in.DeepCopyInto(out) return out } + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ProjectHelmChartRepository) DeepCopyInto(out *ProjectHelmChartRepository) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + out.Spec = in.Spec + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProjectHelmChartRepository. +func (in *ProjectHelmChartRepository) DeepCopy() *ProjectHelmChartRepository { + if in == nil { + return nil + } + out := new(ProjectHelmChartRepository) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ProjectHelmChartRepository) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ProjectHelmChartRepositoryList) DeepCopyInto(out *ProjectHelmChartRepositoryList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ProjectHelmChartRepository, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProjectHelmChartRepositoryList. +func (in *ProjectHelmChartRepositoryList) DeepCopy() *ProjectHelmChartRepositoryList { + if in == nil { + return nil + } + out := new(ProjectHelmChartRepositoryList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ProjectHelmChartRepositoryList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} diff --git a/vendor/github.com/openshift/api/imageregistry/v1/00-crd.yaml b/vendor/github.com/openshift/api/imageregistry/v1/00-crd.yaml deleted file mode 100644 index 901cc09a37..0000000000 --- a/vendor/github.com/openshift/api/imageregistry/v1/00-crd.yaml +++ /dev/null @@ -1,1051 +0,0 @@ -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - api-approved.openshift.io: https://github.com/openshift/api/pull/519 - include.release.openshift.io/ibm-cloud-managed: "true" - include.release.openshift.io/self-managed-high-availability: "true" - include.release.openshift.io/single-node-developer: "true" - name: configs.imageregistry.operator.openshift.io -spec: - group: imageregistry.operator.openshift.io - names: - kind: Config - listKind: ConfigList - plural: configs - singular: config - scope: Cluster - versions: - - name: v1 - schema: - openAPIV3Schema: - description: "Config is the configuration object for a registry instance managed by the registry operator \n Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer)." - type: object - required: - - metadata - - spec - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: ImageRegistrySpec defines the specs for the running registry. - type: object - required: - - managementState - - replicas - properties: - affinity: - description: affinity is a group of node affinity scheduling rules for the image registry pod(s). - type: object - properties: - nodeAffinity: - description: Describes node affinity scheduling rules for the pod. - type: object - properties: - preferredDuringSchedulingIgnoredDuringExecution: - description: The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred. - type: array - items: - description: An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op). - type: object - required: - - preference - - weight - properties: - preference: - description: A node selector term, associated with the corresponding weight. - type: object - properties: - matchExpressions: - description: A list of node selector requirements by node's labels. - type: array - items: - description: A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values. - type: object - required: - - key - - operator - properties: - key: - description: The label key that the selector applies to. - type: string - operator: - description: Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt. - type: string - values: - description: An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch. - type: array - items: - type: string - matchFields: - description: A list of node selector requirements by node's fields. - type: array - items: - description: A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values. - type: object - required: - - key - - operator - properties: - key: - description: The label key that the selector applies to. - type: string - operator: - description: Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt. - type: string - values: - description: An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch. - type: array - items: - type: string - weight: - description: Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100. - type: integer - format: int32 - requiredDuringSchedulingIgnoredDuringExecution: - description: If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node. - type: object - required: - - nodeSelectorTerms - properties: - nodeSelectorTerms: - description: Required. A list of node selector terms. The terms are ORed. - type: array - items: - description: A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm. - type: object - properties: - matchExpressions: - description: A list of node selector requirements by node's labels. - type: array - items: - description: A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values. - type: object - required: - - key - - operator - properties: - key: - description: The label key that the selector applies to. - type: string - operator: - description: Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt. - type: string - values: - description: An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch. - type: array - items: - type: string - matchFields: - description: A list of node selector requirements by node's fields. - type: array - items: - description: A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values. - type: object - required: - - key - - operator - properties: - key: - description: The label key that the selector applies to. - type: string - operator: - description: Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt. - type: string - values: - description: An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch. - type: array - items: - type: string - podAffinity: - description: Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)). - type: object - properties: - preferredDuringSchedulingIgnoredDuringExecution: - description: The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - type: array - items: - description: The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s) - type: object - required: - - podAffinityTerm - - weight - properties: - podAffinityTerm: - description: Required. A pod affinity term, associated with the corresponding weight. - type: object - required: - - topologyKey - properties: - labelSelector: - description: A label query over a set of resources, in this case pods. - type: object - properties: - matchExpressions: - description: matchExpressions is a list of label selector requirements. The requirements are ANDed. - type: array - items: - description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values. - type: object - required: - - key - - operator - properties: - key: - description: key is the label key that the selector applies to. - type: string - operator: - description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist. - type: string - values: - description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch. - type: array - items: - type: string - matchLabels: - description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - type: object - additionalProperties: - type: string - namespaceSelector: - description: A label query over the set of namespaces that the term applies to. The term is applied to the union of the namespaces selected by this field and the ones listed in the namespaces field. null selector and null or empty namespaces list means "this pod's namespace". An empty selector ({}) matches all namespaces. This field is beta-level and is only honored when PodAffinityNamespaceSelector feature is enabled. - type: object - properties: - matchExpressions: - description: matchExpressions is a list of label selector requirements. The requirements are ANDed. - type: array - items: - description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values. - type: object - required: - - key - - operator - properties: - key: - description: key is the label key that the selector applies to. - type: string - operator: - description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist. - type: string - values: - description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch. - type: array - items: - type: string - matchLabels: - description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - type: object - additionalProperties: - type: string - namespaces: - description: namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means "this pod's namespace" - type: array - items: - type: string - topologyKey: - description: This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed. - type: string - weight: - description: weight associated with matching the corresponding podAffinityTerm, in the range 1-100. - type: integer - format: int32 - requiredDuringSchedulingIgnoredDuringExecution: - description: If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - type: array - items: - description: Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key matches that of any node on which a pod of the set of pods is running - type: object - required: - - topologyKey - properties: - labelSelector: - description: A label query over a set of resources, in this case pods. - type: object - properties: - matchExpressions: - description: matchExpressions is a list of label selector requirements. The requirements are ANDed. - type: array - items: - description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values. - type: object - required: - - key - - operator - properties: - key: - description: key is the label key that the selector applies to. - type: string - operator: - description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist. - type: string - values: - description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch. - type: array - items: - type: string - matchLabels: - description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - type: object - additionalProperties: - type: string - namespaceSelector: - description: A label query over the set of namespaces that the term applies to. The term is applied to the union of the namespaces selected by this field and the ones listed in the namespaces field. null selector and null or empty namespaces list means "this pod's namespace". An empty selector ({}) matches all namespaces. This field is beta-level and is only honored when PodAffinityNamespaceSelector feature is enabled. - type: object - properties: - matchExpressions: - description: matchExpressions is a list of label selector requirements. The requirements are ANDed. - type: array - items: - description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values. - type: object - required: - - key - - operator - properties: - key: - description: key is the label key that the selector applies to. - type: string - operator: - description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist. - type: string - values: - description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch. - type: array - items: - type: string - matchLabels: - description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - type: object - additionalProperties: - type: string - namespaces: - description: namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means "this pod's namespace" - type: array - items: - type: string - topologyKey: - description: This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed. - type: string - podAntiAffinity: - description: Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)). - type: object - properties: - preferredDuringSchedulingIgnoredDuringExecution: - description: The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred. - type: array - items: - description: The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s) - type: object - required: - - podAffinityTerm - - weight - properties: - podAffinityTerm: - description: Required. A pod affinity term, associated with the corresponding weight. - type: object - required: - - topologyKey - properties: - labelSelector: - description: A label query over a set of resources, in this case pods. - type: object - properties: - matchExpressions: - description: matchExpressions is a list of label selector requirements. The requirements are ANDed. - type: array - items: - description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values. - type: object - required: - - key - - operator - properties: - key: - description: key is the label key that the selector applies to. - type: string - operator: - description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist. - type: string - values: - description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch. - type: array - items: - type: string - matchLabels: - description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - type: object - additionalProperties: - type: string - namespaceSelector: - description: A label query over the set of namespaces that the term applies to. The term is applied to the union of the namespaces selected by this field and the ones listed in the namespaces field. null selector and null or empty namespaces list means "this pod's namespace". An empty selector ({}) matches all namespaces. This field is beta-level and is only honored when PodAffinityNamespaceSelector feature is enabled. - type: object - properties: - matchExpressions: - description: matchExpressions is a list of label selector requirements. The requirements are ANDed. - type: array - items: - description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values. - type: object - required: - - key - - operator - properties: - key: - description: key is the label key that the selector applies to. - type: string - operator: - description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist. - type: string - values: - description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch. - type: array - items: - type: string - matchLabels: - description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - type: object - additionalProperties: - type: string - namespaces: - description: namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means "this pod's namespace" - type: array - items: - type: string - topologyKey: - description: This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed. - type: string - weight: - description: weight associated with matching the corresponding podAffinityTerm, in the range 1-100. - type: integer - format: int32 - requiredDuringSchedulingIgnoredDuringExecution: - description: If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. - type: array - items: - description: Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key matches that of any node on which a pod of the set of pods is running - type: object - required: - - topologyKey - properties: - labelSelector: - description: A label query over a set of resources, in this case pods. - type: object - properties: - matchExpressions: - description: matchExpressions is a list of label selector requirements. The requirements are ANDed. - type: array - items: - description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values. - type: object - required: - - key - - operator - properties: - key: - description: key is the label key that the selector applies to. - type: string - operator: - description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist. - type: string - values: - description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch. - type: array - items: - type: string - matchLabels: - description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - type: object - additionalProperties: - type: string - namespaceSelector: - description: A label query over the set of namespaces that the term applies to. The term is applied to the union of the namespaces selected by this field and the ones listed in the namespaces field. null selector and null or empty namespaces list means "this pod's namespace". An empty selector ({}) matches all namespaces. This field is beta-level and is only honored when PodAffinityNamespaceSelector feature is enabled. - type: object - properties: - matchExpressions: - description: matchExpressions is a list of label selector requirements. The requirements are ANDed. - type: array - items: - description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values. - type: object - required: - - key - - operator - properties: - key: - description: key is the label key that the selector applies to. - type: string - operator: - description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist. - type: string - values: - description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch. - type: array - items: - type: string - matchLabels: - description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. - type: object - additionalProperties: - type: string - namespaces: - description: namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means "this pod's namespace" - type: array - items: - type: string - topologyKey: - description: This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed. - type: string - defaultRoute: - description: defaultRoute indicates whether an external facing route for the registry should be created using the default generated hostname. - type: boolean - disableRedirect: - description: disableRedirect controls whether to route all data through the Registry, rather than redirecting to the backend. - type: boolean - httpSecret: - description: httpSecret is the value needed by the registry to secure uploads, generated by default. - type: string - logLevel: - description: "logLevel is an intent based logging for an overall component. It does not give fine grained control, but it is a simple way to manage coarse grained logging choices that operators have to interpret for their operands. \n Valid values are: \"Normal\", \"Debug\", \"Trace\", \"TraceAll\". Defaults to \"Normal\"." - type: string - default: Normal - enum: - - "" - - Normal - - Debug - - Trace - - TraceAll - logging: - description: logging is deprecated, use logLevel instead. - type: integer - format: int64 - managementState: - description: managementState indicates whether and how the operator should manage the component - type: string - pattern: ^(Managed|Unmanaged|Force|Removed)$ - nodeSelector: - description: nodeSelector defines the node selection constraints for the registry pod. - type: object - additionalProperties: - type: string - observedConfig: - description: observedConfig holds a sparse config that controller has observed from the cluster state. It exists in spec because it is an input to the level for the operator - type: object - nullable: true - x-kubernetes-preserve-unknown-fields: true - operatorLogLevel: - description: "operatorLogLevel is an intent based logging for the operator itself. It does not give fine grained control, but it is a simple way to manage coarse grained logging choices that operators have to interpret for themselves. \n Valid values are: \"Normal\", \"Debug\", \"Trace\", \"TraceAll\". Defaults to \"Normal\"." - type: string - default: Normal - enum: - - "" - - Normal - - Debug - - Trace - - TraceAll - proxy: - description: proxy defines the proxy to be used when calling master api, upstream registries, etc. - type: object - properties: - http: - description: http defines the proxy to be used by the image registry when accessing HTTP endpoints. - type: string - https: - description: https defines the proxy to be used by the image registry when accessing HTTPS endpoints. - type: string - noProxy: - description: noProxy defines a comma-separated list of host names that shouldn't go through any proxy. - type: string - readOnly: - description: readOnly indicates whether the registry instance should reject attempts to push new images or delete existing ones. - type: boolean - replicas: - description: replicas determines the number of registry instances to run. - type: integer - format: int32 - requests: - description: requests controls how many parallel requests a given registry instance will handle before queuing additional requests. - type: object - properties: - read: - description: read defines limits for image registry's reads. - type: object - properties: - maxInQueue: - description: maxInQueue sets the maximum queued api requests to the registry. - type: integer - maxRunning: - description: maxRunning sets the maximum in flight api requests to the registry. - type: integer - maxWaitInQueue: - description: maxWaitInQueue sets the maximum time a request can wait in the queue before being rejected. - type: string - format: duration - write: - description: write defines limits for image registry's writes. - type: object - properties: - maxInQueue: - description: maxInQueue sets the maximum queued api requests to the registry. - type: integer - maxRunning: - description: maxRunning sets the maximum in flight api requests to the registry. - type: integer - maxWaitInQueue: - description: maxWaitInQueue sets the maximum time a request can wait in the queue before being rejected. - type: string - format: duration - resources: - description: resources defines the resource requests+limits for the registry pod. - type: object - properties: - limits: - description: 'Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' - type: object - additionalProperties: - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - requests: - description: 'Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' - type: object - additionalProperties: - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - rolloutStrategy: - description: rolloutStrategy defines rollout strategy for the image registry deployment. - type: string - pattern: ^(RollingUpdate|Recreate)$ - routes: - description: routes defines additional external facing routes which should be created for the registry. - type: array - items: - description: ImageRegistryConfigRoute holds information on external route access to image registry. - type: object - required: - - name - properties: - hostname: - description: hostname for the route. - type: string - name: - description: name of the route to be created. - type: string - secretName: - description: secretName points to secret containing the certificates to be used by the route. - type: string - storage: - description: storage details for configuring registry storage, e.g. S3 bucket coordinates. - type: object - properties: - azure: - description: azure represents configuration that uses Azure Blob Storage. - type: object - properties: - accountName: - description: accountName defines the account to be used by the registry. - type: string - cloudName: - description: cloudName is the name of the Azure cloud environment to be used by the registry. If empty, the operator will set it based on the infrastructure object. - type: string - container: - description: container defines Azure's container to be used by registry. - type: string - maxLength: 63 - minLength: 3 - pattern: ^[0-9a-z]+(-[0-9a-z]+)*$ - emptyDir: - description: 'emptyDir represents ephemeral storage on the pod''s host node. WARNING: this storage cannot be used with more than 1 replica and is not suitable for production use. When the pod is removed from a node for any reason, the data in the emptyDir is deleted forever.' - type: object - gcs: - description: gcs represents configuration that uses Google Cloud Storage. - type: object - properties: - bucket: - description: bucket is the bucket name in which you want to store the registry's data. Optional, will be generated if not provided. - type: string - keyID: - description: keyID is the KMS key ID to use for encryption. Optional, buckets are encrypted by default on GCP. This allows for the use of a custom encryption key. - type: string - projectID: - description: projectID is the Project ID of the GCP project that this bucket should be associated with. - type: string - region: - description: region is the GCS location in which your bucket exists. Optional, will be set based on the installed GCS Region. - type: string - ibmcos: - description: ibmcos represents configuration that uses IBM Cloud Object Storage. - type: object - properties: - bucket: - description: bucket is the bucket name in which you want to store the registry's data. Optional, will be generated if not provided. - type: string - location: - description: location is the IBM Cloud location in which your bucket exists. Optional, will be set based on the installed IBM Cloud location. - type: string - resourceGroupName: - description: resourceGroupName is the name of the IBM Cloud resource group that this bucket and its service instance is associated with. Optional, will be set based on the installed IBM Cloud resource group. - type: string - resourceKeyCRN: - description: resourceKeyCRN is the CRN of the IBM Cloud resource key that is created for the service instance. Commonly referred as a service credential and must contain HMAC type credentials. Optional, will be computed if not provided. - type: string - pattern: ^crn:.+:.+:.+:cloud-object-storage:.+:.+:.+:resource-key:.+$ - serviceInstanceCRN: - description: serviceInstanceCRN is the CRN of the IBM Cloud Object Storage service instance that this bucket is associated with. Optional, will be computed if not provided. - type: string - pattern: ^crn:.+:.+:.+:cloud-object-storage:.+:.+:.+::$ - managementState: - description: managementState indicates if the operator manages the underlying storage unit. If Managed the operator will remove the storage when this operator gets Removed. - type: string - pattern: ^(Managed|Unmanaged)$ - pvc: - description: pvc represents configuration that uses a PersistentVolumeClaim. - type: object - properties: - claim: - description: claim defines the Persisent Volume Claim's name to be used. - type: string - s3: - description: s3 represents configuration that uses Amazon Simple Storage Service. - type: object - properties: - bucket: - description: bucket is the bucket name in which you want to store the registry's data. Optional, will be generated if not provided. - type: string - cloudFront: - description: cloudFront configures Amazon Cloudfront as the storage middleware in a registry. - type: object - required: - - baseURL - - keypairID - - privateKey - properties: - baseURL: - description: baseURL contains the SCHEME://HOST[/PATH] at which Cloudfront is served. - type: string - duration: - description: duration is the duration of the Cloudfront session. - type: string - format: duration - keypairID: - description: keypairID is key pair ID provided by AWS. - type: string - privateKey: - description: privateKey points to secret containing the private key, provided by AWS. - type: object - required: - - key - properties: - key: - description: The key of the secret to select from. Must be a valid secret key. - type: string - name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' - type: string - optional: - description: Specify whether the Secret or its key must be defined - type: boolean - encrypt: - description: encrypt specifies whether the registry stores the image in encrypted format or not. Optional, defaults to false. - type: boolean - keyID: - description: keyID is the KMS key ID to use for encryption. Optional, Encrypt must be true, or this parameter is ignored. - type: string - region: - description: region is the AWS region in which your bucket exists. Optional, will be set based on the installed AWS Region. - type: string - regionEndpoint: - description: regionEndpoint is the endpoint for S3 compatible storage services. Optional, defaults based on the Region that is provided. - type: string - virtualHostedStyle: - description: virtualHostedStyle enables using S3 virtual hosted style bucket paths with a custom RegionEndpoint Optional, defaults to false. - type: boolean - swift: - description: swift represents configuration that uses OpenStack Object Storage. - type: object - properties: - authURL: - description: authURL defines the URL for obtaining an authentication token. - type: string - authVersion: - description: authVersion specifies the OpenStack Auth's version. - type: string - container: - description: container defines the name of Swift container where to store the registry's data. - type: string - domain: - description: domain specifies Openstack's domain name for Identity v3 API. - type: string - domainID: - description: domainID specifies Openstack's domain id for Identity v3 API. - type: string - regionName: - description: regionName defines Openstack's region in which container exists. - type: string - tenant: - description: tenant defines Openstack tenant name to be used by registry. - type: string - tenantID: - description: tenant defines Openstack tenant id to be used by registry. - type: string - tolerations: - description: tolerations defines the tolerations for the registry pod. - type: array - items: - description: The pod this Toleration is attached to tolerates any taint that matches the triple using the matching operator . - type: object - properties: - effect: - description: Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute. - type: string - key: - description: Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys. - type: string - operator: - description: Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category. - type: string - tolerationSeconds: - description: TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system. - type: integer - format: int64 - value: - description: Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string. - type: string - unsupportedConfigOverrides: - description: 'unsupportedConfigOverrides holds a sparse config that will override any previously set options. It only needs to be the fields to override it will end up overlaying in the following order: 1. hardcoded defaults 2. observedConfig 3. unsupportedConfigOverrides' - type: object - nullable: true - x-kubernetes-preserve-unknown-fields: true - status: - description: ImageRegistryStatus reports image registry operational status. - type: object - required: - - storage - - storageManaged - properties: - conditions: - description: conditions is a list of conditions and their status - type: array - items: - description: OperatorCondition is just the standard condition fields. - type: object - properties: - lastTransitionTime: - type: string - format: date-time - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - generations: - description: generations are used to determine when an item needs to be reconciled or has changed in a way that needs a reaction. - type: array - items: - description: GenerationStatus keeps track of the generation for a given resource so that decisions about forced updates can be made. - type: object - properties: - group: - description: group is the group of the thing you're tracking - type: string - hash: - description: hash is an optional field set for resources without generation that are content sensitive like secrets and configmaps - type: string - lastGeneration: - description: lastGeneration is the last generation of the workload controller involved - type: integer - format: int64 - name: - description: name is the name of the thing you're tracking - type: string - namespace: - description: namespace is where the thing you're tracking is - type: string - resource: - description: resource is the resource type of the thing you're tracking - type: string - observedGeneration: - description: observedGeneration is the last generation change you've dealt with - type: integer - format: int64 - readyReplicas: - description: readyReplicas indicates how many replicas are ready and at the desired state - type: integer - format: int32 - storage: - description: storage indicates the current applied storage configuration of the registry. - type: object - properties: - azure: - description: azure represents configuration that uses Azure Blob Storage. - type: object - properties: - accountName: - description: accountName defines the account to be used by the registry. - type: string - cloudName: - description: cloudName is the name of the Azure cloud environment to be used by the registry. If empty, the operator will set it based on the infrastructure object. - type: string - container: - description: container defines Azure's container to be used by registry. - type: string - maxLength: 63 - minLength: 3 - pattern: ^[0-9a-z]+(-[0-9a-z]+)*$ - emptyDir: - description: 'emptyDir represents ephemeral storage on the pod''s host node. WARNING: this storage cannot be used with more than 1 replica and is not suitable for production use. When the pod is removed from a node for any reason, the data in the emptyDir is deleted forever.' - type: object - gcs: - description: gcs represents configuration that uses Google Cloud Storage. - type: object - properties: - bucket: - description: bucket is the bucket name in which you want to store the registry's data. Optional, will be generated if not provided. - type: string - keyID: - description: keyID is the KMS key ID to use for encryption. Optional, buckets are encrypted by default on GCP. This allows for the use of a custom encryption key. - type: string - projectID: - description: projectID is the Project ID of the GCP project that this bucket should be associated with. - type: string - region: - description: region is the GCS location in which your bucket exists. Optional, will be set based on the installed GCS Region. - type: string - ibmcos: - description: ibmcos represents configuration that uses IBM Cloud Object Storage. - type: object - properties: - bucket: - description: bucket is the bucket name in which you want to store the registry's data. Optional, will be generated if not provided. - type: string - location: - description: location is the IBM Cloud location in which your bucket exists. Optional, will be set based on the installed IBM Cloud location. - type: string - resourceGroupName: - description: resourceGroupName is the name of the IBM Cloud resource group that this bucket and its service instance is associated with. Optional, will be set based on the installed IBM Cloud resource group. - type: string - resourceKeyCRN: - description: resourceKeyCRN is the CRN of the IBM Cloud resource key that is created for the service instance. Commonly referred as a service credential and must contain HMAC type credentials. Optional, will be computed if not provided. - type: string - pattern: ^crn:.+:.+:.+:cloud-object-storage:.+:.+:.+:resource-key:.+$ - serviceInstanceCRN: - description: serviceInstanceCRN is the CRN of the IBM Cloud Object Storage service instance that this bucket is associated with. Optional, will be computed if not provided. - type: string - pattern: ^crn:.+:.+:.+:cloud-object-storage:.+:.+:.+::$ - managementState: - description: managementState indicates if the operator manages the underlying storage unit. If Managed the operator will remove the storage when this operator gets Removed. - type: string - pattern: ^(Managed|Unmanaged)$ - pvc: - description: pvc represents configuration that uses a PersistentVolumeClaim. - type: object - properties: - claim: - description: claim defines the Persisent Volume Claim's name to be used. - type: string - s3: - description: s3 represents configuration that uses Amazon Simple Storage Service. - type: object - properties: - bucket: - description: bucket is the bucket name in which you want to store the registry's data. Optional, will be generated if not provided. - type: string - cloudFront: - description: cloudFront configures Amazon Cloudfront as the storage middleware in a registry. - type: object - required: - - baseURL - - keypairID - - privateKey - properties: - baseURL: - description: baseURL contains the SCHEME://HOST[/PATH] at which Cloudfront is served. - type: string - duration: - description: duration is the duration of the Cloudfront session. - type: string - format: duration - keypairID: - description: keypairID is key pair ID provided by AWS. - type: string - privateKey: - description: privateKey points to secret containing the private key, provided by AWS. - type: object - required: - - key - properties: - key: - description: The key of the secret to select from. Must be a valid secret key. - type: string - name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names TODO: Add other useful fields. apiVersion, kind, uid?' - type: string - optional: - description: Specify whether the Secret or its key must be defined - type: boolean - encrypt: - description: encrypt specifies whether the registry stores the image in encrypted format or not. Optional, defaults to false. - type: boolean - keyID: - description: keyID is the KMS key ID to use for encryption. Optional, Encrypt must be true, or this parameter is ignored. - type: string - region: - description: region is the AWS region in which your bucket exists. Optional, will be set based on the installed AWS Region. - type: string - regionEndpoint: - description: regionEndpoint is the endpoint for S3 compatible storage services. Optional, defaults based on the Region that is provided. - type: string - virtualHostedStyle: - description: virtualHostedStyle enables using S3 virtual hosted style bucket paths with a custom RegionEndpoint Optional, defaults to false. - type: boolean - swift: - description: swift represents configuration that uses OpenStack Object Storage. - type: object - properties: - authURL: - description: authURL defines the URL for obtaining an authentication token. - type: string - authVersion: - description: authVersion specifies the OpenStack Auth's version. - type: string - container: - description: container defines the name of Swift container where to store the registry's data. - type: string - domain: - description: domain specifies Openstack's domain name for Identity v3 API. - type: string - domainID: - description: domainID specifies Openstack's domain id for Identity v3 API. - type: string - regionName: - description: regionName defines Openstack's region in which container exists. - type: string - tenant: - description: tenant defines Openstack tenant name to be used by registry. - type: string - tenantID: - description: tenant defines Openstack tenant id to be used by registry. - type: string - storageManaged: - description: storageManaged is deprecated, please refer to Storage.managementState - type: boolean - version: - description: version is the level this availability applies to - type: string - served: true - storage: true - subresources: - status: {} diff --git a/vendor/github.com/openshift/api/imageregistry/v1/00_imageregistry.crd.yaml b/vendor/github.com/openshift/api/imageregistry/v1/00_imageregistry.crd.yaml new file mode 100644 index 0000000000..c1091da575 --- /dev/null +++ b/vendor/github.com/openshift/api/imageregistry/v1/00_imageregistry.crd.yaml @@ -0,0 +1,1755 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + api-approved.openshift.io: https://github.com/openshift/api/pull/519 + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + name: configs.imageregistry.operator.openshift.io +spec: + group: imageregistry.operator.openshift.io + names: + kind: Config + listKind: ConfigList + plural: configs + singular: config + scope: Cluster + versions: + - name: v1 + schema: + openAPIV3Schema: + description: "Config is the configuration object for a registry instance managed + by the registry operator \n Compatibility level 1: Stable within a major + release for a minimum of 12 months or 3 minor releases (whichever is longer)." + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: ImageRegistrySpec defines the specs for the running registry. + properties: + affinity: + description: affinity is a group of node affinity scheduling rules + for the image registry pod(s). + properties: + nodeAffinity: + description: Describes node affinity scheduling rules for the + pod. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule pods to + nodes that satisfy the affinity expressions specified by + this field, but it may choose a node that violates one or + more of the expressions. The node that is most preferred + is the one with the greatest sum of weights, i.e. for each + node that meets all of the scheduling requirements (resource + request, requiredDuringScheduling affinity expressions, + etc.), compute a sum by iterating through the elements of + this field and adding "weight" to the sum if the node matches + the corresponding matchExpressions; the node(s) with the + highest sum are the most preferred. + items: + description: An empty preferred scheduling term matches + all objects with implicit weight 0 (i.e. it's a no-op). + A null preferred scheduling term matches no objects (i.e. + is also a no-op). + properties: + preference: + description: A node selector term, associated with the + corresponding weight. + properties: + matchExpressions: + description: A list of node selector requirements + by node's labels. + items: + description: A node selector requirement is a + selector that contains values, a key, and an + operator that relates the key and values. + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators are + In, NotIn, Exists, DoesNotExist. Gt, and + Lt. + type: string + values: + description: An array of string values. If + the operator is In or NotIn, the values + array must be non-empty. If the operator + is Exists or DoesNotExist, the values array + must be empty. If the operator is Gt or + Lt, the values array must have a single + element, which will be interpreted as an + integer. This array is replaced during a + strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector requirements + by node's fields. + items: + description: A node selector requirement is a + selector that contains values, a key, and an + operator that relates the key and values. + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators are + In, NotIn, Exists, DoesNotExist. Gt, and + Lt. + type: string + values: + description: An array of string values. If + the operator is In or NotIn, the values + array must be non-empty. If the operator + is Exists or DoesNotExist, the values array + must be empty. If the operator is Gt or + Lt, the values array must have a single + element, which will be interpreted as an + integer. This array is replaced during a + strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + description: Weight associated with matching the corresponding + nodeSelectorTerm, in the range 1-100. + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified by this + field are not met at scheduling time, the pod will not be + scheduled onto the node. If the affinity requirements specified + by this field cease to be met at some point during pod execution + (e.g. due to an update), the system may or may not try to + eventually evict the pod from its node. + properties: + nodeSelectorTerms: + description: Required. A list of node selector terms. + The terms are ORed. + items: + description: A null or empty node selector term matches + no objects. The requirements of them are ANDed. The + TopologySelectorTerm type implements a subset of the + NodeSelectorTerm. + properties: + matchExpressions: + description: A list of node selector requirements + by node's labels. + items: + description: A node selector requirement is a + selector that contains values, a key, and an + operator that relates the key and values. + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators are + In, NotIn, Exists, DoesNotExist. Gt, and + Lt. + type: string + values: + description: An array of string values. If + the operator is In or NotIn, the values + array must be non-empty. If the operator + is Exists or DoesNotExist, the values array + must be empty. If the operator is Gt or + Lt, the values array must have a single + element, which will be interpreted as an + integer. This array is replaced during a + strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector requirements + by node's fields. + items: + description: A node selector requirement is a + selector that contains values, a key, and an + operator that relates the key and values. + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators are + In, NotIn, Exists, DoesNotExist. Gt, and + Lt. + type: string + values: + description: An array of string values. If + the operator is In or NotIn, the values + array must be non-empty. If the operator + is Exists or DoesNotExist, the values array + must be empty. If the operator is Gt or + Lt, the values array must have a single + element, which will be interpreted as an + integer. This array is replaced during a + strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + description: Describes pod affinity scheduling rules (e.g. co-locate + this pod in the same node, zone, etc. as some other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule pods to + nodes that satisfy the affinity expressions specified by + this field, but it may choose a node that violates one or + more of the expressions. The node that is most preferred + is the one with the greatest sum of weights, i.e. for each + node that meets all of the scheduling requirements (resource + request, requiredDuringScheduling affinity expressions, + etc.), compute a sum by iterating through the elements of + this field and adding "weight" to the sum if the node has + pods which matches the corresponding podAffinityTerm; the + node(s) with the highest sum are the most preferred. + items: + description: The weights of all of the matched WeightedPodAffinityTerm + fields are added per-node to find the most preferred node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity term, associated + with the corresponding weight. + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. The term is applied + to the union of the namespaces selected by this + field and the ones listed in the namespaces field. + null selector and null or empty namespaces list + means "this pod's namespace". An empty selector + ({}) matches all namespaces. This field is beta-level + and is only honored when PodAffinityNamespaceSelector + feature is enabled. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + namespaces: + description: namespaces specifies a static list + of namespace names that the term applies to. The + term is applied to the union of the namespaces + listed in this field and the ones selected by + namespaceSelector. null or empty namespaces list + and null namespaceSelector means "this pod's namespace" + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the pods + matching the labelSelector in the specified namespaces, + where co-located is defined as running on a node + whose value of the label with key topologyKey + matches that of any node on which any of the selected + pods is running. Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with matching the corresponding + podAffinityTerm, in the range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified by this + field are not met at scheduling time, the pod will not be + scheduled onto the node. If the affinity requirements specified + by this field cease to be met at some point during pod execution + (e.g. due to a pod label update), the system may or may + not try to eventually evict the pod from its node. When + there are multiple elements, the lists of nodes corresponding + to each podAffinityTerm are intersected, i.e. all terms + must be satisfied. + items: + description: Defines a set of pods (namely those matching + the labelSelector relative to the given namespace(s)) + that this pod should be co-located (affinity) or not co-located + (anti-affinity) with, where co-located is defined as running + on a node whose value of the label with key + matches that of any node on which a pod of the set of + pods is running + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are ANDed. + items: + description: A label selector requirement is a + selector that contains values, a key, and an + operator that relates the key and values. + properties: + key: + description: key is the label key that the + selector applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are + In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. If the + operator is Exists or DoesNotExist, the + values array must be empty. This array is + replaced during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is "In", + and the values array contains only "value". The + requirements are ANDed. + type: object + type: object + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. The term is applied to the + union of the namespaces selected by this field and + the ones listed in the namespaces field. null selector + and null or empty namespaces list means "this pod's + namespace". An empty selector ({}) matches all namespaces. + This field is beta-level and is only honored when + PodAffinityNamespaceSelector feature is enabled. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are ANDed. + items: + description: A label selector requirement is a + selector that contains values, a key, and an + operator that relates the key and values. + properties: + key: + description: key is the label key that the + selector applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are + In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. If the + operator is Exists or DoesNotExist, the + values array must be empty. This array is + replaced during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is "In", + and the values array contains only "value". The + requirements are ANDed. + type: object + type: object + namespaces: + description: namespaces specifies a static list of namespace + names that the term applies to. The term is applied + to the union of the namespaces listed in this field + and the ones selected by namespaceSelector. null or + empty namespaces list and null namespaceSelector means + "this pod's namespace" + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the pods matching + the labelSelector in the specified namespaces, where + co-located is defined as running on a node whose value + of the label with key topologyKey matches that of + any node on which any of the selected pods is running. + Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + description: Describes pod anti-affinity scheduling rules (e.g. + avoid putting this pod in the same node, zone, etc. as some + other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule pods to + nodes that satisfy the anti-affinity expressions specified + by this field, but it may choose a node that violates one + or more of the expressions. The node that is most preferred + is the one with the greatest sum of weights, i.e. for each + node that meets all of the scheduling requirements (resource + request, requiredDuringScheduling anti-affinity expressions, + etc.), compute a sum by iterating through the elements of + this field and adding "weight" to the sum if the node has + pods which matches the corresponding podAffinityTerm; the + node(s) with the highest sum are the most preferred. + items: + description: The weights of all of the matched WeightedPodAffinityTerm + fields are added per-node to find the most preferred node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity term, associated + with the corresponding weight. + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. The term is applied + to the union of the namespaces selected by this + field and the ones listed in the namespaces field. + null selector and null or empty namespaces list + means "this pod's namespace". An empty selector + ({}) matches all namespaces. This field is beta-level + and is only honored when PodAffinityNamespaceSelector + feature is enabled. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + namespaces: + description: namespaces specifies a static list + of namespace names that the term applies to. The + term is applied to the union of the namespaces + listed in this field and the ones selected by + namespaceSelector. null or empty namespaces list + and null namespaceSelector means "this pod's namespace" + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the pods + matching the labelSelector in the specified namespaces, + where co-located is defined as running on a node + whose value of the label with key topologyKey + matches that of any node on which any of the selected + pods is running. Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with matching the corresponding + podAffinityTerm, in the range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the anti-affinity requirements specified by + this field are not met at scheduling time, the pod will + not be scheduled onto the node. If the anti-affinity requirements + specified by this field cease to be met at some point during + pod execution (e.g. due to a pod label update), the system + may or may not try to eventually evict the pod from its + node. When there are multiple elements, the lists of nodes + corresponding to each podAffinityTerm are intersected, i.e. + all terms must be satisfied. + items: + description: Defines a set of pods (namely those matching + the labelSelector relative to the given namespace(s)) + that this pod should be co-located (affinity) or not co-located + (anti-affinity) with, where co-located is defined as running + on a node whose value of the label with key + matches that of any node on which a pod of the set of + pods is running + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are ANDed. + items: + description: A label selector requirement is a + selector that contains values, a key, and an + operator that relates the key and values. + properties: + key: + description: key is the label key that the + selector applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are + In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. If the + operator is Exists or DoesNotExist, the + values array must be empty. This array is + replaced during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is "In", + and the values array contains only "value". The + requirements are ANDed. + type: object + type: object + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. The term is applied to the + union of the namespaces selected by this field and + the ones listed in the namespaces field. null selector + and null or empty namespaces list means "this pod's + namespace". An empty selector ({}) matches all namespaces. + This field is beta-level and is only honored when + PodAffinityNamespaceSelector feature is enabled. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are ANDed. + items: + description: A label selector requirement is a + selector that contains values, a key, and an + operator that relates the key and values. + properties: + key: + description: key is the label key that the + selector applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are + In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. If the + operator is Exists or DoesNotExist, the + values array must be empty. This array is + replaced during a strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is "In", + and the values array contains only "value". The + requirements are ANDed. + type: object + type: object + namespaces: + description: namespaces specifies a static list of namespace + names that the term applies to. The term is applied + to the union of the namespaces listed in this field + and the ones selected by namespaceSelector. null or + empty namespaces list and null namespaceSelector means + "this pod's namespace" + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the pods matching + the labelSelector in the specified namespaces, where + co-located is defined as running on a node whose value + of the label with key topologyKey matches that of + any node on which any of the selected pods is running. + Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + defaultRoute: + description: defaultRoute indicates whether an external facing route + for the registry should be created using the default generated hostname. + type: boolean + disableRedirect: + description: disableRedirect controls whether to route all data through + the Registry, rather than redirecting to the backend. + type: boolean + httpSecret: + description: httpSecret is the value needed by the registry to secure + uploads, generated by default. + type: string + logLevel: + default: Normal + description: "logLevel is an intent based logging for an overall component. + \ It does not give fine grained control, but it is a simple way + to manage coarse grained logging choices that operators have to + interpret for their operands. \n Valid values are: \"Normal\", \"Debug\", + \"Trace\", \"TraceAll\". Defaults to \"Normal\"." + enum: + - "" + - Normal + - Debug + - Trace + - TraceAll + type: string + logging: + description: logging is deprecated, use logLevel instead. + format: int64 + type: integer + managementState: + description: managementState indicates whether and how the operator + should manage the component + pattern: ^(Managed|Unmanaged|Force|Removed)$ + type: string + nodeSelector: + additionalProperties: + type: string + description: nodeSelector defines the node selection constraints for + the registry pod. + type: object + observedConfig: + description: observedConfig holds a sparse config that controller + has observed from the cluster state. It exists in spec because + it is an input to the level for the operator + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + operatorLogLevel: + default: Normal + description: "operatorLogLevel is an intent based logging for the + operator itself. It does not give fine grained control, but it + is a simple way to manage coarse grained logging choices that operators + have to interpret for themselves. \n Valid values are: \"Normal\", + \"Debug\", \"Trace\", \"TraceAll\". Defaults to \"Normal\"." + enum: + - "" + - Normal + - Debug + - Trace + - TraceAll + type: string + proxy: + description: proxy defines the proxy to be used when calling master + api, upstream registries, etc. + properties: + http: + description: http defines the proxy to be used by the image registry + when accessing HTTP endpoints. + type: string + https: + description: https defines the proxy to be used by the image registry + when accessing HTTPS endpoints. + type: string + noProxy: + description: noProxy defines a comma-separated list of host names + that shouldn't go through any proxy. + type: string + type: object + readOnly: + description: readOnly indicates whether the registry instance should + reject attempts to push new images or delete existing ones. + type: boolean + replicas: + description: replicas determines the number of registry instances + to run. + format: int32 + type: integer + requests: + description: requests controls how many parallel requests a given + registry instance will handle before queuing additional requests. + properties: + read: + description: read defines limits for image registry's reads. + properties: + maxInQueue: + description: maxInQueue sets the maximum queued api requests + to the registry. + type: integer + maxRunning: + description: maxRunning sets the maximum in flight api requests + to the registry. + type: integer + maxWaitInQueue: + description: maxWaitInQueue sets the maximum time a request + can wait in the queue before being rejected. + format: duration + type: string + type: object + write: + description: write defines limits for image registry's writes. + properties: + maxInQueue: + description: maxInQueue sets the maximum queued api requests + to the registry. + type: integer + maxRunning: + description: maxRunning sets the maximum in flight api requests + to the registry. + type: integer + maxWaitInQueue: + description: maxWaitInQueue sets the maximum time a request + can wait in the queue before being rejected. + format: duration + type: string + type: object + type: object + resources: + description: resources defines the resource requests+limits for the + registry pod. + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum amount of compute resources + allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes the minimum amount of compute + resources required. If Requests is omitted for a container, + it defaults to Limits if that is explicitly specified, otherwise + to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + rolloutStrategy: + description: rolloutStrategy defines rollout strategy for the image + registry deployment. + pattern: ^(RollingUpdate|Recreate)$ + type: string + routes: + description: routes defines additional external facing routes which + should be created for the registry. + items: + description: ImageRegistryConfigRoute holds information on external + route access to image registry. + properties: + hostname: + description: hostname for the route. + type: string + name: + description: name of the route to be created. + type: string + secretName: + description: secretName points to secret containing the certificates + to be used by the route. + type: string + required: + - name + type: object + type: array + storage: + description: storage details for configuring registry storage, e.g. + S3 bucket coordinates. + properties: + azure: + description: azure represents configuration that uses Azure Blob + Storage. + properties: + accountName: + description: accountName defines the account to be used by + the registry. + type: string + cloudName: + description: cloudName is the name of the Azure cloud environment + to be used by the registry. If empty, the operator will + set it based on the infrastructure object. + type: string + container: + description: container defines Azure's container to be used + by registry. + maxLength: 63 + minLength: 3 + pattern: ^[0-9a-z]+(-[0-9a-z]+)*$ + type: string + type: object + emptyDir: + description: 'emptyDir represents ephemeral storage on the pod''s + host node. WARNING: this storage cannot be used with more than + 1 replica and is not suitable for production use. When the pod + is removed from a node for any reason, the data in the emptyDir + is deleted forever.' + type: object + gcs: + description: gcs represents configuration that uses Google Cloud + Storage. + properties: + bucket: + description: bucket is the bucket name in which you want to + store the registry's data. Optional, will be generated if + not provided. + type: string + keyID: + description: keyID is the KMS key ID to use for encryption. + Optional, buckets are encrypted by default on GCP. This + allows for the use of a custom encryption key. + type: string + projectID: + description: projectID is the Project ID of the GCP project + that this bucket should be associated with. + type: string + region: + description: region is the GCS location in which your bucket + exists. Optional, will be set based on the installed GCS + Region. + type: string + type: object + ibmcos: + description: ibmcos represents configuration that uses IBM Cloud + Object Storage. + properties: + bucket: + description: bucket is the bucket name in which you want to + store the registry's data. Optional, will be generated if + not provided. + type: string + location: + description: location is the IBM Cloud location in which your + bucket exists. Optional, will be set based on the installed + IBM Cloud location. + type: string + resourceGroupName: + description: resourceGroupName is the name of the IBM Cloud + resource group that this bucket and its service instance + is associated with. Optional, will be set based on the installed + IBM Cloud resource group. + type: string + resourceKeyCRN: + description: resourceKeyCRN is the CRN of the IBM Cloud resource + key that is created for the service instance. Commonly referred + as a service credential and must contain HMAC type credentials. + Optional, will be computed if not provided. + pattern: ^crn:.+:.+:.+:cloud-object-storage:.+:.+:.+:resource-key:.+$ + type: string + serviceInstanceCRN: + description: serviceInstanceCRN is the CRN of the IBM Cloud + Object Storage service instance that this bucket is associated + with. Optional, will be computed if not provided. + pattern: ^crn:.+:.+:.+:cloud-object-storage:.+:.+:.+::$ + type: string + type: object + managementState: + description: managementState indicates if the operator manages + the underlying storage unit. If Managed the operator will remove + the storage when this operator gets Removed. + pattern: ^(Managed|Unmanaged)$ + type: string + oss: + description: Oss represents configuration that uses Alibaba Cloud + Object Storage Service. + properties: + bucket: + description: Bucket is the bucket name in which you want to + store the registry's data. About Bucket naming, more details + you can look at the [official documentation](https://www.alibabacloud.com/help/doc-detail/257087.htm) + Empty value means no opinion and the platform chooses the + a default, which is subject to change over time. Currently + the default will be autogenerated in the form of -image-registry-- + maxLength: 63 + minLength: 3 + pattern: ^[0-9a-z]+(-[0-9a-z]+)*$ + type: string + encryption: + anyOf: + - not: + required: + - kms + properties: + method: + not: + enum: + - KMS + - properties: + method: + enum: + - KMS + required: + - kms + description: Encryption specifies whether you would like your + data encrypted on the server side. More details, you can + look cat the [official documentation](https://www.alibabacloud.com/help/doc-detail/117914.htm) + properties: + kms: + description: KMS (key management service) is an encryption + type that holds the struct for KMS KeyID + properties: + keyID: + description: KeyID holds the KMS encryption key ID + minLength: 1 + type: string + required: + - keyID + type: object + method: + default: AES256 + description: Method defines the different encrytion modes + available Empty value means no opinion and the platform + chooses the a default, which is subject to change over + time. Currently the default is `AES256`. + enum: + - KMS + - AES256 + type: string + type: object + endpointAccessibility: + default: Internal + description: EndpointAccessibility specifies whether the registry + use the OSS VPC internal endpoint Empty value means no opinion + and the platform chooses the a default, which is subject + to change over time. Currently the default is `Internal`. + enum: + - Internal + - Public + - "" + type: string + region: + description: Region is the Alibaba Cloud Region in which your + bucket exists. For a list of regions, you can look at the + [official documentation](https://www.alibabacloud.com/help/doc-detail/31837.html). + Empty value means no opinion and the platform chooses the + a default, which is subject to change over time. Currently + the default will be based on the installed Alibaba Cloud + Region. + type: string + type: object + pvc: + description: pvc represents configuration that uses a PersistentVolumeClaim. + properties: + claim: + description: claim defines the Persisent Volume Claim's name + to be used. + type: string + type: object + s3: + description: s3 represents configuration that uses Amazon Simple + Storage Service. + properties: + bucket: + description: bucket is the bucket name in which you want to + store the registry's data. Optional, will be generated if + not provided. + type: string + cloudFront: + description: cloudFront configures Amazon Cloudfront as the + storage middleware in a registry. + properties: + baseURL: + description: baseURL contains the SCHEME://HOST[/PATH] + at which Cloudfront is served. + type: string + duration: + description: duration is the duration of the Cloudfront + session. + format: duration + type: string + keypairID: + description: keypairID is key pair ID provided by AWS. + type: string + privateKey: + description: privateKey points to secret containing the + private key, provided by AWS. + properties: + key: + description: The key of the secret to select from. Must + be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + optional: + description: Specify whether the Secret or its key + must be defined + type: boolean + required: + - key + type: object + required: + - baseURL + - keypairID + - privateKey + type: object + encrypt: + description: encrypt specifies whether the registry stores + the image in encrypted format or not. Optional, defaults + to false. + type: boolean + keyID: + description: keyID is the KMS key ID to use for encryption. + Optional, Encrypt must be true, or this parameter is ignored. + type: string + region: + description: region is the AWS region in which your bucket + exists. Optional, will be set based on the installed AWS + Region. + type: string + regionEndpoint: + description: regionEndpoint is the endpoint for S3 compatible + storage services. Optional, defaults based on the Region + that is provided. + type: string + virtualHostedStyle: + description: virtualHostedStyle enables using S3 virtual hosted + style bucket paths with a custom RegionEndpoint Optional, + defaults to false. + type: boolean + type: object + swift: + description: swift represents configuration that uses OpenStack + Object Storage. + properties: + authURL: + description: authURL defines the URL for obtaining an authentication + token. + type: string + authVersion: + description: authVersion specifies the OpenStack Auth's version. + type: string + container: + description: container defines the name of Swift container + where to store the registry's data. + type: string + domain: + description: domain specifies Openstack's domain name for + Identity v3 API. + type: string + domainID: + description: domainID specifies Openstack's domain id for + Identity v3 API. + type: string + regionName: + description: regionName defines Openstack's region in which + container exists. + type: string + tenant: + description: tenant defines Openstack tenant name to be used + by registry. + type: string + tenantID: + description: tenant defines Openstack tenant id to be used + by registry. + type: string + type: object + type: object + tolerations: + description: tolerations defines the tolerations for the registry + pod. + items: + description: The pod this Toleration is attached to tolerates any + taint that matches the triple using the matching + operator . + properties: + effect: + description: Effect indicates the taint effect to match. Empty + means match all taint effects. When specified, allowed values + are NoSchedule, PreferNoSchedule and NoExecute. + type: string + key: + description: Key is the taint key that the toleration applies + to. Empty means match all taint keys. If the key is empty, + operator must be Exists; this combination means to match all + values and all keys. + type: string + operator: + description: Operator represents a key's relationship to the + value. Valid operators are Exists and Equal. Defaults to Equal. + Exists is equivalent to wildcard for value, so that a pod + can tolerate all taints of a particular category. + type: string + tolerationSeconds: + description: TolerationSeconds represents the period of time + the toleration (which must be of effect NoExecute, otherwise + this field is ignored) tolerates the taint. By default, it + is not set, which means tolerate the taint forever (do not + evict). Zero and negative values will be treated as 0 (evict + immediately) by the system. + format: int64 + type: integer + value: + description: Value is the taint value the toleration matches + to. If the operator is Exists, the value should be empty, + otherwise just a regular string. + type: string + type: object + type: array + unsupportedConfigOverrides: + description: 'unsupportedConfigOverrides holds a sparse config that + will override any previously set options. It only needs to be the + fields to override it will end up overlaying in the following order: + 1. hardcoded defaults 2. observedConfig 3. unsupportedConfigOverrides' + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + required: + - managementState + - replicas + type: object + status: + description: ImageRegistryStatus reports image registry operational status. + properties: + conditions: + description: conditions is a list of conditions and their status + items: + description: OperatorCondition is just the standard condition fields. + properties: + lastTransitionTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + type: object + type: array + generations: + description: generations are used to determine when an item needs + to be reconciled or has changed in a way that needs a reaction. + items: + description: GenerationStatus keeps track of the generation for + a given resource so that decisions about forced updates can be + made. + properties: + group: + description: group is the group of the thing you're tracking + type: string + hash: + description: hash is an optional field set for resources without + generation that are content sensitive like secrets and configmaps + type: string + lastGeneration: + description: lastGeneration is the last generation of the workload + controller involved + format: int64 + type: integer + name: + description: name is the name of the thing you're tracking + type: string + namespace: + description: namespace is where the thing you're tracking is + type: string + resource: + description: resource is the resource type of the thing you're + tracking + type: string + type: object + type: array + observedGeneration: + description: observedGeneration is the last generation change you've + dealt with + format: int64 + type: integer + readyReplicas: + description: readyReplicas indicates how many replicas are ready and + at the desired state + format: int32 + type: integer + storage: + description: storage indicates the current applied storage configuration + of the registry. + properties: + azure: + description: azure represents configuration that uses Azure Blob + Storage. + properties: + accountName: + description: accountName defines the account to be used by + the registry. + type: string + cloudName: + description: cloudName is the name of the Azure cloud environment + to be used by the registry. If empty, the operator will + set it based on the infrastructure object. + type: string + container: + description: container defines Azure's container to be used + by registry. + maxLength: 63 + minLength: 3 + pattern: ^[0-9a-z]+(-[0-9a-z]+)*$ + type: string + type: object + emptyDir: + description: 'emptyDir represents ephemeral storage on the pod''s + host node. WARNING: this storage cannot be used with more than + 1 replica and is not suitable for production use. When the pod + is removed from a node for any reason, the data in the emptyDir + is deleted forever.' + type: object + gcs: + description: gcs represents configuration that uses Google Cloud + Storage. + properties: + bucket: + description: bucket is the bucket name in which you want to + store the registry's data. Optional, will be generated if + not provided. + type: string + keyID: + description: keyID is the KMS key ID to use for encryption. + Optional, buckets are encrypted by default on GCP. This + allows for the use of a custom encryption key. + type: string + projectID: + description: projectID is the Project ID of the GCP project + that this bucket should be associated with. + type: string + region: + description: region is the GCS location in which your bucket + exists. Optional, will be set based on the installed GCS + Region. + type: string + type: object + ibmcos: + description: ibmcos represents configuration that uses IBM Cloud + Object Storage. + properties: + bucket: + description: bucket is the bucket name in which you want to + store the registry's data. Optional, will be generated if + not provided. + type: string + location: + description: location is the IBM Cloud location in which your + bucket exists. Optional, will be set based on the installed + IBM Cloud location. + type: string + resourceGroupName: + description: resourceGroupName is the name of the IBM Cloud + resource group that this bucket and its service instance + is associated with. Optional, will be set based on the installed + IBM Cloud resource group. + type: string + resourceKeyCRN: + description: resourceKeyCRN is the CRN of the IBM Cloud resource + key that is created for the service instance. Commonly referred + as a service credential and must contain HMAC type credentials. + Optional, will be computed if not provided. + pattern: ^crn:.+:.+:.+:cloud-object-storage:.+:.+:.+:resource-key:.+$ + type: string + serviceInstanceCRN: + description: serviceInstanceCRN is the CRN of the IBM Cloud + Object Storage service instance that this bucket is associated + with. Optional, will be computed if not provided. + pattern: ^crn:.+:.+:.+:cloud-object-storage:.+:.+:.+::$ + type: string + type: object + managementState: + description: managementState indicates if the operator manages + the underlying storage unit. If Managed the operator will remove + the storage when this operator gets Removed. + pattern: ^(Managed|Unmanaged)$ + type: string + oss: + description: Oss represents configuration that uses Alibaba Cloud + Object Storage Service. + properties: + bucket: + description: Bucket is the bucket name in which you want to + store the registry's data. About Bucket naming, more details + you can look at the [official documentation](https://www.alibabacloud.com/help/doc-detail/257087.htm) + Empty value means no opinion and the platform chooses the + a default, which is subject to change over time. Currently + the default will be autogenerated in the form of -image-registry-- + maxLength: 63 + minLength: 3 + pattern: ^[0-9a-z]+(-[0-9a-z]+)*$ + type: string + encryption: + description: Encryption specifies whether you would like your + data encrypted on the server side. More details, you can + look cat the [official documentation](https://www.alibabacloud.com/help/doc-detail/117914.htm) + properties: + kms: + description: KMS (key management service) is an encryption + type that holds the struct for KMS KeyID + properties: + keyID: + description: KeyID holds the KMS encryption key ID + minLength: 1 + type: string + required: + - keyID + type: object + method: + default: AES256 + description: Method defines the different encrytion modes + available Empty value means no opinion and the platform + chooses the a default, which is subject to change over + time. Currently the default is `AES256`. + enum: + - KMS + - AES256 + type: string + type: object + endpointAccessibility: + default: Internal + description: EndpointAccessibility specifies whether the registry + use the OSS VPC internal endpoint Empty value means no opinion + and the platform chooses the a default, which is subject + to change over time. Currently the default is `Internal`. + enum: + - Internal + - Public + - "" + type: string + region: + description: Region is the Alibaba Cloud Region in which your + bucket exists. For a list of regions, you can look at the + [official documentation](https://www.alibabacloud.com/help/doc-detail/31837.html). + Empty value means no opinion and the platform chooses the + a default, which is subject to change over time. Currently + the default will be based on the installed Alibaba Cloud + Region. + type: string + type: object + pvc: + description: pvc represents configuration that uses a PersistentVolumeClaim. + properties: + claim: + description: claim defines the Persisent Volume Claim's name + to be used. + type: string + type: object + s3: + description: s3 represents configuration that uses Amazon Simple + Storage Service. + properties: + bucket: + description: bucket is the bucket name in which you want to + store the registry's data. Optional, will be generated if + not provided. + type: string + cloudFront: + description: cloudFront configures Amazon Cloudfront as the + storage middleware in a registry. + properties: + baseURL: + description: baseURL contains the SCHEME://HOST[/PATH] + at which Cloudfront is served. + type: string + duration: + description: duration is the duration of the Cloudfront + session. + format: duration + type: string + keypairID: + description: keypairID is key pair ID provided by AWS. + type: string + privateKey: + description: privateKey points to secret containing the + private key, provided by AWS. + properties: + key: + description: The key of the secret to select from. Must + be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + optional: + description: Specify whether the Secret or its key + must be defined + type: boolean + required: + - key + type: object + required: + - baseURL + - keypairID + - privateKey + type: object + encrypt: + description: encrypt specifies whether the registry stores + the image in encrypted format or not. Optional, defaults + to false. + type: boolean + keyID: + description: keyID is the KMS key ID to use for encryption. + Optional, Encrypt must be true, or this parameter is ignored. + type: string + region: + description: region is the AWS region in which your bucket + exists. Optional, will be set based on the installed AWS + Region. + type: string + regionEndpoint: + description: regionEndpoint is the endpoint for S3 compatible + storage services. Optional, defaults based on the Region + that is provided. + type: string + virtualHostedStyle: + description: virtualHostedStyle enables using S3 virtual hosted + style bucket paths with a custom RegionEndpoint Optional, + defaults to false. + type: boolean + type: object + swift: + description: swift represents configuration that uses OpenStack + Object Storage. + properties: + authURL: + description: authURL defines the URL for obtaining an authentication + token. + type: string + authVersion: + description: authVersion specifies the OpenStack Auth's version. + type: string + container: + description: container defines the name of Swift container + where to store the registry's data. + type: string + domain: + description: domain specifies Openstack's domain name for + Identity v3 API. + type: string + domainID: + description: domainID specifies Openstack's domain id for + Identity v3 API. + type: string + regionName: + description: regionName defines Openstack's region in which + container exists. + type: string + tenant: + description: tenant defines Openstack tenant name to be used + by registry. + type: string + tenantID: + description: tenant defines Openstack tenant id to be used + by registry. + type: string + type: object + type: object + storageManaged: + description: storageManaged is deprecated, please refer to Storage.managementState + type: boolean + version: + description: version is the level this availability applies to + type: string + required: + - storage + - storageManaged + type: object + required: + - metadata + - spec + type: object + served: true + storage: true + subresources: + status: {} diff --git a/vendor/github.com/openshift/api/imageregistry/v1/00_imageregistry.crd.yaml-patch b/vendor/github.com/openshift/api/imageregistry/v1/00_imageregistry.crd.yaml-patch new file mode 100644 index 0000000000..1bd29f5667 --- /dev/null +++ b/vendor/github.com/openshift/api/imageregistry/v1/00_imageregistry.crd.yaml-patch @@ -0,0 +1,13 @@ +- op: add + path: /spec/versions/name=v1/schema/openAPIV3Schema/properties/spec/properties/storage/properties/oss/properties/encryption/anyOf + value: + - properties: + method: + not: + enum: ["KMS"] + not: + required: ["kms"] + - properties: + method: + enum: ["KMS"] + required: ["kms"] diff --git a/vendor/github.com/openshift/api/imageregistry/v1/01-crd.yaml b/vendor/github.com/openshift/api/imageregistry/v1/01_imagepruner.crd.yaml similarity index 100% rename from vendor/github.com/openshift/api/imageregistry/v1/01-crd.yaml rename to vendor/github.com/openshift/api/imageregistry/v1/01_imagepruner.crd.yaml diff --git a/vendor/github.com/openshift/api/imageregistry/v1/types.go b/vendor/github.com/openshift/api/imageregistry/v1/types.go index 7723074c6e..777832af03 100644 --- a/vendor/github.com/openshift/api/imageregistry/v1/types.go +++ b/vendor/github.com/openshift/api/imageregistry/v1/types.go @@ -306,6 +306,79 @@ type ImageRegistryConfigStorageIBMCOS struct { ServiceInstanceCRN string `json:"serviceInstanceCRN,omitempty"` } +// EndpointAccessibility defines the Alibaba VPC endpoint for storage +type EndpointAccessibility string + +// AlibabaEncryptionMethod defines an enumerable type for the encryption mode +type AlibabaEncryptionMethod string + +const ( + // InternalEndpoint sets the VPC endpoint to internal + InternalEndpoint EndpointAccessibility = "Internal" + // PublicEndpoint sets the VPC endpoint to public + PublicEndpoint EndpointAccessibility = "Public" + + // AES256 is an AlibabaEncryptionMethod. This means AES256 encryption + AES256 AlibabaEncryptionMethod = "AES256" + // KMS is an AlibabaEncryptionMethod. This means KMS encryption + KMS AlibabaEncryptionMethod = "KMS" +) + +// EncryptionAlibaba this a union type in kube parlance. Depending on the value for the AlibabaEncryptionMethod, +// different pointers may be used +type EncryptionAlibaba struct { + // Method defines the different encrytion modes available + // Empty value means no opinion and the platform chooses the a default, which is subject to change over time. + // Currently the default is `AES256`. + // +kubebuilder:validation:Enum="KMS";"AES256" + // +kubebuilder:default="AES256" + // +optional + Method AlibabaEncryptionMethod `json:"method"` + + // KMS (key management service) is an encryption type that holds the struct for KMS KeyID + // +optional + KMS *KMSEncryptionAlibaba `json:"kms,omitempty"` +} + +type KMSEncryptionAlibaba struct { + // KeyID holds the KMS encryption key ID + // +kubebuilder:validation:Required + // +kubebuilder:validation:MinLength=1 + KeyID string `json:"keyID"` +} + +// ImageRegistryConfigStorageAlibabaOSS holds Alibaba Cloud OSS configuration. +// Configures the registry to use Alibaba Cloud Object Storage Service for backend storage. +// More about oss, you can look at the [official documentation](https://www.alibabacloud.com/help/product/31815.htm) +type ImageRegistryConfigStorageAlibabaOSS struct { + // Bucket is the bucket name in which you want to store the registry's data. + // About Bucket naming, more details you can look at the [official documentation](https://www.alibabacloud.com/help/doc-detail/257087.htm) + // Empty value means no opinion and the platform chooses the a default, which is subject to change over time. + // Currently the default will be autogenerated in the form of -image-registry-- + // +kubebuilder:validation:MaxLength=63 + // +kubebuilder:validation:MinLength=3 + // +kubebuilder:validation:Pattern=`^[0-9a-z]+(-[0-9a-z]+)*$` + // +optional + Bucket string `json:"bucket,omitempty"` + // Region is the Alibaba Cloud Region in which your bucket exists. + // For a list of regions, you can look at the [official documentation](https://www.alibabacloud.com/help/doc-detail/31837.html). + // Empty value means no opinion and the platform chooses the a default, which is subject to change over time. + // Currently the default will be based on the installed Alibaba Cloud Region. + // +optional + Region string `json:"region,omitempty"` + // EndpointAccessibility specifies whether the registry use the OSS VPC internal endpoint + // Empty value means no opinion and the platform chooses the a default, which is subject to change over time. + // Currently the default is `Internal`. + // +kubebuilder:validation:Enum="Internal";"Public";"" + // +kubebuilder:default="Internal" + // +optional + EndpointAccessibility EndpointAccessibility `json:"endpointAccessibility,omitempty"` + // Encryption specifies whether you would like your data encrypted on the server side. + // More details, you can look cat the [official documentation](https://www.alibabacloud.com/help/doc-detail/117914.htm) + // +optional + Encryption *EncryptionAlibaba `json:"encryption,omitempty"` +} + // ImageRegistryConfigStorage describes how the storage should be configured // for the image registry. type ImageRegistryConfigStorage struct { @@ -333,6 +406,9 @@ type ImageRegistryConfigStorage struct { // ibmcos represents configuration that uses IBM Cloud Object Storage. // +optional IBMCOS *ImageRegistryConfigStorageIBMCOS `json:"ibmcos,omitempty"` + // Oss represents configuration that uses Alibaba Cloud Object Storage Service. + // +optional + OSS *ImageRegistryConfigStorageAlibabaOSS `json:"oss,omitempty"` // managementState indicates if the operator manages the underlying // storage unit. If Managed the operator will remove the storage when // this operator gets Removed. diff --git a/vendor/github.com/openshift/api/imageregistry/v1/zz_generated.deepcopy.go b/vendor/github.com/openshift/api/imageregistry/v1/zz_generated.deepcopy.go index a8ae67f3ff..2f2baafd26 100644 --- a/vendor/github.com/openshift/api/imageregistry/v1/zz_generated.deepcopy.go +++ b/vendor/github.com/openshift/api/imageregistry/v1/zz_generated.deepcopy.go @@ -75,6 +75,27 @@ func (in *ConfigList) DeepCopyObject() runtime.Object { return nil } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *EncryptionAlibaba) DeepCopyInto(out *EncryptionAlibaba) { + *out = *in + if in.KMS != nil { + in, out := &in.KMS, &out.KMS + *out = new(KMSEncryptionAlibaba) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EncryptionAlibaba. +func (in *EncryptionAlibaba) DeepCopy() *EncryptionAlibaba { + if in == nil { + return nil + } + out := new(EncryptionAlibaba) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ImagePruner) DeepCopyInto(out *ImagePruner) { *out = *in @@ -334,6 +355,11 @@ func (in *ImageRegistryConfigStorage) DeepCopyInto(out *ImageRegistryConfigStora *out = new(ImageRegistryConfigStorageIBMCOS) **out = **in } + if in.OSS != nil { + in, out := &in.OSS, &out.OSS + *out = new(ImageRegistryConfigStorageAlibabaOSS) + (*in).DeepCopyInto(*out) + } return } @@ -347,6 +373,27 @@ func (in *ImageRegistryConfigStorage) DeepCopy() *ImageRegistryConfigStorage { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageRegistryConfigStorageAlibabaOSS) DeepCopyInto(out *ImageRegistryConfigStorageAlibabaOSS) { + *out = *in + if in.Encryption != nil { + in, out := &in.Encryption, &out.Encryption + *out = new(EncryptionAlibaba) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageRegistryConfigStorageAlibabaOSS. +func (in *ImageRegistryConfigStorageAlibabaOSS) DeepCopy() *ImageRegistryConfigStorageAlibabaOSS { + if in == nil { + return nil + } + out := new(ImageRegistryConfigStorageAlibabaOSS) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ImageRegistryConfigStorageAzure) DeepCopyInto(out *ImageRegistryConfigStorageAzure) { *out = *in @@ -548,3 +595,19 @@ func (in *ImageRegistryStatus) DeepCopy() *ImageRegistryStatus { in.DeepCopyInto(out) return out } + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KMSEncryptionAlibaba) DeepCopyInto(out *KMSEncryptionAlibaba) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KMSEncryptionAlibaba. +func (in *KMSEncryptionAlibaba) DeepCopy() *KMSEncryptionAlibaba { + if in == nil { + return nil + } + out := new(KMSEncryptionAlibaba) + in.DeepCopyInto(out) + return out +} diff --git a/vendor/github.com/openshift/api/imageregistry/v1/zz_generated.swagger_doc_generated.go b/vendor/github.com/openshift/api/imageregistry/v1/zz_generated.swagger_doc_generated.go index 42a7ff8115..95f5ddad0e 100644 --- a/vendor/github.com/openshift/api/imageregistry/v1/zz_generated.swagger_doc_generated.go +++ b/vendor/github.com/openshift/api/imageregistry/v1/zz_generated.swagger_doc_generated.go @@ -27,6 +27,16 @@ func (ConfigList) SwaggerDoc() map[string]string { return map_ConfigList } +var map_EncryptionAlibaba = map[string]string{ + "": "EncryptionAlibaba this a union type in kube parlance. Depending on the value for the AlibabaEncryptionMethod, different pointers may be used", + "method": "Method defines the different encrytion modes available Empty value means no opinion and the platform chooses the a default, which is subject to change over time. Currently the default is `AES256`.", + "kms": "KMS (key management service) is an encryption type that holds the struct for KMS KeyID", +} + +func (EncryptionAlibaba) SwaggerDoc() map[string]string { + return map_EncryptionAlibaba +} + var map_ImageRegistryConfigProxy = map[string]string{ "": "ImageRegistryConfigProxy defines proxy configuration to be used by registry.", "http": "http defines the proxy to be used by the image registry when accessing HTTP endpoints.", @@ -79,6 +89,7 @@ var map_ImageRegistryConfigStorage = map[string]string{ "pvc": "pvc represents configuration that uses a PersistentVolumeClaim.", "azure": "azure represents configuration that uses Azure Blob Storage.", "ibmcos": "ibmcos represents configuration that uses IBM Cloud Object Storage.", + "oss": "Oss represents configuration that uses Alibaba Cloud Object Storage Service.", "managementState": "managementState indicates if the operator manages the underlying storage unit. If Managed the operator will remove the storage when this operator gets Removed.", } @@ -86,6 +97,18 @@ func (ImageRegistryConfigStorage) SwaggerDoc() map[string]string { return map_ImageRegistryConfigStorage } +var map_ImageRegistryConfigStorageAlibabaOSS = map[string]string{ + "": "ImageRegistryConfigStorageAlibabaOSS holds Alibaba Cloud OSS configuration. Configures the registry to use Alibaba Cloud Object Storage Service for backend storage. More about oss, you can look at the [official documentation](https://www.alibabacloud.com/help/product/31815.htm)", + "bucket": "Bucket is the bucket name in which you want to store the registry's data. About Bucket naming, more details you can look at the [official documentation](https://www.alibabacloud.com/help/doc-detail/257087.htm) Empty value means no opinion and the platform chooses the a default, which is subject to change over time. Currently the default will be autogenerated in the form of -image-registry--", + "region": "Region is the Alibaba Cloud Region in which your bucket exists. For a list of regions, you can look at the [official documentation](https://www.alibabacloud.com/help/doc-detail/31837.html). Empty value means no opinion and the platform chooses the a default, which is subject to change over time. Currently the default will be based on the installed Alibaba Cloud Region.", + "endpointAccessibility": "EndpointAccessibility specifies whether the registry use the OSS VPC internal endpoint Empty value means no opinion and the platform chooses the a default, which is subject to change over time. Currently the default is `Internal`.", + "encryption": "Encryption specifies whether you would like your data encrypted on the server side. More details, you can look cat the [official documentation](https://www.alibabacloud.com/help/doc-detail/117914.htm)", +} + +func (ImageRegistryConfigStorageAlibabaOSS) SwaggerDoc() map[string]string { + return map_ImageRegistryConfigStorageAlibabaOSS +} + var map_ImageRegistryConfigStorageAzure = map[string]string{ "": "ImageRegistryConfigStorageAzure holds the information to configure the registry to use Azure Blob Storage for backend storage.", "accountName": "accountName defines the account to be used by the registry.", @@ -216,6 +239,14 @@ func (ImageRegistryStatus) SwaggerDoc() map[string]string { return map_ImageRegistryStatus } +var map_KMSEncryptionAlibaba = map[string]string{ + "keyID": "KeyID holds the KMS encryption key ID", +} + +func (KMSEncryptionAlibaba) SwaggerDoc() map[string]string { + return map_KMSEncryptionAlibaba +} + var map_ImagePruner = map[string]string{ "": "ImagePruner is the configuration object for an image registry pruner managed by the registry operator.\n\nCompatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer).", } diff --git a/vendor/github.com/openshift/api/machine/v1beta1/0000_10_machine.crd.yaml b/vendor/github.com/openshift/api/machine/v1beta1/0000_10_machine.crd.yaml index d1ff62cd67..0b5cab53a3 100644 --- a/vendor/github.com/openshift/api/machine/v1beta1/0000_10_machine.crd.yaml +++ b/vendor/github.com/openshift/api/machine/v1beta1/0000_10_machine.crd.yaml @@ -80,6 +80,9 @@ spec: items: description: LifecycleHook represents a single instance of a lifecycle hook type: object + required: + - name + - owner properties: name: description: Name defines a unique name for the lifcycle hook. The name should be unique and descriptive, ideally 1-3 words, in CamelCase or it may be namespaced, eg. foo.example.com/CamelCase. Names must be unique and should only be managed by a single entity. @@ -92,12 +95,18 @@ spec: type: string maxLength: 512 minLength: 3 + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map preTerminate: description: PreTerminate hooks prevent the machine from being terminated. PreTerminate hooks be actioned after the Machine has been drained. type: array items: description: LifecycleHook represents a single instance of a lifecycle hook type: object + required: + - name + - owner properties: name: description: Name defines a unique name for the lifcycle hook. The name should be unique and descriptive, ideally 1-3 words, in CamelCase or it may be namespaced, eg. foo.example.com/CamelCase. Names must be unique and should only be managed by a single entity. @@ -110,6 +119,9 @@ spec: type: string maxLength: 512 minLength: 3 + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map metadata: description: ObjectMeta will autopopulate the Node created. Use this to indicate what labels, annotations, name prefix, etc., should be used when creating the Node. type: object diff --git a/vendor/github.com/openshift/api/machine/v1beta1/0000_10_machineset.crd.yaml b/vendor/github.com/openshift/api/machine/v1beta1/0000_10_machineset.crd.yaml index 038802366a..de27d2323f 100644 --- a/vendor/github.com/openshift/api/machine/v1beta1/0000_10_machineset.crd.yaml +++ b/vendor/github.com/openshift/api/machine/v1beta1/0000_10_machineset.crd.yaml @@ -173,6 +173,9 @@ spec: items: description: LifecycleHook represents a single instance of a lifecycle hook type: object + required: + - name + - owner properties: name: description: Name defines a unique name for the lifcycle hook. The name should be unique and descriptive, ideally 1-3 words, in CamelCase or it may be namespaced, eg. foo.example.com/CamelCase. Names must be unique and should only be managed by a single entity. @@ -185,12 +188,18 @@ spec: type: string maxLength: 512 minLength: 3 + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map preTerminate: description: PreTerminate hooks prevent the machine from being terminated. PreTerminate hooks be actioned after the Machine has been drained. type: array items: description: LifecycleHook represents a single instance of a lifecycle hook type: object + required: + - name + - owner properties: name: description: Name defines a unique name for the lifcycle hook. The name should be unique and descriptive, ideally 1-3 words, in CamelCase or it may be namespaced, eg. foo.example.com/CamelCase. Names must be unique and should only be managed by a single entity. @@ -203,6 +212,9 @@ spec: type: string maxLength: 512 minLength: 3 + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map metadata: description: ObjectMeta will autopopulate the Node created. Use this to indicate what labels, annotations, name prefix, etc., should be used when creating the Node. type: object diff --git a/vendor/github.com/openshift/api/machine/v1beta1/types_machine.go b/vendor/github.com/openshift/api/machine/v1beta1/types_machine.go index 8d30407655..6cbc07f893 100644 --- a/vendor/github.com/openshift/api/machine/v1beta1/types_machine.go +++ b/vendor/github.com/openshift/api/machine/v1beta1/types_machine.go @@ -204,11 +204,15 @@ type MachineSpec struct { type LifecycleHooks struct { // PreDrain hooks prevent the machine from being drained. // This also blocks further lifecycle events, such as termination. + // +listType=map + // +listMapKey=name // +optional PreDrain []LifecycleHook `json:"preDrain,omitempty"` // PreTerminate hooks prevent the machine from being terminated. // PreTerminate hooks be actioned after the Machine has been drained. + // +listType=map + // +listMapKey=name // +optional PreTerminate []LifecycleHook `json:"preTerminate,omitempty"` } @@ -222,7 +226,7 @@ type LifecycleHook struct { // +kubebuilder:validation:Pattern=`^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$` // +kubebuilder:validation:MinLength:=3 // +kubebuilder:validation:MaxLength:=256 - // +required + // +kubebuilder:validation:Required Name string `json:"name"` // Owner defines the owner of the lifecycle hook. @@ -232,7 +236,7 @@ type LifecycleHook struct { // or an administrator managing the hook. // +kubebuilder:validation:MinLength:=3 // +kubebuilder:validation:MaxLength:=512 - // +required + // +kubebuilder:validation:Required Owner string `json:"owner"` } diff --git a/vendor/modules.txt b/vendor/modules.txt index 00666872bd..69edf28463 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -302,7 +302,7 @@ github.com/modern-go/reflect2 # github.com/oklog/ulid v1.3.1 ## explicit github.com/oklog/ulid -# github.com/openshift/api v0.0.0-20211209135129-c58d9f695577 +# github.com/openshift/api v0.0.0-20220203140920-bfe251c51d2d ## explicit; go 1.16 github.com/openshift/api github.com/openshift/api/apiserver