desktop options in od.config
The od.config contains options to describe how the oc.user and applications containers have to be created.
desktop.options
All desktop options are defined in od.config file.
Desktop options start with the prefix desktop., then add the name of the option.
| Option name | Type | Sample |
|---|---|---|
desktop.defaultbackgroundcolors |
list | ['#6EC6F0', '#CD3C14', '#4BB4E6' ] |
desktop.homedirectorytype |
string | 'hostPath' |
desktop.remotehomedirectorytype |
list | [] |
desktop.persistentvolumespec |
string | None |
desktop.persistentvolumeclaimspec |
string | None |
desktop.homedirectorytype |
string | 'hostPath' |
desktop.envlocal |
dictionary | { 'X11LISTEN':'tcp'} |
desktop.nodeselector |
dictionary | {} |
desktop.username |
string | 'balloon' |
desktop.userid |
integer | 4096 |
desktop.groupid |
integer | 4096 |
desktop.userhomedirectory |
string | '/home/balloon' |
desktop.useinternalfqdn |
boolean | False |
desktop.uselocaltime |
boolean | False |
desktop.policies |
dictionary | { 'rules':{}, 'max_app_counter':5 } |
desktop.webhookdict |
dictionary | {} |
desktop.homedirectory
This option describes how to create the home directory for the user. The value can be defined as :
'None': no dedicated volume is created, the oc.user container use anemptyDir': { 'medium': 'Memory'}. All user data will be removed at logout.'hostPath': set a dedicated 'hostPath' volume, the user's container and applications share this volume. User home data are persistent.'persistentVolumeClaim': set a dedicated 'persistentVolumeClaim' volume, the user's container and applications share this volume. User home data are persistent.
To get more information about user's home directory volume, read the volumes chapter
desktop.remotehomedirectorytype
desktop.remotehomedirectorytype is a list of string. Each string describe if the remount access to a directory is allowed. example [ 'cifs', 'webdav' ]
For each entry in the desktop.remotehomedirectorytype list, abcdesktop.io try to mount the remote file system using data from the implicit auth provider.
If desktop.remotehomedirectorytype contains 'cifs' and if the authentification provider get homeDrive and homeDirectory attributs then abcdesktop request the kubernetes abcdesktop/CIFS Driver to mount the remote filesystem.
The user find a mount point named homeDrive value, and mounted to homeDirectory.
desktop.defaultbackgroundcolors
The desktop.defaultbackgroundcolors allow you to change the default background color.
The default value is a list of string [ '#6EC6F0', '#333333', '#666666', '#CD3C14', '#4BB4E6', '#50BE87', '#A885D8', '#FFB4E6' ]
The desktop.defaultbackgroundcolors length can contain up to 8 entries. To see the color
Open the url http://localhost:30443, in your web browser, to start a simple abcdesktop.io container.
http://localhost:30443
You should see the abcdesktop.io home page.
Press the Connect with Anonymous access, have look
At the right top corner, click on the menu and choose Settings, then click on Screen Colors
You should see the default background colors, for example :

