github.com/tarrant/terraform@v0.3.8-0.20150402012457-f68c9eee638e/builtin/providers/openstack/resource_openstack_lb_monitor_v1.go (about) 1 package openstack 2 3 import ( 4 "fmt" 5 "log" 6 "strconv" 7 8 "github.com/hashicorp/terraform/helper/schema" 9 "github.com/rackspace/gophercloud/openstack/networking/v2/extensions/lbaas/monitors" 10 ) 11 12 func resourceLBMonitorV1() *schema.Resource { 13 return &schema.Resource{ 14 Create: resourceLBMonitorV1Create, 15 Read: resourceLBMonitorV1Read, 16 Update: resourceLBMonitorV1Update, 17 Delete: resourceLBMonitorV1Delete, 18 19 Schema: map[string]*schema.Schema{ 20 "region": &schema.Schema{ 21 Type: schema.TypeString, 22 Required: true, 23 ForceNew: true, 24 DefaultFunc: envDefaultFunc("OS_REGION_NAME"), 25 }, 26 "tenant_id": &schema.Schema{ 27 Type: schema.TypeString, 28 Optional: true, 29 ForceNew: true, 30 }, 31 "type": &schema.Schema{ 32 Type: schema.TypeString, 33 Required: true, 34 ForceNew: true, 35 }, 36 "delay": &schema.Schema{ 37 Type: schema.TypeInt, 38 Required: true, 39 ForceNew: false, 40 }, 41 "timeout": &schema.Schema{ 42 Type: schema.TypeInt, 43 Required: true, 44 ForceNew: false, 45 }, 46 "max_retries": &schema.Schema{ 47 Type: schema.TypeInt, 48 Required: true, 49 ForceNew: false, 50 }, 51 "url_path": &schema.Schema{ 52 Type: schema.TypeString, 53 Optional: true, 54 ForceNew: false, 55 }, 56 "http_method": &schema.Schema{ 57 Type: schema.TypeString, 58 Optional: true, 59 ForceNew: false, 60 }, 61 "expected_codes": &schema.Schema{ 62 Type: schema.TypeString, 63 Optional: true, 64 ForceNew: false, 65 }, 66 "admin_state_up": &schema.Schema{ 67 Type: schema.TypeString, 68 Optional: true, 69 ForceNew: false, 70 }, 71 }, 72 } 73 } 74 75 func resourceLBMonitorV1Create(d *schema.ResourceData, meta interface{}) error { 76 config := meta.(*Config) 77 networkingClient, err := config.networkingV2Client(d.Get("region").(string)) 78 if err != nil { 79 return fmt.Errorf("Error creating OpenStack networking client: %s", err) 80 } 81 82 createOpts := monitors.CreateOpts{ 83 TenantID: d.Get("tenant_id").(string), 84 Type: d.Get("type").(string), 85 Delay: d.Get("delay").(int), 86 Timeout: d.Get("timeout").(int), 87 MaxRetries: d.Get("max_retries").(int), 88 URLPath: d.Get("url_path").(string), 89 ExpectedCodes: d.Get("expected_codes").(string), 90 HTTPMethod: d.Get("http_method").(string), 91 } 92 93 asuRaw := d.Get("admin_state_up").(string) 94 if asuRaw != "" { 95 asu, err := strconv.ParseBool(asuRaw) 96 if err != nil { 97 return fmt.Errorf("admin_state_up, if provided, must be either 'true' or 'false'") 98 } 99 createOpts.AdminStateUp = &asu 100 } 101 102 log.Printf("[DEBUG] Create Options: %#v", createOpts) 103 m, err := monitors.Create(networkingClient, createOpts).Extract() 104 if err != nil { 105 return fmt.Errorf("Error creating OpenStack LB Monitor: %s", err) 106 } 107 log.Printf("[INFO] LB Monitor ID: %s", m.ID) 108 109 d.SetId(m.ID) 110 111 return resourceLBMonitorV1Read(d, meta) 112 } 113 114 func resourceLBMonitorV1Read(d *schema.ResourceData, meta interface{}) error { 115 config := meta.(*Config) 116 networkingClient, err := config.networkingV2Client(d.Get("region").(string)) 117 if err != nil { 118 return fmt.Errorf("Error creating OpenStack networking client: %s", err) 119 } 120 121 m, err := monitors.Get(networkingClient, d.Id()).Extract() 122 if err != nil { 123 return CheckDeleted(d, err, "LB monitor") 124 } 125 126 log.Printf("[DEBUG] Retreived OpenStack LB Monitor %s: %+v", d.Id(), m) 127 128 d.Set("type", m.Type) 129 d.Set("delay", m.Delay) 130 d.Set("timeout", m.Timeout) 131 d.Set("max_retries", m.MaxRetries) 132 d.Set("tenant_id", m.TenantID) 133 d.Set("url_path", m.URLPath) 134 d.Set("http_method", m.HTTPMethod) 135 d.Set("expected_codes", m.ExpectedCodes) 136 d.Set("admin_state_up", strconv.FormatBool(m.AdminStateUp)) 137 138 return nil 139 } 140 141 func resourceLBMonitorV1Update(d *schema.ResourceData, meta interface{}) error { 142 config := meta.(*Config) 143 networkingClient, err := config.networkingV2Client(d.Get("region").(string)) 144 if err != nil { 145 return fmt.Errorf("Error creating OpenStack networking client: %s", err) 146 } 147 148 updateOpts := monitors.UpdateOpts{ 149 Delay: d.Get("delay").(int), 150 Timeout: d.Get("timeout").(int), 151 MaxRetries: d.Get("max_retries").(int), 152 URLPath: d.Get("url_path").(string), 153 HTTPMethod: d.Get("http_method").(string), 154 ExpectedCodes: d.Get("expected_codes").(string), 155 } 156 157 if d.HasChange("admin_state_up") { 158 asuRaw := d.Get("admin_state_up").(string) 159 if asuRaw != "" { 160 asu, err := strconv.ParseBool(asuRaw) 161 if err != nil { 162 return fmt.Errorf("admin_state_up, if provided, must be either 'true' or 'false'") 163 } 164 updateOpts.AdminStateUp = &asu 165 } 166 } 167 168 log.Printf("[DEBUG] Updating OpenStack LB Monitor %s with options: %+v", d.Id(), updateOpts) 169 170 _, err = monitors.Update(networkingClient, d.Id(), updateOpts).Extract() 171 if err != nil { 172 return fmt.Errorf("Error updating OpenStack LB Monitor: %s", err) 173 } 174 175 return resourceLBMonitorV1Read(d, meta) 176 } 177 178 func resourceLBMonitorV1Delete(d *schema.ResourceData, meta interface{}) error { 179 config := meta.(*Config) 180 networkingClient, err := config.networkingV2Client(d.Get("region").(string)) 181 if err != nil { 182 return fmt.Errorf("Error creating OpenStack networking client: %s", err) 183 } 184 185 err = monitors.Delete(networkingClient, d.Id()).ExtractErr() 186 if err != nil { 187 return fmt.Errorf("Error deleting OpenStack LB Monitor: %s", err) 188 } 189 190 d.SetId("") 191 return nil 192 }