This repository has been archived by the owner on Aug 18, 2020. It is now read-only.
forked from F5Networks/terraform-provider-bigip
-
Notifications
You must be signed in to change notification settings - Fork 9
/
resource_bigip_cm_device.go
142 lines (114 loc) · 3.47 KB
/
resource_bigip_cm_device.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
package bigip
import (
"fmt"
"log"
"github.com/f5devcentral/go-bigip"
"github.com/hashicorp/terraform/helper/schema"
)
func resourceBigipCmDevice() *schema.Resource {
return &schema.Resource{
Create: resourceBigipCmDeviceCreate,
Update: resourceBigipCmDeviceUpdate,
Read: resourceBigipCmDeviceRead,
Delete: resourceBigipCmDeviceDelete,
Importer: &schema.ResourceImporter{
State: schema.ImportStatePassthrough,
},
Schema: map[string]*schema.Schema{
"configsync_ip": {
Type: schema.TypeString,
Required: true,
Description: "IP address used for config sync",
},
"name": {
Type: schema.TypeString,
Required: true,
Description: "Address of the Device which needs to be Deviceensed",
},
"mirror_ip": {
Type: schema.TypeString,
Optional: true,
Description: "IP address used for state mirroring",
},
"mirror_secondary_ip": {
Type: schema.TypeString,
Optional: true,
Description: "Secondary IP address used for state mirroring",
},
},
}
}
func resourceBigipCmDeviceCreate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*bigip.BigIP)
configsyncIp := d.Get("configsync_ip").(string)
name := d.Get("name").(string)
mirrorIp := d.Get("mirror_ip").(string)
mirrorSecondaryIp := d.Get("mirror_secondary_ip").(string)
log.Println("[INFO] Creating Device ")
err := client.CreateDevice(
name,
configsyncIp,
mirrorIp,
mirrorSecondaryIp,
)
if err != nil {
log.Printf("[ERROR] Unable to Create Device %s %v ", name, err)
return err
}
d.SetId(name)
return resourceBigipCmDeviceRead(d, meta)
}
func resourceBigipCmDeviceUpdate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*bigip.BigIP)
name := d.Id()
log.Println("[INFO] Updating Device " + name)
r := &bigip.Device{
Name: name,
ConfigsyncIp: d.Get("configsync_ip").(string),
MirrorIp: d.Get("mirror_ip").(string),
MirrorSecondaryIp: d.Get("mirror_secondary_ip").(string),
}
err := client.ModifyDevice(r)
if err != nil {
log.Printf("[ERROR] Unable to Modidy Device (%s) (%v) ", name, err)
return err
}
return resourceBigipCmDeviceRead(d, meta)
}
func resourceBigipCmDeviceRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*bigip.BigIP)
name := d.Id()
log.Println("[INFO] Reading Device " + name)
members, err := client.Devices(name)
if err != nil {
log.Printf("[ERROR] Unable to retrive Device (%s) (%v) ", name, err)
return err
}
if members == nil {
log.Printf("[WARN] Device (%s) not found, removing from state", d.Id())
d.SetId("")
return nil
}
d.Set("name", members.Name)
if err := d.Set("mirror_ip", members.MirrorIp); err != nil {
return fmt.Errorf("[DEBUG] Error saving mirror_ip to state for Device (%s): %s", d.Id(), err)
}
if err := d.Set("configsync_ip", members.ConfigsyncIp); err != nil {
return fmt.Errorf("[DEBUG] Error saving configsync_ip to state for Device (%s): %s", d.Id(), err)
}
if err := d.Set("mirror_secondary_ip", members.MirrorSecondaryIp); err != nil {
return fmt.Errorf("[DEBUG] Error saving mirror_secondary_ip to state for Device (%s): %s", d.Id(), err)
}
return nil
}
func resourceBigipCmDeviceDelete(d *schema.ResourceData, meta interface{}) error {
client := meta.(*bigip.BigIP)
name := d.Id()
err := client.DeleteDevice(name)
if err != nil {
log.Printf("[ERROR] Unable to Delete Device (%s) (%v) ", name, err)
return err
}
d.SetId("")
return nil
}