1 | #!/bin/bash |
---|
2 | # Louis Mulder |
---|
3 | # |
---|
4 | # Startup a pod or get information of a running pod |
---|
5 | # |
---|
6 | XPRA_ADMIN_USER=${XPRA_ADMIN_USER:-xpra} ; export XPRA_ADMIN_USER |
---|
7 | # |
---|
8 | # ---- Don't change below if you not know what you are doing ------ |
---|
9 | # |
---|
10 | XPRA_TOPDIR_INT=${XPRA_TOPDIR_INT:-/srv} |
---|
11 | POD_FROM_NAME=`hostname -s` |
---|
12 | POD_FROM_NAMESPACE=${POD_FROM_NAMESPACE:-"ingress-${NAMESPACE}"} |
---|
13 | # |
---|
14 | export XPRA_TOPDIR_INT POD_FROM_NAMESPACE |
---|
15 | |
---|
16 | case "${XPRA_ARGV}" in |
---|
17 | #( |
---|
18 | *info* ) exit 0 |
---|
19 | # Prevent to startup a Pod. |
---|
20 | ;; |
---|
21 | #( |
---|
22 | *start*) exit 1 |
---|
23 | ;; |
---|
24 | esac |
---|
25 | |
---|
26 | # |
---|
27 | |
---|
28 | USERNAME=${1} |
---|
29 | XPRA_POD_DISPLAY=${2} |
---|
30 | shift 2 |
---|
31 | XPRA_ARGV="${*}" |
---|
32 | |
---|
33 | export USERNAME XPRA_POD_DISPLAY |
---|
34 | |
---|
35 | case "${XPRA_ARGV}" in |
---|
36 | #( |
---|
37 | *info* ) |
---|
38 | IFS=':' |
---|
39 | set -- `getent passwd ${USERNAME} | sed -e 's/\*/NA/g'` |
---|
40 | exec echo ${1}\|NA\|${3}\|${4}\|tcp:0.0.0.0:443\|\|\| |
---|
41 | # Prevent to startup a Pod. |
---|
42 | ;; |
---|
43 | #( |
---|
44 | *start*) echo |
---|
45 | exit 1 |
---|
46 | ;; |
---|
47 | esac |
---|
48 | |
---|
49 | # only request launcher/attach or http are allowed |
---|
50 | |
---|
51 | eval `echo POD_FROM_IPS=\"\`ip a | expand |\ |
---|
52 | sed -e '/.*[Ii][Nn][Ee][Tt].*[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/!d'\ |
---|
53 | -e 's/\(.*[Ii][Nn][Ee][Tt] \)\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)\(\/.*\)/\2/'\ |
---|
54 | -e '/127.*$/d'\`\" |
---|
55 | |
---|
56 | for i in ${POD_FROM_IPS} |
---|
57 | do |
---|
58 | echo POD_FROM=\`kubectl get -n ${POD_FROM_NAMESPACE} --output json pods |\ |
---|
59 | jq '.items[] | select(.status.podIP=="'${i}'")' | jq .metadata.name | sort -u\` |
---|
60 | done` |
---|
61 | |
---|
62 | export SESSION_TYPE POD_FROM_NAMESPACE POD_FROM_IPS POD_FROM_NAME |
---|
63 | |
---|
64 | XPRA_SESSION=`IFS='-' |
---|
65 | set -- ${XPRA_POD_DISPLAY} |
---|
66 | UN=\`getent passwd ${1} | sed 's/:.*//'\` |
---|
67 | if [ "${UN}" = '' ] |
---|
68 | then |
---|
69 | echo "${XPRA_POD_DISPLAY}" | sed -e 's/-*[MmNn][Hh][Dd]-*//' |
---|
70 | else |
---|
71 | echo "${XPRA_POD_DISPLAY}" | sed -e '{\ |
---|
72 | s/'"${UN}"'// |
---|
73 | s/-*[MmNn][Hh][Dd]-*// |
---|
74 | }' |
---|
75 | fi` |
---|
76 | |
---|
77 | GRP_LIST=`id ${USERNAME} | sed -e '{ |
---|
78 | s/[\ \t]\+//g |
---|
79 | s/[Uu][Ii][Dd]=[0-9][0-9]*(// |
---|
80 | s/[Gg][Ii][Dd]=[0-9][0-9]*(// |
---|
81 | s/[Gg][Rr][Oo][Uu][Pp][Ss]=[0-9][0-9]*(// |
---|
82 | s/[,]*[0-9][0-9]*(//g |
---|
83 | s/'"${USERNAME}"')//g |
---|
84 | s/)/\n/g |
---|
85 | }' | sort -u` |
---|
86 | |
---|
87 | |
---|
88 | USERNAME=${USERNAME:-`id -u`} |
---|
89 | |
---|
90 | for subdir in ${USERNAME} ${GRP_LIST} default |
---|
91 | do |
---|
92 | if [ -x ${XPRA_TOPDIR_INT}/session_types/${subdir}/xpra_startup_${XPRA_SESSION}.sh ] |
---|
93 | then |
---|
94 | exec ${XPRA_TOPDIR_INT}/session_types/start_or_get_pod.sh ${subdir}/${XPRA_SESSION} |
---|
95 | fi |
---|
96 | done |
---|
97 | |
---|
98 | ( |
---|
99 | echo "Script ${XPRA_TOPDIR_INT}/session_types/[XXX]/${XPRA_SESSION} not found or not executable by user ${USERNAME}" |
---|
100 | echo "XXX subdirs seen in container/pod : ${USERNAME} ${GRP_LIST} or default" |
---|
101 | ) 1>&2 |
---|
102 | exit 4 |
---|