Extended Attributes dynamisch

german
integration

#1

Hallo,

Unsere Extended Attributes hängen davon ab, wieviele von unseren Paketen installiert sind und unser Join-script ist ziemlich lange:

#!/bin/sh

VERSION=5

. /usr/share/univention-join/joinscripthelper.lib
. /usr/share/univention-lib/all.sh

joinscript_init

# add service to my host object
ucs_addServiceToLocalhost "7i" "$@"

# user extended attributes
eval "$(univention-config-registry shell)"

# UDM folder
univention-directory-manager container/cn create "$@" --ignore_exists \
    --position "cn=custom attributes,cn=univention,$ldap_base" \
    --set name="7i" \
    --set description="Attributes for 7iApps configuration"

univention-directory-manager container/cn create "$@" --ignore_exists \
    --position "$ldap_base" \
    --set name="7i"

# user Type ---------------------------------------------------------------
univention-directory-manager settings/extended_attribute create "$@" --ignore_exists \
    --position "cn=7i,cn=custom attributes,cn=univention,$ldap_base" \
    --set objectClass="iiiiiii4ucs-user" \
    --set module="users/user" \
    --set tabName="7iApps" \
    --set mayChange=1 \
\
    --set ldapMapping="iiiiiii4ucs-user-type" \
    --set name="iiiiiii4ucs-user-type" \
    --set syntax="iiiiiii4ucsUserType" \
    --set hook="iiiiiii4ucsUserType" \
    --set default="none" \
\
    --set shortDescription="Type (warning: *None* will delete user data)" \
    --set translationShortDescription='"de_DE" "Typ (Achtung: *None* löscht alle Benutzer-Daten)"' \
    --set groupPosition="1" \
    --set groupName="User type" \
    --set translationGroupName='"de_DE" "Benutzer-Typ"' \
    --set longDescription="Select the 7iApps role for this user. Warning: by changing the role to *None* all 7iApps-related user data will get deleted." \
    --set translationLongDescription='"de_DE" "Wählt die 7iApps-Rolle für den Benutzer. Achtung: wenn Sie die Rolle *None* wählen, werden alle 7iApps-bezogene Benutzer-Daten gelöscht."' \

