25A8640C720E4DB398D87A8409A679AA
  • Thomas Pollinger
  • 13.05.2019
  • DE

RQL-Befehle in benutzerdefinierten Aufträgen: System- und Projekt-Migration

Im heutigen Artikel möchte ich zeigen, wie man mit RQL-Commands innerhalb benutzerdefinierten Aufträgen auch komplette System- und Projekt-Migrationen sehr einfach durchführen kann. Wie man in den vorherigen Artikeln aus der Serie OpenText™ | RQL-Commands bereits sehen konnte. Sind die RQL-Commands ein sehr mächtiger Werkzeugkasten und bei jedem Management Server direkt ohne weitere Software verfügbar.
 

Export aller Projekte

Als erstes möchte ich zeigen, wie man mit einem einzigen benutzerdefinierten Auftrag, alle Projekte automatisch exportierten kann:

<IODATA loginguid="[!guid_login!]">
    <PROJECT>
        <SYSTEM>
            <DRIVE name="C:\">
                <DIRECTORY action="createdir" 
                    name="OpenText\WS\MS\share\" 
                    newdir="Exports"/>
            </DRIVE>
        </SYSTEM>
    </PROJECT>
</IODATA>
<RQLCOMMAND type="for" 
    name="PROJECTS">
    <LIST>
        <IODATA loginguid="[!guid_login!]" 
            sessionkey="">
            <ADMINISTRATION>
                <USER guid="[!guid_user!]">
                    <PROJECTS action="list" 
                        extendedinfo="0" />
                </USER>
            </ADMINISTRATION>
        </IODATA>
    </LIST>
    <OBJECTIVES>
        <IODATA loginguid="[!guid_login!]">
            <ADMINISTRATION>
                <PROJECT action="export" 
                    projectguid="[!guid_project!]" 
                    targetpath="[!name_drive!][!name_directory!][!newdir_directory!]" 
                    reddotserverguid="[!guid_server!]" 
                    emailnotification="0" 
                    createfolderforeachexport="1" 
                    includearchive="1" 
                    logoutusers="1" />
            </ADMINISTRATION>
        </IODATA>
    </OBJECTIVES>
</RQLCOMMAND>

Dieser benutzerdefinierte Auftrag auf Basis von RQL-Commands ist sehr übersichtlich. Der Ablauf ist wie folgt:

  • Lege unter C:\OpenText\WS\MS\share das Verzeichnis Exports an.
  • Dann liste alle verfügbaren Projekte auf.
  • Starte für jedes Projekt einen Export in den zuvor angelegten Pfad.

Es werden genau drei RQL Befehle genutzt, welche alle in der RQL-Dokumentation (16.0.3) zu finden sind:

  • Creating Directory Folders
  • Listing Projects
  • Exporting Projects

In meinem Beispiel habe ich auf den Versand von E-Mails verzichtet. Dies lässt sich aber jederzeit wieder einbauen bzw. ergänzen. Hier das Beispiel dazu:

<IODATA loginguid="[!guid_login!]">
    <PROJECT>
        <SYSTEM>
            <DRIVE name="C:\">
                <DIRECTORY action="createdir" 
                    name="OpenText\WS\MS\share\" 
                    newdir="Exports"/>
            </DRIVE>
        </SYSTEM>
    </PROJECT>
</IODATA>
<RQLCOMMAND type="for" 
    name="PROJECTS">
    <LIST>
        <IODATA loginguid="[!guid_login!]" 
            sessionkey="">
            <ADMINISTRATION>
                <USER guid="[!guid_user!]">
                    <PROJECTS action="list" 
                        extendedinfo="0" />
                </USER>
            </ADMINISTRATION>
        </IODATA>
    </LIST>
    <OBJECTIVES>
        <IODATA loginguid="[!guid_login!]">
            <ADMINISTRATION>
                <PROJECT action="export" 
                    projectguid="[!guid_project!]" 
                    targetpath="[!name_drive!][!name_directory!][!newdir_directory!]" 
                    reddotserverguid="[!guid_server!]" 
                    emailnotification="0" 
                    createfolderforeachexport="1" 
                    includearchive="1" 
                    logoutusers="1"
                    to="[!guid_user!]" 
                    subject="Project : [!name_project!]" 
                    message="Export is completed" />
            </ADMINISTRATION>
        </IODATA>
    </OBJECTIVES>
</RQLCOMMAND>

 

Import aller Projekt-Exporte

Mit dem zweiten Beispiel möchte ich aufzeigen, wie einfach man mit den selben Bordmitteln man auch die Projekte wieder importieren kann:

