github.com/kubernetes-incubator/kube-aws@v0.16.4/pkg/api/subnets.go (about)

     1  package api
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/kubernetes-incubator/kube-aws/logger"
     7  )
     8  
     9  type Subnets []Subnet
    10  
    11  func (s Subnets) ContainsBothPrivateAndPublic() bool {
    12  	allPublic := true
    13  	allPrivate := true
    14  	for _, subnet := range s {
    15  		allPublic = allPublic && subnet.Public()
    16  		allPrivate = allPrivate && subnet.Private
    17  	}
    18  	return !allPublic && !allPrivate
    19  }
    20  
    21  func (ss Subnets) ImportFromNetworkStack() (Subnets, error) {
    22  	result := make(Subnets, len(ss))
    23  	// Import all the managed subnets from the main cluster i.e. don't create subnets inside the node pool cfn stack
    24  	for i, s := range ss {
    25  		if !s.HasIdentifier() {
    26  			logger.Debugf("Subnet %s does not have an identifier, importing from NetworkStack...", s.Name)
    27  			logicalName, err := s.LogicalNameOrErr()
    28  			if err != nil {
    29  				return result, err
    30  			}
    31  			stackOutputName := fmt.Sprintf(`{"Fn::ImportValue":{"Fn::Sub":"${NetworkStackName}-%s"}}`, logicalName)
    32  			az := s.AvailabilityZone
    33  			if s.Private {
    34  				result[i] = NewPrivateSubnetFromFn(az, stackOutputName)
    35  			} else {
    36  				result[i] = NewPublicSubnetFromFn(az, stackOutputName)
    37  			}
    38  		} else {
    39  			logger.Debugf("Subnet %s has an identifier, using that: %+v", s.Name, s)
    40  			result[i] = s
    41  		}
    42  	}
    43  	return result, nil
    44  }
    45  
    46  func (ss Subnets) ImportFromNetworkStackRetainingNames() (Subnets, error) {
    47  	result, err := ss.ImportFromNetworkStack()
    48  	if err != nil {
    49  		return result, err
    50  	}
    51  	for i, s := range ss {
    52  		logger.Debugf("ImportFromNetworkStackRetainingNames restoring name to %s", s.Name)
    53  		result[i].Name = s.Name
    54  	}
    55  	return result, nil
    56  }
    57  
    58  func (ss Subnets) RefByName(name string) (string, error) {
    59  	for _, subnet := range ss {
    60  		if subnet.Name == name {
    61  			return subnet.Ref(), nil
    62  		}
    63  	}
    64  	return "", fmt.Errorf("No subnets found with name: %s", name)
    65  }