Skip to content

Commit 6935f62

Browse files
authored
Expose Dashboard URL only when provisioning operation succeeded (#2693)
* Extract dasboard url regex as const * Assert that dashboard url is empty in the response to the provisioning request * Replace const string literals duplicates with consts from broker pkg * rm dashboard url from provisioning response on new provisioning op * Add func to provide dashboard url * Replace dashboard url value with ProvideURL func in broker responses * Return dashboard url for provisioning request with own cluster plan * Assert that GET instance response contains dashboard url
1 parent 04b022d commit 6935f62

File tree

7 files changed

+36
-15
lines changed

7 files changed

+36
-15
lines changed

internal/broker/instance_create.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,14 @@ import (
1515
"slices"
1616
"strings"
1717

18-
error2 "github.com/kyma-project/kyma-environment-broker/internal/error"
19-
2018
"github.com/kyma-project/kyma-environment-broker/common/gardener"
2119
"github.com/kyma-project/kyma-environment-broker/common/hyperscaler/rules"
2220
pkg "github.com/kyma-project/kyma-environment-broker/common/runtime"
2321
"github.com/kyma-project/kyma-environment-broker/internal"
2422
"github.com/kyma-project/kyma-environment-broker/internal/additionalproperties"
2523
"github.com/kyma-project/kyma-environment-broker/internal/config"
2624
"github.com/kyma-project/kyma-environment-broker/internal/dashboard"
25+
error2 "github.com/kyma-project/kyma-environment-broker/internal/error"
2726
"github.com/kyma-project/kyma-environment-broker/internal/euaccess"
2827
"github.com/kyma-project/kyma-environment-broker/internal/hyperscalers/aws"
2928
"github.com/kyma-project/kyma-environment-broker/internal/kubeconfig"
@@ -307,6 +306,10 @@ func (b *ProvisionEndpoint) Provision(ctx context.Context, instanceID string, de
307306
logger.Info("Adding operation to provisioning queue")
308307
b.queue.Add(operation.ID)
309308

309+
if !IsOwnClusterPlan(provisioningParameters.PlanID) {
310+
dashboardURL = ""
311+
}
312+
310313
return domain.ProvisionedServiceSpec{
311314
IsAsync: true,
312315
OperationData: operation.ID,
@@ -831,7 +834,7 @@ func (b *ProvisionEndpoint) handleExistingOperation(operation *internal.Provisio
831834
return domain.ProvisionedServiceSpec{
832835
IsAsync: true,
833836
OperationData: operation.ID,
834-
DashboardURL: operation.DashboardURL,
837+
DashboardURL: dashboard.ProvideURL(instance, operation),
835838
Metadata: domain.InstanceMetadata{
836839
Labels: ResponseLabels(*instance, b.config.URL, b.kcBuilder),
837840
},

internal/broker/instance_create_test.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ import (
3737
)
3838

3939
const (
40-
serviceID = "47c9dcbf-ff30-448e-ab36-d3bad66ba281"
41-
planID = "4deee563-e5ec-4731-b9b1-53b42d855f0c"
40+
serviceID = broker.KymaServiceID
41+
planID = broker.AzurePlanID
4242
clusterRegion = "westeurope"
4343
globalAccountID = "e8f7ec0a-0cd6-41f0-905d-5d1efa9fb6c4"
4444
subAccountID = "3cb65e5b-e455-4799-bf35-be46e8f5a533"
@@ -60,6 +60,7 @@ func TestProvision_Provision(t *testing.T) {
6060
log := slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{
6161
Level: slog.LevelInfo,
6262
}))
63+
6364
t.Run("new operation will be created", func(t *testing.T) {
6465
// given
6566
// #setup memory storage
@@ -115,7 +116,7 @@ func TestProvision_Provision(t *testing.T) {
115116
require.NoError(t, err)
116117
assert.Regexp(t, "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-4[a-fA-F0-9]{3}-[8|9|aA|bB][a-fA-F0-9]{3}-[a-fA-F0-9]{12}$", response.OperationData)
117118
assert.NotEqual(t, instanceID, response.OperationData)
118-
assert.Regexp(t, `^https:\/\/dashboard\.example\.com\/\?kubeconfigID=`, response.DashboardURL)
119+
assert.Empty(t, response.DashboardURL)
119120
assert.Equal(t, clusterName, response.Metadata.Labels["Name"])
120121
assert.NotContains(t, response.Metadata.Labels, "APIServerURL")
121122

@@ -134,7 +135,7 @@ func TestProvision_Provision(t *testing.T) {
134135
require.NoError(t, err)
135136

136137
assert.Equal(t, instance.Parameters, operation.ProvisioningParameters)
137-
assert.Regexp(t, `^https:\/\/dashboard\.example\.com\/\?kubeconfigID=`, response.DashboardURL)
138+
assert.Empty(t, response.DashboardURL)
138139
assert.Equal(t, instance.GlobalAccountID, globalAccountID)
139140
assert.Equal(t, fixDNSProviders(), instance.InstanceDetails.ShootDNSProviders)
140141
assert.Equal(t, pkg.Azure, instance.Provider)
@@ -411,7 +412,7 @@ func TestProvision_Provision(t *testing.T) {
411412
// UUID with version 4 and variant 1 i.e RFC. 4122/DCE
412413
assert.Regexp(t, "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-4[a-fA-F0-9]{3}-[8|9|aA|bB][a-fA-F0-9]{3}-[a-fA-F0-9]{12}$", response.OperationData)
413414
assert.NotEqual(t, instanceID, response.OperationData)
414-
assert.Regexp(t, `^https:\/\/dashboard\.example\.com\/\?kubeconfigID=`, response.DashboardURL)
415+
assert.Empty(t, response.DashboardURL)
415416
assert.Equal(t, clusterName, response.Metadata.Labels["Name"])
416417
assert.NotContains(t, response.Metadata.Labels, "APIServerURL")
417418

@@ -432,7 +433,7 @@ func TestProvision_Provision(t *testing.T) {
432433
require.NoError(t, err)
433434

434435
assert.Equal(t, instance.Parameters, operation.ProvisioningParameters)
435-
assert.Regexp(t, `^https:\/\/dashboard\.example\.com\/\?kubeconfigID=`, response.DashboardURL)
436+
assert.Empty(t, response.DashboardURL)
436437
assert.Equal(t, instance.GlobalAccountID, globalAccountID)
437438
assert.Equal(t, fixDNSProviders(), instance.InstanceDetails.ShootDNSProviders)
438439
})

internal/broker/instance_get.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"net/http"
88

99
"github.com/kyma-project/kyma-environment-broker/internal"
10+
"github.com/kyma-project/kyma-environment-broker/internal/dashboard"
1011

1112
"github.com/kyma-project/kyma-environment-broker/internal/kubeconfig"
1213
"github.com/kyma-project/kyma-environment-broker/internal/storage"
@@ -74,7 +75,7 @@ func (b *GetInstanceEndpoint) GetInstance(_ context.Context, instanceID string,
7475
spec := domain.GetInstanceDetailsSpec{
7576
ServiceID: instance.ServiceID,
7677
PlanID: instance.ServicePlanID,
77-
DashboardURL: instance.DashboardURL,
78+
DashboardURL: dashboard.ProvideURL(instance, op),
7879
Parameters: parameters,
7980
Metadata: domain.InstanceMetadata{
8081
Labels: ResponseLabels(*instance, b.config.URL, b.kcBuilder),

internal/broker/instance_get_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ func TestGetEndpoint_GetProvisioningInstance(t *testing.T) {
103103
response, err := getSvc.GetInstance(context.Background(), instanceID, domain.FetchInstanceDetails{})
104104
assert.Equal(t, nil, err, "Get returned error when expected to pass")
105105
assert.Len(t, response.Metadata.Labels, 1)
106+
assert.Regexp(t, dashboardUrlRegex, response.DashboardURL)
106107
}
107108

108109
func TestGetEndpoint_DoNotReturnInstanceWhereDeletedAtIsNotZero(t *testing.T) {

internal/broker/instance_update.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ func (b *UpdateEndpoint) Update(ctx context.Context, instanceID string, details
212212
}
213213
return domain.UpdateServiceSpec{
214214
IsAsync: false,
215-
DashboardURL: dashboardURL,
215+
DashboardURL: dashboard.ProvideURL(instance, lastProvisioningOperation),
216216
OperationData: "",
217217
Metadata: domain.InstanceMetadata{
218218
Labels: ResponseLabels(*instance, b.config.URL, b.kcBuilder),
@@ -252,7 +252,7 @@ func (b *UpdateEndpoint) processUpdateParameters(ctx context.Context, instance *
252252
logger.Debug("Parameters not provided, skipping processing update parameters")
253253
return domain.UpdateServiceSpec{
254254
IsAsync: false,
255-
DashboardURL: instance.DashboardURL,
255+
DashboardURL: dashboard.ProvideURL(instance, lastProvisioningOperation),
256256
OperationData: "",
257257
Metadata: domain.InstanceMetadata{
258258
Labels: ResponseLabels(*instance, b.config.URL, b.kcBuilder),
@@ -517,7 +517,7 @@ func (b *UpdateEndpoint) processUpdateParameters(ctx context.Context, instance *
517517

518518
return domain.UpdateServiceSpec{
519519
IsAsync: true,
520-
DashboardURL: instance.DashboardURL,
520+
DashboardURL: dashboard.ProvideURL(instance, lastProvisioningOperation),
521521
OperationData: operation.ID,
522522
Metadata: domain.InstanceMetadata{
523523
Labels: ResponseLabels(*instance, b.config.URL, b.kcBuilder),

internal/broker/instance_update_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ import (
4141
"sigs.k8s.io/controller-runtime/pkg/client/fake"
4242
)
4343

44+
const dashboardUrlRegex = `^https:\/\/dashboard\.example\.com\/\?kubeconfigID=`
45+
4446
var dashboardConfig = dashboard.Config{LandscapeURL: "https://dashboard.example.com"}
4547
var fakeKcpK8sClient = fake.NewClientBuilder().Build()
4648
var imConfigFixture = broker.InfrastructureManager{
@@ -1102,9 +1104,9 @@ func TestUpdateEndpoint_UpdateWithEnabledDashboard(t *testing.T) {
11021104
require.NoError(t, err)
11031105

11041106
// check if the instance is updated successfully
1105-
assert.Regexp(t, `^https:\/\/dashboard\.example\.com\/\?kubeconfigID=`, inst.DashboardURL)
1107+
assert.Regexp(t, dashboardUrlRegex, inst.DashboardURL)
11061108
// check if the API response is correct
1107-
assert.Regexp(t, `^https:\/\/dashboard\.example\.com\/\?kubeconfigID=`, response.DashboardURL)
1109+
assert.Regexp(t, dashboardUrlRegex, response.DashboardURL)
11081110
}
11091111

11101112
func TestUpdateExpiredInstance(t *testing.T) {

internal/dashboard/url_provider.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package dashboard
2+
3+
import (
4+
"github.com/kyma-project/kyma-environment-broker/internal"
5+
"github.com/pivotal-cf/brokerapi/v12/domain"
6+
)
7+
8+
func ProvideURL(instance *internal.Instance, provisioningOperation *internal.ProvisioningOperation) string {
9+
if provisioningOperation.State == domain.Succeeded {
10+
return instance.DashboardURL
11+
}
12+
return ""
13+
}

0 commit comments

Comments
 (0)