Public Information
38
dsl/README.md
Normal file
@@ -0,0 +1,38 @@
|
||||
# DSL
|
||||
|
||||
https://structurizr.com/dsl
|
||||
|
||||
# Strukturizr Lite
|
||||
|
||||
```
|
||||
docker run -it --rm -p 8080:8080 -v $(pwd):/usr/local/structurizr structurizr/lite
|
||||
```
|
||||
|
||||
# Export
|
||||
|
||||
```
|
||||
https://github.com/structurizr/puppeteer
|
||||
```
|
||||
|
||||
Install
|
||||
|
||||
```
|
||||
brew install node
|
||||
npm i puppeteer
|
||||
```
|
||||
|
||||
Export
|
||||
|
||||
```
|
||||
node export-diagrams.js http://localhost:8080/workspace/diagrams svg
|
||||
```
|
||||
|
||||
## K8s Theme:
|
||||
|
||||
https://structurizr.com/help/theme?url=https://static.structurizr.com/themes/kubernetes-v0.3/theme.json
|
||||
|
||||
|
||||
## Shapes
|
||||
|
||||
https://docs.structurizr.com/ui/diagrams/notation
|
||||
|
||||
32
dsl/adminserver.dsl
Normal file
@@ -0,0 +1,32 @@
|
||||
adminserver = softwareSystem "nplus Remote Management Server" {
|
||||
tags "nplus"
|
||||
description "Layer 4 Proxy with RMS to simulate a classic environment to allow offline configuration"
|
||||
|
||||
replicaset = Container "ReplicaSet" "StatefulSet Replica 1" {
|
||||
technology "Kubernetes"
|
||||
tags "Kubernetes - sts"
|
||||
|
||||
main = component "RMS Container" "Container Template with official Image" {
|
||||
technology "Java"
|
||||
tags "nplus"
|
||||
-> nplus.confpvc "mount global Instance conf"
|
||||
-> nstlA.svc "remote Administration"
|
||||
-> nstlB.svc "remote Administration"
|
||||
-> rs.svc "remote Administration"
|
||||
-> nappl.svc "remote Administration"
|
||||
-> nappljobs.svc "remote Administration"
|
||||
-> pipelinercm.svc "remote Administration"
|
||||
-> pipelinerac.svc "remote Administration"
|
||||
-> ilm.svc "remote Administration"
|
||||
-> cmis.svc "remote Administration"
|
||||
-> mon.svc "remote Administration"
|
||||
}
|
||||
!include "copyConf.dsl"
|
||||
!include "waitFor.dsl"
|
||||
}
|
||||
!include "service.dsl"
|
||||
l3lb = Container "LoadBalancer Service" "Kubernetes Service with Layer 3 Load Balancer" {
|
||||
technology "Kubernetes"
|
||||
this -> replicaset.main "balance Layer 3 traffic"
|
||||
}
|
||||
}
|
||||
16
dsl/application.dsl
Normal file
@@ -0,0 +1,16 @@
|
||||
application = softwareSystem "Application" {
|
||||
description "Initialize Document Areas and (Re-) Import Generic Base Apps when updates occur"
|
||||
tags "nplus"
|
||||
job = Container "Job" "PostSync Job" {
|
||||
technology "Kubernetes"
|
||||
tags "Kubernetes - job"
|
||||
|
||||
main = component "NAPPL Container" "Container Template with official Image Running AppInstaller" {
|
||||
technology "Java"
|
||||
tags "nscale"
|
||||
-> nappljobs.svc "consume" "Advanced Connect Protocol Adapter"
|
||||
-> nplus.confpvc "mount pool"
|
||||
}
|
||||
!include "waitFor.dsl"
|
||||
}
|
||||
}
|
||||
13
dsl/clusterService.dsl
Normal file
@@ -0,0 +1,13 @@
|
||||
clusterService = element "nscale Cluster Service" {
|
||||
tags "Kubernetes - svc"
|
||||
description "selects all cluster members, nappl and pipeliner"
|
||||
-> nappl "discover"
|
||||
-> nappljobs "discover"
|
||||
-> pipelinercm "discover"
|
||||
}
|
||||
nappl.replicaset.main -> nappljobs.replicaset.main "cluster communication"
|
||||
nappl.replicaset.main -> pipelinercm.replicaset.pl "cluster communication"
|
||||
nappljobs.replicaset.main -> nappl.replicaset.main "cluster communication"
|
||||
nappljobs.replicaset.main -> pipelinercm.replicaset.pl "cluster communication"
|
||||
pipelinercm.replicaset.pl -> nappl.replicaset.main "cluster communication"
|
||||
pipelinercm.replicaset.pl -> nappljobs.replicaset.main "cluster communication"
|
||||
18
dsl/cmis.dsl
Normal file
@@ -0,0 +1,18 @@
|
||||
cmis = softwareSystem "nscale CMIS Connector" {
|
||||
tags "nscale"
|
||||
replicaset = Container "ReplicaSet" "StatefulSet with default Replica 2" {
|
||||
technology "Kubernetes"
|
||||
tags "Kubernetes - sts"
|
||||
|
||||
main = component "CMIS Container" "Container Template with official Image" {
|
||||
technology "Java"
|
||||
tags "nscale"
|
||||
-> nplus.confpvc "mount conf"
|
||||
-> nappl.svc "consume" "Advanced Connect Protocol Adapter"
|
||||
}
|
||||
!include "copyConf.dsl"
|
||||
!include "waitFor.dsl"
|
||||
}
|
||||
!include "service.dsl"
|
||||
!include "ingress.dsl"
|
||||
}
|
||||
6
dsl/copyConf.dsl
Normal file
@@ -0,0 +1,6 @@
|
||||
copyConf = component "init:copyConfig" "Init-Container that extracts the initial configuration from the main component and copies it to the central config git share" {
|
||||
technology "bash"
|
||||
tags "nplus"
|
||||
-> nplus.confpvc "mount etc"
|
||||
main -> this "copy initial config"
|
||||
}
|
||||
4
dsl/dataPvc.dsl
Normal file
@@ -0,0 +1,4 @@
|
||||
datapvc = Container "Data Volume" "Persistent Volume Claim for a fast RWO Data Volume" {
|
||||
technology "PVC"
|
||||
tags "Kubernetes - pvc"
|
||||
}
|
||||
11
dsl/database.dsl
Normal file
@@ -0,0 +1,11 @@
|
||||
database = softwareSystem "Database" {
|
||||
tags "Database"
|
||||
replicaset = Container "ReplicaSet" "StatefulSet with Replica 1" {
|
||||
technology "Kubernetes"
|
||||
tags "Kubernetes - sts"
|
||||
|
||||
main = component "Postgres Container" "Container Template with official Image" {
|
||||
}
|
||||
}
|
||||
!include "service.dsl"
|
||||
}
|
||||
27
dsl/environment.dsl
Normal file
@@ -0,0 +1,27 @@
|
||||
nplus = softwareSystem "nplus Environment" {
|
||||
tags "nplus"
|
||||
description "provides global configuration git and web ui"
|
||||
toolbox = Container "nplus Toolbox"{
|
||||
tags "Kubernetes - sts, nplus"
|
||||
description "provides Tools for Admin Tasks"
|
||||
}
|
||||
davserver = Container "nplus DAV Server"{
|
||||
tags "Kubernetes - sts, nplus"
|
||||
description "provides Config DAV Access for Admins to upload snippets etc."
|
||||
}
|
||||
operator = Container "nplus Operator"{
|
||||
tags "Kubernetes - sts, nplus"
|
||||
description "controlls the nplus Custom Resources and provides status information for instances and components"
|
||||
}
|
||||
confpvc = Container "conf" {
|
||||
tags "Kubernetes - pvc"
|
||||
description "common store for file based configuration data, versioned in git"
|
||||
toolbox -> this "attach"
|
||||
davserver -> this "attach"
|
||||
}
|
||||
Container "nstore Downloader" {
|
||||
description "cron Job downloading Apps from nstore"
|
||||
tags "Kubernetes - cronjob, nplus"
|
||||
-> confpvc "pool"
|
||||
}
|
||||
}
|
||||
1
dsl/export/c_nplus-key.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 0 2500 1000" style="background: #ffffff"><g transform="translate(25,100)"><rect width="450" height="300" rx="3" ry="3" x="0" y="0" fill="#424c63" stroke-width="2" stroke="#3d6fdd"/><text x="225" y="77.5" text-anchor="middle" fill="#ffffff" font-size="30px" font-family="Open Sans"><tspan x="225" dy="40px">Kubernetes - cronjob,</tspan><tspan x="225" dy="40px">nplus</tspan></text><image xlink:href="https://static.structurizr.com/themes/kubernetes-v0.3/cronjob-256.png" x="195" y="172.5" width="60" height="60" opacity="1"/></g><g transform="translate(525,100)"><path id="keyKubernetes-pvcCylinderPath" d="M 0,22.5 a 225,22.5 0,0,0 450 0 a 225,22.5 0,0,0 -450 0 l 0,255 a 225,22.5 0,0,0 450 0 l 0,-255" fill="#dddddd" stroke-width="2" stroke="#3d6fdd"></path><text x="225" y="107.5" text-anchor="middle" fill="#3d6fdd" font-size="30px" font-family="Open Sans"><tspan x="225" dy="40px">Kubernetes - pvc</tspan></text><image xlink:href="https://static.structurizr.com/themes/kubernetes-v0.3/pvc-256.png" x="195" y="165" width="60" height="60" opacity="1"/></g><g transform="translate(1025,100)"><rect width="450" height="300" rx="3" ry="3" x="0" y="0" fill="#424c63" stroke-width="2" stroke="#3d6fdd"/><text x="225" y="96.25" text-anchor="middle" fill="#ffffff" font-size="30px" font-family="Open Sans"><tspan x="225" dy="40px">Kubernetes - sts, nplus</tspan></text><image xlink:href="https://static.structurizr.com/themes/kubernetes-v0.3/sts-256.png" x="195" y="153.75" width="60" height="60" opacity="1"/></g><g transform="translate(1525,100)"><rect width="450" height="300" rx="3" ry="3" x="0" y="0" fill="#424c63" stroke-width="2" stroke="#3b4459"/><text x="225" y="131.25" text-anchor="middle" fill="#ffffff" font-size="30px" font-family="Open Sans"><tspan x="225" dy="40px">nplus</tspan></text></g><g transform="translate(2025,25)"><rect x="0" y="180" width="450" height="270" rx="90" fill="#dddddd" stroke-width="2" stroke="#c7c7c7"/><circle cx="225" cy="100" r="100" fill="#dddddd" stroke-width="2" stroke="#c7c7c7"/><line x1="90" y1="300" x2="90" y2="450" stroke-width="2" stroke="#c7c7c7"/><line x1="360" y1="300" x2="360" y2="450" stroke-width="2" stroke="#c7c7c7"/><text x="225" y="256.25" text-anchor="middle" fill="#000000" font-size="30px" font-family="Open Sans"><tspan x="225" dy="40px">Person</tspan></text></g><g transform="translate(25,600)"><rect width="450" height="300" rx="10" ry="10" x="0" y="0" fill="#0f9536" stroke-width="5" stroke="#0f9536"/><rect width="430" height="250" rx="10" ry="10" x="10" y="40" fill="#11a63c" stroke-width="0"/><ellipse cx="20" cy="20" rx="10" ry="10" fill="#11a63c" stroke-width="0"/><ellipse cx="50" cy="20" rx="10" ry="10" fill="#11a63c" stroke-width="0"/><ellipse cx="80" cy="20" rx="10" ry="10" fill="#11a63c" stroke-width="0"/><text x="225" y="141.25" text-anchor="middle" fill="#ffffff" font-size="30px" font-family="Open Sans"><tspan x="225" dy="40px">richclient, nscale</tspan></text></g><g transform="translate(525,670)"><path d="M390,0 L390,60 L450,30 L 390,0" style="fill:#707070" stroke-dasharray="" /><path d="M0,30 L390,30" style="stroke:#707070; stroke-width: 6; fill: none; stroke-dasharray: 30 30;" /><text x="225" y="76.25" text-anchor="middle" fill="#707070" font-size="30px" font-family="Open Sans"><tspan x="225" dy="40px">Relationship</tspan></text></g></svg>
|
||||
|
After Width: | Height: | Size: 3.4 KiB |
1
dsl/export/c_nplus.svg
Normal file
|
After Width: | Height: | Size: 47 KiB |
152
dsl/export/export-diagrams.js
Normal file
@@ -0,0 +1,152 @@
|
||||
const puppeteer = require('puppeteer');
|
||||
const fs = require('fs');
|
||||
|
||||
const FILENAME_SUFFIX = '';
|
||||
|
||||
const PNG_FORMAT = 'png';
|
||||
const SVG_FORMAT = 'svg';
|
||||
|
||||
const IGNORE_HTTPS_ERRORS = true;
|
||||
const HEADLESS = true;
|
||||
|
||||
const IMAGE_VIEW_TYPE = 'Image';
|
||||
|
||||
if (process.argv.length < 4) {
|
||||
console.log("Usage: <structurizrUrl> <png|svg> [username] [password]")
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const url = process.argv[2];
|
||||
const format = process.argv[3];
|
||||
|
||||
if (format !== PNG_FORMAT && format !== SVG_FORMAT) {
|
||||
console.log("The output format must be ' + PNG_FORMAT + ' or ' + SVG_FORMAT + '.");
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
var username;
|
||||
var password;
|
||||
|
||||
if (process.argv.length > 3) {
|
||||
username = process.argv[4];
|
||||
password = process.argv[5];
|
||||
}
|
||||
|
||||
var expectedNumberOfExports = 0;
|
||||
var actualNumberOfExports = 0;
|
||||
|
||||
(async () => {
|
||||
const browser = await puppeteer.launch({ignoreHTTPSErrors: IGNORE_HTTPS_ERRORS, headless: HEADLESS});
|
||||
const page = await browser.newPage();
|
||||
|
||||
if (username !== undefined && password !== undefined) {
|
||||
// sign in
|
||||
const parts = url.split('://');
|
||||
const signinUrl = parts[0] + '://' + parts[1].substring(0, parts[1].indexOf('/')) + '/dashboard';
|
||||
console.log(' - Signing in via ' + signinUrl);
|
||||
|
||||
await page.goto(signinUrl, { waitUntil: 'networkidle2' });
|
||||
await page.type('#username', username);
|
||||
await page.type('#password', password);
|
||||
await page.keyboard.press('Enter');
|
||||
await page.waitForSelector('div#dashboard');
|
||||
}
|
||||
|
||||
// visit the diagrams page
|
||||
console.log(" - Opening " + url);
|
||||
await page.goto(url, { waitUntil: 'domcontentloaded' });
|
||||
await page.waitForFunction('structurizr.scripting && structurizr.scripting.isDiagramRendered() === true');
|
||||
|
||||
if (format === PNG_FORMAT) {
|
||||
// add a function to the page to save the generated PNG images
|
||||
await page.exposeFunction('savePNG', (content, filename) => {
|
||||
console.log(" - " + filename);
|
||||
content = content.replace(/^data:image\/png;base64,/, "");
|
||||
fs.writeFile(filename, content, 'base64', function (err) {
|
||||
if (err) throw err;
|
||||
});
|
||||
|
||||
actualNumberOfExports++;
|
||||
|
||||
if (actualNumberOfExports === expectedNumberOfExports) {
|
||||
console.log(" - Finished");
|
||||
browser.close();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// get the array of views
|
||||
const views = await page.evaluate(() => {
|
||||
return structurizr.scripting.getViews();
|
||||
});
|
||||
|
||||
views.forEach(function(view) {
|
||||
if (view.type === IMAGE_VIEW_TYPE) {
|
||||
expectedNumberOfExports++; // diagram only
|
||||
} else {
|
||||
expectedNumberOfExports++; // diagram
|
||||
expectedNumberOfExports++; // key
|
||||
}
|
||||
});
|
||||
|
||||
console.log(" - Starting export");
|
||||
for (var i = 0; i < views.length; i++) {
|
||||
const view = views[i];
|
||||
|
||||
await page.evaluate((view) => {
|
||||
structurizr.scripting.changeView(view.key);
|
||||
}, view);
|
||||
|
||||
await page.waitForFunction('structurizr.scripting.isDiagramRendered() === true');
|
||||
|
||||
if (format === SVG_FORMAT) {
|
||||
const diagramFilename = FILENAME_SUFFIX + view.key + '.svg';
|
||||
const diagramKeyFilename = FILENAME_SUFFIX + view.key + '-key.svg'
|
||||
|
||||
var svgForDiagram = await page.evaluate(() => {
|
||||
return structurizr.scripting.exportCurrentDiagramToSVG({ includeMetadata: true });
|
||||
});
|
||||
|
||||
console.log(" - " + diagramFilename);
|
||||
fs.writeFile(diagramFilename, svgForDiagram, function (err) {
|
||||
if (err) throw err;
|
||||
});
|
||||
actualNumberOfExports++;
|
||||
|
||||
if (view.type !== IMAGE_VIEW_TYPE) {
|
||||
var svgForKey = await page.evaluate(() => {
|
||||
return structurizr.scripting.exportCurrentDiagramKeyToSVG();
|
||||
});
|
||||
|
||||
console.log(" - " + diagramKeyFilename);
|
||||
fs.writeFile(diagramKeyFilename, svgForKey, function (err) {
|
||||
if (err) throw err;
|
||||
});
|
||||
actualNumberOfExports++;
|
||||
}
|
||||
|
||||
if (actualNumberOfExports === expectedNumberOfExports) {
|
||||
console.log(" - Finished");
|
||||
browser.close();
|
||||
}
|
||||
} else {
|
||||
const diagramFilename = FILENAME_SUFFIX + view.key + '.png';
|
||||
const diagramKeyFilename = FILENAME_SUFFIX + view.key + '-key.png'
|
||||
|
||||
page.evaluate((diagramFilename) => {
|
||||
structurizr.scripting.exportCurrentDiagramToPNG({ includeMetadata: true, crop: false }, function(png) {
|
||||
window.savePNG(png, diagramFilename);
|
||||
})
|
||||
}, diagramFilename);
|
||||
|
||||
if (view.type !== IMAGE_VIEW_TYPE) {
|
||||
page.evaluate((diagramKeyFilename) => {
|
||||
structurizr.scripting.exportCurrentDiagramKeyToPNG(function(png) {
|
||||
window.savePNG(png, diagramKeyFilename);
|
||||
})
|
||||
}, diagramKeyFilename);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
})();
|
||||
63
dsl/export/export-documentation.js
Normal file
@@ -0,0 +1,63 @@
|
||||
const puppeteer = require('puppeteer');
|
||||
const fs = require('fs');
|
||||
|
||||
const FILENAME_SUFFIX = '';
|
||||
|
||||
const IGNORE_HTTPS_ERRORS = true;
|
||||
const HEADLESS = true;
|
||||
|
||||
if (process.argv.length < 3) {
|
||||
console.log("Usage: <structurizrUrl> [username] [password]")
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const url = process.argv[2];
|
||||
|
||||
var username;
|
||||
var password;
|
||||
|
||||
if (process.argv.length > 2) {
|
||||
username = process.argv[3];
|
||||
password = process.argv[4];
|
||||
}
|
||||
|
||||
(async () => {
|
||||
const browser = await puppeteer.launch({ignoreHTTPSErrors: IGNORE_HTTPS_ERRORS, headless: HEADLESS});
|
||||
const page = await browser.newPage();
|
||||
|
||||
if (username !== undefined && password !== undefined) {
|
||||
// sign in
|
||||
const parts = url.split('://');
|
||||
const signinUrl = parts[0] + '://' + parts[1].substring(0, parts[1].indexOf('/')) + '/dashboard';
|
||||
console.log(' - Signing in via ' + signinUrl);
|
||||
|
||||
await page.goto(signinUrl, { waitUntil: 'networkidle2' });
|
||||
await page.type('#username', username);
|
||||
await page.type('#password', password);
|
||||
await page.keyboard.press('Enter');
|
||||
await page.waitForSelector('div#dashboard');
|
||||
}
|
||||
|
||||
// visit the documentation page
|
||||
console.log(" - Opening " + url);
|
||||
await page.goto(url, { waitUntil: 'domcontentloaded' });
|
||||
await page.waitForFunction('structurizr.scripting && structurizr.scripting.isDocumentationRendered() === true');
|
||||
|
||||
await page.exposeFunction('saveHtml', (content) => {
|
||||
const filename = FILENAME_SUFFIX + 'documentation.html';
|
||||
console.log(" - Writing " + filename);
|
||||
fs.writeFile(filename, content, 'utf8', function (err) {
|
||||
if (err) throw err;
|
||||
});
|
||||
|
||||
console.log(" - Finished");
|
||||
browser.close();
|
||||
});
|
||||
|
||||
await page.evaluate(() => {
|
||||
return structurizr.scripting.exportDocumentationToOfflineHtmlPage(function(html) {
|
||||
saveHtml(html);
|
||||
});
|
||||
});
|
||||
|
||||
})();
|
||||
1
dsl/export/sc_nappl-key.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 0 2500 1000" style="background: #ffffff"><g transform="translate(25,100)"><path id="keyDatabaseCylinderPath" d="M 0,22.5 a 225,22.5 0,0,0 450 0 a 225,22.5 0,0,0 -450 0 l 0,255 a 225,22.5 0,0,0 450 0 l 0,-255" fill="#707070" stroke-width="2" stroke="#656565"></path><text x="225" y="142.5" text-anchor="middle" fill="#ffffff" font-size="30px" font-family="Open Sans"><tspan x="225" dy="40px">Database</tspan></text></g><g transform="translate(525,100)"><rect width="450" height="300" rx="3" ry="3" x="0" y="0" fill="#dddddd" stroke-width="2" stroke="#c7c7c7"/><text x="225" y="131.25" text-anchor="middle" fill="#000000" font-size="30px" font-family="Open Sans"><tspan x="225" dy="40px">Element</tspan></text></g><g transform="translate(1025,100)"><rect width="450" height="300" rx="3" ry="3" x="0" y="0" fill="#dddddd" stroke-width="2" stroke="#3d6fdd"/><text x="225" y="96.25" text-anchor="middle" fill="#3d6fdd" font-size="30px" font-family="Open Sans"><tspan x="225" dy="40px">Kubernetes - crd</tspan></text><image xlink:href="https://static.structurizr.com/themes/kubernetes-v0.3/crd-256.png" x="195" y="153.75" width="60" height="60" opacity="1"/></g><g transform="translate(1525,100)"><rect width="450" height="300" rx="3" ry="3" x="0" y="0" fill="#dddddd" stroke-width="2" stroke="#3d6fdd"/><text x="225" y="96.25" text-anchor="middle" fill="#3d6fdd" font-size="30px" font-family="Open Sans"><tspan x="225" dy="40px">Kubernetes - ds</tspan></text><image xlink:href="https://static.structurizr.com/themes/kubernetes-v0.3/ds-256.png" x="195" y="153.75" width="60" height="60" opacity="1"/></g><g transform="translate(2025,55.5)"><polygon points="112.5,0 337.5,0 450,194.5 337.5,389 112.5,389 0,194.5" fill="#dddddd" stroke-width="2" stroke="#3d6fdd"/><text x="225" y="140.75" text-anchor="middle" fill="#3d6fdd" font-size="30px" font-family="Open Sans"><tspan x="225" dy="40px">Kubernetes - svc</tspan></text><image xlink:href="https://static.structurizr.com/themes/kubernetes-v0.3/svc-256.png" x="195" y="198.25" width="60" height="60" opacity="1"/></g><g transform="translate(25,600)"><rect width="450" height="300" rx="3" ry="3" x="0" y="0" fill="#424c63" stroke-width="2" stroke="#3b4459"/><text x="225" y="131.25" text-anchor="middle" fill="#ffffff" font-size="30px" font-family="Open Sans"><tspan x="225" dy="40px">nplus</tspan></text></g><g transform="translate(525,600)"><rect width="450" height="300" rx="3" ry="3" x="0" y="0" fill="#11a63c" stroke-width="2" stroke="#0f9536"/><text x="225" y="131.25" text-anchor="middle" fill="#ffffff" font-size="30px" font-family="Open Sans"><tspan x="225" dy="40px">nscale</tspan></text></g><g transform="translate(1025,670)"><path d="M390,0 L390,60 L450,30 L 390,0" style="fill:#707070" stroke-dasharray="" /><path d="M0,30 L390,30" style="stroke:#707070; stroke-width: 6; fill: none; stroke-dasharray: 30 30;" /><text x="225" y="76.25" text-anchor="middle" fill="#707070" font-size="30px" font-family="Open Sans"><tspan x="225" dy="40px">Relationship</tspan></text></g></svg>
|
||||
|
After Width: | Height: | Size: 3.1 KiB |
1
dsl/export/sc_nappl.svg
Normal file
|
After Width: | Height: | Size: 389 KiB |
1
dsl/export/sc_sap-key.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 0 2500 500" style="background: #ffffff"><g transform="translate(25,100)"><rect width="450" height="300" rx="3" ry="3" x="0" y="0" fill="#dddddd" stroke-width="2" stroke="#c7c7c7"/><text x="225" y="131.25" text-anchor="middle" fill="#000000" font-size="30px" font-family="Open Sans"><tspan x="225" dy="40px">Element</tspan></text></g><g transform="translate(525,100)"><rect width="450" height="300" rx="3" ry="3" x="0" y="0" fill="#dddddd" stroke-width="2" stroke="#3d6fdd"/><text x="225" y="96.25" text-anchor="middle" fill="#3d6fdd" font-size="30px" font-family="Open Sans"><tspan x="225" dy="40px">Kubernetes - ds</tspan></text><image xlink:href="https://static.structurizr.com/themes/kubernetes-v0.3/ds-256.png" x="195" y="153.75" width="60" height="60" opacity="1"/></g><g transform="translate(1025,100)"><rect width="450" height="300" rx="3" ry="3" x="0" y="0" fill="#11a63c" stroke-width="2" stroke="#0f9536"/><text x="225" y="131.25" text-anchor="middle" fill="#ffffff" font-size="30px" font-family="Open Sans"><tspan x="225" dy="40px">nscale</tspan></text></g><g transform="translate(1525,170)"><path d="M390,0 L390,60 L450,30 L 390,0" style="fill:#707070" stroke-dasharray="" /><path d="M0,30 L390,30" style="stroke:#707070; stroke-width: 6; fill: none; stroke-dasharray: 30 30;" /><text x="225" y="76.25" text-anchor="middle" fill="#707070" font-size="30px" font-family="Open Sans"><tspan x="225" dy="40px">Relationship</tspan></text></g></svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
1
dsl/export/sc_sap.svg
Normal file
|
After Width: | Height: | Size: 33 KiB |
1
dsl/export/sc_web-key.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 0 2500 500" style="background: #ffffff"><g transform="translate(25,100)"><rect width="450" height="300" rx="3" ry="3" x="0" y="0" fill="#dddddd" stroke-width="2" stroke="#3d6fdd"/><text x="225" y="96.25" text-anchor="middle" fill="#3d6fdd" font-size="30px" font-family="Open Sans"><tspan x="225" dy="40px">Kubernetes - crd</tspan></text><image xlink:href="https://static.structurizr.com/themes/kubernetes-v0.3/crd-256.png" x="195" y="153.75" width="60" height="60" opacity="1"/></g><g transform="translate(525,100)"><rect width="450" height="300" rx="3" ry="3" x="0" y="0" fill="#dddddd" stroke-width="2" stroke="#3d6fdd"/><text x="225" y="96.25" text-anchor="middle" fill="#3d6fdd" font-size="30px" font-family="Open Sans"><tspan x="225" dy="40px">Kubernetes - ds</tspan></text><image xlink:href="https://static.structurizr.com/themes/kubernetes-v0.3/ds-256.png" x="195" y="153.75" width="60" height="60" opacity="1"/></g><g transform="translate(1025,100)"><rect width="450" height="300" rx="3" ry="3" x="0" y="0" fill="#424c63" stroke-width="2" stroke="#3b4459"/><text x="225" y="131.25" text-anchor="middle" fill="#ffffff" font-size="30px" font-family="Open Sans"><tspan x="225" dy="40px">nplus</tspan></text></g><g transform="translate(1525,100)"><rect width="450" height="300" rx="3" ry="3" x="0" y="0" fill="#11a63c" stroke-width="2" stroke="#0f9536"/><text x="225" y="131.25" text-anchor="middle" fill="#ffffff" font-size="30px" font-family="Open Sans"><tspan x="225" dy="40px">nscale</tspan></text></g><g transform="translate(2025,170)"><path d="M390,0 L390,60 L450,30 L 390,0" style="fill:#707070" stroke-dasharray="" /><path d="M0,30 L390,30" style="stroke:#707070; stroke-width: 6; fill: none; stroke-dasharray: 30 30;" /><text x="225" y="76.25" text-anchor="middle" fill="#707070" font-size="30px" font-family="Open Sans"><tspan x="225" dy="40px">Relationship</tspan></text></g></svg>
|
||||
|
After Width: | Height: | Size: 2.0 KiB |
1
dsl/export/sc_web.svg
Normal file
|
After Width: | Height: | Size: 65 KiB |
1
dsl/export/sl_all-key.svg
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
1
dsl/export/sl_all.svg
Normal file
|
After Width: | Height: | Size: 478 KiB |
1
dsl/export/sl_nappl-key.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 0 2500 500" style="background: #ffffff"><g transform="translate(25,100)"><rect width="450" height="300" rx="3" ry="3" x="0" y="0" fill="#dddddd" stroke-width="2" stroke="#c7c7c7"/><text x="225" y="131.25" text-anchor="middle" fill="#000000" font-size="30px" font-family="Open Sans"><tspan x="225" dy="40px">Element</tspan></text></g><g transform="translate(525,100)"><rect width="450" height="300" rx="3" ry="3" x="0" y="0" fill="#11a63c" stroke-width="2" stroke="#0f9536"/><text x="225" y="131.25" text-anchor="middle" fill="#ffffff" font-size="30px" font-family="Open Sans"><tspan x="225" dy="40px">nscale</tspan></text></g><g transform="translate(1025,170)"><path d="M390,0 L390,60 L450,30 L 390,0" style="fill:#707070" stroke-dasharray="" /><path d="M0,30 L390,30" style="stroke:#707070; stroke-width: 6; fill: none; stroke-dasharray: 30 30;" /><text x="225" y="76.25" text-anchor="middle" fill="#707070" font-size="30px" font-family="Open Sans"><tspan x="225" dy="40px">Relationship</tspan></text></g></svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
1
dsl/export/sl_nappl.svg
Normal file
|
After Width: | Height: | Size: 52 KiB |
1
dsl/export/sl_user-key.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 0 2500 1000" style="background: #ffffff"><g transform="translate(25,100)"><rect width="450" height="300" rx="3" ry="3" x="0" y="0" fill="#dddddd" stroke-width="2" stroke="#c7c7c7"/><text x="225" y="131.25" text-anchor="middle" fill="#000000" font-size="30px" font-family="Open Sans"><tspan x="225" dy="40px">Element</tspan></text></g><g transform="translate(525,100)"><rect width="450" height="300" rx="20" ry="20" x="0" y="0" fill="#0f9536" stroke-width="5" stroke="#0f9536"/><rect width="370" height="280" rx="5" ry="5" x="40" y="10" fill="#11a63c" stroke-width="0"/><ellipse cx="20" cy="150" rx="10" ry="10" fill="#11a63c" stroke-width="0"/><line x1="430" y1="125" x2="430" y2="175" stroke-width="5" stroke="#11a63c"/><text x="225" y="131.25" text-anchor="middle" fill="#ffffff" font-size="30px" font-family="Open Sans"><tspan x="225" dy="40px">mobileclient, nscale</tspan></text></g><g transform="translate(1025,100)"><rect width="450" height="300" rx="3" ry="3" x="0" y="0" fill="#11a63c" stroke-width="2" stroke="#0f9536"/><text x="225" y="131.25" text-anchor="middle" fill="#ffffff" font-size="30px" font-family="Open Sans"><tspan x="225" dy="40px">nscale</tspan></text></g><g transform="translate(1525,25)"><rect x="0" y="180" width="450" height="270" rx="90" fill="#dddddd" stroke-width="2" stroke="#c7c7c7"/><circle cx="225" cy="100" r="100" fill="#dddddd" stroke-width="2" stroke="#c7c7c7"/><line x1="90" y1="300" x2="90" y2="450" stroke-width="2" stroke="#c7c7c7"/><line x1="360" y1="300" x2="360" y2="450" stroke-width="2" stroke="#c7c7c7"/><text x="225" y="256.25" text-anchor="middle" fill="#000000" font-size="30px" font-family="Open Sans"><tspan x="225" dy="40px">Person</tspan></text></g><g transform="translate(2025,100)"><rect width="450" height="300" rx="10" ry="10" x="0" y="0" fill="#0f9536" stroke-width="5" stroke="#0f9536"/><rect width="430" height="250" rx="10" ry="10" x="10" y="40" fill="#11a63c" stroke-width="0"/><rect width="340" height="20" rx="10" ry="10" x="100" y="10" fill="#11a63c" stroke-width="0"/><ellipse cx="20" cy="20" rx="10" ry="10" fill="#11a63c" stroke-width="0"/><ellipse cx="50" cy="20" rx="10" ry="10" fill="#11a63c" stroke-width="0"/><ellipse cx="80" cy="20" rx="10" ry="10" fill="#11a63c" stroke-width="0"/><text x="225" y="141.25" text-anchor="middle" fill="#ffffff" font-size="30px" font-family="Open Sans"><tspan x="225" dy="40px">webclient, nscale</tspan></text></g><g transform="translate(25,670)"><path d="M390,0 L390,60 L450,30 L 390,0" style="fill:#707070" stroke-dasharray="" /><path d="M0,30 L390,30" style="stroke:#707070; stroke-width: 6; fill: none; stroke-dasharray: 30 30;" /><text x="225" y="76.25" text-anchor="middle" fill="#707070" font-size="30px" font-family="Open Sans"><tspan x="225" dy="40px">Relationship</tspan></text></g></svg>
|
||||
|
After Width: | Height: | Size: 2.8 KiB |
1
dsl/export/sl_user.svg
Normal file
|
After Width: | Height: | Size: 23 KiB |
4
dsl/filePvc.dsl
Normal file
@@ -0,0 +1,4 @@
|
||||
filepvc = Container "File Volume" "Persistent Volume Claim for a shared RWX File Volume" {
|
||||
technology "PVC"
|
||||
tags "Kubernetes - pvc"
|
||||
}
|
||||
19
dsl/ilm.dsl
Normal file
@@ -0,0 +1,19 @@
|
||||
ilm = softwareSystem "nscale ILM Connector" {
|
||||
tags "nscale"
|
||||
|
||||
replicaset = Container "ReplicaSet" "StatefulSet with default Replica 2" {
|
||||
technology "Kubernetes"
|
||||
tags "Kubernetes - sts"
|
||||
|
||||
main = component "ILM Container" "Container Template with official Image" {
|
||||
technology "Java"
|
||||
tags "nscale"
|
||||
-> nplus.confpvc "mount conf"
|
||||
-> nappl.svc "consume" "Advanced Connect Protocol Adapter"
|
||||
}
|
||||
!include "copyConf.dsl"
|
||||
!include "waitFor.dsl"
|
||||
}
|
||||
!include "service.dsl"
|
||||
!include "ingress.dsl"
|
||||
}
|
||||
13
dsl/ingress.dsl
Normal file
@@ -0,0 +1,13 @@
|
||||
certificate = Container "Certificate" "https Certificate" {
|
||||
tags "Kubernetes - crd"
|
||||
technology "Kubernetes"
|
||||
clusterIssuer -> this "Provide Certificate"
|
||||
}
|
||||
ingress = Container "Ingress" "Layer 7 Ingress Configuration" {
|
||||
tags "Kubernetes - ing"
|
||||
technology "Kubernetes"
|
||||
this -> ingressController "Provide Configuration"
|
||||
certificate -> this "use"
|
||||
}
|
||||
ingressController -> replicaset.main "balance Layer 7 traffic"
|
||||
svc -> ingressController "provide Pod IPs"
|
||||
3
dsl/license.dsl
Normal file
@@ -0,0 +1,3 @@
|
||||
license = component "license" "nscale License Secret" {
|
||||
tags "Kubernetes - secret"
|
||||
}
|
||||
30
dsl/mon.dsl
Normal file
@@ -0,0 +1,30 @@
|
||||
mon = softwareSystem "nscale Monitoring Console" {
|
||||
tags "nscale"
|
||||
description "provides monitoring for all nscale components"
|
||||
!include "dataPvc.dsl"
|
||||
replicaset = Container "ReplicaSet" "StatefulSet with Replica 1" {
|
||||
technology "Kubernetes"
|
||||
tags "Kubernetes - sts"
|
||||
|
||||
main = component "MON Container" "Container Template with official Image" {
|
||||
technology "Java"
|
||||
tags "nscale"
|
||||
-> datapvc "mount data"
|
||||
-> nplus.confpvc "mount etc"
|
||||
|
||||
-> nappl "monitor"
|
||||
-> nappljobs "monitor"
|
||||
-> nstlA "monitor"
|
||||
-> nstlB "monitor"
|
||||
-> cmis "monitor"
|
||||
-> ilm "monitor"
|
||||
-> pipelinercm "monitor"
|
||||
-> pipelinerac "monitor"
|
||||
-> web "monitor"
|
||||
-> rs "monitor"
|
||||
}
|
||||
!include "copyConf.dsl"
|
||||
!include "waitFor.dsl"
|
||||
}
|
||||
!include "service.dsl"
|
||||
}
|
||||
25
dsl/nappl.dsl
Normal file
@@ -0,0 +1,25 @@
|
||||
nappl = softwareSystem "nscale Application Layer" {
|
||||
tags "nscale"
|
||||
description "Provides DMS and BPM Functionality"
|
||||
replicaset = Container "ReplicaSet" "StatefulSet with default Replica 2" {
|
||||
technology "Kubernetes"
|
||||
tags "Kubernetes - sts"
|
||||
|
||||
!include "license.dsl"
|
||||
main = component "NAPPL Container" "Container Template with official Image" {
|
||||
technology "Java"
|
||||
tags "nscale"
|
||||
-> nplus.confpvc "mount conf"
|
||||
-> nstlA.svc "store documents"
|
||||
-> nstlB.svc "store documents"
|
||||
-> database.svc "store metadata"
|
||||
-> rs.svc "create renditions"
|
||||
-> license "read"
|
||||
-> sap "replicate"
|
||||
}
|
||||
!include "copyConf.dsl"
|
||||
!include "waitFor.dsl"
|
||||
}
|
||||
!include "service.dsl"
|
||||
!include "ingress.dsl"
|
||||
}
|
||||
22
dsl/nappljobs.dsl
Normal file
@@ -0,0 +1,22 @@
|
||||
nappljobs = softwareSystem "nscale Application Layer (Jobs)" {
|
||||
tags "nscale"
|
||||
replicaset = Container "ReplicaSet" "StatefulSet Replica 1 dedicated to Jobs" {
|
||||
technology "Kubernetes"
|
||||
tags "Kubernetes - sts"
|
||||
|
||||
!include "license.dsl"
|
||||
main = component "NAPPL Container" "Container Template with official Image" {
|
||||
technology "Java"
|
||||
tags "nscale"
|
||||
-> nplus.confpvc "mount conf"
|
||||
-> nstlA.svc "store documents"
|
||||
-> nstlB.svc "store documents"
|
||||
-> database.svc "store metadata"
|
||||
-> rs.svc "create renditions"
|
||||
-> license "read"
|
||||
}
|
||||
!include "copyConf.dsl"
|
||||
!include "waitFor.dsl"
|
||||
}
|
||||
!include "service.dsl"
|
||||
}
|
||||
53
dsl/nstl.dsl
Normal file
@@ -0,0 +1,53 @@
|
||||
nstl = group "nstl" {
|
||||
nstlA = softwareSystem "nscale Storage Layer A" {
|
||||
tags "nscale"
|
||||
!include "dataPvc.dsl"
|
||||
replicaset = Container "ReplicaSet" "StatefulSet with fix Replica 1" {
|
||||
technology "Kubernetes"
|
||||
tags "Kubernetes - sts"
|
||||
|
||||
!include "license.dsl"
|
||||
main = component "NSTL Container" "Container Template with official Image" {
|
||||
technology "C++"
|
||||
tags "nscale"
|
||||
-> datapvc "mount arc"
|
||||
-> datapvc "mount ret"
|
||||
-> datapvc "mount HD"
|
||||
-> datapvc "mount da"
|
||||
-> nplus.confpvc "mount etc"
|
||||
-> license "read"
|
||||
}
|
||||
!include "copyConf.dsl"
|
||||
!include "waitFor.dsl"
|
||||
}
|
||||
!include "service.dsl"
|
||||
}
|
||||
|
||||
nstlB = softwareSystem "nscale Storage Layer B" {
|
||||
tags "nscale"
|
||||
!include "dataPvc.dsl"
|
||||
replicaset = Container "ReplicaSet" "StatefulSet with fix Replica 1" {
|
||||
technology "Kubernetes"
|
||||
tags "Kubernetes - sts"
|
||||
|
||||
!include "license.dsl"
|
||||
main = component "NSTL Container" "Container Template with official Image" {
|
||||
technology "C++"
|
||||
tags "nscale"
|
||||
-> datapvc "mount arc"
|
||||
-> datapvc "mount ret"
|
||||
-> datapvc "mount HD"
|
||||
-> datapvc "mount da"
|
||||
-> nplus.confpvc "mount etc"
|
||||
-> license "read"
|
||||
}
|
||||
!include "copyConf.dsl"
|
||||
!include "waitFor.dsl"
|
||||
}
|
||||
!include "service.dsl"
|
||||
}
|
||||
|
||||
nstlA -> nstlB "forward DA and Document"
|
||||
nstlB -> nstlA "forward DA and Document"
|
||||
|
||||
}
|
||||
18
dsl/pam.dsl
Normal file
@@ -0,0 +1,18 @@
|
||||
pam = softwareSystem "nscale Process Automation Modeler" {
|
||||
tags "nscale"
|
||||
description "provides modeling for workflows"
|
||||
replicaset = Container "ReplicaSet" "StatefulSet with Replica 1" {
|
||||
technology "Kubernetes"
|
||||
tags "Kubernetes - sts"
|
||||
|
||||
main = component "PAM Container" "Container Template with official Image" {
|
||||
technology "Java"
|
||||
tags "nscale"
|
||||
-> nplus.confpvc "mount conf"
|
||||
-> nappl.svc "consume" "Advanced Connector Protocol Adapter"
|
||||
}
|
||||
!include "copyConf.dsl"
|
||||
!include "waitFor.dsl"
|
||||
}
|
||||
!include "service.dsl"
|
||||
}
|
||||
24
dsl/pipelinerac.dsl
Normal file
@@ -0,0 +1,24 @@
|
||||
pipelinerac = softwareSystem "nscale Pipeliner AC" "Pipeliner im AC Modus" {
|
||||
tags "nscale"
|
||||
!include "dataPvc.dsl"
|
||||
replicaset = Container "ReplicaSet" "StatefulSet with Replica 1" {
|
||||
technology "Kubernetes"
|
||||
tags "Kubernetes - sts"
|
||||
|
||||
!include "license.dsl"
|
||||
main = component "WebDAV Container" "Sidecar Container Template with WebDAV Image" {
|
||||
tags "nplus"
|
||||
}
|
||||
pl = component "Pipeliner Container" "Container Template with official Image" {
|
||||
tags "nscale"
|
||||
-> nplus.confpvc "mount conf"
|
||||
-> nappl.svc "consume" "Advaced Connect Protocol Adapter"
|
||||
-> rs.svc "create renditions"
|
||||
-> license "read"
|
||||
}
|
||||
!include "copyConf.dsl"
|
||||
!include "waitFor.dsl"
|
||||
}
|
||||
!include "service.dsl"
|
||||
!include "ingress.dsl"
|
||||
}
|
||||
26
dsl/pipelinercm.dsl
Normal file
@@ -0,0 +1,26 @@
|
||||
pipelinercm = softwareSystem "nscale Pipeliner CM" "Pipeliner im Core Modus" {
|
||||
tags "nscale"
|
||||
!include "dataPvc.dsl"
|
||||
replicaset = Container "ReplicaSet" "StatefulSet with Replica 1" {
|
||||
technology "Kubernetes"
|
||||
tags "Kubernetes - sts"
|
||||
|
||||
!include "license.dsl"
|
||||
main = component "WebDAV Container" "Sidecar Container Template with WebDAV Image" {
|
||||
tags "nplus"
|
||||
}
|
||||
pl = component "Pipeliner Container" "Container Template with official Image" {
|
||||
tags "nscale"
|
||||
-> nplus.confpvc "mount conf"
|
||||
-> nstlA.svc "store documents"
|
||||
-> nstlB.svc "store documents"
|
||||
-> database.svc "store metadata"
|
||||
-> rs.svc "create renditions"
|
||||
-> license "read"
|
||||
}
|
||||
!include "copyConf.dsl"
|
||||
!include "waitFor.dsl"
|
||||
}
|
||||
!include "service.dsl"
|
||||
!include "ingress.dsl"
|
||||
}
|
||||
21
dsl/rs.dsl
Normal file
@@ -0,0 +1,21 @@
|
||||
rs = softwareSystem "nscale Rendition Server" {
|
||||
tags "nscale"
|
||||
!include "filePvc.dsl"
|
||||
replicaset = Container "ReplicaSet" "StatefulSet with default Replica 2" {
|
||||
technology "Kubernetes"
|
||||
tags "Kubernetes - sts"
|
||||
|
||||
!include "license.dsl"
|
||||
main = component "RS Container" "Container Template with official Image" {
|
||||
technology "Java"
|
||||
tags "nscale"
|
||||
-> nplus.confpvc "mount conf"
|
||||
-> filepvc "mount workspace"
|
||||
-> license "read"
|
||||
}
|
||||
!include "copyConf.dsl"
|
||||
!include "waitFor.dsl"
|
||||
}
|
||||
!include "service.dsl"
|
||||
!include "ingress.dsl"
|
||||
}
|
||||
5
dsl/service.dsl
Normal file
@@ -0,0 +1,5 @@
|
||||
svc = Container "Service" "Kubernetes Service with Layer 4 Load Balancer" {
|
||||
technology "Kubernetes"
|
||||
tags "Kubernetes - svc"
|
||||
this -> replicaset.main "balance Layer 4 traffic"
|
||||
}
|
||||
40
dsl/sharepoint.dsl
Normal file
@@ -0,0 +1,40 @@
|
||||
sharepoint = group "sharepoint" {
|
||||
sharepointA = softwareSystem "nscale SharePoint Connector A" {
|
||||
tags "nscale"
|
||||
replicaset = Container "ReplicaSet" "StatefulSet with fix Replica 1" {
|
||||
technology "Kubernetes"
|
||||
tags "Kubernetes - sts"
|
||||
|
||||
main = component "SharePoint Container" "Container Template with official Image" {
|
||||
technology "Java"
|
||||
tags "nscale"
|
||||
-> nplus.confpvc "mount conf"
|
||||
-> nappl.svc "consume" "Advanced Connector Protocol Adapter"
|
||||
-> sharepoint "consume" "SharePoint API"
|
||||
}
|
||||
!include "copyConf.dsl"
|
||||
!include "waitFor.dsl"
|
||||
}
|
||||
!include "service.dsl"
|
||||
}
|
||||
|
||||
sharepointB = softwareSystem "nscale SharePoint Connector B" {
|
||||
tags "nscale"
|
||||
replicaset = Container "ReplicaSet" "StatefulSet with fix Replica 1" {
|
||||
technology "Kubernetes"
|
||||
tags "Kubernetes - sts"
|
||||
|
||||
main = component "SharePoint Container" "Container Template with official Image" {
|
||||
technology "Java"
|
||||
tags "nscale"
|
||||
-> nplus.confpvc "mount conf"
|
||||
-> nappl.svc "consume" "Advanced Connector Protocol Adapter"
|
||||
-> sharepoint "consume" "SharePoint API"
|
||||
}
|
||||
!include "copyConf.dsl"
|
||||
!include "waitFor.dsl"
|
||||
}
|
||||
!include "service.dsl"
|
||||
}
|
||||
|
||||
}
|
||||
49
dsl/views.dsl
Normal file
@@ -0,0 +1,49 @@
|
||||
SystemLandscape "sl_all" "Overview" {
|
||||
title "Overview"
|
||||
description "shows all Landscape"
|
||||
include *
|
||||
autoLayout
|
||||
}
|
||||
|
||||
systemContext web "sc_web" "focus on nscale Web" {
|
||||
include *
|
||||
autoLayout
|
||||
}
|
||||
|
||||
systemLandscape "sc_nstl" "focus on nscale Server Storage Layer" {
|
||||
include nstl
|
||||
autoLayout
|
||||
}
|
||||
|
||||
systemContext nappl "sc_nappl" "focus on nscale Application Layer" {
|
||||
include *
|
||||
autoLayout
|
||||
}
|
||||
|
||||
systemContext sap "sc_sap" "focus on SAP" {
|
||||
include *
|
||||
autoLayout
|
||||
}
|
||||
|
||||
SystemLandscape "sl_user" "focus on the end user" {
|
||||
title "User Access"
|
||||
description "shows how endusers are working with the system"
|
||||
include user webclient cockpitclient mobileclient idp
|
||||
autoLayout
|
||||
}
|
||||
|
||||
SystemLandscape "sl_nappl" "focus on nappl" {
|
||||
title "nscale Application Layer"
|
||||
description "the Application Layer Cluster and peripheral services"
|
||||
include nappl nappljobs pipelinercm pipelinerac idp
|
||||
autoLayout lr
|
||||
}
|
||||
|
||||
container nplus "c_nplus" "nplus Environment" {
|
||||
title "nplus Environment"
|
||||
description "the Environment handles multiple Inances running in a Kubernetes Namespace"
|
||||
include * adminclient
|
||||
exclude rs nappl nappljobs pipelinercm pipelinerac mon nstl web cmis ilm
|
||||
autolayout
|
||||
}
|
||||
|
||||
5
dsl/waitFor.dsl
Normal file
@@ -0,0 +1,5 @@
|
||||
waitFor = component "init:waitFor" "Init-Container that waits for any given preqequisite" {
|
||||
technology "bash"
|
||||
tags "nplus"
|
||||
main -> this "waitFor"
|
||||
}
|
||||
19
dsl/web.dsl
Normal file
@@ -0,0 +1,19 @@
|
||||
web = softwareSystem "nscale Application Layer Web" {
|
||||
tags "nscale"
|
||||
description "provides html web ui for nscale"
|
||||
replicaset = Container "ReplicaSet" "StatefulSet with default Replica 2" {
|
||||
technology "Kubernetes"
|
||||
tags "Kubernetes - sts"
|
||||
|
||||
main = component "WEB Container" "Container Template with official Image" {
|
||||
technology "Java"
|
||||
tags "nscale"
|
||||
-> nplus.confpvc "mount conf"
|
||||
-> nappl.svc "consume" "Advanced Connector Protocol Adapter"
|
||||
}
|
||||
!include "copyConf.dsl"
|
||||
!include "waitFor.dsl"
|
||||
}
|
||||
!include "service.dsl"
|
||||
!include "ingress.dsl"
|
||||
}
|
||||
18
dsl/webdav.dsl
Normal file
@@ -0,0 +1,18 @@
|
||||
webdav = softwareSystem "nscale WEBDAV Connector" {
|
||||
tags "nscale"
|
||||
replicaset = Container "ReplicaSet" "StatefulSet with default Replica 2" {
|
||||
technology "Kubernetes"
|
||||
tags "Kubernetes - sts"
|
||||
|
||||
main = component "WEBDAV Container" "Container Template with official Image" {
|
||||
technology "Java"
|
||||
tags "nscale"
|
||||
-> nplus.confpvc "mount conf"
|
||||
-> nappl.svc "consume" "Advanced Connect Protocol Adapter"
|
||||
}
|
||||
!include "copyConf.dsl"
|
||||
!include "waitFor.dsl"
|
||||
}
|
||||
!include "service.dsl"
|
||||
!include "ingress.dsl"
|
||||
}
|
||||
170
dsl/workspace.dsl
Normal file
@@ -0,0 +1,170 @@
|
||||
workspace {
|
||||
!identifiers hierarchical
|
||||
|
||||
model {
|
||||
properties {
|
||||
"structurizr.groupSeparator" "/"
|
||||
}
|
||||
|
||||
/* **************************************************************
|
||||
* Services and Components running in the K8s cluster *
|
||||
************************************************************** */
|
||||
|
||||
group "Kubernetes Cluster" {
|
||||
ingressController = softwareSystem "Kubernetes Ingress Controller" "Layer 7 Load Balancer" "Kubernetes - ds"
|
||||
clusterIssuer = softwareSystem "Cert Manager Cluster Issuer" "provides certificates" "Kubernetes - crd"
|
||||
group "Namespace" {
|
||||
!include "environment.dsl"
|
||||
group "Instance" {
|
||||
!include "database.dsl"
|
||||
!include "rs.dsl"
|
||||
!include "nstl.dsl"
|
||||
group "nscale Application Layer Cluster" {
|
||||
!include "nappl.dsl"
|
||||
!include "nappljobs.dsl"
|
||||
!include "pipelinercm.dsl"
|
||||
!include "clusterService.dsl"
|
||||
}
|
||||
!include "web.dsl"
|
||||
!include "pipelinerac.dsl"
|
||||
!include "cmis.dsl"
|
||||
!include "webdav.dsl"
|
||||
!include "ilm.dsl"
|
||||
!include "mon.dsl"
|
||||
!include "pam.dsl"
|
||||
!include "sharepoint.dsl"
|
||||
|
||||
!include "adminserver.dsl"
|
||||
!include "application.dsl"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* **************************************************************
|
||||
* Client Applications, accessing the Services and Components *
|
||||
************************************************************** */
|
||||
|
||||
adminclient = softwareSystem "nscale Administrator" "Eclipse RCP Administrator Client" {
|
||||
tags "richclient, nscale"
|
||||
-> adminserver.l3lb "Remote Management" "RMS and https Protocols"
|
||||
}
|
||||
mobileclient = softwareSystem "nscale Mobile" "Rich Mobile Client" {
|
||||
tags "mobileclient, nscale"
|
||||
-> ingressController "https /nscalealinst1"
|
||||
}
|
||||
cockpitclient = softwareSystem "nscale Cockpit" "Rich Windows Client" {
|
||||
tags "richtclient, nscale"
|
||||
-> ingressController "https /nscalealinst1"
|
||||
}
|
||||
webclient = softwareSystem "nscale Web" "Thin Web Client" {
|
||||
tags "webclient, nscale"
|
||||
-> ingressController "https /nscale_web"
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* **************************************************************
|
||||
* Users running the clients above *
|
||||
************************************************************** */
|
||||
|
||||
user = person "User" {
|
||||
description "uses the Business Applications running in the Environment"
|
||||
-> mobileclient "use"
|
||||
-> cockpitclient "use"
|
||||
-> webclient "use"
|
||||
}
|
||||
admin = person "Admin" {
|
||||
description "Maintains and Operates the Environment"
|
||||
-> adminclient "use"
|
||||
-> nplus.davserver "mount"
|
||||
-> nplus.toolbox "use"
|
||||
}
|
||||
|
||||
|
||||
/* **************************************************************
|
||||
* 3rd Party Applications accessing the Services and Components *
|
||||
************************************************************** */
|
||||
|
||||
sap = softwareSystem "SAP" "SAP Server" {
|
||||
-> ingressController "consume AL" "SAP Archive Link Protocol"
|
||||
-> ingressController "consume ILM" "SAP Information Lifecycle Management Protocol"
|
||||
}
|
||||
|
||||
o365sp = softwareSystem "SharePoint" "SharePoint Server" {
|
||||
}
|
||||
|
||||
/* when you run a SAP System, you most likely also want to access it for replication */
|
||||
nappl.replicaset.main -> sap "consume SNC" "SAP SNC Access"
|
||||
|
||||
|
||||
app = softwareSystem "3rd Party Software" "Any Application with Access Rights" {
|
||||
-> ingressController "AC" "nscale Advanced Connect API
|
||||
-> ingressController "REST" "nscale REST API"
|
||||
-> ingressController "CMIS REST" "cmis REST API"
|
||||
-> ingressController "CMIS SOAP" "cmis SOAP API"
|
||||
-> ingressController "Pipeliner DAV" "DAV Payload Dropoff Service"
|
||||
}
|
||||
|
||||
/* **************************************************************
|
||||
* 3rd Party Identity and Authentication Services *
|
||||
************************************************************** */
|
||||
|
||||
idp = softwareSystem "Identity Provider" {
|
||||
description "Provider or Broker for Identity Information and SSO Services"
|
||||
-> nappl "Authorize" "Single Sign On with optional Multi Factor" "saml, openid"
|
||||
-> nappljobs "Import" "Periodic Import of Account / Group Information via LDAP"
|
||||
user -> this "authenticate"
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
views {
|
||||
|
||||
theme https://static.structurizr.com/themes/kubernetes-v0.3/theme.json
|
||||
|
||||
# As soon as we use our own views, all default views are gone...
|
||||
!include "views.dsl"
|
||||
|
||||
styles {
|
||||
element "Person" {
|
||||
shape Person
|
||||
}
|
||||
element "Kubernetes - svc" {
|
||||
shape hexagon
|
||||
}
|
||||
element "Database" {
|
||||
background #707070
|
||||
color #ffffff
|
||||
shape cylinder
|
||||
}
|
||||
element "Kubernetes - pvc" {
|
||||
shape cylinder
|
||||
}
|
||||
element "nscale" {
|
||||
color #FFFFFF
|
||||
background #11a63c
|
||||
}
|
||||
element "nplus" {
|
||||
color #FFFFFF
|
||||
background #424c63
|
||||
}
|
||||
element "planned" {
|
||||
opacity 30
|
||||
}
|
||||
element "mobileclient" {
|
||||
shape "MobileDeviceLandscape"
|
||||
}
|
||||
element "richclient" {
|
||||
shape "Window"
|
||||
}
|
||||
element "webclient" {
|
||||
shape "WebBrowser"
|
||||
}
|
||||
element "Group" {
|
||||
color #ff00ff
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||