//Cloudogu EcoSystem Docs

Konfiguration bei Dogu-Start ausbringen

Es ist möglich, Konfiguration über den etcd auszubringen. Das ist für die folgende Konfiguration möglich:

  • Einstellungen verändern
  • Rollen erstellen oder verändern
  • Workflows erstellen
  • Aufzählungen erstellen
  • Custom-Fields erstellen
  • Tracker erstellen
  • Issue Statuses erstellen

Hinweis: Voraussetzung für die Funktionsfähigkeit dieses Mechanismus' ist es, dass die REST-API in den Einstellungen aktiviert ist.

Zum Anwenden der Konfiguration muss der etcd-Key config/easyredmine/default_data/new_configuration gesetzt werden. Beim Neustart des EasyRedmine-Dogus wird die definierte Konfiguration dann angewandt und anschließend dieser Key entfernt.

Die zuletzt angewandte Konfiguration wird in dem etcd-Key config/easyredmine/default_data/archived/<Zeitstempel> gespeichert.

Bei jedem Import werden ID's und Namen von Rollen, Ticket-Status und Tracker von der Datenbank der aktuellen Instanz abgefragt. Dies ermöglicht die Verwendung der genannten Objekte bei der Erstellung von beliebigen Feldern.

Beispielkonfiguration

Im Folgenden ist eine funktionsfähige Beispielkonfiguration und eine grobe Erklärung der einzelnen Felder hinterlegt. Die Konfiguration orientiert sich sehr stark an der API des extendedrestapi-Plugins.

Für weitere Informationen über die API des extended_rest_api-Plugins: Mit dem Plugin wird eine Openapi 3.0 Definition für die API ausgeliefert. Diese ist auf der Seite des Plugins auf Github zu finden. Alternativ wird diese mit EasyRedmine zusammen ausgeliefert und kann unter https://<fqdn>/easyredmine/extended_api/v1/spec abgerufen werden. Um diese grafisch darzustellen, kann z. B. das Swagger UI - Dogu genutzt werden.

{
  "settings": {
    "app_title": "Updated EasyRedmine"
  },
  "roles": [
    {
      "name": "User",
      "permissions": [
        "add_project",
        "edit_project",
        "close_project",
        "select_project_modules",
        "manage_members",
        "manage_versions",
        "add_subprojects",
        "manage_public_queries",
        "save_queries",
        "view_messages",
        "add_messages",
        "view_calendar",
        "view_documents",
        "view_files",
        "manage_files",
        "view_gantt",
        "view_issues",
        "add_issues",
        "edit_issues",
        "manage_issue_relations",
        "add_issue_notes",
        "view_news",
        "comment_news",
        "view_changesets",
        "browse_repository",
        "view_time_entries",
        "log_time",
        "view_wiki_pages",
        "view_wiki_edits",
        "edit_wiki_pages"
      ]
    }
  ],
  "issueStatuses": [
    {
      "name": "New",
      "is_closed": false
    },
    {
      "name": "In Progress",
      "is_closed": false
    },
    {
      "name": "Review",
      "is_closed": false
    },
    {
      "name": "Done",
      "is_closed": true
    }
  ],
  "trackers": [
    {
      "name": "Bug",
      "default_status_name": "New",
      "description": "It's just a bug."
    },
    {
      "name": "User Story",
      "default_status_name": "New",
      "description": "It's just a User Story"
    },
    {
      "name": "Task",
      "default_status_name": "New",
      "description": "It's just a Task."
    }
  ],
  "customFields": [
    {
      "type": "IssueCustomField",
      "name": "Story Points",
      "field_format": "int",
      "role_names": [
        "User"
      ],
      "tracker_names": [
        "Bug",
        "User Story",
        "Task"
      ]
    },
    {
      "type": "IssueCustomField",
      "name": "Extended description",
      "field_format": "text",
      "role_names": [
        "User"
      ],
      "tracker_names": [
        "Bug",
        "User Story",
        "Task"
      ]
    }
  ],
  "enumerations": [
    {
      "type": "IssuePriority",
      "name": "Not important at all"
    },
    {
      "type": "IssuePriority",
      "name": "A little bit important"
    },
    {
      "type": "IssuePriority",
      "name": "Very important"
    },
    {
      "type": "IssuePriority",
      "name": "Immediate"
    },
    {
      "type": "IssuePriority",
      "name": "Yesterday"
    }
  ],
  "workflows": [
    {
      "role_names": [
        "User",
        "Anonymous"
      ],
      "tracker_names": [
        "Bug",
        "User Story",
        "Task"
      ],
      "transitions": {
        "New": {
          "In Progress": {
            "always": "1"
          },
          "Review": {
            "always": "1"
          },
          "Done": {
            "always": "1"
          }
        },
        "In Progress": {
          "Review": {
            "always": "1"
          },
          "Done": {
            "always": "1"
          },
          "New": {
            "always": "0"
          }
        },
        "Review": {
          "In Progress": {
            "always": "1"
          },
          "Done": {
            "always": "1"
          },
          "New": {
            "always": "0"
          }
        },
        "Done": {
          "In Progress": {
            "always": "0"
          },
          "Done": {
            "always": "0"
          },
          "New": {
            "always": "0"
          }
        }
      }
    }
  ]
}

