| 
									
										
										
										
											2016-06-06 12:49:53 -07:00
										 |  |  | package k8sclient
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import (
 | 
					
						
							| 
									
										
										
										
											2016-07-07 01:40:58 -07:00
										 |  |  | 	"encoding/json"
 | 
					
						
							|  |  |  | 	"net/http"
 | 
					
						
							| 
									
										
										
										
											2016-06-06 12:49:53 -07:00
										 |  |  | )
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-07 01:40:58 -07:00
										 |  |  | // getK8sAPIResponse wraps the http.Get(url) function to provide dependency
 | 
					
						
							|  |  |  | // injection for unit testing.
 | 
					
						
							|  |  |  | var getK8sAPIResponse = func(url string) (resp *http.Response, err error) {
 | 
					
						
							|  |  |  | 	resp, err = http.Get(url)
 | 
					
						
							|  |  |  | 	return resp, err
 | 
					
						
							|  |  |  | }
 | 
					
						
							| 
									
										
										
										
											2016-06-06 12:49:53 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-07 01:40:58 -07:00
										 |  |  | func parseJson(url string, target interface{}) error {
 | 
					
						
							|  |  |  | 	r, err := getK8sAPIResponse(url)
 | 
					
						
							|  |  |  | 	if err != nil {
 | 
					
						
							|  |  |  | 		return err
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 	defer r.Body.Close()
 | 
					
						
							| 
									
										
										
										
											2016-06-06 12:49:53 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-07 01:40:58 -07:00
										 |  |  | 	return json.NewDecoder(r.Body).Decode(target)
 | 
					
						
							| 
									
										
										
										
											2016-06-06 12:49:53 -07:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Kubernetes Resource List
 | 
					
						
							|  |  |  | type ResourceList struct {
 | 
					
						
							| 
									
										
										
										
											2016-07-07 01:40:58 -07:00
										 |  |  | 	Kind         string     `json:"kind"`
 | 
					
						
							|  |  |  | 	GroupVersion string     `json:"groupVersion"`
 | 
					
						
							|  |  |  | 	Resources    []resource `json:"resources"`
 | 
					
						
							| 
									
										
										
										
											2016-06-06 12:49:53 -07:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type resource struct {
 | 
					
						
							| 
									
										
										
										
											2016-07-07 01:40:58 -07:00
										 |  |  | 	Name       string `json:"name"`
 | 
					
						
							|  |  |  | 	Namespaced bool   `json:"namespaced"`
 | 
					
						
							|  |  |  | 	Kind       string `json:"kind"`
 | 
					
						
							| 
									
										
										
										
											2016-06-06 12:49:53 -07:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Kubernetes NamespaceList
 | 
					
						
							|  |  |  | type NamespaceList struct {
 | 
					
						
							| 
									
										
										
										
											2016-07-07 01:40:58 -07:00
										 |  |  | 	Kind       string          `json:"kind"`
 | 
					
						
							|  |  |  | 	APIVersion string          `json:"apiVersion"`
 | 
					
						
							|  |  |  | 	Metadata   apiListMetadata `json:"metadata"`
 | 
					
						
							|  |  |  | 	Items      []nsItems       `json:"items"`
 | 
					
						
							| 
									
										
										
										
											2016-06-06 12:49:53 -07:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type apiListMetadata struct {
 | 
					
						
							| 
									
										
										
										
											2016-07-07 01:40:58 -07:00
										 |  |  | 	SelfLink        string `json:"selfLink"`
 | 
					
						
							|  |  |  | 	ResourceVersion string `json:"resourceVersion"`
 | 
					
						
							| 
									
										
										
										
											2016-06-06 12:49:53 -07:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type nsItems struct {
 | 
					
						
							| 
									
										
										
										
											2016-07-07 01:40:58 -07:00
										 |  |  | 	Metadata nsMetadata `json:"metadata"`
 | 
					
						
							|  |  |  | 	Spec     nsSpec     `json:"spec"`
 | 
					
						
							|  |  |  | 	Status   nsStatus   `json:"status"`
 | 
					
						
							| 
									
										
										
										
											2016-06-06 12:49:53 -07:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type nsMetadata struct {
 | 
					
						
							| 
									
										
										
										
											2016-07-07 01:40:58 -07:00
										 |  |  | 	Name              string `json:"name"`
 | 
					
						
							|  |  |  | 	SelfLink          string `json:"selfLink"`
 | 
					
						
							|  |  |  | 	Uid               string `json:"uid"`
 | 
					
						
							|  |  |  | 	ResourceVersion   string `json:"resourceVersion"`
 | 
					
						
							|  |  |  | 	CreationTimestamp string `json:"creationTimestamp"`
 | 
					
						
							| 
									
										
										
										
											2016-06-06 12:49:53 -07:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type nsSpec struct {
 | 
					
						
							| 
									
										
										
										
											2016-07-07 01:40:58 -07:00
										 |  |  | 	Finalizers []string `json:"finalizers"`
 | 
					
						
							| 
									
										
										
										
											2016-06-06 12:49:53 -07:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type nsStatus struct {
 | 
					
						
							| 
									
										
										
										
											2016-07-07 01:40:58 -07:00
										 |  |  | 	Phase string `json:"phase"`
 | 
					
						
							| 
									
										
										
										
											2016-06-06 12:49:53 -07:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Kubernetes ServiceList
 | 
					
						
							|  |  |  | type ServiceList struct {
 | 
					
						
							| 
									
										
										
										
											2016-07-07 01:40:58 -07:00
										 |  |  | 	Kind       string          `json:"kind"`
 | 
					
						
							|  |  |  | 	APIVersion string          `json:"apiVersion"`
 | 
					
						
							|  |  |  | 	Metadata   apiListMetadata `json:"metadata"`
 | 
					
						
							|  |  |  | 	Items      []ServiceItem   `json:"items"`
 | 
					
						
							| 
									
										
										
										
											2016-06-06 12:49:53 -07:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type ServiceItem struct {
 | 
					
						
							| 
									
										
										
										
											2016-07-07 01:40:58 -07:00
										 |  |  | 	Metadata serviceMetadata `json:"metadata"`
 | 
					
						
							|  |  |  | 	Spec     serviceSpec     `json:"spec"`
 | 
					
						
							|  |  |  | 	//    Status     serviceStatus    `json:"status"`
 | 
					
						
							| 
									
										
										
										
											2016-06-06 12:49:53 -07:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type serviceMetadata struct {
 | 
					
						
							| 
									
										
										
										
											2016-07-07 01:40:58 -07:00
										 |  |  | 	Name              string `json:"name"`
 | 
					
						
							|  |  |  | 	Namespace         string `json:"namespace"`
 | 
					
						
							|  |  |  | 	SelfLink          string `json:"selfLink"`
 | 
					
						
							|  |  |  | 	Uid               string `json:"uid"`
 | 
					
						
							|  |  |  | 	ResourceVersion   string `json:"resourceVersion"`
 | 
					
						
							|  |  |  | 	CreationTimestamp string `json:"creationTimestamp"`
 | 
					
						
							|  |  |  | 	// labels
 | 
					
						
							| 
									
										
										
										
											2016-06-06 12:49:53 -07:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type serviceSpec struct {
 | 
					
						
							| 
									
										
										
										
											2016-07-07 01:40:58 -07:00
										 |  |  | 	Ports           []servicePort `json:"ports"`
 | 
					
						
							|  |  |  | 	ClusterIP       string        `json:"clusterIP"`
 | 
					
						
							|  |  |  | 	Type            string        `json:"type"`
 | 
					
						
							|  |  |  | 	SessionAffinity string        `json:"sessionAffinity"`
 | 
					
						
							| 
									
										
										
										
											2016-06-06 12:49:53 -07:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type servicePort struct {
 | 
					
						
							| 
									
										
										
										
											2016-07-07 01:40:58 -07:00
										 |  |  | 	Name       string `json:"name"`
 | 
					
						
							|  |  |  | 	Protocol   string `json:"protocol"`
 | 
					
						
							|  |  |  | 	Port       int    `json:"port"`
 | 
					
						
							|  |  |  | 	TargetPort int    `json:"targetPort"`
 | 
					
						
							| 
									
										
										
										
											2016-06-06 12:49:53 -07:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type serviceStatus struct {
 | 
					
						
							| 
									
										
										
										
											2016-07-07 01:40:58 -07:00
										 |  |  | 	LoadBalancer string `json:"loadBalancer"`
 | 
					
						
							| 
									
										
										
										
											2016-06-06 12:49:53 -07:00
										 |  |  | }
 |