From 9c279e7fae0e1f72d46bde3d6cc88ac4e95b5993 Mon Sep 17 00:00:00 2001 From: Chaim Lev-Ari Date: Fri, 24 Sep 2021 14:02:10 +0300 Subject: [PATCH 1/2] fix(k8s/ns): validate ingress ctrl host pattern (#5662) * fix(k8s/ns): validate ingress ctrl host pattern * feat(kube/ns): validate ingress hostname --- .../views/resource-pools/create/createResourcePool.html | 5 +++++ .../resource-pools/create/createResourcePoolController.js | 2 +- app/kubernetes/views/resource-pools/edit/resourcePool.html | 6 ++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/app/kubernetes/views/resource-pools/create/createResourcePool.html b/app/kubernetes/views/resource-pools/create/createResourcePool.html index 8529a0395..611c2bc45 100644 --- a/app/kubernetes/views/resource-pools/create/createResourcePool.html +++ b/app/kubernetes/views/resource-pools/create/createResourcePool.html @@ -269,6 +269,7 @@ ng-model="item.Host" ng-change="$ctrl.onChangeIngressHostname()" placeholder="foo" + pattern="[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*" required /> @@ -288,6 +289,10 @@ >

Hostname is required.

+

+ + This field must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com'). +

This hostname is already used. diff --git a/app/kubernetes/views/resource-pools/create/createResourcePoolController.js b/app/kubernetes/views/resource-pools/create/createResourcePoolController.js index 5cdc8accc..92149f4f9 100644 --- a/app/kubernetes/views/resource-pools/create/createResourcePoolController.js +++ b/app/kubernetes/views/resource-pools/create/createResourcePoolController.js @@ -34,7 +34,7 @@ class KubernetesCreateResourcePoolController { onChangeIngressHostname() { const state = this.state.duplicates.ingressHosts; const hosts = _.flatMap(this.formValues.IngressClasses, 'Hosts'); - const hostnames = _.map(hosts, 'Host'); + const hostnames = _.compact(hosts.map((h) => h.Host)); const hostnamesWithoutRemoved = _.filter(hostnames, (h) => !h.NeedsDeletion); const allHosts = _.flatMap(this.allIngresses, 'Hosts'); const formDuplicates = KubernetesFormValidationHelper.getDuplicates(hostnamesWithoutRemoved); diff --git a/app/kubernetes/views/resource-pools/edit/resourcePool.html b/app/kubernetes/views/resource-pools/edit/resourcePool.html index 29d39b3a4..d847527e0 100644 --- a/app/kubernetes/views/resource-pools/edit/resourcePool.html +++ b/app/kubernetes/views/resource-pools/edit/resourcePool.html @@ -221,6 +221,7 @@ ng-model="item.Host" ng-change="ctrl.onChangeIngressHostname()" placeholder="foo" + pattern="[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*" required /> @@ -240,6 +241,11 @@ >

Hostname is required.

+

+ + This field must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. + 'example.com'). +

From 885ae16278d152016b166c4e30f1394086fee46e Mon Sep 17 00:00:00 2001 From: Chaim Lev-Ari Date: Fri, 1 Oct 2021 08:27:31 +0300 Subject: [PATCH 2/2] fix(db): warn on missing docker id when migrating to db 31 (#5782) * fix(db): warn on missing docker id when migrating to db 31 * fix(db): guard against nil exception --- api/bolt/migrator/migrate_dbversion31.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/api/bolt/migrator/migrate_dbversion31.go b/api/bolt/migrator/migrate_dbversion31.go index 8086dfc40..55555096d 100644 --- a/api/bolt/migrator/migrate_dbversion31.go +++ b/api/bolt/migrator/migrate_dbversion31.go @@ -176,7 +176,8 @@ func (m *Migrator) updateVolumeResourceControlToDB32() error { endpointDockerID, err := snapshotutils.FetchDockerID(snapshot) if err != nil { - return fmt.Errorf("failed fetching environment docker id: %w", err) + log.Printf("[WARN] [bolt,migrator,v31] [message: failed fetching environment docker id] [err: %s]", err) + continue } if volumesData, done := snapshot.SnapshotRaw.Volumes.(map[string]interface{}); done { @@ -213,7 +214,11 @@ func findResourcesToUpdateForDB32(dockerID string, volumesData map[string]interf volumes := volumesData["Volumes"].([]interface{}) for _, volumeMeta := range volumes { volume := volumeMeta.(map[string]interface{}) - volumeName := volume["Name"].(string) + volumeName, nameExist := volume["Name"].(string) + if !nameExist { + continue + } + oldResourceID := fmt.Sprintf("%s%s", volumeName, volume["CreatedAt"].(string)) resourceControl, ok := volumeResourceControls[oldResourceID]