# user Solutions ----------------------------------------------------------
# Wordpress
#univention-directory-manager settings/extended_attribute create "$@" --ignore_exists \
#    --position "cn=7i,cn=custom attributes,cn=univention,$ldap_base" \
#    --set objectClass="iiiiiii4ucs-user" \
#    --set module="users/user" \
#    --set tabName="7iApps" \
#    --set mayChange=1 \
#\
#    --set ldapMapping="iiiiiii4ucs-user-app-wordpress" \
#    --set name="iiiiiii4ucs-user-app-wordpress" \
#    --set syntax='boolean' \
#\
#    --set shortDescription="Wordpress" \
#    --set groupPosition="2" \
#    --set groupName="Access to apps" \
#    --set translationGroupName='"de_DE" "Zugriff auf Apps"' \
#    --set longDescription="Has access to the app (if installed)" \
#    --set translationLongDescription='"de_DE" "Kann auf die App zugreifen (wenn installiert)"' \
#
# Trac
#univention-directory-manager settings/extended_attribute create "$@" --ignore_exists \
#    --position "cn=7i,cn=custom attributes,cn=univention,$ldap_base" \
#    --set objectClass="iiiiiii4ucs-user" \
#    --set module="users/user" \
#    --set tabName="7iApps" \
#    --set mayChange=1 \
#\
#    --set ldapMapping="iiiiiii4ucs-user-app-trac" \
#    --set name="iiiiiii4ucs-user-app-trac" \
#    --set syntax='boolean' \
#\
#    --set shortDescription="Trac" \
#    --set groupPosition="2" \
#    --set groupName="Access to apps" \
#    --set translationGroupName='"de_DE" "Zugriff auf Apps"' \
#    --set longDescription="Has access to the app (if installed)" \
#    --set translationLongDescription='"de_DE" "Kann auf die App zugreifen (wenn installiert)"' \
#
# Svn
#univention-directory-manager settings/extended_attribute create "$@" --ignore_exists \
#    --position "cn=7i,cn=custom attributes,cn=univention,$ldap_base" \
#    --set objectClass="iiiiiii4ucs-user" \
#    --set module="users/user" \
#    --set tabName="7iApps" \
#    --set mayChange=1 \
#\
#    --set ldapMapping="iiiiiii4ucs-user-app-svn" \
#    --set name="iiiiiii4ucs-user-app-svn" \
#    --set syntax='boolean' \
#\
#    --set shortDescription="SVN" \
#    --set groupPosition="2" \
#    --set groupName="Access to apps" \
#    --set translationGroupName='"de_DE" "Zugriff auf Apps"' \
#    --set longDescription="Has access to the app (if installed)" \
#    --set translationLongDescription='"de_DE" "Kann auf die App zugreifen (wenn installiert)"' \
#
# Redmine
#univention-directory-manager settings/extended_attribute create "$@" --ignore_exists \
#    --position "cn=7i,cn=custom attributes,cn=univention,$ldap_base" \
#    --set objectClass="iiiiiii4ucs-user" \
#    --set module="users/user" \
#    --set tabName="7iApps" \
#    --set mayChange=1 \
#\
#    --set ldapMapping="iiiiiii4ucs-user-app-redmine" \
#    --set name="iiiiiii4ucs-user-app-redmine" \
#    --set syntax='boolean' \
#\
#    --set shortDescription="Redmine" \
#    --set groupPosition="2" \
#    --set groupName="Access to apps" \
#    --set translationGroupName='"de_DE" "Zugriff auf Apps"' \
#    --set longDescription="Has access to the app (if installed)" \
#    --set translationLongDescription='"de_DE" "Kann auf die App zugreifen (wenn installiert)"' \
#
# Phpmyfaq
#univention-directory-manager settings/extended_attribute create "$@" --ignore_exists \
#    --position "cn=7i,cn=custom attributes,cn=univention,$ldap_base" \
#    --set objectClass="iiiiiii4ucs-user" \
#    --set module="users/user" \
#    --set tabName="7iApps" \
#    --set mayChange=1 \
#\
#    --set ldapMapping="iiiiiii4ucs-user-app-phpmyfaq" \
#    --set name="iiiiiii4ucs-user-app-phpmyfaq" \
#    --set syntax='boolean' \
#\
#    --set shortDescription="PhpMyFAQ" \
#    --set groupPosition="2" \
#    --set groupName="Access to apps" \
#    --set translationGroupName='"de_DE" "Zugriff auf Apps"' \
#    --set longDescription="Has access to the app (if installed)" \
#    --set translationLongDescription='"de_DE" "Kann auf die App zugreifen (wenn installiert)"' \
#
# Dokuwiki
univention-directory-manager settings/extended_attribute create "$@" --ignore_exists \
    --position "cn=7i,cn=custom attributes,cn=univention,$ldap_base" \
    --set objectClass="iiiiiii4ucs-user" \
    --set module="users/user" \
    --set tabName="7iApps" \
    --set mayChange=1 \
\
    --set ldapMapping="iiiiiii4ucs-user-app-dokuwiki" \
    --set name="iiiiiii4ucs-user-app-dokuwiki" \
    --set syntax='boolean' \
\
    --set shortDescription="Dokuwiki" \
    --set groupPosition="2" \
    --set groupName="Access to apps" \
    --set translationGroupName='"de_DE" "Zugriff auf Apps"' \
    --set longDescription="Has access to the app (if installed)" \
    --set translationLongDescription='"de_DE" "Kann auf die App zugreifen (wenn installiert)"' \
  
# user Sites Other --------------------------------------------------------
# Sites
univention-directory-manager settings/extended_attribute create "$@" --ignore_exists \
    --position "cn=7i,cn=custom attributes,cn=univention,$ldap_base" \
    --set objectClass="iiiiiii4ucs-user" \
    --set module="users/user" \
    --set tabName="7iApps" \
    --set mayChange=1 \
\
    --set ldapMapping="iiiiiii4ucs-user-site-sites" \
    --set name="iiiiiii4ucs-user-site-sites" \
    --set syntax=string \
    --set multivalue=1 \
\
    --set shortDescription="sites" \
    --set groupPosition="3" \
    --set groupName="Access to other sites" \
    --set translationGroupName='"de_DE" "Zugriff auf weitere Sites"' \
    --set longDescription="Has access to the site" \
    --set translationLongDescription='"de_DE" "Kann auf die Site zugreifen"' \

