mirror of https://github.com/status-im/consul.git
Merge pull request #433 from hashicorp/f-multi-checks
agent: add support for multiple checks and config mixing
This commit is contained in:
commit
1756d14e01
|
@ -403,16 +403,32 @@ func DecodeConfig(r io.Reader) (*Config, error) {
|
|||
}
|
||||
result.Services = append(result.Services, service)
|
||||
}
|
||||
return &result, nil
|
||||
}
|
||||
} else if sub, ok := obj["service"]; ok {
|
||||
}
|
||||
if sub, ok := obj["service"]; ok {
|
||||
service, err := DecodeServiceDefinition(sub)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result.Services = append(result.Services, service)
|
||||
return &result, err
|
||||
} else if sub, ok := obj["check"]; ok {
|
||||
check, err := DecodeCheckDefinition(sub)
|
||||
}
|
||||
if sub, ok := obj["checks"]; ok {
|
||||
if list, ok := sub.([]interface{}); ok {
|
||||
for _, chk := range list {
|
||||
check, err := DecodeCheckDefinition(chk)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result.Checks = append(result.Checks, check)
|
||||
}
|
||||
}
|
||||
}
|
||||
if sub, ok := obj["check"]; ok {
|
||||
check, err := DecodeCheckDefinition(sub)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result.Checks = append(result.Checks, check)
|
||||
return &result, err
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -591,6 +591,120 @@ func TestDecodeConfig_Services(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestDecodeConfig_Checks(t *testing.T) {
|
||||
input := `{
|
||||
"checks": [
|
||||
{
|
||||
"id": "chk1",
|
||||
"name": "mem",
|
||||
"script": "/bin/check_mem",
|
||||
"interval": "5s"
|
||||
},
|
||||
{
|
||||
"id": "chk2",
|
||||
"name": "cpu",
|
||||
"script": "/bin/check_cpu",
|
||||
"interval": "10s"
|
||||
}
|
||||
]
|
||||
}`
|
||||
|
||||
config, err := DecodeConfig(bytes.NewReader([]byte(input)))
|
||||
if err != nil {
|
||||
t.Fatalf("err: %s", err)
|
||||
}
|
||||
|
||||
expected := &Config{
|
||||
Checks: []*CheckDefinition{
|
||||
&CheckDefinition{
|
||||
ID: "chk1",
|
||||
Name: "mem",
|
||||
CheckType: CheckType{
|
||||
Script: "/bin/check_mem",
|
||||
Interval: 5 * time.Second,
|
||||
},
|
||||
},
|
||||
&CheckDefinition{
|
||||
ID: "chk2",
|
||||
Name: "cpu",
|
||||
CheckType: CheckType{
|
||||
Script: "/bin/check_cpu",
|
||||
Interval: 10 * time.Second,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
if !reflect.DeepEqual(config, expected) {
|
||||
t.Fatalf("bad: %#v", config)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDecodeConfig_Multiples(t *testing.T) {
|
||||
input := `{
|
||||
"services": [
|
||||
{
|
||||
"id": "red0",
|
||||
"name": "redis",
|
||||
"tags": [
|
||||
"master"
|
||||
],
|
||||
"port": 6000,
|
||||
"check": {
|
||||
"script": "/bin/check_redis -p 6000",
|
||||
"interval": "5s",
|
||||
"ttl": "20s"
|
||||
}
|
||||
}
|
||||
],
|
||||
"checks": [
|
||||
{
|
||||
"id": "chk1",
|
||||
"name": "mem",
|
||||
"script": "/bin/check_mem",
|
||||
"interval": "10s"
|
||||
}
|
||||
]
|
||||
}`
|
||||
|
||||
config, err := DecodeConfig(bytes.NewReader([]byte(input)))
|
||||
if err != nil {
|
||||
t.Fatalf("err: %s", err)
|
||||
}
|
||||
|
||||
expected := &Config{
|
||||
Services: []*ServiceDefinition{
|
||||
&ServiceDefinition{
|
||||
Check: CheckType{
|
||||
Interval: 5 * time.Second,
|
||||
Script: "/bin/check_redis -p 6000",
|
||||
TTL: 20 * time.Second,
|
||||
},
|
||||
ID: "red0",
|
||||
Name: "redis",
|
||||
Tags: []string{
|
||||
"master",
|
||||
},
|
||||
Port: 6000,
|
||||
},
|
||||
},
|
||||
Checks: []*CheckDefinition{
|
||||
&CheckDefinition{
|
||||
ID: "chk1",
|
||||
Name: "mem",
|
||||
CheckType: CheckType{
|
||||
Script: "/bin/check_mem",
|
||||
Interval: 10 * time.Second,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
if !reflect.DeepEqual(config, expected) {
|
||||
t.Fatalf("bad: %#v", config)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDecodeConfig_Service(t *testing.T) {
|
||||
// Basics
|
||||
input := `{"service": {"id": "red1", "name": "redis", "tags": ["master"], "port":8000, "check": {"script": "/bin/check_redis", "interval": "10s", "ttl": "15s" }}}`
|
||||
|
|
|
@ -85,3 +85,28 @@ a specific meaning. Specifically:
|
|||
This is the only convention that Consul depends on. Any output of the script
|
||||
will be captured and stored in the `notes` field so that it can be viewed
|
||||
by human operators.
|
||||
|
||||
## Multiple Check Definitions
|
||||
|
||||
Multiple check definitions can be provided at once using the `checks` (plural)
|
||||
key in your configuration file.
|
||||
|
||||
```javascript
|
||||
{
|
||||
"checks": [
|
||||
{
|
||||
"id": "chk1",
|
||||
"name": "mem",
|
||||
"script": "/bin/check_mem",
|
||||
"interval": "5s"
|
||||
},
|
||||
{
|
||||
"id": "chk2",
|
||||
"name": "cpu",
|
||||
"script": "/bin/check_cpu",
|
||||
"interval": "10s"
|
||||
},
|
||||
...
|
||||
]
|
||||
}
|
||||
```
|
||||
|
|
|
@ -64,7 +64,8 @@ service can be registered dynamically using the [HTTP API](/docs/agent/http.html
|
|||
|
||||
## Multiple Service Definitions
|
||||
|
||||
Multiple services definitions can be provided at once. Single and mutiple service definitions can't be provided together in one configuration file.
|
||||
Multiple services definitions can be provided at once using the `services`
|
||||
(plural) key in your configuration file.
|
||||
|
||||
```javascript
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue