-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathactuator_delete.go
More file actions
94 lines (80 loc) · 3.65 KB
/
actuator_delete.go
File metadata and controls
94 lines (80 loc) · 3.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
// SPDX-FileCopyrightText: 2024 SAP SE or an SAP affiliate company and Gardener contributors
//
// SPDX-License-Identifier: Apache-2.0
package stackit
import (
"context"
"fmt"
extensionscontroller "github.com/gardener/gardener/extensions/pkg/controller"
"github.com/gardener/gardener/extensions/pkg/util"
gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1"
gardenerapihelper "github.com/gardener/gardener/pkg/apis/core/v1beta1/helper"
extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1"
"github.com/go-logr/logr"
"github.com/stackitcloud/gardener-extension-provider-stackit/v2/pkg/apis/stackit/helper"
"github.com/stackitcloud/gardener-extension-provider-stackit/v2/pkg/controller/infrastructure/stackit/infraflow"
openstackutils "github.com/stackitcloud/gardener-extension-provider-stackit/v2/pkg/openstack"
openstackclient "github.com/stackitcloud/gardener-extension-provider-stackit/v2/pkg/openstack/client"
"github.com/stackitcloud/gardener-extension-provider-stackit/v2/pkg/stackit"
stackitclient "github.com/stackitcloud/gardener-extension-provider-stackit/v2/pkg/stackit/client"
)
// Delete the Infrastructure config.
func (a *actuator) Delete(ctx context.Context, log logr.Logger, infra *extensionsv1alpha1.Infrastructure, cluster *extensionscontroller.Cluster) error {
err := a.delete(ctx, log, infra, cluster)
if stackitclient.IsConflict(err) {
return gardenerapihelper.NewErrorWithCodes(err, gardencorev1beta1.ErrorInfraDependencies)
}
return util.DetermineError(
err,
helper.KnownCodes,
)
}
// ForceDelete forcefully deletes the Infrastructure.
func (a *actuator) ForceDelete(_ context.Context, _ logr.Logger, _ *extensionsv1alpha1.Infrastructure, _ *extensionscontroller.Cluster) error {
return nil
}
// delete deletes the infrastructure resource using the flow reconciler.
func (a *actuator) delete(ctx context.Context, log logr.Logger, infra *extensionsv1alpha1.Infrastructure, cluster *extensionscontroller.Cluster) error {
var clientFactory openstackclient.Factory
var useOpenStackClient bool
infraState, err := infrastructureStateFromRaw(infra)
if err != nil {
return err
}
region := stackit.DetermineRegion(cluster)
iaasClient, err := stackitclient.New(region, cluster).IaaS(ctx, a.client, infra.Spec.SecretRef)
if err != nil {
return err
}
stackitLBClient, err := stackitclient.New(region, cluster).LoadBalancing(ctx, a.client, infra.Spec.SecretRef)
if err != nil {
return err
}
// Try to retrieve OpenStack credentials from cloudprovider secret, if they are not available then that's also fine.
// This is only for the migration mode where we still need to use both, since for example we want to use STACKIT infra
// controller together with the old openstack mcm (at least temporarily).
// Mainly the OS Client fetches the Subnet, External Network and creates the SSH Keypair for the MCM to work properly.
if credentials, _ := openstackutils.GetCredentials(ctx, a.client, infra.Spec.SecretRef, false); credentials != nil {
clientFactory, err = openstackclient.NewOpenstackClientFromCredentials(ctx, credentials)
if err != nil {
return err
}
useOpenStackClient = true
}
fctx, err := infraflow.NewFlowContext(ctx, infraflow.Opts{
Log: log,
Infrastructure: infra,
State: infraState,
Cluster: cluster,
ClientFactory: clientFactory,
UseOpenStackClient: useOpenStackClient,
Client: a.client,
IaaSClient: iaasClient,
StackitLB: stackitLBClient,
CustomLabelDomain: a.customLabelDomain,
})
if err != nil {
return fmt.Errorf("failed to create flow context: %w", err)
}
return fctx.Delete(ctx)
}