github.com/kubernetes-incubator/kube-aws@v0.16.4/pkg/api/etcd_cluster.go (about) 1 package api 2 3 import ( 4 "fmt" 5 "regexp" 6 ) 7 8 type EtcdCluster struct { 9 InternalDomainName string `yaml:"internalDomainName,omitempty"` 10 MemberIdentityProvider string `yaml:"memberIdentityProvider,omitempty"` 11 HostedZone Identifier `yaml:"hostedZone,omitempty"` 12 ManageRecordSets *bool `yaml:"manageRecordSets,omitempty"` 13 KMSKeyARN string `yaml:"kmsKeyArn,omitempty"` 14 Version string `yaml:"version,omitempty"` 15 } 16 17 const ( 18 MemberIdentityProviderEIP = "eip" 19 MemberIdentityProviderENI = "eni" 20 ) 21 22 func (c EtcdCluster) EC2InternalDomainUsed() bool { 23 return c.InternalDomainName == "" 24 } 25 26 func (c EtcdCluster) GetMemberIdentityProvider() string { 27 p := c.MemberIdentityProvider 28 29 if p == MemberIdentityProviderEIP || p == MemberIdentityProviderENI { 30 return p 31 } else if p == "" { 32 return MemberIdentityProviderEIP 33 } 34 35 panic(fmt.Errorf("Unsupported memberIdentityProvider: %s", p)) 36 } 37 38 func (e EtcdCluster) hostedZoneManaged() bool { 39 return e.GetMemberIdentityProvider() == MemberIdentityProviderENI && 40 !e.HostedZone.HasIdentifier() && !e.EC2InternalDomainUsed() 41 } 42 43 // Notes: 44 // * EC2's default domain like <region>.compute.internal for internalDomainName implies not to manage record sets 45 // * Managed hosted zone implies managed record sets 46 func (e EtcdCluster) RecordSetsManaged() bool { 47 return e.GetMemberIdentityProvider() == MemberIdentityProviderENI && !e.EC2InternalDomainUsed() && 48 (e.hostedZoneManaged() || (e.ManageRecordSets == nil || *e.ManageRecordSets)) 49 } 50 51 // NodeShouldHaveSecondaryENI returns true if all the etcd nodes should have secondary ENIs for their identities 52 func (c EtcdCluster) NodeShouldHaveSecondaryENI() bool { 53 return c.GetMemberIdentityProvider() == MemberIdentityProviderENI 54 } 55 56 // NodeShouldHaveEIP returns true if all the etcd nodes should have EIPs for their identities 57 func (c EtcdCluster) NodeShouldHaveEIP() bool { 58 return c.GetMemberIdentityProvider() == MemberIdentityProviderEIP 59 } 60 61 func (c EtcdCluster) MajorMinorVersion() string { 62 r := regexp.MustCompile(`v?[0-9]+\.[0-9]+`) 63 if c.Version != "" { 64 return r.FindString(c.Version) 65 } 66 return r.FindString(ETCD_VERSION) 67 } 68 69 func (c EtcdCluster) LogicalName() string { 70 d := regexp.MustCompile(`\.`) 71 return fmt.Sprintf("Etcd%s", d.ReplaceAllString(c.MajorMinorVersion(), `dot`)) 72 }