-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnode.go
86 lines (75 loc) · 2.15 KB
/
node.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
package jenkins
import (
"fmt"
"net/http"
"net/url"
"strings"
)
type Nodes struct {
*Item
}
var nodeNameMap = map[string]string{"master": "(master)", "Built-In Node": "(built-in)"}
func (ns *Nodes) GetBuilds() ([]*Build, error) {
compSet := &ComputerSet{}
var builds []*Build
tree := "computer[executors[currentExecutable[url]],oneOffExecutors[currentExecutable[url]]]"
if err := ns.ApiJson(compSet, &ApiJsonOpts{Tree: tree, Depth: 2}); err != nil {
return nil, err
}
buildConf := map[string]string{}
parseBuild := func(executors []*Executor) {
for _, e := range executors {
if e.CurrentExecutable == nil {
continue
}
if strings.HasSuffix(e.CurrentExecutable.Class, "PlaceholderExecutable") {
e.CurrentExecutable.Class = "org.jenkinsci.plugins.workflow.job.WorkflowRun"
}
buildConf[e.CurrentExecutable.URL] = e.CurrentExecutable.Class
}
}
for _, c := range compSet.Computers {
parseBuild(c.Executors)
parseBuild(c.OneOffExecutors)
}
for k, v := range buildConf {
builds = append(builds, NewBuild(k, v, ns.jenkins))
}
return builds, nil
}
func (ns *Nodes) Get(name string) (*Computer, error) {
compSet := &ComputerSet{}
if err := ns.ApiJson(compSet, nil); err != nil {
return nil, err
}
for _, c := range compSet.Computers {
if name == c.DisplayName {
return c, nil
}
}
return nil, fmt.Errorf("no such node [%s]", name)
}
func (ns *Nodes) List() ([]*Computer, error) {
compSet := &ComputerSet{}
if err := ns.ApiJson(compSet, nil); err != nil {
return nil, err
}
return compSet.Computers, nil
}
func (ns *Nodes) covertName(name string) string {
if displayName, ok := nodeNameMap[name]; ok {
return displayName
}
return name
}
func (ns *Nodes) Enable(name string) (*http.Response, error) {
return ns.Request("POST", ns.covertName(name)+"/toggleOffline?offlineMessage=", nil)
}
func (ns *Nodes) Disable(name, msg string) (*http.Response, error) {
v := url.Values{}
v.Add("offlineMessage", msg)
return ns.Request("POST", ns.covertName(name)+"/toggleOffline?"+v.Encode(), nil)
}
func (ns *Nodes) Delete(name string) (*http.Response, error) {
return ns.Request("POST", ns.covertName(name)+"/doDelete", nil)
}