Exemplo n.º 1
0
// create headless service for pod, so tat we can use service ip instead of pods volatile IP
// @param selector - selector that  will find corresponding pod, this should have label "replica" set
// @return *api.Service - created service
// @return error
func (cluster *CouchdbCluster) CreatePodService(selector map[string]string) (*api.Service, error) {
	// service special label
	serviceLabels := make(map[string]string)
	for k, v := range selector {
		serviceLabels[k] = v
	}
	// add special label
	serviceLabels[LABEL_POD_SERVICE] = "true"

	// svc port
	svcPorts := api.ServicePort{Port: COUCHDB_PORT}
	// service specs
	serviceSpec := api.ServiceSpec{Selector: selector, Ports: []api.ServicePort{svcPorts} /* ClusterIP: "None"*/}
	// init service struct
	service := api.Service{Spec: serviceSpec}
	service.GenerateName = cluster.Tag + "-pod-"
	service.Labels = serviceLabels
	// get a new kube client
	c, err := KubeClient(KUBE_API)
	// check for errors
	if err != nil {
		ErrorLog("spawner_rc: CreatePodService: Cannot connect to Kubernetes api ")
		ErrorLog(err)
		return nil, err
	} else {
		// create service in namespace
		return c.Services(cluster.Namespace).Create(&service)
	}
}