Files
kube-plex/job/job.go
T

73 lines
1.1 KiB
Go

package job
import (
"time"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/client"
log "github.com/Sirupsen/logrus"
)
type Job struct {
Host string
Pod *api.Pod
client *client.Client
}
func (t Job) String() string {
return t.Pod.ObjectMeta.Name
}
func (t Job) Start() error {
log.Print("Executing job: ", t)
client, err := client.New(
&client.Config{
Host: t.Host,
})
if err != nil {
return err
}
t.client = client
log.Print("Creating pod...")
pod, err := t.client.Pods(t.Pod.ObjectMeta.Namespace).Create(t.Pod)
if err != nil {
return err
}
t.Pod = pod
log.Print("Successfully scheduled job on cluster with name: ", pod.ObjectMeta.Name)
return nil
}
func (t Job) Stop() error {
return t.client.Pods(t.Pod.ObjectMeta.Namespace).Delete(t.Pod.ObjectMeta.Name, nil)
}
func (t Job) WaitForState(targetState api.PodPhase) error {
Loop:
for {
pod, err := t.client.Pods(t.Pod.ObjectMeta.Namespace).Get(t.Pod.ObjectMeta.Name)
if err != nil {
return err
}
Switch:
switch pod.Status.Phase {
case targetState:
break Loop
default:
break Switch
}
time.Sleep(1 * time.Second)
}
return nil
}