desktop.envlocal
desktop.envlocal is a dictionary. desktop.envlocal contains a (key,value) added as environment variables to oc.user.
The default value is :
{
'X11LISTEN': 'tcp'
}
Reserved variables
| Variable | Values | Description |
|---|---|---|
X11LISTEN |
tcp |
permit X11 to listen on tcp port, default is udp |
ABCDESKTOP_RUN_DIR |
/var/run/desktop |
directory to write pid services |
ABCDESKTOP_LOG_DIR |
/var/log/desktop |
directory to write log files services |
DISABLE_REMOTEIP_FILTERING |
disabled |
disabled remote ip filtering inside pod user, default is disabled, change to enabled to remove core ip filtering |
SET_DEFAULT_WALLPAPER |
myfile.jpeg |
name of file to set the user wallpaper, this file must exist in ~/.wallpapers |
SET_DEFAULT_COLOR |
#6EC6F0 |
Value of default colour saved in file ~/.store/currentColor |
SENDCUTTEXT |
enabled |
Send clipboard changes to user. Set value to disabled to disable clipboard changes to user web browser. This value is overwrite by label ABCDESKTOP_LABEL_sendcuttext if exist SENDCUTTEXT=${ABCDESKTOP_LABEL_sendcuttext:-$SENDCUTTEXT}. The default value is enabled |
ACCEPTCUTTEXT |
enabled |
Accept clipboard updates from user. Set value to disabled to disable clipboard changes to user web browser. This value is overwrite by label ABCDESKTOP_LABEL_acceptcuttext if exist ACCEPTCUTTEXT=${ABCDESKTOP_LABEL_acceptcuttext:-$ACCEPTCUTTEXT}. The default value is enabled |
desktop.nodeselector
desktop.nodeselector is a dictionary. This option permits to assign user pods to nodes.
It specifies a map of key-value pairs. For the pod to be eligible to run on a node, the node must have each of the indicated key-value pairs as labels (it can have additional labels as well). The most common usage is one key-value pair.
The value must be a string, by example 'true', and matches the labels node value.
desktop.nodeselector: { 'abcdesktopworker': 'true' }
To set a label abcdesktopworker=true to a node
kubectl label node $YOUR_NODE abcdesktopworker=true
The commands returns
node/nodesample01 labeled
To list all labels on all nodes
kubectl -n abcdesktop get nodes --template '{{range .items}}{{.metadata.labels}}{{"\n"}}{{end}}'
The commands returns
map[beta.kubernetes.io/arch:amd64 beta.kubernetes.io/os:linux kubernetes.io/arch:amd64 kubernetes.io/hostname:abc3cp01 kubernetes.io/os:linux node-role.kubernetes.io/control-plane: node.kubernetes.io/exclude-from-external-load-balancers:]
map[abcdesktopworker:true beta.kubernetes.io/arch:amd64 beta.kubernetes.io/os:linux kubernetes.io/arch:amd64 kubernetes.io/hostname:abc3ws01 kubernetes.io/os:linux node-role.kubernetes.io/worker:worker]
map[abcdesktopworker:true beta.kubernetes.io/arch:amd64 beta.kubernetes.io/os:linux kubernetes.io/arch:amd64 kubernetes.io/hostname:abc3ws02 kubernetes.io/os:linux node-role.kubernetes.io/worker:worker]
map[abcdesktopworker:true beta.kubernetes.io/arch:amd64 beta.kubernetes.io/os:linux kubernetes.io/arch:amd64 kubernetes.io/hostname:abc3ws03 kubernetes.io/os:linux node-role.kubernetes.io/worker:worker]
desktop.nodeselector is used as selector by pyos to create user's pods and to pull container's images.
desktop.username
desktop.username is the name of the default username inside the user's pod.
If you define a LDAP auth with Posix ObjectClass support, this value is overwrite by the LDAP entry
The type of desktop.username is string. The default value is 'balloon'.
desktop.userid
desktop.userid describes the uid Number of the default user id number inside the user's pod.
If you define a LDAP auth with Posix ObjectClass support, this value is overwrite by the LDAP entry
The type of desktop.userid is integer. The default value is 4096.
desktop.groupid
desktop.groupid describes the gid Number of the default group id number inside the user's pod.
If you define a LDAP auth with Posix ObjectClass support, this value is overwrite by the LDAP entry
The type of desktop.userid is integer. The default value is 4096.
desktop.userhomedirectory
desktop.userhomedirectory describes the homedirectory of the user created inside the user's pod.
If you define a LDAP auth with Posix ObjectClass support, this value is overwrite by the LDAP entrycontainer. The type of desktop.userhomedirectory is string. The default value is /home/balloon.
desktop.uselocaltime
The desktop.uselocaltime is boolean, to use host value of /etc/localtime.
The default value is False.
If desktop.uselocaltime is True, this add a volume mapping from host file /etc/localtime to container file /etc/localtime.
desktop.policies
desktop.policies has a dictionary format.
| Entry | Description |
|---|---|
max_app_counter |
limit applications counter, without checking the docker container status |
rules |
rules dictionary 'rules': { 'volumes': { 'domainuser': { 'type': 'cifs', 'name': 'homedirectory', 'volumename': 'homedir' } } |
acl |
allow or denied desktop creation |
Example
desktop.policies: {
'rules': {
'volumes': {
'domainuser': { 'type': 'cifs', 'name': 'homedirectory', 'volumename': 'homedir' },
'Mygroupteam': { 'type': 'cifs', 'name': 'toto', 'unc': '//192.168.7.101/team', 'volumename': 'team' }
}
},
'acls' : {},
'max_app_counter' : 4
}
desktop.webhookdict
desktop.webhookdict is a dictionary to add key/value to the command create and destroy in rules objects.
Experimental features
desktop.desktopuseinternalfqdn
WARNING desktop.desktopuseinternalfqdn is an experimental feature, keep this value to False in production
desktop.desktopuseinternalfqdn describes the content of the payload data in the JWT Desktop Token.
The default value is False.
Nginx front end act as a reverse proxy. This reverse proxy use the FQDN of the user's pod to route http request.
If this value is set to False the payload data in the JWT Desktop Token contains the IP Address of the user Pod.
If this value is set to True the payload data in the JWT Desktop Token contains the FQDN of the user Pod.
If you CAN NOT add endpoint_pod_names in the coredns configuration, you MUST set desktop.desktopuseinternalfqdn to False.
This choice is less secure.
To set desktop.desktopuseinternalfqdn to True value, you have to update the coredns ConfigMap.
kind: ConfigMap
apiVersion: v1
metadata:
name: coredns
namespace: kube-system
data:
Corefile: |
.:53 {
log
errors
health
ready
kubernetes cluster.local in-addr.arpa ip6.arpa {
endpoint_pod_names
pods insecure
fallthrough in-addr.arpa ip6.arpa
transfer to *
ttl 30
}
prometheus :9153
forward . /etc/resolv.conf
cache 30
loop
reload
loadbalance
}