@@ -2,6 +2,7 @@ package environments
22
33import (
44 "context"
5+ "net/http"
56
67 "github.com/crossplane/crossplane-runtime/pkg/errors"
78 "github.com/crossplane/crossplane-runtime/pkg/meta"
@@ -16,7 +17,7 @@ import (
1617const (
1718 errKymaInstanceCreateFailed = "Could not create KymaEnvironment"
1819 errKymaInstanceUpdateFailed = "Could not update KymaEnvironment"
19- errInstanceIdNotFound = "Could not update kyma instance .status.AtProvider.Id is empty "
20+ errExternalNameNotFound = "external-name not set "
2021)
2122
2223type KymaEnvironments struct {
@@ -27,28 +28,31 @@ func NewKymaEnvironments(btp btp.Client) *KymaEnvironments {
2728 return & KymaEnvironments {btp : btp }
2829}
2930
31+ // DescribeInstance retrieves a Kyma environment instance using the external-name annotation.
32+ // Supports both UUID-based (>= v1.2.2) and name-based (< v1.2.2) external-name formats.
33+ // Returns nil if the instance doesn't exist (without error).
3034func (c KymaEnvironments ) DescribeInstance (
3135 ctx context.Context ,
3236 cr v1alpha1.KymaEnvironment ,
33- ) (* provisioningclient.BusinessEnvironmentInstanceResponseObject , bool , error ) {
37+ ) (* provisioningclient.BusinessEnvironmentInstanceResponseObject , error ) {
38+ // If external-name is empty, resource needs to be created. Should be checked by the caller already
39+ externalName := meta .GetExternalName (& cr )
40+ if externalName == "" {
41+ return nil , nil
42+ }
3443
35- environment , err := c .btp .GetEnvironment (ctx , meta .GetExternalName (& cr ), GetKymaEnvironmentName (cr ), btp .KymaEnvironmentType ())
44+ // GetKymaEnvironment handles both UUID-based and legacy name-based lookups
45+ environment , err := c .btp .GetKymaEnvironment (ctx , externalName , GetKymaEnvironmentName (cr ), btp .KymaEnvironmentType ())
3646
3747 if err != nil {
38- return nil , false , err
48+ return nil , err
3949 }
4050
4151 if environment == nil {
42- return nil , false , nil
43- }
44-
45- // If the external name is not set yet, we set it to the ID of the environment. And force an update.
46- if * environment .Id != meta .GetExternalName (& cr ) {
47- meta .SetExternalName (& cr , * environment .Id )
48- return environment , true , nil
52+ return nil , nil
4953 }
5054
51- return environment , false , nil
55+ return environment , nil
5256}
5357
5458func (c KymaEnvironments ) CreateInstance (ctx context.Context , cr v1alpha1.KymaEnvironment ) (string , error ) {
@@ -72,18 +76,24 @@ func (c KymaEnvironments) CreateInstance(ctx context.Context, cr v1alpha1.KymaEn
7276 return guid , nil
7377}
7478
75- func (c KymaEnvironments ) DeleteInstance (ctx context.Context , cr v1alpha1.KymaEnvironment ) error {
76- if cr .Status .AtProvider .ID == nil {
77- return errors .New (errInstanceIdNotFound )
79+ // DeleteInstance deletes the Kyma environment using the external-name (GUID).
80+ // Returns the HTTP response for status code checking and any error.
81+ func (c KymaEnvironments ) DeleteInstance (ctx context.Context , cr v1alpha1.KymaEnvironment ) (* http.Response , error ) {
82+ externalName := meta .GetExternalName (& cr )
83+
84+ // Use external-name (GUID) for deletion
85+ if externalName == "" {
86+ return nil , errors .New (errExternalNameNotFound )
7887 }
79- _ , err := c . btp . DeleteEnvironmentInstanceByID ( ctx , * cr . Status . AtProvider . ID )
80- return err
88+
89+ return c . btp . DeleteEnvironmentInstanceByID ( ctx , externalName )
8190}
8291
8392func (c KymaEnvironments ) UpdateInstance (ctx context.Context , cr v1alpha1.KymaEnvironment ) error {
93+ externalName := meta .GetExternalName (& cr )
8494
85- if cr . Status . AtProvider . ID == nil {
86- return errors .New (errInstanceIdNotFound )
95+ if externalName == "" {
96+ return errors .New (errExternalNameNotFound )
8797 }
8898
8999 parameters , err := internal .UnmarshalRawParameters (cr .Spec .ForProvider .Parameters .Raw )
@@ -93,7 +103,7 @@ func (c KymaEnvironments) UpdateInstance(ctx context.Context, cr v1alpha1.KymaEn
93103 }
94104 err = c .btp .UpdateKymaEnvironment (
95105 ctx ,
96- * cr . Status . AtProvider . ID ,
106+ externalName ,
97107 cr .Spec .ForProvider .PlanName ,
98108 parameters ,
99109 string (cr .UID ),
0 commit comments