Ändern der Depot-Konfiguration schlägt fehl

Antworten
andré
Beiträge: 324
Registriert: 07 Jan 2014, 10:48

Ändern der Depot-Konfiguration schlägt fehl

Beitrag von andré »

Hi,
ich habe zwei Fragen zu einem Thema was ich gerade bearbeite, vielleicht hat einer eine Idee.

Ich möchte einen Opsi-Server auf einen anderen umziehen, mit neuer IP und anderem Depotnamen.
Dazu bin ich dem Beitrag hier gefolgt. viewtopic.php?p=55380&sid=0d3786b4efa7b ... 6fd#p55380
  • Neuen Server aufgesetzt und inital eingerichtet
  • dispatch.conf angepasst
  • Backup eingespielt mit

    Code: Alles auswählen

    opsi-backup -v restore --new-server-id=opsi01.domain opsi_backup.tar.bz2 --backends mysql
  • alle Inhalte von Workbench, Repo und Depot synchronisiert
Auf dem neuen Server sind jetzt alle existierenden Clients da und ich kann im Opsi Configeditor unter Server-Konfiguration -> clientconfig die clientconfig.configserver.url anpassen.

Bei den Depoteigenschaften -> Depot-Konfiguration habe ich aber zwei Probleme.
  • depotRemoteURL und workbenchRemoteURL sind falsch. Der alte Server heißt opsi.domain und der neue opsi01.domain. Die URLs lauten auf dem neuen Server jetzt zum Beispiel

    Code: Alles auswählen

    smb://opsi01.domain/opsi01_depot
    Irgendeine Idee, warum der Name des Shares den Namen des Servers beinhaltet? In der smb.conf wurde nur opsi_depot angelegt.
  • Damit komme ich zum eigentlichen Problem: Wenn ich versuche, diese URL zu korrigieren, kommt dieser Fehler im opsi configeditor:

    Code: Alles auswählen

    [2023-10-26 12:01:13.857] unable to process JSON   (de.uib.opsicommand.ServerFacade)
    [2023-10-26 12:01:13.925] unable to process JSON   (de.uib.opsicommand.ServerFacade)
    [2023-10-26 12:01:13.934] Response 400 Bad Request    (de.uib.opsicommand.ServerFacade)
Traffic zwischen Configed Client und dem Server wird nicht geblockt.

Irgendeine Idee, was ich da machen kann? Ich weiß halt nicht, ob das ein Bug ist, oder ob ich bei der Konfiguration des neuen Servers was falsch gemacht habe.
Wie würde denn der opsi-admin Befehl lauten, um diese URLs direkt im Terminal anzupassen? Vielleicht gäbe es dabei ein bisschen mehr Output um das Problem einzugrenzen.

Hier auch noch das Log vom opsiconfiged zum Zeitpunkt des Fehlers:

Code: Alles auswählen

