-
Notifications
You must be signed in to change notification settings - Fork 114
/
openstack_provider.go
78 lines (66 loc) · 2.32 KB
/
openstack_provider.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
package provider
import (
"fmt"
"math/rand"
"github.com/kyma-project/control-plane/components/kyma-environment-broker/internal/networking"
"github.com/kyma-project/control-plane/components/kyma-environment-broker/internal/ptr"
"github.com/kyma-project/control-plane/components/kyma-environment-broker/internal"
"github.com/kyma-project/control-plane/components/provisioner/pkg/gqlschema"
)
const (
DefaultOpenStackRegion = "eu-de-2"
DefaultExposureClass = "converged-cloud-internet"
)
type OpenStackInput struct {
FloatingPoolName string
}
func (p *OpenStackInput) Defaults() *gqlschema.ClusterConfigInput {
return &gqlschema.ClusterConfigInput{
GardenerConfig: &gqlschema.GardenerConfigInput{
DiskType: nil,
MachineType: "g_c4_m16",
Region: DefaultOpenStackRegion,
Provider: "openstack",
WorkerCidr: networking.DefaultNodesCIDR,
AutoScalerMin: 4,
AutoScalerMax: 8,
MaxSurge: 1,
MaxUnavailable: 0,
ExposureClassName: ptr.String(DefaultExposureClass),
ProviderSpecificConfig: &gqlschema.ProviderSpecificInput{
OpenStackConfig: &gqlschema.OpenStackProviderConfigInput{
Zones: ZonesForOpenStack(DefaultOpenStackRegion),
FloatingPoolName: p.FloatingPoolName,
CloudProfileName: "converged-cloud-cp",
LoadBalancerProvider: "f5",
},
},
},
}
}
func (p *OpenStackInput) ApplyParameters(input *gqlschema.ClusterConfigInput, pp internal.ProvisioningParameters) {
if pp.Parameters.Region != nil && *pp.Parameters.Region != "" {
input.GardenerConfig.ProviderSpecificConfig.OpenStackConfig.Zones = ZonesForOpenStack(*pp.Parameters.Region)
}
}
func (p *OpenStackInput) Profile() gqlschema.KymaProfile {
return gqlschema.KymaProfileProduction
}
func (p *OpenStackInput) Provider() internal.CloudProvider {
return internal.Openstack
}
// openstackZones defines a possible suffixes for given OpenStack regions
// The table is tested in a unit test to check if all necessary regions are covered
var openstackZones = map[string]string{
"eu-de-1": "abd",
"eu-de-2": "abd",
"ap-sa-1": "a",
}
func ZonesForOpenStack(region string) []string {
zones, found := openstackZones[region]
if !found {
zones = "a"
}
zone := string(zones[rand.Intn(len(zones))])
return []string{fmt.Sprintf("%s%s", region, zone)}
}