# user Sites Default ------------------------------------------------------
# Site Test
univention-directory-manager settings/extended_attribute create "$@" --ignore_exists \
    --position "cn=7i,cn=custom attributes,cn=univention,$ldap_base" \
    --set objectClass="iiiiiii4ucs-user" \
    --set module="users/user" \
    --set tabName="7iApps" \
    --set mayChange=1 \
\
    --set ldapMapping="iiiiiii4ucs-user-site-test" \
    --set name="iiiiiii4ucs-user-site-test" \
    --set syntax='boolean' \
    --set default="1" \
\
    --set shortDescription="test" \
    --set groupPosition="3" \
    --set groupName="Access to default sites" \
    --set translationGroupName='"de_DE" "Zugriff auf Standard-Sites"' \
    --set longDescription="Has access to the site 'test'" \
    --set translationLongDescription='"de_DE" "Kann auf die Site zugreifen"' \

# Site Home
univention-directory-manager settings/extended_attribute create "$@" --ignore_exists \
    --position "cn=7i,cn=custom attributes,cn=univention,$ldap_base" \
    --set objectClass="iiiiiii4ucs-user" \
    --set module="users/user" \
    --set tabName="7iApps" \
    --set mayChange=1 \
\
    --set ldapMapping="iiiiiii4ucs-user-site-home" \
    --set name="iiiiiii4ucs-user-site-home" \
    --set syntax='boolean' \
\
    --set shortDescription="home" \
    --set groupPosition="3" \
    --set groupName="Access to default sites" \
    --set translationGroupName='"de_DE" "Zugriff auf Standard-Sites"' \
    --set longDescription="Has access to the site" \
    --set translationLongDescription='"de_DE" "Kann auf die Site zugreifen"' \

# restart UDM CLI server
stop_udm_cli_server

if [ $? != 0 ]; then exit 1; fi

joinscript_save_current_version

exit 0

Ich möchte einge generelle Routine schreiben, die jeweils im postinst aufgerufen wird und über alle installierten Pakete looped und die extende Attributes entsprechend setzt.
Anschliessend muss noch

. /usr/share/univention-lib/all.sh
stop_udm_cli_server

aufgerufen werden.

Das wäre für uns viel einfacher. Ist das so möglich?

Gruss,
Michael


#2

Hallo,

[quote]
Ich möchte einge generelle Routine schreiben, die jeweils im postinst aufgerufen wird und über alle installierten Pakete looped und die extende Attributes entsprechend setzt.[/quote]
ich bin mir nicht ganz sicher, ob ich das richtig verstanden habe. Hier jedoch drei Ansätze, um in einem Shell-Script über alle installierten Pakete zu iterieren (dpkg --get-selections) bzw. zu prüfen, ob bestimmte Pakete installiert sind (dpkg-query). Falls Ihnen das nicht weiterhilft, könnten Sie bitte noch einmal konkreter erklären, was gemacht werden soll.

Eine Schleife über alle installierten Pakete:

for package in $(dpkg --get-selections | grep '\binstall\b' | awk '{print $1}'); do echo "-- $package" done

Prüfe, ob die Pakete in $PACKAGES installiert sind:

PACKAGES="vim vim-common vim-runtime vim-tiny abc" for package in $PACKAGES; do if [ "$(dpkg-query -W -f='${Status}' $package 2>/dev/null)" = "install ok installed" ]; then echo "package $package is installed" # do something ... else echo "package $package is not installed" fi done

Prüfe in einer Funktion ob Pakete installiert sind:

[code]package_installed () {
local package="$1"
if [ “$(dpkg-query -W -f=’${Status}’ $package 2>/dev/null)” = “install ok installed” ]; then
return 0
fi
return 1
}

if package_installed vim; then
echo vim is installed
else
echo vim is not installed
fi

if package_installed abc; then
echo abc is installed
else
echo abc is not installed
fi[/code]

Mit freundlichen Grüßen
Felix Botner


#3