Bereich settings

Ermöglicht das Verändern globaler Einstellungen.

Ein JSON-Objekt im folgenden Format:

{
  ......
  "<name der einstellung 1>": "<wert 1>",
  "<name der einstellung 2>": "<wert 2>",
  ......
}

Bereich roles

Ermöglicht das Anlegen oder Verändern von Rollen.

Ein JSON-Objekt im folgenden Format:

[
  .....
  {
    "name": "<Name der Rolle>",
    "permissions": [
      "<Wert>",
      ...
    ]
  },
  .....
]

Bereich issueStatuses

Ermöglicht das Anlegen neuer Ticket-Status.

[ 
  .....
  {
    "name": "<Name des Ticket-Status>",
    "is_closed": <true|false>
  },
  .....
]

Bereich customFields

Ermöglicht das Anlegen neuer benutzerdefinierter Felder.

Ein JSON-Array mit allen anzulegenden benutzerdefinierten Feldern in folgendem Format:

[
  .....
  {
    "type": "<Typ des Feldes, z.B 'IssueCustomField'>",
    "name": "<Name des Feldes>",
    "field_format": "<Format des Feldes z.B 'int'>",
    "role_ids": [
      "<Id einer Rolle>"
    ]
  },
  .....
]

Bereich enumerations

Ermöglicht das Anlegen neuer Aufzählungen.

Ein JSON-Array mit allen anzulegenden Aufzählungen in folgendem Format:

[
  .....
  {
    "type": "<Typ der Aufzählung (z.B 'IssuePriority')>",
    "name": "<Name der Aufzählung>",
    "custom_field_values": {
      "<id eines custom-fields | name eines custom-fields>": "<name eines Wertes>"
      "<id eines custom-fields | name eines custom-fields>": "<name eines Wertes>"
    }
  },
  .....
]
Besonderheit der custom_field_values

Der Eintrag custom_field_values ist ein Json-Objekt, bei welchem der Key entweder der id eines Benutzerdefinierten Feldes oder aber dem Namen entspricht. Der Name kann aber nur dann verwendet werden, wenn das custom-field zuvor über den hier beschriebenen Mechanismus angelegt worden ist.

Bereich trackers

Ermöglicht das Anlegen neuer Tracker.

Ein JSON-Array mit allen anzulegenden Trackern in folgendem Format:

[
  .....
  {
    "name": "<tracker 1 name>",
    "default_status_id": <issue-status-id>,
    "description": "<description>"
  },
  {
    "name": "<tracker 2 name>",
    "default_status_name": "<issue-status-name>",
    "description": "<description>"
  },
  .....
]
Besonderheit des Feldes default_status_name

Statt des Feldes default_status_id kann alternativ das Feld default_status_name angegeben werden. Dies funktioniert allerdings nur dann, wenn der Ticket-Status vorher über den hier beschriebenen Mechanismus angelegt worden ist.

Bereich workflows

Ermöglicht das Anlegen neuer Workflows.

Ein JSON-Array mit allen anzulegenden Workflows in folgendem Format:

[
  .....
  {
    "role_names": [
      "<rollen-name 1>",
      "<rollen-name 2>"
    ],
    "tracker_names": [
      "<tracker-name 1>",
      "<tracker-name 2>"
    ],
    "transitions": {
      "<from-issue-status-id>": {
        "<to-issue-status-id>": {
          "always": "1"
        }
      },
      "<from-issue-status-name>": {
        "<to-issue-status-name>": {
          "always": "1"
        }
      }
    }
  },
  .....
]

Konfiguration zusätzlicher Menüpunkte für Benutzertypen

Für Benutzertypen können über den etcd zusätzliche Menüpunkte konfiguriert werden. Die Menüpunkte werden beim nächsten Start des Dogus angelegt und der Eintrag im etcd anschließend wieder entfernt, damit die Menüpunkte bei einem weiteren Neustart des Dogus nicht erneut ausgebracht werden. Im etcd werden die Einstellungen im JSON-Format unter dem Schlüssel /config/easyredmine/default_data/usertype_settings abgelegt.

Beispielkonfiguration

{
  "custom_menu_entries": [
    {
      "name": "Handbuch 🔗",
      "url": "https://docs.cloudogu.com/de/usermanual/easyredmine/1_administrators_checklist/",
      "icon": "icon-help"
    }
  ]
}