apiVersion: apps/v1 kind: Deployment metadata: namespace: {{ namespace }} name: flumotion-worker-{{ deploy.worker.name }} labels: app: flumotion type: worker worker: {{ deploy.worker.name }} spec: replicas: 1 selector: matchLabels: app: flumotion type: worker worker: {{ deploy.worker.name }} strategy: type: Recreate revisionHistoryLimit: 5 template: metadata: labels: app: flumotion type: worker worker: {{ deploy.worker.name }} spec: nodeName: {{ deploy.worker.name }} securityContext: runAsUser: 998 fsGroup: 998 %% if 'record' in deploy.worker.flags initContainers: %% for record_name in deploy.worker.flags.record - name: prepare-record-{{ record_name }} image: busybox command: ['sh', '-c', 'chown 998:998 /srv/record && chmod 0755 /srv/record'] securityContext: runAsUser: 0 volumeMounts: - name: record-{{ record_name }} mountPath: /srv/record %% endfor %% endif containers: %% for subname, sub in deploy.worker.subs.items() - name: {{ subname }} image: spreadspace/flumotion:worker-{{ desc.globals.deployment.parameter.flumotion_image_version }} imagePullPolicy: Always env: - name: WORKER_PASSWORD valueFrom: secretKeyRef: name: flumotion-worker-{{ deploy.worker.name }} key: password args: - --verbose - -H {{ desc.globals.manager.host }} - -P {{ desc.globals.manager.port }} - -T {{ desc.globals.manager.transport }} - -n {{ sub.fullname }} - -u {{ deploy.worker.name }} - -p $(WORKER_PASSWORD) - -F {{ 7000 + loop.index0 * 10 }}-{{ 7001 + loop.index0 * 10 }} volumeMounts: - name: home mountPath: /srv %% set _needs_ = { 'decklink_libs': False, 'privileged': False } %% if 'input' in sub.flags %% for input_name in deploy.worker.flags.input %% if desc.inputs[input_name].type == 'decklink' %% if _needs_.update({'decklink_libs': True, 'privileged': True}) %# jinja variables are weird... https://stackoverflow.com/questions/9486393 %% endif - name: decklink-device-{{ desc.inputs[input_name].properties.device }} mountPath: /dev/blackmagic/dv{{ desc.inputs[input_name].properties.device }} %% endif %% endfor %% if _needs_.decklink_libs - name: decklink-libs subPath: libDeckLinkAPI.so mountPath: /usr/lib/libDeckLinkAPI.so - name: decklink-libs subPath: libDeckLinkPreviewAPI.so mountPath: /usr/lib/libDeckLinkPreviewAPI.so %% endif %% endif %% if 'record' in deploy.worker.flags %% for record_name in deploy.worker.flags.record - name: record-{{ record_name }} mountPath: /srv/recordings/{{ record_name }} %% endfor %% endif %% if _needs_.privileged securityContext: privileged: true %% endif %% endfor volumes: - name: home emptyDir: medium: Memory %% if 'input' in deploy.worker.flags %% set _needs_ = { 'decklink_libs': False } %% for input_name in deploy.worker.flags.input %% if desc.inputs[input_name].type == 'decklink' %% if _needs_.update({'decklink_libs': True}) %# jinja variables are weird... https://stackoverflow.com/questions/9486393 %% endif - name: decklink-device-{{ desc.inputs[input_name].properties.device }} hostPath: type: File {# CharDevice doesn't work for some reason... #} path: /dev/blackmagic/dv{{ desc.inputs[input_name].properties.device }} %% endif %% endfor %% if _needs_.decklink_libs - name: decklink-libs hostPath: type: Directory path: /usr/lib/ readOnly: true %% endif %% endif %% if 'record' in deploy.worker.flags %% for record_name in deploy.worker.flags.record - name: record-{{ record_name }} hostPath: type: DirectoryOrCreate path: {{ desc.records[record_name].directory }}/{{ record_name }} %% endfor %% endif