Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

init command creates kubedb-operator service #48

Merged
merged 2 commits into from
May 31, 2017
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 60 additions & 21 deletions pkg/cmd/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import (
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/util/intstr"
)

var (
Expand Down Expand Up @@ -46,9 +47,11 @@ func NewCmdInit(out io.Writer, errOut io.Writer) *cobra.Command {
}

const (
operatorName = "kubedb-operator"
operatorImage = "kubedb/operator"
operatorContainer = "operator"
operatorName = "kubedb-operator"
operatorImage = "kubedb/operator"
operatorContainer = "operator"
operatorPortName = "web"
operatorPortNumber = 8080
)

func RunInit(f cmdutil.Factory, cmd *cobra.Command, out, errOut io.Writer) error {
Expand Down Expand Up @@ -111,26 +114,30 @@ func RunInit(f cmdutil.Factory, cmd *cobra.Command, out, errOut io.Writer) error

fmt.Fprintln(out, "Successfully upgraded operator deployment.")
} else {
var err error
if _, err = getOperatorDeployment(client, namespace); err == nil {
fmt.Fprintln(errOut, "Operator already exists.")
return nil
} else {
if !k8serr.IsNotFound(err) {
return err
}
}

if err := util.CheckDockerImageVersion(operatorImage, version); err != nil {
fmt.Fprintln(errOut, fmt.Sprintf(`Operator image %v:%v not found.`, operatorImage, version))
return nil
}

if err := createOperatorDeployment(client, namespace, version); err != nil {
return err
if k8serr.IsAlreadyExists(err) {
fmt.Fprintln(errOut, "Operator deployment already exists.")
} else {
return err
}
} else {
fmt.Fprintln(out, "Successfully created operator deployment.")
}

fmt.Fprintln(out, "Successfully created operator deployment.")
if err := createOperatorService(client, namespace); err != nil {
if k8serr.IsAlreadyExists(err) {
fmt.Fprintln(errOut, "Operator service already exists.")
} else {
return err
}
} else {
fmt.Fprintln(out, "Successfully created operator service.")
}
}

return nil
Expand All @@ -140,24 +147,24 @@ func getOperatorDeployment(client *internalclientset.Clientset, namespace string
return client.ExtensionsClient.Deployments(namespace).Get(operatorName)
}

func createOperatorDeployment(client *internalclientset.Clientset, namespace, version string) error {
label := map[string]string{
"run": operatorName,
}
var operatorLabel = map[string]string{
"app": operatorName,
}

func createOperatorDeployment(client *internalclientset.Clientset, namespace, version string) error {
deployment := &kext.Deployment{
ObjectMeta: kapi.ObjectMeta{
Name: operatorName,
Namespace: namespace,
},
Spec: kext.DeploymentSpec{
Selector: &unversioned.LabelSelector{
MatchLabels: label,
MatchLabels: operatorLabel,
},
Replicas: 1,
Template: kapi.PodTemplateSpec{
ObjectMeta: kapi.ObjectMeta{
Labels: label,
Labels: operatorLabel,
},
Spec: kapi.PodSpec{
Containers: []kapi.Container{
Expand All @@ -166,6 +173,7 @@ func createOperatorDeployment(client *internalclientset.Clientset, namespace, ve
Image: fmt.Sprintf("%v:%v", operatorImage, version),
Args: []string{
"run",
fmt.Sprintf("--address=:%v", operatorPortNumber),
"--v=3",
},
Env: []kapi.EnvVar{
Expand All @@ -179,6 +187,13 @@ func createOperatorDeployment(client *internalclientset.Clientset, namespace, ve
},
},
},
Ports: []kapi.ContainerPort{
{
Name: operatorPortName,
Protocol: kapi.ProtocolTCP,
ContainerPort: operatorPortNumber,
},
},
},
},
},
Expand All @@ -190,6 +205,30 @@ func createOperatorDeployment(client *internalclientset.Clientset, namespace, ve
return err
}

func createOperatorService(client *internalclientset.Clientset, namespace string) error {
svc := &kapi.Service{
ObjectMeta: kapi.ObjectMeta{
Name: operatorName,
Namespace: namespace,
},
Spec: kapi.ServiceSpec{
Type: kapi.ServiceTypeClusterIP,
Ports: []kapi.ServicePort{
{
Name: operatorPortName,
Port: operatorPortNumber,
Protocol: kapi.ProtocolTCP,
TargetPort: intstr.FromString(operatorPortName),
},
},
Selector: operatorLabel,
},
}

_, err := client.Core().Services(namespace).Create(svc)
return err
}

func updateOperatorDeployment(client *internalclientset.Clientset, deployment *kext.Deployment) error {
_, err := client.ExtensionsClient.Deployments(deployment.Namespace).Update(deployment)
return err
Expand Down