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 }