Mount NFS directories into container. Use bootstrap script to first cd into correct working directory for transcode. String replace ffmpeg progress URL.
This commit is contained in:
@@ -13,8 +13,11 @@ RUN mkdir /pms && \
|
|||||||
cd / && \
|
cd / && \
|
||||||
rm -Rf /pms
|
rm -Rf /pms
|
||||||
|
|
||||||
|
|
||||||
WORKDIR /plexmediaserver
|
WORKDIR /plexmediaserver
|
||||||
|
|
||||||
|
ADD bootstrap.sh .
|
||||||
|
|
||||||
ENV LD_LIBRARY_PATH "/plexmediaserver"
|
ENV LD_LIBRARY_PATH "/plexmediaserver"
|
||||||
|
|
||||||
ENTRYPOINT ["/plexmediaserver/Resources/Plex New Transcoder"]
|
ENTRYPOINT ["/plexmediaserver/Resources/Plex New Transcoder"]
|
||||||
Executable
+5
@@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
cd $1
|
||||||
|
|
||||||
|
/plexmediaserver/Resources/Plex\ New\ Transcoder "${@:2}"
|
||||||
@@ -2,6 +2,8 @@ package kubernetes
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"time"
|
"time"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/client"
|
"k8s.io/kubernetes/pkg/client"
|
||||||
@@ -15,7 +17,7 @@ import (
|
|||||||
const podBasename = "plex-transcoder"
|
const podBasename = "plex-transcoder"
|
||||||
const kubernetesHost = "10.20.40.254:8080"
|
const kubernetesHost = "10.20.40.254:8080"
|
||||||
const kubernetesNamespace = "plex"
|
const kubernetesNamespace = "plex"
|
||||||
const dockerImage = "registry.marley.xyz/e720/plex-new-transcoder"
|
const dockerImage = "munnerz/plex-new-transcoder"
|
||||||
|
|
||||||
type KubernetesExecutor struct {
|
type KubernetesExecutor struct {
|
||||||
executors.AbstractExecutor
|
executors.AbstractExecutor
|
||||||
@@ -38,6 +40,27 @@ func (e *KubernetesExecutor) createPod() *api.Pod {
|
|||||||
Namespace: e.Namespace,
|
Namespace: e.Namespace,
|
||||||
},
|
},
|
||||||
Spec: api.PodSpec{
|
Spec: api.PodSpec{
|
||||||
|
Volumes: []api.Volume{
|
||||||
|
api.Volume{
|
||||||
|
Name: "source-dir",
|
||||||
|
VolumeSource: api.VolumeSource {
|
||||||
|
NFS: &api.NFSVolumeSource {
|
||||||
|
Server: "10.12.14.16",
|
||||||
|
Path: "/tank/media",
|
||||||
|
ReadOnly: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
api.Volume{
|
||||||
|
Name: "transcode-dir",
|
||||||
|
VolumeSource: api.VolumeSource {
|
||||||
|
NFS: &api.NFSVolumeSource {
|
||||||
|
Server: "10.12.14.16",
|
||||||
|
Path: "/ssd/plex/Buffer",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
RestartPolicy: api.RestartPolicyNever,
|
RestartPolicy: api.RestartPolicyNever,
|
||||||
Containers: []api.Container{
|
Containers: []api.Container{
|
||||||
api.Container{
|
api.Container{
|
||||||
@@ -45,6 +68,16 @@ func (e *KubernetesExecutor) createPod() *api.Pod {
|
|||||||
Image: e.Image,
|
Image: e.Image,
|
||||||
Command: e.Job.Command,
|
Command: e.Job.Command,
|
||||||
Args: e.Job.Args,
|
Args: e.Job.Args,
|
||||||
|
VolumeMounts: []api.VolumeMount{
|
||||||
|
api.VolumeMount{
|
||||||
|
Name: "source-dir",
|
||||||
|
MountPath: "/tank/media",
|
||||||
|
},
|
||||||
|
api.VolumeMount{
|
||||||
|
Name: "transcode-dir",
|
||||||
|
MountPath: "/ssd/plex/Buffer",
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -112,6 +145,8 @@ func (e *KubernetesExecutor) WaitForState(targetState executors.ExecutorPhase) e
|
|||||||
switch podPhaseToExecutorPhase(pod.Status.Phase) {
|
switch podPhaseToExecutorPhase(pod.Status.Phase) {
|
||||||
case targetState:
|
case targetState:
|
||||||
break Loop
|
break Loop
|
||||||
|
case executors.ExecutorFailed:
|
||||||
|
return errors.New(fmt.Sprintf("Pod failed whilst waiting for state: %s\nReason: %s", targetState, pod.Status.Reason))
|
||||||
default:
|
default:
|
||||||
break Switch
|
break Switch
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
log "github.com/Sirupsen/logrus"
|
log "github.com/Sirupsen/logrus"
|
||||||
|
|
||||||
@@ -13,6 +15,12 @@ import (
|
|||||||
_ "github.com/munnerz/plex-elastic-transcoder/executors/kubernetes"
|
_ "github.com/munnerz/plex-elastic-transcoder/executors/kubernetes"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
cmdPath = "/plexmediaserver/bootstrap.sh"
|
||||||
|
logFilePath = "/var/log/plex/plex-elastic-transcoder.log"
|
||||||
|
plexServerURL = "10.12.14.16:32400"
|
||||||
|
)
|
||||||
|
|
||||||
var executor executors.Executor
|
var executor executors.Executor
|
||||||
|
|
||||||
func signals() {
|
func signals() {
|
||||||
@@ -39,16 +47,42 @@ func signals() {
|
|||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
// Setup signals
|
// Setup signals
|
||||||
signals()
|
signals()
|
||||||
|
|
||||||
|
// Setup logs
|
||||||
|
fo, err := os.Create(logFilePath)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
panic(fmt.Sprintf("Error opening log file: %s", err))
|
||||||
|
}
|
||||||
|
|
||||||
|
defer func() {
|
||||||
|
if err := fo.Close(); err != nil {
|
||||||
|
panic(fmt.Sprintf("Error closing file: %s", err))
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
log.SetOutput(fo)
|
||||||
|
|
||||||
// Get the arguments passed to Plex New Transcoder
|
// Get the arguments passed to Plex New Transcoder
|
||||||
args := os.Args[1:]
|
args := os.Args[1:]
|
||||||
|
wd, _ := os.Getwd()
|
||||||
|
for i, arg := range args {
|
||||||
|
if arg == "-progressurl" {
|
||||||
|
// Change the progress URL to report to about the transcode
|
||||||
|
args[i + 1] = strings.Replace(args[i+1], "127.0.0.1:32400", plexServerURL, 1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
args = append([]string{wd}, args)
|
||||||
|
|
||||||
|
log.Print("In WD: ", wd)
|
||||||
log.Print("Dispatching job with args: ", args)
|
log.Print("Dispatching job with args: ", args)
|
||||||
|
|
||||||
job := executors.Job{
|
job := executors.Job{
|
||||||
Command: []string{"/Plex New Transcoder"},
|
Command: []string{cmdPath},
|
||||||
Args: args,
|
Args: args,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -56,7 +90,7 @@ func main() {
|
|||||||
|
|
||||||
log.Print("Created executor: ", executor)
|
log.Print("Created executor: ", executor)
|
||||||
|
|
||||||
err := executor.Start()
|
err = executor.Start()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal("Job start failed with error: ", err)
|
log.Fatal("Job start failed with error: ", err)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user