src

Go monorepo.
git clone git://code.dwrz.net/src
Log | Files | Refs

partition.go (2152B)


      1 package awsrulesfn
      2 
      3 import "regexp"
      4 
      5 // Partition provides the metadata describing an AWS partition.
      6 type Partition struct {
      7 	ID            string                     `json:"id"`
      8 	Regions       map[string]RegionOverrides `json:"regions"`
      9 	RegionRegex   string                     `json:"regionRegex"`
     10 	DefaultConfig PartitionConfig            `json:"outputs"`
     11 }
     12 
     13 // PartitionConfig provides the endpoint metadata for an AWS region or partition.
     14 type PartitionConfig struct {
     15 	Name                 string `json:"name"`
     16 	DnsSuffix            string `json:"dnsSuffix"`
     17 	DualStackDnsSuffix   string `json:"dualStackDnsSuffix"`
     18 	SupportsFIPS         bool   `json:"supportsFIPS"`
     19 	SupportsDualStack    bool   `json:"supportsDualStack"`
     20 	ImplicitGlobalRegion string `json:"implicitGlobalRegion"`
     21 }
     22 
     23 type RegionOverrides struct {
     24 	Name               *string `json:"name"`
     25 	DnsSuffix          *string `json:"dnsSuffix"`
     26 	DualStackDnsSuffix *string `json:"dualStackDnsSuffix"`
     27 	SupportsFIPS       *bool   `json:"supportsFIPS"`
     28 	SupportsDualStack  *bool   `json:"supportsDualStack"`
     29 }
     30 
     31 const defaultPartition = "aws"
     32 
     33 func getPartition(partitions []Partition, region string) *PartitionConfig {
     34 	for _, partition := range partitions {
     35 		if v, ok := partition.Regions[region]; ok {
     36 			p := mergeOverrides(partition.DefaultConfig, v)
     37 			return &p
     38 		}
     39 	}
     40 
     41 	for _, partition := range partitions {
     42 		regionRegex := regexp.MustCompile(partition.RegionRegex)
     43 		if regionRegex.MatchString(region) {
     44 			v := partition.DefaultConfig
     45 			return &v
     46 		}
     47 	}
     48 
     49 	for _, partition := range partitions {
     50 		if partition.ID == defaultPartition {
     51 			v := partition.DefaultConfig
     52 			return &v
     53 		}
     54 	}
     55 
     56 	return nil
     57 }
     58 
     59 func mergeOverrides(into PartitionConfig, from RegionOverrides) PartitionConfig {
     60 	if from.Name != nil {
     61 		into.Name = *from.Name
     62 	}
     63 	if from.DnsSuffix != nil {
     64 		into.DnsSuffix = *from.DnsSuffix
     65 	}
     66 	if from.DualStackDnsSuffix != nil {
     67 		into.DualStackDnsSuffix = *from.DualStackDnsSuffix
     68 	}
     69 	if from.SupportsFIPS != nil {
     70 		into.SupportsFIPS = *from.SupportsFIPS
     71 	}
     72 	if from.SupportsDualStack != nil {
     73 		into.SupportsDualStack = *from.SupportsDualStack
     74 	}
     75 	return into
     76 }