Danke für den Input, aber bringt mich nicht weiter.

  • Es geht um den UDM, bzw wie kann ich in der Web-Ansicht die Eingabefelder dynamisch mit einer “UDM-Reset-Routine” anpassen:
  • Wir haben ein Hauptpakete apacheapp-common. Da ist die ganze Logik drin, da soll auch diese “UDM-Reset-Routine” rein.
  • Wir haben weitere Pakete apacheapp-dokuwiki, -wordpress, -trac, etc. das sind nur Libraries ohne irgendwelche Programme von uns.

Ich habe die UDM-Reset-Routine geschrieben, die checked welche Pakete installiert sind (und welche nicht) und ein entsprechendes Shell-Script zusammenstellt.
Ein Script sieht wie folgt aus:

#!/bin/sh

. /usr/share/univention-lib/all.sh

# user extended attributes
$(univention-config-registry shell)

SERVICE="7i"
EXTENDED_ATTR_CONTAINER="cn=7i,cn=custom attributes,cn=univention,$ldap_base"

# UDM folder
univention-directory-manager container/cn create "$@" --ignore_exists \
--position "cn=custom attributes,cn=univention,$ldap_base" \
--set name="7i" \
--set description="Attributes for 7iApps configuration"

univention-directory-manager container/cn create "$@" --ignore_exists \
--position "$ldap_base" \
--set name="7i"

univention-directory-manager settings/extended_attribute create "$@" --ignore_exists \
--position "cn=7i,cn=custom attributes,cn=univention,$ldap_base" \
--set objectClass="iiiiiii4ucs-user" \
--set module="users/user" \
--set tabName="7iApps" \
--set mayChange=1 \
--set ldapMapping="iiiiiii4ucs-user-type" \
--set name="iiiiiii4ucs-user-type" \
--set syntax="iiiiiii4ucsUserType" \
--set shortDescription="Type (warning: *None* will delete user data)" \
--set translationShortDescription='"de_DE" "Typ (Achtung: *None* löscht alle Benutzer-Daten)"' \
--set groupPosition="1" \
--set groupName="User type" \
--set translationGroupName='"de_DE" "Benutzer-Typ"' \
--set longDescription="Select the 7iApps role for this user. Warning: by changing the role to *None* all 7iApps-related user data will get deleted." \
--set translationLongDescription='"de_DE" "Wählt die 7iApps-Rolle für den Benutzer. Achtung: wenn Sie die Rolle *None* wählen, werden alle 7iApps-bezogene Benutzer-Daten gelöscht."' \

univention-directory-manager settings/extended_attribute remove "$@" --dn "iiiiiii4ucs-user-app-wordpress,$EXTENDED_ATTR_CONTAINER" >/dev/null

univention-directory-manager settings/extended_attribute remove "$@" --dn "iiiiiii4ucs-user-app-trac,$EXTENDED_ATTR_CONTAINER" >/dev/null

univention-directory-manager settings/extended_attribute remove "$@" --dn "iiiiiii4ucs-user-app-svn,$EXTENDED_ATTR_CONTAINER" >/dev/null

univention-directory-manager settings/extended_attribute remove "$@" --dn "iiiiiii4ucs-user-app-redmine,$EXTENDED_ATTR_CONTAINER" >/dev/null

univention-directory-manager settings/extended_attribute remove "$@" --dn "iiiiiii4ucs-user-app-phpmyfaq,$EXTENDED_ATTR_CONTAINER" >/dev/null

univention-directory-manager settings/extended_attribute create "$@" --ignore_exists \
--position "cn=7i,cn=custom attributes,cn=univention,$ldap_base" \
--set objectClass="iiiiiii4ucs-user" \
--set module="users/user" \
--set tabName="7iApps" \
--set mayChange=1 \
--set ldapMapping="iiiiiii4ucs-user-app-dokuwiki" \
--set name="iiiiiii4ucs-user-app-dokuwiki" \
--set syntax="boolean" \
--set shortDescription="Dokuwiki" \
--set translationShortDescription='"de_DE" "Dokuwiki"' \
--set groupPosition="2" \
--set groupName="Access to apps" \
--set translationGroupName='"de_DE" "Zugriff auf Apps"' \
--set longDescription="Has access to the app" \
--set translationLongDescription='"de_DE" "Kann auf die App zugreifen"' \

