-
Notifications
You must be signed in to change notification settings - Fork 44
Expand file tree
/
Copy pathHostOperations.go
More file actions
107 lines (98 loc) · 3.39 KB
/
Copy pathHostOperations.go
File metadata and controls
107 lines (98 loc) · 3.39 KB
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
//
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
//
package main
import (
"encoding/json"
"log"
"github.com/apache/cloudstack-go/v2/cloudstack"
)
func PerformHostOperations() {
cs := cloudstack.NewAsyncClient(ApiUrl, ApiKey, SecretKey, false)
zone, _, err := cs.Zone.GetZoneByID(ZoneId)
if err != nil {
log.Fatalf("Failed to find zone: %v", err)
return
}
if zone.Resourcedetails["resourceHAEnabled"] == "true" {
log.Printf("High Availability enabled for zone: %s. Attempting to disable it", ZoneId)
zoneHAParams := &cloudstack.DisableHAForZoneParams{}
zoneHAParams.SetZoneid(zone.Id)
resp, err := cs.Zone.DisableHAForZone(zoneHAParams)
if err != nil {
log.Fatalf("Failed to disable HA for zone due to: %v", err)
return
}
log.Printf("HA for zone - disabled? : %v", resp.Success)
}
if zone.Resourcedetails["resourceHAEnabled"] == "false" {
log.Printf("High Availability disabled for zone: %s. Attempting to enable it", ZoneId)
zoneHAParams := &cloudstack.EnableHAForZoneParams{}
zoneHAParams.SetZoneid(zone.Id)
resp, err := cs.Zone.EnableHAForZone(zoneHAParams)
if err != nil {
log.Fatalf("Failed to enable HA for zone due to: %v", err)
return
}
log.Printf("HA for zone - enabled? : %v", resp.Success)
}
p := &cloudstack.ListHostsParams{}
p.SetZoneid(ZoneId)
hosts, err := cs.Host.ListHosts(p)
if err != nil {
log.Fatalf("Failed to list all hosts in zone: %s due to: %v", zone.Name, err)
return
}
for _, host := range hosts.Hosts {
log.Printf("Host - Name: %s \t Host - HA Response: %v", host.Name, host.Hostha)
}
host := hosts.Hosts[0]
log.Println(host.Resourcestate)
if host.Resourcestate == "Enabled" {
log.Printf("Prepare host %s for maintenance", host.Name)
prepHostMnt := &cloudstack.PrepareHostForMaintenanceParams{}
prepHostMnt.SetId(host.Id)
resp, err := cs.Host.PrepareHostForMaintenance(prepHostMnt)
if err != nil {
log.Fatalf("Failed to prepare host %s for maintenance due to: %v", host.Name, err)
return
}
b, err := json.MarshalIndent(resp, "", " ")
if err != nil {
log.Printf("%v", err)
return
}
log.Printf("Host response : %v", string(b))
}
if host.Resourcestate == "Maintenance" {
log.Printf("Cancelinng host for maintenance on host: %s", host.Name)
cancelHostMnt := &cloudstack.CancelHostMaintenanceParams{}
cancelHostMnt.SetId(host.Id)
resp, err := cs.Host.CancelHostMaintenance(cancelHostMnt)
if err != nil {
log.Fatalf("Failed to cancel host for maintenance on %s due to: %v", host.Name, err)
return
}
b, err := json.MarshalIndent(resp, "", " ")
if err != nil {
log.Printf("%v", err)
return
}
log.Printf("Host response : %v", string(b))
}
}