Update the util/kubernetes client to retrieve logs

This commit is contained in:
Jake Sanders
2019-12-17 16:09:51 +00:00
parent 0415ead504
commit 53ca742c66
7 changed files with 85 additions and 9 deletions

View File

@@ -111,6 +111,17 @@ var tests = []testcase{
URI: "/apis/apps/v1/namespaces/default/deployments/baz",
Header: map[string]string{"foo": "bar"},
},
testcase{
ReqFn: func(opts *Options) *Request {
return NewRequest(opts).
Get().
Resource("pod").
SubResource("log").
Name("foolog")
},
Method: "GET",
URI: "/api/v1/namespaces/default/pods/foolog/log",
},
}
var wrappedHandler = func(test *testcase, t *testing.T) http.HandlerFunc {

View File

@@ -23,6 +23,7 @@ type Request struct {
resource string
resourceName *string
subResource *string
body io.Reader
err error
@@ -79,6 +80,13 @@ func (r *Request) Resource(s string) *Request {
return r
}
// SubResource sets a subresource on a resource,
// e.g. pods/log for pod logs
func (r *Request) SubResource(s string) *Request {
r.subResource = &s
return r
}
// Name is for targeting a specific resource by id
func (r *Request) Name(s string) *Request {
r.resourceName = &s
@@ -154,6 +162,9 @@ func (r *Request) request() (*http.Request, error) {
// append resourceName if it is present
if r.resourceName != nil {
url += *r.resourceName
if r.subResource != nil {
url += "/" + *r.subResource
}
}
// append any query params
@@ -202,6 +213,20 @@ func (r *Request) Do() *Response {
return newResponse(res, err)
}
// Raw performs a Raw HTTP request to the Kubernetes API
func (r *Request) Raw() (*http.Response, error) {
req, err := r.request()
if err != nil {
return nil, err
}
res, err := r.client.Do(req)
if err != nil {
return nil, err
}
return res, nil
}
// Options ...
type Options struct {
Host string

View File

@@ -4,6 +4,7 @@ import (
"bytes"
"crypto/tls"
"errors"
"io"
"io/ioutil"
"net/http"
"os"
@@ -116,6 +117,21 @@ func (c *client) Get(r *Resource, labels map[string]string) error {
Into(r.Value)
}
// Logs returns logs for a pod
func (c *client) Logs(podName string) (io.ReadCloser, error) {
req := api.NewRequest(c.opts).
Get().
Resource("pod").
SubResource("log").
Name(podName)
resp, err := req.Raw()
if err != nil {
return nil, err
}
return resp.Body, nil
}
// Update updates API object
func (c *client) Update(r *Resource) error {
req := api.NewRequest(c.opts).