github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/builtin/providers/ultradns/common.go (about)

     1  package ultradns
     2  
     3  import (
     4  	"fmt"
     5  	"log"
     6  
     7  	"github.com/Ensighten/udnssdk"
     8  	"github.com/hashicorp/terraform/helper/hashcode"
     9  	"github.com/hashicorp/terraform/helper/schema"
    10  )
    11  
    12  // Conversion helper functions
    13  type rRSetResource struct {
    14  	OwnerName string
    15  	RRType    string
    16  	RData     []string
    17  	TTL       int
    18  	Profile   udnssdk.RawProfile
    19  	Zone      string
    20  }
    21  
    22  // profileAttrSchemaMap is a map from each ultradns_tcpool attribute name onto its respective ProfileSchema URI
    23  var profileAttrSchemaMap = map[string]udnssdk.ProfileSchema{
    24  	"dirpool_profile": udnssdk.DirPoolSchema,
    25  	"rdpool_profile":  udnssdk.RDPoolSchema,
    26  	"sbpool_profile":  udnssdk.SBPoolSchema,
    27  	"tcpool_profile":  udnssdk.TCPoolSchema,
    28  }
    29  
    30  func (r rRSetResource) RRSetKey() udnssdk.RRSetKey {
    31  	return udnssdk.RRSetKey{
    32  		Zone: r.Zone,
    33  		Type: r.RRType,
    34  		Name: r.OwnerName,
    35  	}
    36  }
    37  
    38  func (r rRSetResource) RRSet() udnssdk.RRSet {
    39  	return udnssdk.RRSet{
    40  		OwnerName: r.OwnerName,
    41  		RRType:    r.RRType,
    42  		RData:     r.RData,
    43  		TTL:       r.TTL,
    44  		Profile:   r.Profile,
    45  	}
    46  }
    47  
    48  func (r rRSetResource) ID() string {
    49  	return fmt.Sprintf("%s.%s", r.OwnerName, r.Zone)
    50  }
    51  
    52  func unzipRdataHosts(configured []interface{}) []string {
    53  	hs := make([]string, 0, len(configured))
    54  	for _, rRaw := range configured {
    55  		data := rRaw.(map[string]interface{})
    56  		h := data["host"].(string)
    57  		hs = append(hs, h)
    58  	}
    59  	return hs
    60  }
    61  
    62  func schemaPingProbe() *schema.Resource {
    63  	return &schema.Resource{
    64  		Schema: map[string]*schema.Schema{
    65  			"packets": &schema.Schema{
    66  				Type:     schema.TypeInt,
    67  				Optional: true,
    68  				Default:  3,
    69  			},
    70  			"packet_size": &schema.Schema{
    71  				Type:     schema.TypeInt,
    72  				Optional: true,
    73  				Default:  56,
    74  			},
    75  			"limit": &schema.Schema{
    76  				Type:     schema.TypeSet,
    77  				Optional: true,
    78  				Set:      hashLimits,
    79  				Elem:     resourceProbeLimits(),
    80  			},
    81  		},
    82  	}
    83  }
    84  
    85  func resourceProbeLimits() *schema.Resource {
    86  	return &schema.Resource{
    87  		Schema: map[string]*schema.Schema{
    88  			"name": &schema.Schema{
    89  				Type:     schema.TypeString,
    90  				Required: true,
    91  			},
    92  			"warning": &schema.Schema{
    93  				Type:     schema.TypeInt,
    94  				Required: true,
    95  			},
    96  			"critical": &schema.Schema{
    97  				Type:     schema.TypeInt,
    98  				Required: true,
    99  			},
   100  			"fail": &schema.Schema{
   101  				Type:     schema.TypeInt,
   102  				Required: true,
   103  			},
   104  		},
   105  	}
   106  }
   107  
   108  type probeResource struct {
   109  	Name string
   110  	Zone string
   111  	ID   string
   112  
   113  	Agents     []string
   114  	Interval   string
   115  	PoolRecord string
   116  	Threshold  int
   117  	Type       udnssdk.ProbeType
   118  
   119  	Details *udnssdk.ProbeDetailsDTO
   120  }
   121  
   122  func (p probeResource) RRSetKey() udnssdk.RRSetKey {
   123  	return p.Key().RRSetKey()
   124  }
   125  
   126  func (p probeResource) ProbeInfoDTO() udnssdk.ProbeInfoDTO {
   127  	return udnssdk.ProbeInfoDTO{
   128  		ID:         p.ID,
   129  		PoolRecord: p.PoolRecord,
   130  		ProbeType:  p.Type,
   131  		Interval:   p.Interval,
   132  		Agents:     p.Agents,
   133  		Threshold:  p.Threshold,
   134  		Details:    p.Details,
   135  	}
   136  }
   137  
   138  func (p probeResource) Key() udnssdk.ProbeKey {
   139  	return udnssdk.ProbeKey{
   140  		Zone: p.Zone,
   141  		Name: p.Name,
   142  		ID:   p.ID,
   143  	}
   144  }
   145  
   146  func mapFromLimit(name string, l udnssdk.ProbeDetailsLimitDTO) map[string]interface{} {
   147  	return map[string]interface{}{
   148  		"name":     name,
   149  		"warning":  l.Warning,
   150  		"critical": l.Critical,
   151  		"fail":     l.Fail,
   152  	}
   153  }
   154  
   155  // hashLimits generates a hashcode for a limits block
   156  func hashLimits(v interface{}) int {
   157  	m := v.(map[string]interface{})
   158  	h := hashcode.String(m["name"].(string))
   159  	log.Printf("[INFO] hashLimits(): %v -> %v", m["name"].(string), h)
   160  	return h
   161  }
   162  
   163  // makeSetFromLimits encodes an array of Limits into a
   164  // *schema.Set in the appropriate structure for the schema
   165  func makeSetFromLimits(ls map[string]udnssdk.ProbeDetailsLimitDTO) *schema.Set {
   166  	s := &schema.Set{F: hashLimits}
   167  	for name, l := range ls {
   168  		s.Add(mapFromLimit(name, l))
   169  	}
   170  	return s
   171  }
   172  
   173  func makeProbeDetailsLimit(configured interface{}) *udnssdk.ProbeDetailsLimitDTO {
   174  	l := configured.(map[string]interface{})
   175  	return &udnssdk.ProbeDetailsLimitDTO{
   176  		Warning:  l["warning"].(int),
   177  		Critical: l["critical"].(int),
   178  		Fail:     l["fail"].(int),
   179  	}
   180  }
   181  
   182  // makeSetFromStrings encodes an []string into a
   183  // *schema.Set in the appropriate structure for the schema
   184  func makeSetFromStrings(ss []string) *schema.Set {
   185  	st := &schema.Set{F: schema.HashString}
   186  	for _, s := range ss {
   187  		st.Add(s)
   188  	}
   189  	return st
   190  }
   191  
   192  // hashRdata generates a hashcode for an Rdata block
   193  func hashRdatas(v interface{}) int {
   194  	m := v.(map[string]interface{})
   195  	h := hashcode.String(m["host"].(string))
   196  	log.Printf("[DEBUG] hashRdatas(): %v -> %v", m["host"].(string), h)
   197  	return h
   198  }