Skip to content

Commit c1aebfc

Browse files
author
Aaron Schlesinger
committed
fix(boot.go,pkg/healthsrv): add kubernetes API checks in the healthz endpoint
1 parent 9214a24 commit c1aebfc

4 files changed

Lines changed: 42 additions & 8 deletions

File tree

boot.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,11 @@ import (
1212
"github.com/deis/builder/pkg/gitreceive/storage"
1313
"github.com/deis/builder/pkg/healthsrv"
1414
"github.com/deis/builder/pkg/sshd"
15+
<<<<<<< 032d8fd56928af3492a8449e226d36d5324b8d2c
1516
pkglog "github.com/deis/pkg/log"
17+
=======
18+
kcl "k8s.io/kubernetes/pkg/client/unversioned"
19+
>>>>>>> fix(boot.go,pkg/healthsrv): add kubernetes API checks in the healthz endpoint
1620
)
1721

1822
const (
@@ -49,10 +53,15 @@ func main() {
4953
pkglog.Err("getting s3 client [%s]", err)
5054
os.Exit(1)
5155
}
56+
kubeClient, err := kcl.NewInCluster()
57+
if err != nil {
58+
pkglog.Err("getting kubernetes client [%s]", err)
59+
os.Exit(1)
60+
}
5261
pkglog.Info("starting health check server on port %d", cnf.HealthSrvPort)
5362
healthSrvCh := make(chan error)
5463
go func() {
55-
if err := healthsrv.Start(cnf.HealthSrvPort, s3Client); err != nil {
64+
if err := healthsrv.Start(cnf.HealthSrvPort, kubeClient.Namespaces(), s3Client); err != nil {
5665
healthSrvCh <- err
5766
}
5867
}()

pkg/healthsrv/healthz_handler.go

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import (
88

99
s3 "github.com/aws/aws-sdk-go/service/s3"
1010
"github.com/deis/builder/pkg/gitreceive/log"
11+
"k8s.io/kubernetes/pkg/fields"
12+
"k8s.io/kubernetes/pkg/labels"
1113
)
1214

1315
type healthZRespBucket struct {
@@ -23,28 +25,40 @@ func convertBucket(b *s3.Bucket) healthZRespBucket {
2325
}
2426

2527
type healthZResp struct {
26-
Buckets []healthZRespBucket `json:"buckets"`
28+
Namespaces []string `json:"k8s_namespaces"`
29+
S3Buckets []healthZRespBucket `json:"s3_buckets"`
2730
}
2831

29-
func healthZHandler(s3Client *s3.S3) http.Handler {
32+
func healthZHandler(nsLister NamespaceLister, s3Client *s3.S3) http.Handler {
3033
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
3134
lbOut, err := s3Client.ListBuckets(&s3.ListBucketsInput{})
3235
if err != nil {
3336
str := fmt.Sprintf("Error listing buckets (%s)", err)
34-
log.Info(str)
37+
log.Err(str)
3538
http.Error(w, str, http.StatusInternalServerError)
3639
return
3740
}
3841
var rsp healthZResp
3942
for _, buck := range lbOut.Buckets {
40-
rsp.Buckets = append(rsp.Buckets, convertBucket(buck))
43+
rsp.S3Buckets = append(rsp.S3Buckets, convertBucket(buck))
4144
}
45+
46+
nsList, err := nsLister.List(labels.Everything(), fields.Everything())
47+
if err != nil {
48+
str := fmt.Sprintf("Error listing buckets (%s)", err)
49+
log.Err(str)
50+
http.Error(w, str, http.StatusInternalServerError)
51+
return
52+
}
53+
for _, ns := range nsList.Items {
54+
rsp.Namespaces = append(rsp.Namespaces, ns.Name)
55+
}
56+
4257
if err := json.NewEncoder(w).Encode(rsp); err != nil {
4358
str := fmt.Sprintf("Error encoding JSON (%s)", err)
4459
http.Error(w, str, http.StatusInternalServerError)
4560
return
4661
}
47-
// TODO: check k8s API
4862
// TODO: check server is running
4963
})
5064
}

pkg/healthsrv/namespace_lister.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package healthsrv
2+
3+
import (
4+
"k8s.io/kubernetes/pkg/api"
5+
"k8s.io/kubernetes/pkg/fields"
6+
"k8s.io/kubernetes/pkg/labels"
7+
)
8+
9+
type NamespaceLister interface {
10+
List(labels.Selector, fields.Selector) (*api.NamespaceList, error)
11+
}

pkg/healthsrv/server.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ const (
1313
)
1414

1515
// Start starts the healthcheck server on $host:$port and blocks. It only returns if the server fails, with the indicative error
16-
func Start(port int, s3Client *s3.S3) error {
16+
func Start(port int, nsLister NamespaceLister, s3Client *s3.S3) error {
1717
mux := http.NewServeMux()
18-
mux.Handle("/healthz", healthZHandler(s3Client))
18+
mux.Handle("/healthz", healthZHandler(nsLister, s3Client))
1919

2020
hostStr := fmt.Sprintf(":%d", port)
2121
return http.ListenAndServe(hostStr, mux)

0 commit comments

Comments
 (0)