From 5bfd228bdaa117f972aa4baf9c557f1774518ad7 Mon Sep 17 00:00:00 2001 From: Catherine Luse Date: Tue, 14 Dec 2021 12:54:27 -0700 Subject: [PATCH] Shared subnets are shown in dropdwon when provisioning GKE clusters --- .../cluster-driver/driver-gke/component.js | 47 +++++++++++++++---- lib/shared/addon/google/service.js | 1 - 2 files changed, 37 insertions(+), 11 deletions(-) diff --git a/lib/shared/addon/components/cluster-driver/driver-gke/component.js b/lib/shared/addon/components/cluster-driver/driver-gke/component.js index d617451cf..3c4229e9f 100644 --- a/lib/shared/addon/components/cluster-driver/driver-gke/component.js +++ b/lib/shared/addon/components/cluster-driver/driver-gke/component.js @@ -686,15 +686,40 @@ export default Component.extend(ClusterDriver, { label: matchedSubnets.length > 0 ? `${ net.name } (subnets available)` : net.name, }; }); - const sharedSubnets = (get(this, 'sharedSubnets') || []).map((ssn) => { - return { - ...ssn, - group: 'Shared VPC', - shared: true, - name: ssn?.network, - }; - }) - const merged = [...networks, ...sharedSubnets]; + + const sharedSubnets = get(this, 'sharedSubnets') || []; + + const dedupeSharedSubnets = () => { + // Because the shared network comes in as an array of shared subnetworks, + // the network names of the shared networks need to be deduplicated. + let alreadyUsedNetworkNames = {}; + let dedupedSharedSubnets = []; + + for (let i = 0; i < sharedSubnets.length; i++){ + const ssn = sharedSubnets[i]; + const networkNamePath = ssn?.network.split('/'); + const networkLabel = networkNamePath[networkNamePath.length - 1]; + + if (alreadyUsedNetworkNames[networkLabel]) { + // Avoid adding two entries for the same shared network name + continue; + } + + alreadyUsedNetworkNames[networkLabel] = ssn; + + dedupedSharedSubnets.push({ + ...ssn, + group: 'Shared VPC', + shared: true, + name: ssn?.network, + label: networkLabel + }); + } + + return dedupedSharedSubnets; + } + const dedupedSharedSubnets = dedupeSharedSubnets(sharedSubnets) + const merged = [...networks, ...dedupedSharedSubnets]; return merged; }), @@ -735,9 +760,11 @@ export default Component.extend(ClusterDriver, { mappedSubnets = sharedVpcs.map((sVpc) => { const networkDisplayName = sVpc.network; + const subnetworkPath = sVpc.subnetwork.split('/'); + const subnetworkLabel = subnetworkPath[subnetworkPath.length - 1]; return { - label: `${ sVpc.subnetwork } (${ sVpc.ipCidrRange })`, + label: `${ subnetworkLabel } (${ sVpc.ipCidrRange })`, value: sVpc.subnetwork, secondaryIpRanges: sVpc.secondaryIpRanges, networkDisplayName diff --git a/lib/shared/addon/google/service.js b/lib/shared/addon/google/service.js index 72656a6f5..c68a9fc76 100644 --- a/lib/shared/addon/google/service.js +++ b/lib/shared/addon/google/service.js @@ -474,7 +474,6 @@ export default Service.extend({ // 'subnetwork': 'projects/vpc-host-309518/regions/us-west1/subnetworks/vpc-host-subnet' // } // ]; - return out; } catch (error) { return reject([error.body.error ?? error.body]);