2023-10-26 13:06:03.868] [AWT-EventQueue-0] unexpected action on source de.uib.configed.gui.IconButton[,85,250,30x24,alignmentX=0.0,alignmentY=0.5,border=javax.swing.plaf.synth.SynthBorder@69a35bb7,flags=288,maximumSize=,minimumSize=,preferredSize=java.awt.Dimension[width=30,height=24],defaultIcon=,disabledIcon=,disabledSelectedIcon=sun.swing.ImageIconUIResource@7c54d550,margin=javax.swing.plaf.InsetsUIResource[top=0,left=0,bottom=0,right=0],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=,defaultCapable=true]   (de.uib.utilities.swing.FEditStringList)
[4] [2023-10-26 13:06:03.874] [AWT-EventQueue-0] unexpected action on source de.uib.configed.gui.IconButton[,85,250,30x24,disabled,alignmentX=0.0,alignmentY=0.5,border=javax.swing.plaf.synth.SynthBorder@69a35bb7,flags=288,maximumSize=,minimumSize=,preferredSize=java.awt.Dimension[width=30,height=24],defaultIcon=,disabledIcon=,disabledSelectedIcon=sun.swing.ImageIconUIResource@7c54d550,margin=javax.swing.plaf.InsetsUIResource[top=0,left=0,bottom=0,right=0],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=,defaultCapable=true]   (de.uib.utilities.swing.FEditStringList)
[4] [2023-10-26 13:06:03.875] [AWT-EventQueue-0] unexpected action on source de.uib.configed.gui.IconButton[,85,250,30x24,disabled,alignmentX=0.0,alignmentY=0.5,border=javax.swing.plaf.synth.SynthBorder@69a35bb7,flags=288,maximumSize=,minimumSize=,preferredSize=java.awt.Dimension[width=30,height=24],defaultIcon=,disabledIcon=,disabledSelectedIcon=sun.swing.ImageIconUIResource@7c54d550,margin=javax.swing.plaf.InsetsUIResource[top=0,left=0,bottom=0,right=0],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=,defaultCapable=true]   (de.uib.utilities.swing.FEditStringList)
[4] [2023-10-26 13:06:03.875] [AWT-EventQueue-0] unexpected action on source de.uib.configed.gui.IconButton[,85,250,30x24,disabled,alignmentX=0.0,alignmentY=0.5,border=javax.swing.plaf.synth.SynthBorder@69a35bb7,flags=288,maximumSize=,minimumSize=,preferredSize=java.awt.Dimension[width=30,height=24],defaultIcon=,disabledIcon=,disabledSelectedIcon=sun.swing.ImageIconUIResource@7c54d550,margin=javax.swing.plaf.InsetsUIResource[top=0,left=0,bottom=0,right=0],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=,defaultCapable=true]   (de.uib.utilities.swing.FEditStringList)
[3] [2023-10-26 13:06:08.735] [AWT-EventQueue-0] unable to process JSON   (de.uib.opsicommand.ServerFacade)
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.json.JSONObject$Null and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: java.util.HashMap["params"]->java.util.ArrayList[0]->java.util.ArrayList[0]->java.util.HashMap["notes"])
	at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77)
	at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1306)
	at com.fasterxml.jackson.databind.DatabindContext.reportBadDefinition(DatabindContext.java:408)
	at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:53)
	at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:30)
	at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeFields(MapSerializer.java:808)
	at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeWithoutTypeInfo(MapSerializer.java:764)
	at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:720)
	at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:35)
	at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serializeContents(IndexedListSerializer.java:119)
	at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:79)
	at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:18)
	at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serializeContents(IndexedListSerializer.java:119)
	at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:79)
	at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:18)
	at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeFields(MapSerializer.java:808)
	at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeWithoutTypeInfo(MapSerializer.java:764)
	at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:720)
	at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:35)
	at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480)
	at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:319)
	at com.fasterxml.jackson.databind.ObjectMapper._writeValueAndClose(ObjectMapper.java:4624)
	at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsBytes(ObjectMapper.java:3892)
	at de.uib.opsicommand.ServerFacade.produceMessagePack(ServerFacade.java:188)
	at de.uib.opsicommand.ServerFacade.produceGeneralRequestProperties(ServerFacade.java:149)
	at de.uib.opsicommand.ServerFacade.retrieveResponse(ServerFacade.java:234)
	at de.uib.opsicommand.AbstractPOJOExecutioner.doCall(AbstractPOJOExecutioner.java:35)
	at de.uib.opsidatamodel.OpsiserviceNOMPersistenceController.setHostValues(OpsiserviceNOMPersistenceController.java:4675)
	at de.uib.opsidatamodel.datachanges.HostUpdate.doCall(HostUpdate.java:30)
	at de.uib.opsidatamodel.datachanges.UpdateCollection.doCall(UpdateCollection.java:213)
	at de.uib.opsidatamodel.datachanges.UpdateCollection.doCall(UpdateCollection.java:213)
	at de.uib.configed.ConfigedMain$GeneralDataChangedKeeper.saveConfigs(ConfigedMain.java:3667)
	at de.uib.configed.ConfigedMain$GeneralDataChangedKeeper.save(ConfigedMain.java:3675)
	at de.uib.configed.ConfigedMain.checkSaveAll(ConfigedMain.java:3949)
	at de.uib.configed.gui.MainFrame.saveAction(MainFrame.java:2731)
	at de.uib.configed.gui.MainFrame.lambda$setupIcons1$63(MainFrame.java:1358)
	at java.desktop/javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at java.desktop/javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.desktop/java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
	at java.desktop/java.awt.Component.processMouseEvent(Unknown Source)
	at java.desktop/javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.desktop/java.awt.Component.processEvent(Unknown Source)
	at java.desktop/java.awt.Container.processEvent(Unknown Source)
	at java.desktop/java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
	at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
	at java.base/java.security.AccessController.doPrivileged(Unknown Source)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
	at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
	at java.base/java.security.AccessController.doPrivileged(Unknown Source)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)

