From 37d410f274fd2285b7084f7aec1a9d6d2459f806 Mon Sep 17 00:00:00 2001 From: petar-cvit Date: Tue, 11 Feb 2025 23:45:33 +0100 Subject: [PATCH 1/6] pass ca bundle while cloning --- .../api/v1alpha1/template_auth_rule_types.go | 1 + .../api/v1alpha1/zz_generated.deepcopy.go | 1 + .../cyclops-ui.com_templateauthrules.yaml | 26 +++++++++++++++++++ cyclops-ctrl/internal/auth/templates.go | 7 +++++ cyclops-ctrl/internal/template/git.go | 24 ++++++++++++++--- 5 files changed, 55 insertions(+), 4 deletions(-) diff --git a/cyclops-ctrl/api/v1alpha1/template_auth_rule_types.go b/cyclops-ctrl/api/v1alpha1/template_auth_rule_types.go index 61b48f5ca..712b0a3ee 100644 --- a/cyclops-ctrl/api/v1alpha1/template_auth_rule_types.go +++ b/cyclops-ctrl/api/v1alpha1/template_auth_rule_types.go @@ -33,6 +33,7 @@ type TemplateAuthRuleSpec struct { Username v1.SecretKeySelector `json:"username"` Password v1.SecretKeySelector `json:"password"` + CABundle v1.SecretKeySelector `json:"ca-bundle"` } //+kubebuilder:object:root=true diff --git a/cyclops-ctrl/api/v1alpha1/zz_generated.deepcopy.go b/cyclops-ctrl/api/v1alpha1/zz_generated.deepcopy.go index 0bce7172a..68cfc2f7f 100644 --- a/cyclops-ctrl/api/v1alpha1/zz_generated.deepcopy.go +++ b/cyclops-ctrl/api/v1alpha1/zz_generated.deepcopy.go @@ -273,6 +273,7 @@ func (in *TemplateAuthRuleSpec) DeepCopyInto(out *TemplateAuthRuleSpec) { *out = *in in.Username.DeepCopyInto(&out.Username) in.Password.DeepCopyInto(&out.Password) + in.CABundle.DeepCopyInto(&out.CABundle) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TemplateAuthRuleSpec. diff --git a/cyclops-ctrl/config/crd/bases/cyclops-ui.com_templateauthrules.yaml b/cyclops-ctrl/config/crd/bases/cyclops-ui.com_templateauthrules.yaml index 293e73e79..46d8bd8e9 100644 --- a/cyclops-ctrl/config/crd/bases/cyclops-ui.com_templateauthrules.yaml +++ b/cyclops-ctrl/config/crd/bases/cyclops-ui.com_templateauthrules.yaml @@ -39,6 +39,31 @@ spec: spec: description: TemplateAuthRuleSpec defines the desired state of TemplateAuthRule properties: + ca-bundle: + description: SecretKeySelector selects a key of a Secret. + properties: + key: + description: The key of the secret to select from. Must be a + valid secret key. + type: string + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. + type: string + optional: + description: Specify whether the Secret or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic password: description: SecretKeySelector selects a key of a Secret. properties: @@ -92,6 +117,7 @@ spec: type: object x-kubernetes-map-type: atomic required: + - ca-bundle - password - repo - username diff --git a/cyclops-ctrl/internal/auth/templates.go b/cyclops-ctrl/internal/auth/templates.go index 03cf30ac7..7812304d7 100644 --- a/cyclops-ctrl/internal/auth/templates.go +++ b/cyclops-ctrl/internal/auth/templates.go @@ -13,6 +13,7 @@ type TemplatesResolver struct { type Credentials struct { Username string Password string + CABundle []byte } func NewTemplatesResolver(k8s k8sClient) TemplatesResolver { @@ -44,9 +45,15 @@ func (t TemplatesResolver) RepoAuthCredentials(repo string) (*Credentials, error return nil, err } + caBundle, err := t.k8s.GetTemplateAuthRuleSecret(ta.Spec.CABundle.Name, ta.Spec.CABundle.Key) + if err != nil { + return nil, err + } + return &Credentials{ Username: username, Password: password, + CABundle: []byte(caBundle), }, err } } diff --git a/cyclops-ctrl/internal/template/git.go b/cyclops-ctrl/internal/template/git.go index 4f14b0f2a..22720fc85 100644 --- a/cyclops-ctrl/internal/template/git.go +++ b/cyclops-ctrl/internal/template/git.go @@ -287,8 +287,13 @@ func resolveRef(repo, version string, creds *auth.Credentials) (string, error) { refs, err := rem.List(&git.ListOptions{ PeelingOption: git.AppendPeeled, Auth: httpBasicAuthCredentials(creds), + CABundle: gitCABundle(creds), }) if err != nil { + fmt.Println("error kod list refs 306", len(refs)) + fmt.Println(httpBasicAuthCredentials(creds).Username) + fmt.Println(httpBasicAuthCredentials(creds).Password) + fmt.Println(string(gitCABundle(creds))) return "", errors.Wrap(err, fmt.Sprintf("repo %s was not cloned successfully; authentication might be required; check if repository exists and you referenced it correctly", repo)) } @@ -312,6 +317,7 @@ func resolveDefaultBranchRef(repo string, creds *auth.Credentials) (string, erro refs, err := rem.List(&git.ListOptions{ PeelingOption: git.AppendPeeled, Auth: httpBasicAuthCredentials(creds), + CABundle: gitCABundle(creds), }) if err != nil { return "", errors.Wrap(err, fmt.Sprintf("repo %s was not cloned successfully; authentication might be required; check if repository exists and you referenced it correctly", repo)) @@ -359,9 +365,10 @@ func clone(repoURL, commit string, creds *auth.Credentials) (billy.Filesystem, e } repo, err := git.Clone(memory.NewStorage(), memfs.New(), &git.CloneOptions{ - URL: repoURL, - Tags: git.AllTags, - Auth: httpBasicAuthCredentials(creds), + URL: repoURL, + Tags: git.AllTags, + Auth: httpBasicAuthCredentials(creds), + CABundle: gitCABundle(creds), }) if err != nil { return nil, errors.Wrap(err, fmt.Sprintf("repo %s was not cloned successfully; authentication might be required; check if repository exists and you referenced it correctly", repoURL)) @@ -381,7 +388,8 @@ func clone(repoURL, commit string, creds *auth.Credentials) (billy.Filesystem, e return nil, err } refList, err := remote.List(&git.ListOptions{ - Auth: httpBasicAuthCredentials(creds), + Auth: httpBasicAuthCredentials(creds), + CABundle: gitCABundle(creds), }) if err != nil { return nil, err @@ -568,3 +576,11 @@ func httpBasicAuthCredentials(creds *auth.Credentials) *http.BasicAuth { Password: creds.Password, } } + +func gitCABundle(creds *auth.Credentials) []byte { + if creds == nil { + return nil + } + + return creds.CABundle +} From ec1c4fff73fdb199857295d26b6b41c606ca2601 Mon Sep 17 00:00:00 2001 From: petar-cvit Date: Wed, 12 Feb 2025 11:39:51 +0100 Subject: [PATCH 2/6] optional cabundle --- .../api/v1alpha1/template_auth_rule_types.go | 6 ++-- .../api/v1alpha1/zz_generated.deepcopy.go | 7 +++- .../cyclops-ui.com_templateauthrules.yaml | 1 - cyclops-ctrl/internal/auth/templates.go | 17 +++++---- cyclops-ctrl/pkg/cluster/k8sclient/client.go | 2 +- .../cluster/k8sclient/templateauthrules.go | 8 ++--- cyclops-ctrl/pkg/mocks/IKubernetesClient.go | 36 ++++++++++--------- 7 files changed, 43 insertions(+), 34 deletions(-) diff --git a/cyclops-ctrl/api/v1alpha1/template_auth_rule_types.go b/cyclops-ctrl/api/v1alpha1/template_auth_rule_types.go index 712b0a3ee..0a1cff2e9 100644 --- a/cyclops-ctrl/api/v1alpha1/template_auth_rule_types.go +++ b/cyclops-ctrl/api/v1alpha1/template_auth_rule_types.go @@ -31,9 +31,9 @@ type TemplateAuthRuleSpec struct { Repo string `json:"repo"` - Username v1.SecretKeySelector `json:"username"` - Password v1.SecretKeySelector `json:"password"` - CABundle v1.SecretKeySelector `json:"ca-bundle"` + Username v1.SecretKeySelector `json:"username"` + Password v1.SecretKeySelector `json:"password"` + CABundle *v1.SecretKeySelector `json:"ca-bundle,omitempty"` } //+kubebuilder:object:root=true diff --git a/cyclops-ctrl/api/v1alpha1/zz_generated.deepcopy.go b/cyclops-ctrl/api/v1alpha1/zz_generated.deepcopy.go index 68cfc2f7f..4b0a8a400 100644 --- a/cyclops-ctrl/api/v1alpha1/zz_generated.deepcopy.go +++ b/cyclops-ctrl/api/v1alpha1/zz_generated.deepcopy.go @@ -21,6 +21,7 @@ limitations under the License. package v1alpha1 import ( + "k8s.io/api/core/v1" runtime "k8s.io/apimachinery/pkg/runtime" ) @@ -273,7 +274,11 @@ func (in *TemplateAuthRuleSpec) DeepCopyInto(out *TemplateAuthRuleSpec) { *out = *in in.Username.DeepCopyInto(&out.Username) in.Password.DeepCopyInto(&out.Password) - in.CABundle.DeepCopyInto(&out.CABundle) + if in.CABundle != nil { + in, out := &in.CABundle, &out.CABundle + *out = new(v1.SecretKeySelector) + (*in).DeepCopyInto(*out) + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TemplateAuthRuleSpec. diff --git a/cyclops-ctrl/config/crd/bases/cyclops-ui.com_templateauthrules.yaml b/cyclops-ctrl/config/crd/bases/cyclops-ui.com_templateauthrules.yaml index 46d8bd8e9..9df23b74e 100644 --- a/cyclops-ctrl/config/crd/bases/cyclops-ui.com_templateauthrules.yaml +++ b/cyclops-ctrl/config/crd/bases/cyclops-ui.com_templateauthrules.yaml @@ -117,7 +117,6 @@ spec: type: object x-kubernetes-map-type: atomic required: - - ca-bundle - password - repo - username diff --git a/cyclops-ctrl/internal/auth/templates.go b/cyclops-ctrl/internal/auth/templates.go index 7812304d7..0d5daac86 100644 --- a/cyclops-ctrl/internal/auth/templates.go +++ b/cyclops-ctrl/internal/auth/templates.go @@ -45,15 +45,18 @@ func (t TemplatesResolver) RepoAuthCredentials(repo string) (*Credentials, error return nil, err } - caBundle, err := t.k8s.GetTemplateAuthRuleSecret(ta.Spec.CABundle.Name, ta.Spec.CABundle.Key) - if err != nil { - return nil, err + var caBundle []byte + if ta.Spec.CABundle != nil { + caBundle, err = t.k8s.GetTemplateAuthRuleSecret(ta.Spec.CABundle.Name, ta.Spec.CABundle.Key) + if err != nil { + return nil, err + } } return &Credentials{ - Username: username, - Password: password, - CABundle: []byte(caBundle), + Username: string(username), + Password: string(password), + CABundle: caBundle, }, err } } @@ -62,6 +65,6 @@ func (t TemplatesResolver) RepoAuthCredentials(repo string) (*Credentials, error } type k8sClient interface { - GetTemplateAuthRuleSecret(string, string) (string, error) + GetTemplateAuthRuleSecret(string, string) ([]byte, error) ListTemplateAuthRules() ([]v1alpha1.TemplateAuthRule, error) } diff --git a/cyclops-ctrl/pkg/cluster/k8sclient/client.go b/cyclops-ctrl/pkg/cluster/k8sclient/client.go index 2ebb005ba..2a48c6ce5 100644 --- a/cyclops-ctrl/pkg/cluster/k8sclient/client.go +++ b/cyclops-ctrl/pkg/cluster/k8sclient/client.go @@ -101,7 +101,7 @@ type IKubernetesClient interface { WatchResource(group, version, resource, name, namespace string) (watch.Interface, error) WatchKubernetesResources(gvrs []ResourceWatchSpec, stopCh chan struct{}) (chan *unstructured.Unstructured, error) ListTemplateAuthRules() ([]cyclopsv1alpha1.TemplateAuthRule, error) - GetTemplateAuthRuleSecret(name, key string) (string, error) + GetTemplateAuthRuleSecret(string, string) ([]byte, error) ListTemplateStore() ([]cyclopsv1alpha1.TemplateStore, error) CreateTemplateStore(ts *cyclopsv1alpha1.TemplateStore) error UpdateTemplateStore(ts *cyclopsv1alpha1.TemplateStore) error diff --git a/cyclops-ctrl/pkg/cluster/k8sclient/templateauthrules.go b/cyclops-ctrl/pkg/cluster/k8sclient/templateauthrules.go index c43c9bafd..609d564a2 100644 --- a/cyclops-ctrl/pkg/cluster/k8sclient/templateauthrules.go +++ b/cyclops-ctrl/pkg/cluster/k8sclient/templateauthrules.go @@ -13,16 +13,16 @@ func (k *KubernetesClient) ListTemplateAuthRules() ([]cyclopsv1alpha1.TemplateAu return k.moduleset.TemplateAuthRules(k.moduleNamespace).List(metav1.ListOptions{}) } -func (k *KubernetesClient) GetTemplateAuthRuleSecret(name, key string) (string, error) { +func (k *KubernetesClient) GetTemplateAuthRuleSecret(name, key string) ([]byte, error) { secret, err := k.clientset.CoreV1().Secrets(k.moduleNamespace).Get(context.Background(), name, metav1.GetOptions{}) if err != nil { - return "", err + return nil, err } secretValue, ok := secret.Data[key] if !ok { - return "", errors.New("key not found") + return nil, errors.New("key not found") } - return string(secretValue), err + return secretValue, err } diff --git a/cyclops-ctrl/pkg/mocks/IKubernetesClient.go b/cyclops-ctrl/pkg/mocks/IKubernetesClient.go index 3b4d16903..39ad5b3f9 100644 --- a/cyclops-ctrl/pkg/mocks/IKubernetesClient.go +++ b/cyclops-ctrl/pkg/mocks/IKubernetesClient.go @@ -1227,27 +1227,29 @@ func (_c *IKubernetesClient_GetStreamedPodLogs_Call) RunAndReturn(run func(conte return _c } -// GetTemplateAuthRuleSecret provides a mock function with given fields: name, key -func (_m *IKubernetesClient) GetTemplateAuthRuleSecret(name string, key string) (string, error) { - ret := _m.Called(name, key) +// GetTemplateAuthRuleSecret provides a mock function with given fields: _a0, _a1 +func (_m *IKubernetesClient) GetTemplateAuthRuleSecret(_a0 string, _a1 string) ([]byte, error) { + ret := _m.Called(_a0, _a1) if len(ret) == 0 { panic("no return value specified for GetTemplateAuthRuleSecret") } - var r0 string + var r0 []byte var r1 error - if rf, ok := ret.Get(0).(func(string, string) (string, error)); ok { - return rf(name, key) + if rf, ok := ret.Get(0).(func(string, string) ([]byte, error)); ok { + return rf(_a0, _a1) } - if rf, ok := ret.Get(0).(func(string, string) string); ok { - r0 = rf(name, key) + if rf, ok := ret.Get(0).(func(string, string) []byte); ok { + r0 = rf(_a0, _a1) } else { - r0 = ret.Get(0).(string) + if ret.Get(0) != nil { + r0 = ret.Get(0).([]byte) + } } if rf, ok := ret.Get(1).(func(string, string) error); ok { - r1 = rf(name, key) + r1 = rf(_a0, _a1) } else { r1 = ret.Error(1) } @@ -1261,25 +1263,25 @@ type IKubernetesClient_GetTemplateAuthRuleSecret_Call struct { } // GetTemplateAuthRuleSecret is a helper method to define mock.On call -// - name string -// - key string -func (_e *IKubernetesClient_Expecter) GetTemplateAuthRuleSecret(name interface{}, key interface{}) *IKubernetesClient_GetTemplateAuthRuleSecret_Call { - return &IKubernetesClient_GetTemplateAuthRuleSecret_Call{Call: _e.mock.On("GetTemplateAuthRuleSecret", name, key)} +// - _a0 string +// - _a1 string +func (_e *IKubernetesClient_Expecter) GetTemplateAuthRuleSecret(_a0 interface{}, _a1 interface{}) *IKubernetesClient_GetTemplateAuthRuleSecret_Call { + return &IKubernetesClient_GetTemplateAuthRuleSecret_Call{Call: _e.mock.On("GetTemplateAuthRuleSecret", _a0, _a1)} } -func (_c *IKubernetesClient_GetTemplateAuthRuleSecret_Call) Run(run func(name string, key string)) *IKubernetesClient_GetTemplateAuthRuleSecret_Call { +func (_c *IKubernetesClient_GetTemplateAuthRuleSecret_Call) Run(run func(_a0 string, _a1 string)) *IKubernetesClient_GetTemplateAuthRuleSecret_Call { _c.Call.Run(func(args mock.Arguments) { run(args[0].(string), args[1].(string)) }) return _c } -func (_c *IKubernetesClient_GetTemplateAuthRuleSecret_Call) Return(_a0 string, _a1 error) *IKubernetesClient_GetTemplateAuthRuleSecret_Call { +func (_c *IKubernetesClient_GetTemplateAuthRuleSecret_Call) Return(_a0 []byte, _a1 error) *IKubernetesClient_GetTemplateAuthRuleSecret_Call { _c.Call.Return(_a0, _a1) return _c } -func (_c *IKubernetesClient_GetTemplateAuthRuleSecret_Call) RunAndReturn(run func(string, string) (string, error)) *IKubernetesClient_GetTemplateAuthRuleSecret_Call { +func (_c *IKubernetesClient_GetTemplateAuthRuleSecret_Call) RunAndReturn(run func(string, string) ([]byte, error)) *IKubernetesClient_GetTemplateAuthRuleSecret_Call { _c.Call.Return(run) return _c } From f2fd851198d2db306e1a4d20008742287fd9a9a1 Mon Sep 17 00:00:00 2001 From: petar-cvit Date: Wed, 12 Feb 2025 11:47:05 +0100 Subject: [PATCH 3/6] fix tests --- cyclops-ctrl/internal/auth/templates_test.go | 10 +++++----- cyclops-ctrl/internal/template/git.go | 4 ---- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/cyclops-ctrl/internal/auth/templates_test.go b/cyclops-ctrl/internal/auth/templates_test.go index 4a71138cd..6f3a929c4 100644 --- a/cyclops-ctrl/internal/auth/templates_test.go +++ b/cyclops-ctrl/internal/auth/templates_test.go @@ -129,7 +129,7 @@ var _ = Describe("Templates resolver", func() { repo: "https://github.com/my-org/my-team", mockCalls: func() { k8sClient.On("ListTemplateAuthRules").Return(tars, nil) - k8sClient.On("GetTemplateAuthRuleSecret", "secret-name", "username").Return("", errors.New("some k8s error")) + k8sClient.On("GetTemplateAuthRuleSecret", "secret-name", "username").Return(nil, errors.New("some k8s error")) }, }, out: caseOutput{ @@ -143,8 +143,8 @@ var _ = Describe("Templates resolver", func() { repo: "https://github.com/my-org/my-team", mockCalls: func() { k8sClient.On("ListTemplateAuthRules").Return(tars, nil) - k8sClient.On("GetTemplateAuthRuleSecret", "secret-name", "username").Return("my-secret-username", nil) - k8sClient.On("GetTemplateAuthRuleSecret", "secret-name", "token").Return("", errors.New("some k8s error")) + k8sClient.On("GetTemplateAuthRuleSecret", "secret-name", "username").Return([]byte("my-secret-username"), nil) + k8sClient.On("GetTemplateAuthRuleSecret", "secret-name", "token").Return(nil, errors.New("some k8s error")) }, }, out: caseOutput{ @@ -158,8 +158,8 @@ var _ = Describe("Templates resolver", func() { repo: "https://github.com/my-org/my-team", mockCalls: func() { k8sClient.On("ListTemplateAuthRules").Return(tars, nil) - k8sClient.On("GetTemplateAuthRuleSecret", "secret-name", "username").Return("my-secret-username", nil) - k8sClient.On("GetTemplateAuthRuleSecret", "secret-name", "token").Return("my-secret-token", nil) + k8sClient.On("GetTemplateAuthRuleSecret", "secret-name", "username").Return([]byte("my-secret-username"), nil) + k8sClient.On("GetTemplateAuthRuleSecret", "secret-name", "token").Return([]byte("my-secret-token"), nil) }, }, out: caseOutput{ diff --git a/cyclops-ctrl/internal/template/git.go b/cyclops-ctrl/internal/template/git.go index 22720fc85..d9626be3e 100644 --- a/cyclops-ctrl/internal/template/git.go +++ b/cyclops-ctrl/internal/template/git.go @@ -290,10 +290,6 @@ func resolveRef(repo, version string, creds *auth.Credentials) (string, error) { CABundle: gitCABundle(creds), }) if err != nil { - fmt.Println("error kod list refs 306", len(refs)) - fmt.Println(httpBasicAuthCredentials(creds).Username) - fmt.Println(httpBasicAuthCredentials(creds).Password) - fmt.Println(string(gitCABundle(creds))) return "", errors.Wrap(err, fmt.Sprintf("repo %s was not cloned successfully; authentication might be required; check if repository exists and you referenced it correctly", repo)) } From eb6d92420f605e3821d9ed7f5877d4bbf3fe214f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 12 Feb 2025 13:24:42 +0000 Subject: [PATCH 4/6] =?UTF-8?q?=E2=9A=99=EF=B8=8F=20update=20cyclops=20to?= =?UTF-8?q?=20v0.18.0-rc.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- install/cyclops-install.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install/cyclops-install.yaml b/install/cyclops-install.yaml index 83bc172c3..4c61bae5f 100644 --- a/install/cyclops-install.yaml +++ b/install/cyclops-install.yaml @@ -383,7 +383,7 @@ spec: spec: containers: - name: cyclops-ui - image: cyclopsui/cyclops-ui:v0.16.0 + image: cyclopsui/cyclops-ui:v0.18.0-rc.1 ports: - containerPort: 80 env: @@ -448,7 +448,7 @@ spec: serviceAccountName: cyclops-ctrl containers: - name: cyclops-ctrl - image: cyclopsui/cyclops-ctrl:v0.16.0 + image: cyclopsui/cyclops-ctrl:v0.18.0-rc.1 ports: - containerPort: 8080 env: From 5e773adb9ffe63cbe94f3284fdfb416e08b49224 Mon Sep 17 00:00:00 2001 From: petar-cvit Date: Wed, 12 Feb 2025 14:56:44 +0100 Subject: [PATCH 5/6] update install tar crd --- install/cyclops-install.yaml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/install/cyclops-install.yaml b/install/cyclops-install.yaml index 4c61bae5f..3906ac9bb 100644 --- a/install/cyclops-install.yaml +++ b/install/cyclops-install.yaml @@ -146,6 +146,7 @@ spec: subresources: status: {} --- +--- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: @@ -186,6 +187,31 @@ spec: spec: description: TemplateAuthRuleSpec defines the desired state of TemplateAuthRule properties: + ca-bundle: + description: SecretKeySelector selects a key of a Secret. + properties: + key: + description: The key of the secret to select from. Must be a + valid secret key. + type: string + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + TODO: Add other useful fields. apiVersion, kind, uid? + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Drop `kubebuilder:default` when controller-gen doesn't need it https://github.com/kubernetes-sigs/kubebuilder/issues/3896. + type: string + optional: + description: Specify whether the Secret or its key must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic password: description: SecretKeySelector selects a key of a Secret. properties: From 30b4a66c9b90404d6c1701815580446d2c32c0b2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 12 Feb 2025 14:40:14 +0000 Subject: [PATCH 6/6] =?UTF-8?q?=E2=9A=99=EF=B8=8F=20update=20cyclops=20to?= =?UTF-8?q?=20v0.18.0-rc.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- install/cyclops-install.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install/cyclops-install.yaml b/install/cyclops-install.yaml index fc258a8f9..3cc821c18 100644 --- a/install/cyclops-install.yaml +++ b/install/cyclops-install.yaml @@ -408,7 +408,7 @@ spec: spec: containers: - name: cyclops-ui - image: cyclopsui/cyclops-ui:v0.18.0-rc.1 + image: cyclopsui/cyclops-ui:v0.18.0-rc.2 ports: - containerPort: 80 env: @@ -473,7 +473,7 @@ spec: serviceAccountName: cyclops-ctrl containers: - name: cyclops-ctrl - image: cyclopsui/cyclops-ctrl:v0.18.0-rc.1 + image: cyclopsui/cyclops-ctrl:v0.18.0-rc.2 ports: - containerPort: 8080 env: