generated from kyma-project/template-repository
/
createScopeAws.go
77 lines (70 loc) · 2.41 KB
/
createScopeAws.go
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
package scope
import (
"context"
"fmt"
"github.com/elliotchance/pie/v2"
cloudcontrolv1beta1 "github.com/kyma-project/cloud-manager/api/cloud-control/v1beta1"
"github.com/kyma-project/cloud-manager/pkg/composed"
awsgardener "github.com/kyma-project/cloud-manager/pkg/kcp/provider/aws/gardener"
"k8s.io/apimachinery/pkg/util/json"
"k8s.io/utils/pointer"
)
func createScopeAws(ctx context.Context, st composed.State) (error, context.Context) {
state := st.(*State)
// calling STS with Gardener credentials to find AWS Account ID
stsClient, err := state.awsStsClientProvider(
ctx,
state.shoot.Spec.Region,
state.credentialData["accessKeyID"],
state.credentialData["secretAccessKey"],
)
if err != nil {
return composed.LogErrorAndReturn(
fmt.Errorf("error creating aws scope: %w", err),
"Error creating AWS scope",
composed.StopAndForget,
ctx)
}
callerIdentity, err := stsClient.GetCallerIdentity(ctx)
if err != nil {
return composed.LogErrorAndReturn(
fmt.Errorf("error getting caller identity: %w", err),
"Error creating AWS scope",
composed.StopWithRequeue,
ctx)
}
infra := &awsgardener.InfrastructureConfig{}
err = json.Unmarshal(state.shoot.Spec.Provider.InfrastructureConfig.Raw, infra)
if err != nil {
return composed.LogErrorAndReturn(err, "Error unmarshalling InfrastructureConfig", composed.StopAndForget, ctx)
}
scope := &cloudcontrolv1beta1.Scope{
Spec: cloudcontrolv1beta1.ScopeSpec{
Scope: cloudcontrolv1beta1.ScopeInfo{
Aws: &cloudcontrolv1beta1.AwsScope{
AccountId: pointer.StringDeref(callerIdentity.Account, ""),
VpcNetwork: commonVpcName(state.shootNamespace, state.shootName),
Network: cloudcontrolv1beta1.AwsNetwork{
Nodes: pointer.StringDeref(state.shoot.Spec.Networking.Nodes, ""),
Pods: pointer.StringDeref(state.shoot.Spec.Networking.Pods, ""),
Services: pointer.StringDeref(state.shoot.Spec.Networking.Services, ""),
VPC: cloudcontrolv1beta1.AwsVPC{
Id: pointer.StringDeref(infra.Networks.VPC.ID, ""),
CIDR: pointer.StringDeref(infra.Networks.VPC.CIDR, ""),
},
Zones: pie.Map(infra.Networks.Zones, func(z awsgardener.Zone) cloudcontrolv1beta1.AwsZone {
return cloudcontrolv1beta1.AwsZone{
Name: z.Name,
Internal: z.Internal,
Public: z.Public,
Workers: z.Workers,
}
}),
},
},
},
},
}
state.SetObj(scope)
return nil, nil
}