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 Configuration Key default_data/new_configuration
gesetzt werden.
Beim Neustart des Redmine-Dogus wird die definierte Konfiguration dann und nur dann angewandt, wenn die zuletzt angewendete Konfiguration sich von der neuen Konfiguration unterscheidet. Das frühere Verhalten von Key-Löschung wird nun nicht mehr unterstützt.
Die zuletzt angewandte Konfiguration wird in dem lokalen Configuration Key default_data/archived/<Zeitstempel>
gespeichert. Dieser Key ist grundsätzlich nicht von außen einsehbar und wird nur für die oben beschriebene Mechanik verwendet, um Konfiguration-Mehrfachanwendungen zu vermeiden.
Bei jedem Import werden IDs 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 Redmine zusammen ausgeliefert und kann
unter https://<fqdn>/redmine/extended_api/v1/spec
abgerufen werden. Um diese grafisch darzustellen, kann z. B.
das Swagger UI - Dogu genutzt werden.
{
"settings": {
"app_title": "Updated Redmine"
},
"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 Issue",
"is_closed": false
},
{
"name": "Issue in Progress",
"is_closed": false
},
{
"name": "Issue in Review",
"is_closed": false
},
{
"name": "Issue done",
"is_closed": true
}
],
"trackers": [
{
"name": "Bug tracker",
"default_status_name": "New Issue",
"description": "It's just a bug."
},
{
"name": "User Story Tracker",
"default_status_name": "New Issue",
"description": "It's just a User Story"
},
{
"name": "Task tracker",
"default_status_name": "New Issue",
"description": "It's just a Task."
}
],
"customFields": [
{
"type": "IssueCustomField",
"name": "Story Points Field",
"field_format": "int",
"role_names": [
"User"
],
"tracker_names": [
"Bug tracker",
"User Story Tracker",
"Task tracker"
]
},
{
"type": "IssueCustomField",
"name": "Extended description",
"field_format": "text",
"role_names": [
"User"
],
"tracker_names": [
"Bug tracker",
"User Story Tracker",
"Task tracker"
]
}
],
"enumerations": [
{
"type": "IssuePriority",
"name": "Not important at all"
},
{
"type": "IssuePriority",
"name": "A little bit important"
},
{
"type": "IssuePriority",
"name": "Very important"
},
{
"type": "IssuePriority",
"name": "Very Immediate"
},
{
"type": "IssuePriority",
"name": "Yesterday"
}
],
"workflows": [
{
"role_names": [
"User",
"Anonymous"
],
"tracker_names": [
"Bug tracker",
"User Story Tracker",
"Task tracker"
],
"transitions": {
"New Issue": {
"Issue in Progress": {
"always": "1"
},
"Issue in Review": {
"always": "1"
},
"Issue done": {
"always": "1"
}
},
"Issue in Progress": {
"Issue in Review": {
"always": "1"
},
"Issue done": {
"always": "1"
},
"New Issue": {
"always": "0"
}
},
"Issue in Review": {
"Issue in Progress": {
"always": "1"
},
"Issue done": {
"always": "1"
},
"New Issue": {
"always": "0"
}
},
"Issue done": {
"Issue in Progress": {
"always": "0"
},
"Issue done": {
"always": "0"
},
"New Issue": {
"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"
}
}
}
},
.....
]