/
vsphere_datacenter.go
99 lines (82 loc) · 2.08 KB
/
vsphere_datacenter.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
package resource
import "github.com/vmware/govmomi/find"
// Datacenter type is a resource which manages datacenters in a
// VMware vSphere environment.
//
// Example:
// dc = vsphere.datacenter.new("my-datacenter")
// dc.endpoint = "https://vc01.example.org/sdk"
// dc.username = "root"
// dc.password = "myp4ssw0rd"
// dc.insecure = true
// dc.state = "present"
// dc.path = "/SomePath"
type Datacenter struct {
BaseVSphere
}
// NewDatacenter creates a new resource for managing datacenters in a
// VMware vSphere environment.
func NewDatacenter(name string) (Resource, error) {
d := &Datacenter{
BaseVSphere: BaseVSphere{
Base: Base{
Name: name,
Type: "datacenter",
State: "present",
Require: make([]string, 0),
PresentStatesList: []string{"present"},
AbsentStatesList: []string{"absent"},
Concurrent: true,
Subscribe: make(TriggerMap),
},
Username: "",
Password: "",
Endpoint: "",
Insecure: false,
Path: "/",
},
}
return d, nil
}
// Evaluate evaluates the state of the datacenter.
func (d *Datacenter) Evaluate() (State, error) {
state := State{
Current: "unknown",
Want: d.State,
}
_, err := d.finder.Datacenter(d.ctx, d.Name)
if err != nil {
// Datacenter is absent
if _, ok := err.(*find.NotFoundError); ok {
state.Current = "absent"
return state, nil
}
// Something else happened
return state, err
}
state.Current = "present"
return state, nil
}
// Create creates a new datacenter.
func (d *Datacenter) Create() error {
Logf("%s creating datacenter in %s\n", d.ID(), d.Path)
folder, err := d.finder.FolderOrDefault(d.ctx, d.Path)
if err != nil {
return err
}
_, err = folder.CreateDatacenter(d.ctx, d.Name)
return err
}
// Delete removes the datacenter.
func (d *Datacenter) Delete() error {
Logf("%s removing datacenter from %s\n", d.ID(), d.Path)
dc, err := d.finder.Datacenter(d.ctx, d.Name)
if err != nil {
return err
}
task, err := dc.Destroy(d.ctx)
if err != nil {
return err
}
return task.Wait(d.ctx)
}