<RQLCOMMAND type="for" 
    name="DIRECTORIES">
    <LIST>
        <IODATA loginguid="[!guid_login!]" 
            sessionkey="[!guid_login!]">
            <PROJECT>
                <SYSTEM>
                    <DRIVE name="C">
                        <DIRECTORY action="list" 
                            name="C:\OpenText\WS\MS\share\Exports\"/>
                    </DRIVE>
                </SYSTEM>
            </PROJECT>
        </IODATA>
    </LIST>
    <OBJECTIVES>
        <RQLCOMMAND type="if">
            <WHERE name="name_folder" 
                value=".." 
                operator="!=" />
            <OBJECTIVES>
                <IODATA loginguid="[!guid_login!]">
                    <ADMINISTRATION>
                        <PROJECT action="import" 
                            copy="1" 
                            projectname="[!name_folder!]" 
                            databaseserver="4A1D5D45091F4D4CB4F69B41B2CC6043" 
                            databasename="[!name_folder!]" 
                            userguid="[!guid_user!]" 
                            editorialserver="[!serverguid_login!]" 
                            reddotserverguid="[!serverguid_login!]" 
                            xmlpath="[!path_folder!]" 
                            importactormatchtype="0" 
                            includearchive="1" 
                            emailnotification="0" />
                    </ADMINISTRATION>
                </IODATA>
            </OBJECTIVES>
        </RQLCOMMAND>
    </OBJECTIVES>
</RQLCOMMAND>

Auch dieser benutzerdefinierte Auftrag auf Basis von RQL-Commands ist sehr übersichtlich. Der Ablauf ist wie folgt:

  • Ermittle alle Verzeichnisse eines bestimmten Ordners.
  • Für jedes Verzeichnis, außer das mit dem Namen "..", erzeuge einen Projekt-Import-Job.

Es werden genau drei RQL Befehle genutzt, welche alle in der RQL-Dokumentation (16.0.3) zu finden sind:

  • Listing All Directories
  • Importing Projects

Der einzige statische Wert ist die GUID der Datenbank-Verbindung. Jedoch ist das auch nicht wild, denn damit kann man sehr gut steuern, welche Export auf welchen DB-Server importiert werden soll. Wie auch schon im vorherigen Export-Beispiel habe ich auf den Versand von E-Mails verzichtet. Dies lässt sich aber auch jederzeit wieder einbauen bzw. ergänzen. Dazu einfach die RQL-Dokumentation zur Hand nehmen ;)


Hinweis: Wenn man sehr viele Projekte importieren möchte, empfehle ich die ProzessServerConfig anzupassen. Siehe dazu bitte Gewusst wie! "Optimierung der Asynchronen Prozesse". Damit kann man die Anzahl der Jobs des geleichen Typs steuern, welche dann zeitgleich verarbeitet werden sollen. Wenn man mehr Aufträge anlegt, als abgearbeitet werden können. Dann werden diese in der Queue angelegt, jedoch erst wenn ein anderer Import abgeschlossen wurde, nach der Reihe abgearbeitet. Das ist meist für die DB-Server angenehmer und führt auch zu weniger Problemen oder Last auf dem Mangement Server.


Fazit

Beide Beispiele sind nur ein grundlengender Ablauf und kann je nach Umgebung, Wünschen und Notwendigkeiten auch angepasst werden. Jedoch sieht man, wie einfach man mit den Bordmitteln sich schnell und einfach helfen kann. Denn dieser Artikel ist auf Grund einer Anfrage im Slack bei uns entstanden und der Aufwand für Entwicklung und Testen beider benutzerdefinierten Aufträge, auf einer Test-VM, lag bei unter 1,5 Stunden. Man sieht, hat man das Prinzip dieses Werkezeugs erst einmal verstanden, ist es eine Leichtigkeit damit sich selbst schnell zu helfen.

Bis dahin, viel Spaß beim testen und migirien ;)


Über den Autor:
Thomas Pollinger

... ist Senior Site Reliability Engineer bei der Vodafone GmbH in Düsseldorf. Seit dem Jahr 2007 betreut er zusammen mit seinen Kollegen die OpenText- (vormals RedDot-) Plattform Web Site Management für die deutsche Konzernzentrale.

Er entwickelt Erweiterungen in Form von Plug-Ins und PowerShell Skripten. Seit den Anfängen in 2001 (RedDot CMS 4.0) kennt er sich speziell mit der Arbeitweise und den Funktionen des Management Server aus.