Return both member and config in `/v1/agent/self`

This commit is contained in:
William Tisäter 2014-05-28 00:09:28 +02:00
parent a028c3ae93
commit ead134c890
3 changed files with 88 additions and 32 deletions

View File

@ -3,12 +3,21 @@ package agent
import (
"fmt"
"github.com/hashicorp/consul/consul/structs"
"github.com/hashicorp/serf/serf"
"net/http"
"strings"
)
type AgentSelf struct {
Config *Config
Member serf.Member
}
func (s *HTTPServer) AgentSelf(resp http.ResponseWriter, req *http.Request) (interface{}, error) {
return s.agent.LocalMember(), nil
return AgentSelf{
Config: s.agent.config,
Member: s.agent.LocalMember(),
}, nil
}
func (s *HTTPServer) AgentServices(resp http.ResponseWriter, req *http.Request) (interface{}, error) {

View File

@ -82,8 +82,12 @@ func TestHTTPAgentSelf(t *testing.T) {
t.Fatalf("Err: %v", err)
}
val := obj.(serf.Member)
if int(val.Port) != srv.agent.config.Ports.SerfLan {
val := obj.(AgentSelf)
if int(val.Member.Port) != srv.agent.config.Ports.SerfLan {
t.Fatalf("incorrect port: %v", obj)
}
if int(val.Config.Ports.SerfLan) != srv.agent.config.Ports.SerfLan {
t.Fatalf("incorrect port: %v", obj)
}
}

View File

@ -200,10 +200,10 @@ msgpack RPC protocol.
The following endpoints are supported:
* /v1/agent/self : Returns the local node configuration
* /v1/agent/checks : Returns the checks the local agent is managing
* /v1/agent/services : Returns the services local agent is managing
* /v1/agent/members : Returns the members as seen by the local serf agent
* /v1/agent/self : Returns the local node configuration
* /v1/agent/join/\<address\> : Trigger local agent to join a node
* /v1/agent/force-leave/\<node\>: Force remove node
* /v1/agent/check/register : Registers a new local check
@ -214,34 +214,6 @@ The following endpoints are supported:
* /v1/agent/service/register : Registers a new local service
* /v1/agent/service/deregister/\<serviceID\> : Deregister a local service
### /v1/agent/self
This endpoint is used to return configuration of the local agent.
It returns a JSON body like this:
{
"Name": "foobar",
"Addr": "10.1.10.12",
"Port": 8301,
"Tags": {
"bootstrap": "1",
"dc": "dc1",
"port": "8300",
"role": "consul",
"vsn": "1",
"vsn_max": "1",
"vsn_min":"1"
},
"Status": 1,
"ProtocolMin": 1,
"ProtocolMax": 2,
"ProtocolCur": 2,
"DelegateMin": 2,
"DelegateMax": 4,
"DelegateCur": 4
}
### /v1/agent/checks
This endpoint is used to return the all the checks that are registered with
@ -319,6 +291,77 @@ This endpoint returns a JSON body like:
}
]
### /v1/agent/self
This endpoint is used to return configuration of the local agent and member information.
It returns a JSON body like this:
{
"Config": {
"Bootstrap": true,
"Server": true,
"Datacenter": "dc1",
"DataDir": "/tmp/consul",
"DNSRecursor": "",
"Domain": "consul.",
"EncryptKey": "",
"LogLevel": "INFO",
"NodeName": "foobar",
"ClientAddr": "127.0.0.1",
"BindAddr": "0.0.0.0",
"AdvertiseAddr": "10.1.10.12",
"Ports": {
"DNS": 8600,
"HTTP": 8500,
"RPC": 8400,
"SerfLan": 8301,
"SerfWan": 8302,
"Server": 8300
},
"LeaveOnTerm": false,
"SkipLeaveOnInt": false,
"StatsiteAddr": "",
"Protocol": 1,
"EnableDebug": false,
"VerifyIncoming": false,
"VerifyOutgoing": false,
"CAFile": "",
"CertFile": "",
"KeyFile": "",
"StartJoin": [],
"UiDir": "",
"PidFile": "",
"EnableSyslog": false,
"RejoinAfterLeave": false,
"AEInterval": 60000000000,
"Checks": null,
"Services": null,
"ConsulConfig": null
},
"Member": {
"Name": "foobar",
"Addr": "10.1.10.12",
"Port": 8301,
"Tags": {
"bootstrap": "1",
"dc": "dc1",
"port": "8300",
"role": "consul",
"vsn": "1",
"vsn_max": "1",
"vsn_min": "1"
},
"Status": 1,
"ProtocolMin": 1,
"ProtocolMax": 2,
"ProtocolCur": 2,
"DelegateMin": 2,
"DelegateMax": 4,
"DelegateCur": 4
}
}
### /v1/agent/join/\<address\>
This endpoint is hit with a GET and is used to instruct the agent to attempt to