univention-directory-manager settings/extended_attribute create "$@" --ignore_exists \
--position "cn=7i,cn=custom attributes,cn=univention,$ldap_base" \
--set objectClass="iiiiiii4ucs-user" \
--set module="users/user" \
--set tabName="7iApps" \
--set mayChange=1 \
--set ldapMapping="iiiiiii4ucs-user-site-test" \
--set name="iiiiiii4ucs-user-site-test" \
--set syntax="boolean" \
--set default="1" \
--set shortDescription="test" \
--set translationShortDescription='"de_DE" "test"' \
--set groupPosition="3" \
--set groupName="Access to default sites" \
--set translationGroupName='"de_DE" "Zugriff auf Standard-Sites"' \
--set longDescription="Has access to the site" \
--set translationLongDescription='"de_DE" "Kann auf die Site zugreifen"' \

univention-directory-manager settings/extended_attribute create "$@" --ignore_exists \
--position "cn=7i,cn=custom attributes,cn=univention,$ldap_base" \
--set objectClass="iiiiiii4ucs-user" \
--set module="users/user" \
--set tabName="7iApps" \
--set mayChange=1 \
--set ldapMapping="iiiiiii4ucs-user-site-home" \
--set name="iiiiiii4ucs-user-site-home" \
--set syntax="boolean" \
--set shortDescription="home" \
--set translationShortDescription='"de_DE" "home"' \
--set groupPosition="3" \
--set groupName="Access to default sites" \
--set translationGroupName='"de_DE" "Zugriff auf Standard-Sites"' \
--set longDescription="Has access to the site" \
--set translationLongDescription='"de_DE" "Kann auf die Site zugreifen"' \

univention-directory-manager settings/extended_attribute create "$@" --ignore_exists \
--position "cn=7i,cn=custom attributes,cn=univention,$ldap_base" \
--set objectClass="iiiiiii4ucs-user" \
--set module="users/user" \
--set tabName="7iApps" \
--set mayChange=1 \
--set ldapMapping="iiiiiii4ucs-user-site-sites" \
--set name="iiiiiii4ucs-user-site-sites" \
--set syntax="string" \
--set multivalue="1" \
--set shortDescription="sites" \
--set translationShortDescription='"de_DE" "sites"' \
--set groupPosition="4" \
--set groupName="Access to other sites" \
--set translationGroupName='"de_DE" "Zugriff auf weitere Sites"' \
--set longDescription="Has access to the site" \
--set translationLongDescription='"de_DE" "Kann auf die Site zugreifen"' \

stop_udm_cli_server

Die UDM-Reset-Routine läuft schön durch. Die Felder der instlalierten Pakete werden korrekt gesetzt, die Felder von nicht installierten Paketen werden gelöscht. Perfekt.

Aber es passiert nichts in der Web-Ansicht (management-console). Es werden keine Eingabe-Felder hinzugefügt oder so.
univention-management-server restart (oder so) nützt nichts.

Was ist zu tun?

Besten Dank,
Michael Hofmann


#4

[quote=“mphofmann”]…
Die UDM-Reset-Routine läuft schön durch. Die Felder der instlalierten Pakete werden korrekt gesetzt, die Felder von nicht installierten Paketen werden gelöscht. Perfekt.

Aber es passiert nichts in der Web-Ansicht (management-console). Es werden keine Eingabe-Felder hinzugefügt oder so.
univention-management-server restart (oder so) nützt nichts.

Was ist zu tun?[/quote]

Es sollen extended Attributes abhängig von den auf dem System installiert Paketen angelegt bzw. gelöscht werden?

Damit dies dann auch in der UMC entsprechend angezeigt wird, muss die Seite einmal neu geladen werden, oder man muss sich einmal abmelden/anmelden. Das kann auf der Kommandozeile auch mit

. /usr/share/univention-lib/umc.sh umc_frontend_new_hash
erzwungen werden (damit sollte die UMC dann die Module, mit eventuell anderen extended Attributes neu laden).

Mit freundlichen Grüßen
Felix Botner


#5

Danke für die Antwort. Hat geholfen.

Das Hauptproblem war aber auch, dass im Script “udm container/cn create --ignore_exists” stand. Das ändert ja nichts an bestehenden Attributen.
Mit “udm container/cn modify” wurden dann jedoch alle gewünschten Änderungen ausgeführt.

Gruss,
Michael Hofmann