commit bf09dd10a07153eea9a77962e2739e706d949131 Author: James Munnelly Date: Mon Sep 7 22:42:14 2015 +0100 initial commit diff --git a/PNT.Dockerfile b/PNT.Dockerfile new file mode 100644 index 0000000..2f5bd19 --- /dev/null +++ b/PNT.Dockerfile @@ -0,0 +1,5 @@ +FROM scratch + +ADD "Plex New Transcoder" "/Plex New Transcoder" + +ENTRYPOINT ["/Plex New Transcoder"] \ No newline at end of file diff --git a/main.go b/main.go new file mode 100644 index 0000000..02ad03e --- /dev/null +++ b/main.go @@ -0,0 +1,96 @@ +package main + +import ( + "os" + "fmt" + + log "github.com/Sirupsen/logrus" + + "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/client" +) + +const kubernetesHost = "http://10.20.40.254:8080/" +const kubernetesNamespace = "plex" +const dockerImage = "registry.marley.xyz/e720/plex-new-transcoder" + +type TranscodeJob struct { + pod *api.Pod +} + +func kubernetesClient() (*client.Client, error) { + client, err := client.New( + &client.Config{ + Host: kubernetesHost, + Version: "v1", + }) + + if err != nil { + return client, err + } + + return client, err +} + +func (t TranscodeJob) String() string { + return t.pod.ObjectMeta.Name +} + +func (t TranscodeJob) start() error { + log.Print("Executing job: ", t) + client, err := kubernetesClient() + + if err != nil { + return err + } + + pod, err := client.Pods(t.pod.ObjectMeta.Namespace).Create(t.pod) + + if err != nil { + return err + } + + log.Print("Successfully scheduled transcode on pod with name: ", pod.ObjectMeta.Name) + + return nil +} + +func generateName() string { + return "transcode-job" +} + +func main() { + // Get the arguments passed to Plex New Transcoder + cmd := "/Plex New Transcoder" + args := os.Args[1:] + log.Print(fmt.Sprintf("Dispatching job: %s %s", cmd, args)) + + + job := TranscodeJob{ + pod: + &api.Pod{ + TypeMeta: api.TypeMeta{ + Kind: "Pod", + }, + ObjectMeta: api.ObjectMeta{ + GenerateName: generateName(), + Namespace: kubernetesNamespace, + }, + Spec: api.PodSpec{ + RestartPolicy: api.RestartPolicyNever, + Containers: []api.Container{ + api.Container{ + Name: generateName(), + Image: dockerImage, + Args: args, + }, + }, + }, + }, + } + + err := job.start() + if err != nil { + log.Fatal("Job start failed with error: ", err) + } +}