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  }