generated from kyma-project/template-repository
-
Notifications
You must be signed in to change notification settings - Fork 12
/
awsIpRange.go
81 lines (72 loc) · 2.21 KB
/
awsIpRange.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
78
79
80
81
package dsl
import (
"context"
"errors"
"fmt"
"github.com/3th1nk/cidr"
ec2Types "github.com/aws/aws-sdk-go-v2/service/ec2/types"
"github.com/elliotchance/pie/v2"
cloudcontrolv1beta1 "github.com/kyma-project/cloud-manager/api/cloud-control/v1beta1"
"github.com/kyma-project/cloud-manager/pkg/common"
awsutil "github.com/kyma-project/cloud-manager/pkg/kcp/provider/aws/util"
"github.com/kyma-project/cloud-manager/pkg/testinfra"
"k8s.io/utils/pointer"
)
func CreateAwsIpRangeWithSubnets(ctx context.Context, infra testinfra.Infra, iprange *cloudcontrolv1beta1.IpRange,
vpcId string, name string, iprangeCidr string,
) error {
if iprange == nil {
return errors.New("iprange given to CreateAwsIpRangeWithSubnets() can not be nil")
}
err := CreateKcpIpRange(ctx, infra.KCP().Client(), iprange,
WithName(name),
WithKcpIpRangeRemoteRef(name, name),
WithKcpIpRangeSpecScope(name),
WithKcpIpRangeSpecCidr(iprangeCidr),
)
if err != nil {
return err
}
_, err = infra.AwsMock().AssociateVpcCidrBlock(infra.Ctx(), vpcId, iprangeCidr)
if err != nil {
return err
}
wholeRange, err := cidr.Parse(iprange.Spec.Cidr)
if err != nil {
return err
}
subnetRanges, err := wholeRange.SubNetting(cidr.MethodSubnetNum, 4)
if err != nil {
return err
}
subnetRanges = subnetRanges[:3]
iprange.Status.Ranges = pie.Map(subnetRanges, func(c *cidr.CIDR) string {
return c.CIDR().String()
})
zones := []string{"eu-west-1a", "eu-west-1b", "eu-west-1c"}
var subnets []*ec2Types.Subnet
for x, zone := range zones {
rng := iprange.Status.Ranges[x]
subnet, err := infra.AwsMock().CreateSubnet(infra.Ctx(), vpcId, zone, rng, awsutil.Ec2Tags(
"Name", fmt.Sprintf("%s-%d", iprange.Name, x),
common.TagCloudManagerName, name,
common.TagCloudManagerRemoteName, iprange.Spec.RemoteRef.String(),
common.TagScope, name,
"cloud-manager.kyma-project.io/iprange", "1",
))
if err != nil {
return err
}
subnets = append(subnets, subnet)
iprange.Status.Subnets = append(iprange.Status.Subnets, cloudcontrolv1beta1.IpRangeSubnet{
Id: pointer.StringDeref(subnet.SubnetId, ""),
Zone: zone,
Range: rng,
})
}
err = UpdateStatus(ctx, infra.KCP().Client(), iprange)
if err != nil {
return err
}
return nil
}