Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
小 白蛋
Nomad
Commits
fa2cbb6f
Commit
fa2cbb6f
authored
7 years ago
by
Diptanu Choudhury
Browse files
Options
Download
Email Patches
Plain Diff
Added the purge API on node endpoints
parent
9404437c
Branches unavailable
v1.4.3
v1.4.2
v1.4.1
v1.4.0
v1.4.0-rc.1
v1.4.0-beta.1
v1.3.8
v1.3.7
v1.3.6
v1.3.5
v1.3.4
v1.3.3
v1.3.2
v1.3.1
v1.3.0
v1.3.0-rc.1
v1.3.0-beta.1
v1.2.15
v1.2.14
v1.2.13
v1.2.12
v1.2.11
v1.2.10
v1.2.9
v1.2.8
v1.2.7
v1.2.6
v1.2.5
v1.2.4
v1.2.3
v1.2.2
v1.2.1
v1.2.0
v1.2.0-rc1
v1.2.0-beta1
v1.1.18
v1.1.17
v1.1.16
v1.1.15
v1.1.14
v1.1.13
v1.1.12
v1.1.11
v1.1.10
v1.1.9
v1.1.8
v1.1.7
v1.1.6
v1.1.5
v1.1.4
v1.1.3
v1.1.2
v1.1.1
v1.1.0
v1.1.0-rc1
v1.1.0-beta1
v1.0.18
v1.0.17
v1.0.16
v1.0.15
v1.0.14
v1.0.13
v1.0.12
v1.0.11
v1.0.10
v1.0.9
v1.0.8
v1.0.7
v1.0.6
v1.0.5
v1.0.4
v1.0.3
v1.0.2
v1.0.1
v1.0.0
v1.0.0-rc1
v1.0.0-beta3
v1.0.0-beta2
v0.12.12
v0.12.11
v0.12.10
v0.12.9
v0.12.8
v0.12.7
v0.12.6
v0.12.5
v0.12.4
v0.12.4-rc1
v0.12.3
v0.12.2
v0.12.1
v0.12.0
v0.12.0-rc1
v0.12.0-beta2
v0.12.0-beta1
v0.11.8
v0.11.7
v0.11.6
v0.11.5
v0.11.4
v0.11.3
v0.11.2
v0.11.1
v0.11.0
v0.11.0-rc1
v0.11.0-beta2
v0.11.0-beta1
v0.10.9
v0.10.8
v0.10.7
v0.10.6
v0.10.5
v0.10.4
v0.10.4-rc1
v0.10.3
v0.10.2
v0.10.2-rc1
v0.10.1
v0.10.0
v0.10.0-rc1
v0.10.0-connect1
v0.10.0-beta1
v0.9.7
v0.9.6
v0.9.5
v0.9.4
v0.9.4-rc1
v0.9.3
v0.9.2
v0.9.2-rc1
v0.9.1
v0.9.1-rc1
v0.9.0
v0.9.0-rc2
v0.9.0-rc1
v0.9.0-beta3
v0.9.0-beta2
v0.9.0-beta1
v0.8.7
v0.8.7-rc1
v0.8.6
v0.8.5
v0.8.4
v0.8.4-rc1
v0.8.3
v0.8.2
v0.8.1
v0.8.0
v0.8.0-rc1
v0.7.1
v0.7.1-rc1
v0.7.1-rc1+pro
v0.7.1-rc1+ent
v0.7.0
v0.7.0+pro
v0.7.0+ent
nightly
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
command/agent/node_endpoint.go
+19
-0
command/agent/node_endpoint.go
command/agent/node_endpoint_test.go
+65
-0
command/agent/node_endpoint_test.go
nomad/node_endpoint.go
+14
-1
nomad/node_endpoint.go
with
98 additions
and
1 deletion
+98
-1
command/agent/node_endpoint.go
+
19
-
0
View file @
fa2cbb6f
...
...
@@ -42,6 +42,9 @@ func (s *HTTPServer) NodeSpecificRequest(resp http.ResponseWriter, req *http.Req
case
strings
.
HasSuffix
(
path
,
"/drain"
)
:
nodeName
:=
strings
.
TrimSuffix
(
path
,
"/drain"
)
return
s
.
nodeToggleDrain
(
resp
,
req
,
nodeName
)
case
strings
.
HasSuffix
(
path
,
"/purge"
)
:
nodeName
:=
strings
.
TrimSuffix
(
path
,
"/purge"
)
return
s
.
nodePurge
(
resp
,
req
,
nodeName
)
default
:
return
s
.
nodeQuery
(
resp
,
req
,
path
)
}
...
...
@@ -142,3 +145,19 @@ func (s *HTTPServer) nodeQuery(resp http.ResponseWriter, req *http.Request,
}
return
out
.
Node
,
nil
}
func
(
s
*
HTTPServer
)
nodePurge
(
resp
http
.
ResponseWriter
,
req
*
http
.
Request
,
nodeID
string
)
(
interface
{},
error
)
{
if
req
.
Method
!=
"POST"
{
return
nil
,
CodedError
(
405
,
ErrInvalidMethod
)
}
args
:=
structs
.
NodeDeregisterRequest
{
NodeID
:
nodeID
,
}
s
.
parseWriteRequest
(
req
,
&
args
.
WriteRequest
)
var
out
structs
.
NodeUpdateResponse
if
err
:=
s
.
agent
.
RPC
(
"Node.Deregister"
,
&
args
,
&
out
);
err
!=
nil
{
return
nil
,
err
}
setIndex
(
resp
,
out
.
Index
)
return
out
,
nil
}
This diff is collapsed.
Click to expand it.
command/agent/node_endpoint_test.go
+
65
-
0
View file @
fa2cbb6f
...
...
@@ -276,6 +276,71 @@ func TestHTTP_NodeDrain(t *testing.T) {
})
}
func
TestHTTP_NodePurge
(
t
*
testing
.
T
)
{
t
.
Parallel
()
httpTest
(
t
,
nil
,
func
(
s
*
TestAgent
)
{
// Create the node
node
:=
mock
.
Node
()
args
:=
structs
.
NodeRegisterRequest
{
Node
:
node
,
WriteRequest
:
structs
.
WriteRequest
{
Region
:
"global"
},
}
var
resp
structs
.
NodeUpdateResponse
if
err
:=
s
.
Agent
.
RPC
(
"Node.Register"
,
&
args
,
&
resp
);
err
!=
nil
{
t
.
Fatalf
(
"err: %v"
,
err
)
}
// Add some allocations to the node
state
:=
s
.
Agent
.
server
.
State
()
alloc1
:=
mock
.
Alloc
()
alloc1
.
NodeID
=
node
.
ID
if
err
:=
state
.
UpsertJobSummary
(
999
,
mock
.
JobSummary
(
alloc1
.
JobID
));
err
!=
nil
{
t
.
Fatal
(
err
)
}
err
:=
state
.
UpsertAllocs
(
1000
,
[]
*
structs
.
Allocation
{
alloc1
})
if
err
!=
nil
{
t
.
Fatalf
(
"err: %v"
,
err
)
}
// Make the HTTP request to purge it
req
,
err
:=
http
.
NewRequest
(
"POST"
,
"/v1/node/"
+
node
.
ID
+
"/purge"
,
nil
)
if
err
!=
nil
{
t
.
Fatalf
(
"err: %v"
,
err
)
}
respW
:=
httptest
.
NewRecorder
()
// Make the request
obj
,
err
:=
s
.
Server
.
NodeSpecificRequest
(
respW
,
req
)
if
err
!=
nil
{
t
.
Fatalf
(
"err: %v"
,
err
)
}
// Check for the index
if
respW
.
HeaderMap
.
Get
(
"X-Nomad-Index"
)
==
""
{
t
.
Fatalf
(
"missing index"
)
}
// Check the response
upd
:=
obj
.
(
structs
.
NodeUpdateResponse
)
if
len
(
upd
.
EvalIDs
)
==
0
{
t
.
Fatalf
(
"bad: %v"
,
upd
)
}
// Ensure that the node is not present anymore
args1
:=
structs
.
NodeSpecificRequest
{
NodeID
:
node
.
ID
,
QueryOptions
:
structs
.
QueryOptions
{
Region
:
"global"
},
}
var
resp1
structs
.
SingleNodeResponse
if
err
:=
s
.
Agent
.
RPC
(
"Node.GetNode"
,
&
args1
,
&
resp1
);
err
!=
nil
{
t
.
Fatalf
(
"err: %v"
,
err
)
}
if
resp1
.
Node
!=
nil
{
t
.
Fatalf
(
"node still exists after purging: %#v"
,
resp1
.
Node
)
}
})
}
func
TestHTTP_NodeQuery
(
t
*
testing
.
T
)
{
t
.
Parallel
()
httpTest
(
t
,
nil
,
func
(
s
*
TestAgent
)
{
...
...
This diff is collapsed.
Click to expand it.
nomad/node_endpoint.go
+
14
-
1
View file @
fa2cbb6f
...
...
@@ -213,6 +213,20 @@ func (n *Node) Deregister(args *structs.NodeDeregisterRequest, reply *structs.No
if
args
.
NodeID
==
""
{
return
fmt
.
Errorf
(
"missing node ID for client deregistration"
)
}
// Look for the node
snap
,
err
:=
n
.
srv
.
fsm
.
State
()
.
Snapshot
()
if
err
!=
nil
{
return
err
}
ws
:=
memdb
.
NewWatchSet
()
node
,
err
:=
snap
.
NodeByID
(
ws
,
args
.
NodeID
)
if
err
!=
nil
{
return
err
}
if
node
==
nil
{
return
fmt
.
Errorf
(
"node not found"
)
}
// Commit this update via Raft
_
,
index
,
err
:=
n
.
srv
.
raftApply
(
structs
.
NodeDeregisterRequestType
,
args
)
...
...
@@ -232,7 +246,6 @@ func (n *Node) Deregister(args *structs.NodeDeregisterRequest, reply *structs.No
}
// Determine if there are any Vault accessors on the node
ws
:=
memdb
.
NewWatchSet
()
accessors
,
err
:=
n
.
srv
.
State
()
.
VaultAccessorsByNode
(
ws
,
args
.
NodeID
)
if
err
!=
nil
{
n
.
srv
.
logger
.
Printf
(
"[ERR] nomad.client: looking up accessors for node %q failed: %v"
,
args
.
NodeID
,
err
)
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment
Menu
Projects
Groups
Snippets
Help