in images/controller/pkg/util.go [250:287]
func GetServiceClusterIP(namespace, selector string) (ServiceClusterIPList, error) {
resp := ServiceClusterIPList{
Services: make([]ServiceClusterIP, 0),
}
type serviceSpec struct {
ClusterIP string `json:"clusterIP"`
}
type getServiceSpec struct {
Metadata map[string]interface{} `json:"metadata"`
Spec serviceSpec `json:"spec"`
}
type getServiceList struct {
Items []getServiceSpec `json:"items"`
}
cmd := exec.Command("sh", "-c", fmt.Sprintf("kubectl get service -n %s -l %s -o json 1>&2", namespace, selector))
stdoutStderr, err := cmd.CombinedOutput()
if err != nil {
return resp, fmt.Errorf("failed to get node: %s, %v", string(stdoutStderr), err)
}
var jsonResp getServiceList
if err := json.Unmarshal(stdoutStderr, &jsonResp); err != nil {
return resp, fmt.Errorf("failed to parse service spec: %v", err)
}
for _, service := range jsonResp.Items {
resp.Services = append(resp.Services, ServiceClusterIP{
ServiceName: service.Metadata["name"].(string),
ClusterIP: service.Spec.ClusterIP,
})
}
return resp, nil
}