Backport of nsd: retain query params in HTTP health checks into release/1.6.x (#18003)
This pull request was automerged via backport-assistant
This commit is contained in:
parent
642cad50d8
commit
b7689e87ec
3
.changelog/17936.txt
Normal file
3
.changelog/17936.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
```release-note:bug
|
||||||
|
services: Fixed a bug that prevented passing query parameters in Nomad native service discovery HTTP health check paths
|
||||||
|
```
|
|
@ -155,11 +155,18 @@ func (c *checker) checkHTTP(ctx context.Context, qc *QueryContext, q *Query) *st
|
||||||
return qr
|
return qr
|
||||||
}
|
}
|
||||||
|
|
||||||
u := (&url.URL{
|
relative, err := url.Parse(q.Path)
|
||||||
|
if err != nil {
|
||||||
|
qr.Output = err.Error()
|
||||||
|
qr.Status = structs.CheckFailure
|
||||||
|
return qr
|
||||||
|
}
|
||||||
|
|
||||||
|
base := url.URL{
|
||||||
Scheme: q.Protocol,
|
Scheme: q.Protocol,
|
||||||
Host: addr,
|
Host: addr,
|
||||||
Path: q.Path,
|
}
|
||||||
}).String()
|
u := base.ResolveReference(relative).String()
|
||||||
|
|
||||||
request, err := http.NewRequest(q.Method, u, nil)
|
request, err := http.NewRequest(q.Method, u, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -39,6 +39,19 @@ func TestChecker_Do_HTTP(t *testing.T) {
|
||||||
|
|
||||||
// create an http server with various responses
|
// create an http server with various responses
|
||||||
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
// handle query param requests with string match because we want to
|
||||||
|
// test the path is set correctly instead of with escaped query params.
|
||||||
|
if strings.Contains(r.URL.Path, "query-param") {
|
||||||
|
if r.URL.RawQuery == "" {
|
||||||
|
w.WriteHeader(400)
|
||||||
|
_, _ = io.WriteString(w, "400 bad request")
|
||||||
|
} else {
|
||||||
|
w.WriteHeader(200)
|
||||||
|
_, _ = io.WriteString(w, "200 ok")
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
switch r.URL.Path {
|
switch r.URL.Path {
|
||||||
case "/fail":
|
case "/fail":
|
||||||
w.WriteHeader(500)
|
w.WriteHeader(500)
|
||||||
|
@ -182,6 +195,16 @@ func TestChecker_Do_HTTP(t *testing.T) {
|
||||||
http.StatusCreated,
|
http.StatusCreated,
|
||||||
truncate,
|
truncate,
|
||||||
),
|
),
|
||||||
|
}, {
|
||||||
|
name: "query param",
|
||||||
|
qc: makeQueryContext(),
|
||||||
|
q: makeQuery(structs.Healthiness, "query-param?a=b"),
|
||||||
|
expResult: makeExpResult(
|
||||||
|
structs.Healthiness,
|
||||||
|
structs.CheckSuccess,
|
||||||
|
http.StatusOK,
|
||||||
|
"nomad: http ok",
|
||||||
|
),
|
||||||
}}
|
}}
|
||||||
|
|
||||||
for _, tc := range cases {
|
for _, tc := range cases {
|
||||||
|
|
Loading…
Reference in a new issue