[3] [2023-10-26 13:06:08.830] [AWT-EventQueue-0] unable to process JSON   (de.uib.opsicommand.ServerFacade)
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.json.JSONObject$Null and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: java.util.HashMap["params"]->java.util.ArrayList[0]->java.util.ArrayList[0]->java.util.HashMap["notes"])
	at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77)
	at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1306)
	at com.fasterxml.jackson.databind.DatabindContext.reportBadDefinition(DatabindContext.java:408)
	at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:53)
	at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:30)
	at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeFields(MapSerializer.java:808)
	at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeWithoutTypeInfo(MapSerializer.java:764)
	at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:720)
	at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:35)
	at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serializeContents(IndexedListSerializer.java:119)
	at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:79)
	at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:18)
	at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serializeContents(IndexedListSerializer.java:119)
	at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:79)
	at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:18)
	at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeFields(MapSerializer.java:808)
	at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeWithoutTypeInfo(MapSerializer.java:764)
	at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:720)
	at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:35)
	at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480)
	at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:319)
	at com.fasterxml.jackson.databind.ObjectMapper._writeValueAndClose(ObjectMapper.java:4624)
	at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsBytes(ObjectMapper.java:3892)
	at de.uib.opsicommand.ServerFacade.produceMessagePack(ServerFacade.java:188)
	at de.uib.opsicommand.ServerFacade.sendPOSTRequest(ServerFacade.java:276)
	at de.uib.opsicommand.ServerFacade.retrieveResponse(ServerFacade.java:237)
	at de.uib.opsicommand.AbstractPOJOExecutioner.doCall(AbstractPOJOExecutioner.java:35)
	at de.uib.opsidatamodel.OpsiserviceNOMPersistenceController.setHostValues(OpsiserviceNOMPersistenceController.java:4675)
	at de.uib.opsidatamodel.datachanges.HostUpdate.doCall(HostUpdate.java:30)
	at de.uib.opsidatamodel.datachanges.UpdateCollection.doCall(UpdateCollection.java:213)
	at de.uib.opsidatamodel.datachanges.UpdateCollection.doCall(UpdateCollection.java:213)
	at de.uib.configed.ConfigedMain$GeneralDataChangedKeeper.saveConfigs(ConfigedMain.java:3667)
	at de.uib.configed.ConfigedMain$GeneralDataChangedKeeper.save(ConfigedMain.java:3675)
	at de.uib.configed.ConfigedMain.checkSaveAll(ConfigedMain.java:3949)
	at de.uib.configed.gui.MainFrame.saveAction(MainFrame.java:2731)
	at de.uib.configed.gui.MainFrame.lambda$setupIcons1$63(MainFrame.java:1358)
	at java.desktop/javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at java.desktop/javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.desktop/java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
	at java.desktop/java.awt.Component.processMouseEvent(Unknown Source)
	at java.desktop/javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.desktop/java.awt.Component.processEvent(Unknown Source)
	at java.desktop/java.awt.Container.processEvent(Unknown Source)
	at java.desktop/java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
	at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
	at java.base/java.security.AccessController.doPrivileged(Unknown Source)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
	at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
	at java.base/java.security.AccessController.doPrivileged(Unknown Source)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)

[3] [2023-10-26 13:06:08.840] [AWT-EventQueue-0] Response 400 Bad Request    (de.uib.opsicommand.ServerFacade)

Pakete auf dem neuen Server:

Code: Alles auswählen

root@opsi01:~# dpkg -l |grep opsi
ii  opsi-linux-bootimage           20231013-1                     all          opsi bootimage for netboot tasks.
ii  opsi-linux-support             4.2.0.0-1                      all          Configure system to be able to deploy Linux with opsi.
ii  opsi-server-full               4.2.0.73-1                     all          opsi server
ii  opsi-tftpd-hpa                 5.2.8-78                       amd64        HPA's tftp server
ii  opsi-utils                     4.2.0.211-1                    amd64        Utilities for working with opsi
ii  opsi-windows-support           4.2.0.3-1                      all          Install utilities useful for deploying Windows with opsi.
ii  opsiconfd                      4.2.0.310-1                    amd64        opsi configuration service
ii  opsipxeconfd                   4.2.0.32-1                     amd64        opsi pxe configuration service
Benutzeravatar
n.doerrer
uib-Team
Beiträge: 267
Registriert: 23 Okt 2020, 16:11

Re: Ändern der Depot-Konfiguration schlägt fehl

Beitrag von n.doerrer »

Hi,

1. ist kurios. Ich vermute, wir ersetzen den alten Hostnamen durch den neuen Hostnamen in allen relevanten Werten. Und da der alte Server `opsi` hieß, wird dort `opsi_depot` zu `opsi01_depot` (facepalm... ich schaue mal, ob man das mit wenig Aufwand robuster hinkriegt)
2. Woher der configed-Fehler kommt, weiß ich leider nicht. Hier die Variante per opsi-cli

Code: Alles auswählen

opsi-cli --output-file=/tmp/host.json -l 6 jsonrpc execute host_getObjects [] '{"type":"OpsiConfigserver"}'
# /tmp/host.json bearbeiten
opsi-cli --input-file=/tmp/host.json -l 6 jsonrpc execute host_updateObjects
andré
Beiträge: 324
Registriert: 07 Jan 2014, 10:48

Re: Ändern der Depot-Konfiguration schlägt fehl

Beitrag von andré »

Code: Alles auswählen

ich schaue mal, ob man das mit wenig Aufwand robuster hinkriegt
Das wäre cool, danke.

Zumindest die Variante übers CLI hat funktioniert, ich konnte die URLs anpassen, Clients verbinden sich nun auf das korrekte Share. Damit kann ich das Problem also erstmal umgehen, danke dafür.
Benutzeravatar
n.doerrer
uib-Team
Beiträge: 267
Registriert: 23 Okt 2020, 16:11

Re: Ändern der Depot-Konfiguration schlägt fehl

Beitrag von n.doerrer »

Mit opsiconfd 4.3.0.117 ist das jetzt robuster.
Antworten