feat(plexanisync) add plexanisync (#6173)
* feat(plexanisync) add plexanisync * changes * remove newline from values * configfile * ui * secret * custom mapping * ui * precommit * add descriptions * whops * another check * .... * check * Apply suggestions from code review Signed-off-by: Stavros Kois <47820033+stavros-k@users.noreply.github.com> * test something * revert * Apply suggestions from code review Signed-off-by: Stavros Kois <47820033+stavros-k@users.noreply.github.com> * roto * Update charts/incubator/plexanisync/values.yaml Signed-off-by: Stavros Kois <47820033+stavros-k@users.noreply.github.com> * hmm * Update charts/incubator/plexanisync/templates/_secret.tpl Signed-off-by: Stavros Kois <47820033+stavros-k@users.noreply.github.com> * only inject file if there is value * whops * . Signed-off-by: Stavros Kois <47820033+stavros-k@users.noreply.github.com> Co-authored-by: Stavros Kois <47820033+stavros-k@users.noreply.github.com>
This commit is contained in:
@@ -0,0 +1,30 @@
|
|||||||
|
# Patterns to ignore when building packages.
|
||||||
|
# This supports shell glob matching, relative path matching, and
|
||||||
|
# negation (prefixed with !). Only one pattern per line.
|
||||||
|
.DS_Store
|
||||||
|
# Common VCS dirs
|
||||||
|
.git/
|
||||||
|
.gitignore
|
||||||
|
.bzr/
|
||||||
|
.bzrignore
|
||||||
|
.hg/
|
||||||
|
.hgignore
|
||||||
|
.svn/
|
||||||
|
# Common backup files
|
||||||
|
*.swp
|
||||||
|
*.bak
|
||||||
|
*.tmp
|
||||||
|
*~
|
||||||
|
# Various IDEs
|
||||||
|
.project
|
||||||
|
.idea/
|
||||||
|
*.tmproj
|
||||||
|
.vscode/
|
||||||
|
# OWNERS file for Kubernetes
|
||||||
|
OWNERS
|
||||||
|
# helm-docs templates
|
||||||
|
*.gotmpl
|
||||||
|
# docs folder
|
||||||
|
/docs
|
||||||
|
# icon
|
||||||
|
icon.png
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
# Changelog
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
appVersion: "1.3.21"
|
||||||
|
dependencies:
|
||||||
|
- name: common
|
||||||
|
repository: https://library-charts.truecharts.org
|
||||||
|
version: 11.1.2
|
||||||
|
deprecated: false
|
||||||
|
description: Plex to AniList Sync.
|
||||||
|
home: https://truecharts.org/charts/incubator/plexanisync
|
||||||
|
icon: https://truecharts.org/img/hotlink-ok/chart-icons/plexanisync.png
|
||||||
|
keywords:
|
||||||
|
- plexanisync
|
||||||
|
- media
|
||||||
|
kubeVersion: ">=1.16.0-0"
|
||||||
|
maintainers:
|
||||||
|
- email: info@truecharts.org
|
||||||
|
name: TrueCharts
|
||||||
|
url: https://truecharts.org
|
||||||
|
name: plexanisync
|
||||||
|
sources:
|
||||||
|
- https://github.com/truecharts/charts/tree/master/charts/incubator/plexanisync
|
||||||
|
- https://github.com/RickDB/PlexAniSync
|
||||||
|
- https://github.com/RickDB/PlexAniSync/pkgs/container/plexanisync
|
||||||
|
type: application
|
||||||
|
version: 0.0.1
|
||||||
|
annotations:
|
||||||
|
truecharts.org/catagories: |
|
||||||
|
- media
|
||||||
|
truecharts.org/SCALE-support: "true"
|
||||||
|
truecharts.org/grade: U
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
# README
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 5.5 KiB |
@@ -0,0 +1,277 @@
|
|||||||
|
# Include{groups}
|
||||||
|
portals: {}
|
||||||
|
questions:
|
||||||
|
# Include{global}
|
||||||
|
# Include{controller}
|
||||||
|
# Include{replicas}
|
||||||
|
# Include{replica1}
|
||||||
|
# Include{controllerExpertExtraArgs}
|
||||||
|
- variable: plexanisync
|
||||||
|
group: App Configuration
|
||||||
|
label: PlexAniSync Configuration
|
||||||
|
schema:
|
||||||
|
additional_attrs: true
|
||||||
|
type: dict
|
||||||
|
attrs:
|
||||||
|
- variable: interval
|
||||||
|
label: Interval
|
||||||
|
description: The time in between syncs in seconds.
|
||||||
|
schema:
|
||||||
|
type: int
|
||||||
|
default: 3600
|
||||||
|
min: 600
|
||||||
|
- variable: plex
|
||||||
|
label: Plex Integration
|
||||||
|
schema:
|
||||||
|
additional_attrs: true
|
||||||
|
type: dict
|
||||||
|
attrs:
|
||||||
|
- variable: plex_section
|
||||||
|
label: Plex Section
|
||||||
|
description: The libraries where your anime resides.
|
||||||
|
schema:
|
||||||
|
type: list
|
||||||
|
required: true
|
||||||
|
default: []
|
||||||
|
items:
|
||||||
|
- variable: plex_section_library_entry
|
||||||
|
label: Plex Section Library Entry
|
||||||
|
description: Single library per entry.
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
default: ""
|
||||||
|
required: true
|
||||||
|
- variable: plex_auth_method
|
||||||
|
label: Authentication Method
|
||||||
|
description: Select Direct if you plan to auth the admin user, select Myplex for all other home users.
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
required: true
|
||||||
|
default: direct
|
||||||
|
enum:
|
||||||
|
- value: direct
|
||||||
|
description: Direct
|
||||||
|
- value: myplex
|
||||||
|
description: MyPlex
|
||||||
|
- variable: plex_url
|
||||||
|
label: Plex URL
|
||||||
|
description: The address to your Plex Media Server.
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
show_if: [["plex_auth_method", "=", "direct"]]
|
||||||
|
required: true
|
||||||
|
default: ""
|
||||||
|
- variable: plex_token
|
||||||
|
label: Plex Token
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
show_if: [["plex_auth_method", "=", "direct"]]
|
||||||
|
required: true
|
||||||
|
private: true
|
||||||
|
default: ""
|
||||||
|
- variable: myplex_server_name
|
||||||
|
label: Plex Server Name
|
||||||
|
description: The name of your Plex Media Server.
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
show_if: [["plex_auth_method", "=", "myplex"]]
|
||||||
|
required: true
|
||||||
|
default: ""
|
||||||
|
- variable: myplex_user
|
||||||
|
label: My Plex User
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
show_if: [["plex_auth_method", "=", "myplex"]]
|
||||||
|
required: true
|
||||||
|
default: ""
|
||||||
|
- variable: myplex_token
|
||||||
|
label: My Plex Token
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
show_if: [["plex_auth_method", "=", "myplex"]]
|
||||||
|
required: true
|
||||||
|
private: true
|
||||||
|
default: ""
|
||||||
|
- variable: home_user_sync
|
||||||
|
label: Home User Sync
|
||||||
|
schema:
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
show_subquestions_if: true
|
||||||
|
subquestions:
|
||||||
|
- variable: home_username
|
||||||
|
label: Home Username
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
required: true
|
||||||
|
default: ""
|
||||||
|
- variable: home_server_url
|
||||||
|
label: Home Server URL
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
required: true
|
||||||
|
default: ""
|
||||||
|
- variable: anilist
|
||||||
|
label: Anilist Integration
|
||||||
|
schema:
|
||||||
|
additional_attrs: true
|
||||||
|
type: dict
|
||||||
|
attrs:
|
||||||
|
- variable: ani_username
|
||||||
|
label: Ani UserName
|
||||||
|
description: Your AniList.co username.
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
required: true
|
||||||
|
default: ""
|
||||||
|
- variable: ani_token
|
||||||
|
label: Ani Token
|
||||||
|
description: Your AniList.co token.
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
required: true
|
||||||
|
private: true
|
||||||
|
default: ""
|
||||||
|
- variable: plex_ep_count_priority
|
||||||
|
label: Plex Episode Count Priority
|
||||||
|
description: Plex episode watched count will take priority over AniList.
|
||||||
|
schema:
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
- variable: skip_list_update
|
||||||
|
label: Skip List Update
|
||||||
|
description: Will NOT update your AniList which is useful if you want to do a test run.
|
||||||
|
schema:
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
- variable: log_failed_matches
|
||||||
|
label: Log Failed Matches
|
||||||
|
description: Enables logs to be written when matches fail.
|
||||||
|
schema:
|
||||||
|
type: boolean
|
||||||
|
default: true
|
||||||
|
- variable: custom-mappings
|
||||||
|
group: App Configuration
|
||||||
|
label: Custom Mappings
|
||||||
|
schema:
|
||||||
|
additional_attrs: true
|
||||||
|
type: dict
|
||||||
|
attrs:
|
||||||
|
- variable: remote_urls
|
||||||
|
label: Remote URLs
|
||||||
|
schema:
|
||||||
|
type: list
|
||||||
|
default: []
|
||||||
|
items:
|
||||||
|
- variable: remote_url_entry
|
||||||
|
label: Remote URL
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
required: true
|
||||||
|
default: ""
|
||||||
|
- variable: entries
|
||||||
|
label: Entries
|
||||||
|
schema:
|
||||||
|
type: list
|
||||||
|
default: []
|
||||||
|
items:
|
||||||
|
- variable: entry
|
||||||
|
label: entry
|
||||||
|
schema:
|
||||||
|
additional_attrs: true
|
||||||
|
type: dict
|
||||||
|
attrs:
|
||||||
|
- variable: title
|
||||||
|
label: Title
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
required: true
|
||||||
|
default: ""
|
||||||
|
- variable: seasons
|
||||||
|
label: Seasons
|
||||||
|
schema:
|
||||||
|
type: list
|
||||||
|
default: []
|
||||||
|
items:
|
||||||
|
- variable: season_entry
|
||||||
|
label: Season Entry
|
||||||
|
schema:
|
||||||
|
additional_attrs: true
|
||||||
|
type: dict
|
||||||
|
attrs:
|
||||||
|
- variable: season
|
||||||
|
label: Season
|
||||||
|
schema:
|
||||||
|
type: int
|
||||||
|
required: true
|
||||||
|
- variable: anilist_id
|
||||||
|
label: ANI List ID
|
||||||
|
schema:
|
||||||
|
type: int
|
||||||
|
required: true
|
||||||
|
- variable: synonyms
|
||||||
|
label: Synonyms
|
||||||
|
schema:
|
||||||
|
type: list
|
||||||
|
default: []
|
||||||
|
items:
|
||||||
|
- variable: synonym
|
||||||
|
label: Synonym
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
required: true
|
||||||
|
default: ""
|
||||||
|
# Include{containerConfig}
|
||||||
|
# Include{serviceExpertRoot}
|
||||||
|
default: false
|
||||||
|
# Include{serviceExpert}
|
||||||
|
# Include{serviceList}
|
||||||
|
# Include{persistenceList}
|
||||||
|
# Include{security}
|
||||||
|
# Include{securityContextAdvancedRoot}
|
||||||
|
- variable: privileged
|
||||||
|
label: Privileged mode
|
||||||
|
schema:
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
- variable: readOnlyRootFilesystem
|
||||||
|
label: ReadOnly Root Filesystem
|
||||||
|
schema:
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
- variable: allowPrivilegeEscalation
|
||||||
|
label: Allow Privilege Escalation
|
||||||
|
schema:
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
- variable: runAsNonRoot
|
||||||
|
label: runAsNonRoot
|
||||||
|
schema:
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
# Include{podSecurityContextRoot}
|
||||||
|
- variable: runAsUser
|
||||||
|
label: runAsUser
|
||||||
|
description: The UserID of the user running the application
|
||||||
|
schema:
|
||||||
|
type: int
|
||||||
|
default: 0
|
||||||
|
- variable: runAsGroup
|
||||||
|
label: runAsGroup
|
||||||
|
description: The groupID this App of the user running the application
|
||||||
|
schema:
|
||||||
|
type: int
|
||||||
|
default: 0
|
||||||
|
- variable: fsGroup
|
||||||
|
label: fsGroup
|
||||||
|
description: The group that should own ALL storage.
|
||||||
|
schema:
|
||||||
|
type: int
|
||||||
|
default: 568
|
||||||
|
# Include{podSecurityContextAdvanced}
|
||||||
|
# Include{resources}
|
||||||
|
# Include{advanced}
|
||||||
|
# Include{addons}
|
||||||
|
# Include{codeserver}
|
||||||
|
# Include{vpn}
|
||||||
|
# Include{documentation}
|
||||||
@@ -0,0 +1,85 @@
|
|||||||
|
{{/* Define the secret */}}
|
||||||
|
{{- define "plexanisync.secret" -}}
|
||||||
|
|
||||||
|
{{- $secretName := printf "%s-secret" (include "tc.common.names.fullname" .) }}
|
||||||
|
{{- $secretConfigName := printf "%s-config-secret" (include "tc.common.names.fullname" .) }}
|
||||||
|
{{- $pas := .Values.plexanisync }}
|
||||||
|
{{- $cm := .Values.custom_mappings }}
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: {{ $secretName }}
|
||||||
|
labels:
|
||||||
|
{{- include "tc.common.labels" . | nindent 4 }}
|
||||||
|
stringData:
|
||||||
|
SETTINGS_FILE: {{ .Values.persistence.settings.mountPath }}
|
||||||
|
INTERVAL: {{ $pas.interval | quote }}
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: {{ $secretConfigName }}
|
||||||
|
labels:
|
||||||
|
{{- include "tc.common.labels" . | nindent 4 }}
|
||||||
|
stringData:
|
||||||
|
settings.ini: |
|
||||||
|
[PLEX]
|
||||||
|
anime_section = {{ join "|" $pas.plex_section }}
|
||||||
|
|
||||||
|
authentication_method = {{ $pas.plex.plex_auth_method }}
|
||||||
|
|
||||||
|
{{- if eq $pas.plex.plex_auth_method "direct" }}
|
||||||
|
base_url = {{ $pas.plex.plex_url }}
|
||||||
|
token = {{ $pas.plex.plex_token }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if eq $pas.plex.plex_auth_method "myplex" }}
|
||||||
|
server = {{ $pas.plex.myplex_server_name }}
|
||||||
|
myplex_user = {{ $pas.plex.myplex_user }}
|
||||||
|
myplex_token = {{ $pas.plex.myplex_token }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
home_user_sync = {{ ternary "True" "False" $pas.plex.home_user_sync }}
|
||||||
|
{{- if $pas.plex.home_user_sync }}
|
||||||
|
home_username = {{ $pas.plex.home_username }}
|
||||||
|
home_server_base_url = {{ $pas.plex.home_server_url }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
[ANILIST]
|
||||||
|
access_token = {{ $pas.anilist.ani_token }}
|
||||||
|
plex_episode_count_priority = {{ ternary "True" "False" $pas.anilist.plex_ep_count_priority }}
|
||||||
|
skip_list_update = {{ ternary "True" "False" $pas.anilist.skip_list_update }}
|
||||||
|
username = {{ $pas.anilist.ani_username }}
|
||||||
|
log_failed_matches = {{ ternary "True" "False" $pas.anilist.log_failed_matches }}
|
||||||
|
custom_mappings.yaml: |
|
||||||
|
# https://github.com/RickDB/PlexAniSync/blob/master/custom_mappings.yaml.example
|
||||||
|
{{- if $cm }}
|
||||||
|
{{- with $cm.remote_urls }}
|
||||||
|
remote-urls:
|
||||||
|
{{- range $url := . }}
|
||||||
|
- {{ . | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- with $cm.entries }}
|
||||||
|
entries:
|
||||||
|
{{- range $entry := . }}
|
||||||
|
- title: {{ $entry.title | quote }}
|
||||||
|
{{- with $entry.seasons }}
|
||||||
|
seasons:
|
||||||
|
{{- range $season_entry := . }}
|
||||||
|
- season: {{ $season_entry.season }}
|
||||||
|
anilist-id: {{ $season_entry.anilist_id }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with $entry.synonyms }}
|
||||||
|
synonyms:
|
||||||
|
{{- range $synonym := . }}
|
||||||
|
- {{ . | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end -}}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
{{/* Make sure all variables are set properly */}}
|
||||||
|
{{- include "tc.common.loader.init" . }}
|
||||||
|
|
||||||
|
{{/* Render secret */}}
|
||||||
|
{{- include "plexanisync.secret" . }}
|
||||||
|
|
||||||
|
{{- define "plexanisync.custom.mappings" -}}
|
||||||
|
enabled: true
|
||||||
|
type: secret
|
||||||
|
readOnly: true
|
||||||
|
defaultMode: "0600"
|
||||||
|
objectName: '{{ include "tc.common.names.fullname" . }}-config-secret'
|
||||||
|
mountPath: /plexanisync/custom_mappings.yaml
|
||||||
|
subPath: custom_mappings.yaml
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if .Values.custom_mappings -}}
|
||||||
|
{{- $_ := set .Values.persistence "custommappings" (include "plexanisync.custom.mappings" . | fromYaml) -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/* Render the templates */}}
|
||||||
|
{{ include "tc.common.loader.apply" . }}
|
||||||
@@ -0,0 +1,83 @@
|
|||||||
|
image:
|
||||||
|
repository: tccr.io/truecharts/plexanisync
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
tag: latest@sha256:783613decc1a1041affe73ad90d04c3604b95824c156e0380c1a403bbe24ae3b
|
||||||
|
|
||||||
|
securityContext:
|
||||||
|
readOnlyRootFilesystem: false
|
||||||
|
runAsNonRoot: false
|
||||||
|
|
||||||
|
podSecurityContext:
|
||||||
|
runAsUser: 0
|
||||||
|
runAsGroup: 0
|
||||||
|
|
||||||
|
plexanisync:
|
||||||
|
interval: 3600
|
||||||
|
plex:
|
||||||
|
plex_section:
|
||||||
|
[]
|
||||||
|
# - section1
|
||||||
|
# - section2
|
||||||
|
# direct | myplex
|
||||||
|
plex_auth_method: direct
|
||||||
|
# myplex
|
||||||
|
myplex_server: ""
|
||||||
|
myplex_user: ""
|
||||||
|
myplex_token: ""
|
||||||
|
# direct
|
||||||
|
plex_url: ""
|
||||||
|
plex_token: ""
|
||||||
|
# Home user sync
|
||||||
|
home_user_sync: false
|
||||||
|
home_username: ""
|
||||||
|
home_server_url: ""
|
||||||
|
anilist:
|
||||||
|
ani_username: ""
|
||||||
|
ani_token: ""
|
||||||
|
plex_ep_count_priority: false
|
||||||
|
skip_list_update: false
|
||||||
|
log_failed_matches: false
|
||||||
|
|
||||||
|
custom_mappings:
|
||||||
|
[]
|
||||||
|
# remote_urls:
|
||||||
|
# - https://blabal
|
||||||
|
# entries:
|
||||||
|
# - title: title
|
||||||
|
# seasons:
|
||||||
|
# - season: 1
|
||||||
|
# anilist_id: 2345
|
||||||
|
# synonyms:
|
||||||
|
# - asfdasd
|
||||||
|
|
||||||
|
envFrom:
|
||||||
|
- secretRef:
|
||||||
|
name: '{{ include "tc.common.names.fullname" . }}-secret'
|
||||||
|
|
||||||
|
service:
|
||||||
|
main:
|
||||||
|
enabled: false
|
||||||
|
ports:
|
||||||
|
main:
|
||||||
|
enabled: false
|
||||||
|
|
||||||
|
probes:
|
||||||
|
liveness:
|
||||||
|
enabled: false
|
||||||
|
readiness:
|
||||||
|
enabled: false
|
||||||
|
startup:
|
||||||
|
enabled: false
|
||||||
|
|
||||||
|
persistence:
|
||||||
|
settings:
|
||||||
|
enabled: true
|
||||||
|
type: secret
|
||||||
|
readOnly: true
|
||||||
|
defaultMode: "0600"
|
||||||
|
objectName: '{{ include "tc.common.names.fullname" . }}-config-secret'
|
||||||
|
mountPath: /plexanisync/settings.ini
|
||||||
|
subPath: settings.ini
|
||||||
|
|
||||||
|
portal:
|
||||||
|
enabled: false
|
||||||
Reference in New Issue
Block a user