underpost 3.2.9 → 3.2.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/.github/workflows/npmpkg.ci.yml +1 -0
  2. package/.github/workflows/pwa-microservices-template-test.ci.yml +1 -1
  3. package/.github/workflows/release.cd.yml +1 -0
  4. package/.vscode/extensions.json +9 -9
  5. package/.vscode/settings.json +20 -4
  6. package/CHANGELOG.md +195 -1
  7. package/CLI-HELP.md +92 -23
  8. package/README.md +38 -9
  9. package/bin/build.js +27 -7
  10. package/bin/build.template.js +187 -0
  11. package/bin/deploy.js +12 -2
  12. package/bin/index.js +2 -1
  13. package/bump.config.js +26 -0
  14. package/conf.js +20 -7
  15. package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +1 -1
  16. package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +1 -1
  17. package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
  18. package/manifests/deployment/dd-test-development/deployment.yaml +4 -2
  19. package/manifests/kind-config-dev.yaml +8 -0
  20. package/manifests/lxd/lxd-admin-profile.yaml +12 -3
  21. package/manifests/mongodb/pv-pvc.yaml +44 -8
  22. package/manifests/mongodb/statefulset.yaml +55 -68
  23. package/manifests/mongodb-4.4/headless-service.yaml +10 -0
  24. package/manifests/mongodb-4.4/kustomization.yaml +3 -1
  25. package/manifests/mongodb-4.4/mongodb-nodeport.yaml +17 -0
  26. package/manifests/mongodb-4.4/pv-pvc.yaml +10 -14
  27. package/manifests/mongodb-4.4/statefulset.yaml +79 -0
  28. package/manifests/mongodb-4.4/storage-class.yaml +9 -0
  29. package/manifests/valkey/statefulset.yaml +1 -1
  30. package/manifests/valkey/valkey-nodeport.yaml +17 -0
  31. package/package.json +27 -12
  32. package/scripts/ipxe-setup.sh +52 -49
  33. package/scripts/k3s-node-setup.sh +81 -46
  34. package/scripts/lxd-vm-setup.sh +193 -8
  35. package/scripts/maas-nat-firewalld.sh +145 -0
  36. package/src/api/core/core.router.js +19 -14
  37. package/src/api/core/core.service.js +5 -5
  38. package/src/api/default/default.router.js +22 -18
  39. package/src/api/default/default.service.js +5 -5
  40. package/src/api/document/document.router.js +28 -23
  41. package/src/api/document/document.service.js +100 -23
  42. package/src/api/file/file.router.js +19 -13
  43. package/src/api/file/file.service.js +9 -7
  44. package/src/api/test/test.router.js +17 -12
  45. package/src/api/types.js +24 -0
  46. package/src/api/user/guest.service.js +5 -4
  47. package/src/api/user/user.router.js +297 -288
  48. package/src/api/user/user.service.js +100 -35
  49. package/src/cli/baremetal.js +132 -101
  50. package/src/cli/cluster.js +700 -232
  51. package/src/cli/db.js +59 -60
  52. package/src/cli/deploy.js +216 -137
  53. package/src/cli/fs.js +13 -3
  54. package/src/cli/index.js +80 -15
  55. package/src/cli/ipfs.js +4 -6
  56. package/src/cli/kubectl.js +4 -1
  57. package/src/cli/lxd.js +1099 -223
  58. package/src/cli/monitor.js +9 -3
  59. package/src/cli/release.js +334 -140
  60. package/src/cli/repository.js +68 -23
  61. package/src/cli/run.js +191 -47
  62. package/src/cli/secrets.js +11 -2
  63. package/src/cli/test.js +9 -3
  64. package/src/client/Default.index.js +9 -3
  65. package/src/client/components/core/Auth.js +5 -0
  66. package/src/client/components/core/ClientEvents.js +76 -0
  67. package/src/client/components/core/EventBus.js +4 -0
  68. package/src/client/components/core/Modal.js +82 -41
  69. package/src/client/components/core/PanelForm.js +56 -52
  70. package/src/client/components/core/Worker.js +162 -363
  71. package/src/client/sw/core.sw.js +174 -112
  72. package/src/db/DataBaseProvider.js +115 -15
  73. package/src/db/mariadb/MariaDB.js +2 -1
  74. package/src/db/mongo/MongoBootstrap.js +657 -0
  75. package/src/db/mongo/MongooseDB.js +129 -21
  76. package/src/index.js +1 -1
  77. package/src/runtime/express/Express.js +2 -2
  78. package/src/runtime/wp/Wp.js +8 -5
  79. package/src/server/auth.js +2 -2
  80. package/src/server/client-build-docs.js +1 -1
  81. package/src/server/client-build.js +94 -129
  82. package/src/server/conf.js +81 -79
  83. package/src/server/process.js +180 -19
  84. package/src/server/proxy.js +9 -2
  85. package/src/server/runtime.js +1 -1
  86. package/src/server/start.js +16 -4
  87. package/src/server/valkey.js +2 -0
  88. package/src/ws/IoInterface.js +16 -16
  89. package/src/ws/core/channels/core.ws.chat.js +11 -11
  90. package/src/ws/core/channels/core.ws.mailer.js +29 -29
  91. package/src/ws/core/channels/core.ws.stream.js +19 -19
  92. package/src/ws/core/core.ws.connection.js +8 -8
  93. package/src/ws/core/core.ws.server.js +6 -5
  94. package/src/ws/default/channels/default.ws.main.js +10 -10
  95. package/src/ws/default/default.ws.connection.js +4 -4
  96. package/src/ws/default/default.ws.server.js +4 -3
  97. package/bin/file.js +0 -202
  98. package/bin/vs.js +0 -74
  99. package/bin/zed.js +0 -84
  100. package/src/client/ssr/email/DefaultRecoverEmail.js +0 -21
  101. package/src/client/ssr/email/DefaultVerifyEmail.js +0 -17
  102. /package/src/client/ssr/{offline → views}/Maintenance.js +0 -0
  103. /package/src/client/ssr/{offline → views}/NoNetworkConnection.js +0 -0
  104. /package/src/client/ssr/{pages → views}/Test.js +0 -0
package/bin/build.js CHANGED
@@ -69,6 +69,7 @@ if (process.argv.includes('conf')) {
69
69
  ` && underpost push . ${privateGitUri}`,
70
70
  {
71
71
  silent: true,
72
+ silentOnError: true,
72
73
  },
73
74
  );
74
75
  }
@@ -163,27 +164,45 @@ const { DefaultConf } = await import(`../conf.${confName}.js`);
163
164
  `./.github/workflows/publish.cyberia.ci.yml`,
164
165
  `${basePath}/.github/workflows/publish.cyberia.ci.yml`,
165
166
  );
166
- delete packageJson.bin.underpost;
167
+ if (packageJson.bin) delete packageJson.bin.underpost;
168
+ if (!packageJson.bin) packageJson.bin = {};
167
169
  packageJson.bin.cyberia = 'bin/index.js';
168
170
  packageJson.keywords = [
169
171
  'cyberia',
172
+ 'cyberia-cli',
173
+ 'engine-cyberia',
174
+ 'sidecar',
175
+ 'data-layer',
176
+ 'engine-cyberia',
170
177
  'object-layer',
171
- 'game-engine',
172
- 'assets-management',
173
- 'web3',
174
178
  'atlas-sprite-sheet',
179
+ 'ipfs',
180
+ 'erc-1155',
181
+ 'object-layer-token',
182
+ 'hardhat',
183
+ 'hyperledger-besu',
184
+ 'blockchain',
185
+ 'web3',
186
+ 'underpost-platform',
187
+ 'mmorpg',
175
188
  ];
176
- packageJson.description = 'Cyberia Engine - Object Layer and Assets Management Microservice';
177
- const { CyberiaDependencies } = await import(`../src/client/components/cyberia-portal/CommonCyberiaPortal.js`);
189
+ packageJson.description =
190
+ 'Cyberia CLI toolchain for the Cyberia MMO data layer, content pipeline, persistence, gRPC services, and ERC-1155 lifecycle on Hyperledger Besu.';
191
+ const { CyberiaDependencies } = await import(`../src/api/cyberia-server-defaults/cyberia-server-defaults.js`);
178
192
  packageJson.dependencies = {
179
193
  ...originPackageJson.dependencies,
180
194
  ...CyberiaDependencies,
181
195
  };
182
196
  fs.writeFileSync(`${basePath}/bin/index.js`, fs.readFileSync(`./bin/cyberia.js`, 'utf8'), 'utf8');
197
+ fs.writeFileSync(
198
+ `${basePath}/README.md`,
199
+ fs.readFileSync(`./src/client/public/cyberia-docs/CYBERIA-CLI.md`, 'utf8'),
200
+ 'utf8',
201
+ );
183
202
  fs.copySync(`./hardhat`, `${basePath}/hardhat`);
184
203
  for (const path of [
185
204
  '/src/grpc/cyberia',
186
- '/src/client/ssr/pages/CyberiaServerMetrics.js',
205
+ '/src/client/ssr/views/CyberiaServerMetrics.js',
187
206
  '/src/server/object-layer.js',
188
207
  '/src/server/atlas-sprite-sheet-generator.js',
189
208
  '/src/server/shape-generator.js',
@@ -197,6 +216,7 @@ const { DefaultConf } = await import(`../conf.${confName}.js`);
197
216
  '/src/runtime/cyberia-client',
198
217
  '/.github/workflows/hardhat.ci.yml',
199
218
  '/src/client/public/cyberia-docs',
219
+ '/src/api/cyberia-server-defaults',
200
220
  ])
201
221
  fs.copySync(`.${path}`, `${basePath}${path}`);
202
222
 
@@ -0,0 +1,187 @@
1
+ import fs from 'fs-extra';
2
+
3
+ import { loggerFactory } from '../src/server/logger.js';
4
+ import { getDirname, newInstance, uniqueArray } from '../src/client/components/core/CommonJs.js';
5
+ import { shellExec } from '../src/server/process.js';
6
+ import walk from 'ignore-walk';
7
+ import { validateTemplatePath } from '../src/server/conf.js';
8
+ import dotenv from 'dotenv';
9
+
10
+ const logger = loggerFactory(import.meta);
11
+
12
+ if (fs.existsSync('./engine-private/conf/dd-cron/.env.production'))
13
+ dotenv.config({
14
+ path: `./engine-private/conf/dd-cron/.env.production`,
15
+ override: true,
16
+ });
17
+ else dotenv.config();
18
+
19
+ // Engine-only paths stripped from the template after the source sync.
20
+ const TEMPLATE_DELETE_PATHS = [
21
+ './.github',
22
+ './manifests/deployment/dd-lampp-development',
23
+ './manifests/deployment/dd-cyberia-development',
24
+ './manifests/deployment/dd-core-development',
25
+ './manifests/deployment/dd-template-development',
26
+ './src/server/object-layer.js',
27
+ './src/server/atlas-sprite-sheet-generator.js',
28
+ './src/server/shape-generator.js',
29
+ './src/server/semantic-layer-generator.js',
30
+ './src/server/semantic-layer-generator-floor.js',
31
+ './src/server/semantic-layer-generator-skin.js',
32
+ './src/server/semantic-layer-generator-resource.js',
33
+ './src/server/besu-genesis-generator.js',
34
+ './src/grpc/cyberia',
35
+ './src/runtime/cyberia-server',
36
+ './src/runtime/cyberia-client',
37
+ './test/shape-generator.test.js',
38
+ './src/client/public/cyberia-docs',
39
+ 'bin/cyberia.js',
40
+ './hardhat',
41
+ ];
42
+
43
+ // Workflow + service files re-added to the template after the engine-only strip above.
44
+ const TEMPLATE_RESTORE_PATHS = [
45
+ `./.github/workflows/pwa-microservices-template-page.cd.yml`,
46
+ `./.github/workflows/pwa-microservices-template-test.ci.yml`,
47
+ `./.github/workflows/npmpkg.ci.yml`,
48
+ `./.github/workflows/ghpkg.ci.yml`,
49
+ `./.github/workflows/gitlab.ci.yml`,
50
+ `./.github/workflows/publish.ci.yml`,
51
+ `./.github/workflows/release.cd.yml`,
52
+ `./src/client/services/user/guest.service.js`,
53
+ './src/api/user/guest.service.js',
54
+ './src/ws/IoInterface.js',
55
+ './src/ws/IoServer.js',
56
+ ];
57
+
58
+ const TEMPLATE_KEYWORDS = [
59
+ 'underpost',
60
+ 'underpost-platform',
61
+ 'cli',
62
+ 'toolchain',
63
+ 'ci-cd',
64
+ 'devops',
65
+ 'kubernetes',
66
+ 'k3s',
67
+ 'kubeadm',
68
+ 'lxd',
69
+ 'bare-metal',
70
+ 'container-orchestration',
71
+ 'image-management',
72
+ 'pwa',
73
+ 'workbox',
74
+ 'microservices',
75
+ ];
76
+
77
+ const TEMPLATE_DESCRIPTION =
78
+ 'Underpost Platform — end-to-end CI/CD and application-delivery toolchain CLI. Covers bare metal, Kubernetes, K3s, kubeadm, LXD, container/image orchestration, secrets, databases, cron jobs, monitoring, SSH, runners, PWA + Workbox delivery, and release orchestration. Extensible via downstream CLIs.';
79
+
80
+ /**
81
+ * Builds the pwa-microservices-template from scratch out of the current engine source tree.
82
+ *
83
+ * Clones (or resets) the template repo next to the engine, syncs every engine-tracked file the
84
+ * template is allowed to carry (validateTemplatePath), strips engine-only modules, restores the
85
+ * template's own CI workflows + guest services, and rewrites package.json / package-lock.json /
86
+ * README so the template is a standalone, installable project.
87
+ *
88
+ * Usage: node bin/build.template [srcPath=./] [toPath=../pwa-microservices-template]
89
+ */
90
+ const srcPath = (process.argv[2] ?? './').replaceAll(`'`, '');
91
+ const toPath = (process.argv[3] ?? '../pwa-microservices-template').replaceAll(`'`, '');
92
+ const githubUsername = process.env.GITHUB_USERNAME;
93
+
94
+ logger.info('Build template', { srcPath, toPath });
95
+
96
+ try {
97
+ const sourceFiles = (
98
+ await new Promise((resolve) =>
99
+ walk(
100
+ {
101
+ path: srcPath,
102
+ ignoreFiles: [`.gitignore`],
103
+ includeEmpty: false,
104
+ follow: false,
105
+ },
106
+ (...args) => resolve(args[1]),
107
+ ),
108
+ )
109
+ ).filter((p) => !p.startsWith('.git'));
110
+
111
+ // Clone the template from 0 if missing; otherwise reset it to a clean pristine checkout.
112
+ if (!fs.existsSync(toPath)) {
113
+ shellExec(`cd .. && node engine/bin clone ${githubUsername}/pwa-microservices-template`);
114
+ } else {
115
+ shellExec(`cd ${toPath} && git reset && git checkout . && git clean -f -d`);
116
+ shellExec(`node bin pull ${toPath} ${githubUsername}/pwa-microservices-template`);
117
+ shellExec(`sudo rm -rf ${toPath}/engine-private`);
118
+ shellExec(`sudo rm -rf ${toPath}/logs`);
119
+ }
120
+ shellExec(`cd ${toPath} && git config core.filemode false`);
121
+
122
+ for (const copyPath of sourceFiles) {
123
+ if (copyPath === 'NaN') continue;
124
+ const absolutePath = `${srcPath}/${copyPath}`;
125
+ if (!validateTemplatePath(absolutePath)) continue;
126
+
127
+ const folder = getDirname(`${toPath}/${copyPath}`);
128
+ if (!fs.existsSync(folder)) fs.mkdirSync(folder, { recursive: true });
129
+
130
+ logger.info('build', `${toPath}/${copyPath}`);
131
+ fs.copyFileSync(absolutePath, `${toPath}/${copyPath}`);
132
+ }
133
+
134
+ fs.copySync(`./.vscode`, `${toPath}/.vscode`);
135
+ fs.copySync(`./src/client/public/default`, `${toPath}/src/client/public/default`);
136
+
137
+ // Preserve the template's own README + package.json identity before merging engine metadata.
138
+ for (const checkoutPath of ['README.md', 'package.json']) shellExec(`cd ${toPath} && git checkout ${checkoutPath}`);
139
+
140
+ for (const deletePath of TEMPLATE_DELETE_PATHS) {
141
+ const target = `${toPath}/${deletePath}`;
142
+ if (fs.existsSync(target)) fs.removeSync(target);
143
+ }
144
+
145
+ fs.mkdirSync(`${toPath}/.github/workflows`, { recursive: true });
146
+ for (const restorePath of TEMPLATE_RESTORE_PATHS) fs.copyFileSync(restorePath, `${toPath}/${restorePath}`);
147
+
148
+ // ── package.json: take engine deps/scripts/version, keep template identity. ──
149
+ const originPackageJson = JSON.parse(fs.readFileSync('./package.json', 'utf8'));
150
+ const templatePackageJson = JSON.parse(fs.readFileSync(`${toPath}/package.json`, 'utf8'));
151
+ const templateName = templatePackageJson.name;
152
+
153
+ templatePackageJson.dependencies = originPackageJson.dependencies;
154
+ templatePackageJson.devDependencies = originPackageJson.devDependencies;
155
+ templatePackageJson.version = originPackageJson.version;
156
+ templatePackageJson.scripts = originPackageJson.scripts;
157
+ templatePackageJson.overrides = originPackageJson.overrides;
158
+ templatePackageJson.name = templateName;
159
+ templatePackageJson.description = TEMPLATE_DESCRIPTION;
160
+ templatePackageJson.keywords = uniqueArray(TEMPLATE_KEYWORDS.concat(templatePackageJson.keywords || []));
161
+ delete templatePackageJson.scripts['update:template'];
162
+ fs.writeFileSync(`${toPath}/package.json`, JSON.stringify(templatePackageJson, null, 4), 'utf8');
163
+
164
+ // ── package-lock.json: mirror engine packages, keep template name/version on the root entry. ──
165
+ const originPackageLockJson = JSON.parse(fs.readFileSync('./package-lock.json', 'utf8'));
166
+ const templatePackageLockJson = JSON.parse(fs.readFileSync(`${toPath}/package-lock.json`, 'utf8'));
167
+ const originBasePackageLock = newInstance(templatePackageLockJson.packages['']);
168
+ templatePackageLockJson.name = templateName;
169
+ templatePackageLockJson.version = originPackageLockJson.version;
170
+ templatePackageLockJson.packages = originPackageLockJson.packages;
171
+ templatePackageLockJson.packages[''].name = templateName;
172
+ templatePackageLockJson.packages[''].version = originPackageLockJson.version;
173
+ templatePackageLockJson.packages[''].hasInstallScript = originBasePackageLock.hasInstallScript;
174
+ templatePackageLockJson.packages[''].license = originBasePackageLock.license;
175
+ fs.writeFileSync(`${toPath}/package-lock.json`, JSON.stringify(templatePackageLockJson, null, 4), 'utf8');
176
+
177
+ fs.writeFileSync(
178
+ `${toPath}/README.md`,
179
+ fs
180
+ .readFileSync('./README.md', 'utf8')
181
+ .replace('<!-- template-title -->', '#### Base template for pwa/api-rest projects.'),
182
+ 'utf8',
183
+ );
184
+ } catch (error) {
185
+ logger.error(error, error.stack);
186
+ process.exit(1);
187
+ }
package/bin/deploy.js CHANGED
@@ -714,7 +714,7 @@ nvidia/gpu-operator \
714
714
  }
715
715
 
716
716
  case 'cyberia': {
717
- const { CyberiaDependencies } = await import(`../src/client/components/cyberia-portal/CommonCyberiaPortal.js`);
717
+ const { CyberiaDependencies } = await import(`../src/api/cyberia-server-defaults/cyberia-server-defaults.js`);
718
718
  for (const dep of Object.keys(CyberiaDependencies)) {
719
719
  const ver = CyberiaDependencies[dep];
720
720
  shellExec(`npm install ${dep}@${ver}`);
@@ -823,7 +823,7 @@ nvidia/gpu-operator \
823
823
 
824
824
  // Delete merged local and remote branches
825
825
  for (const { branch, isAlreadyMerged } of mergedBranches) {
826
- shellExec(`git branch -D ${branch}`, { silent: true });
826
+ shellExec(`git branch -D ${branch}`, { silent: true, silentOnError: true });
827
827
  // logger.info(`Deleting remote branch: ${branch}${isAlreadyMerged ? ' (already merged)' : ''}`);
828
828
  // shellExec(`git push https://${process.env.GITHUB_TOKEN}@github.com/${gitUri}.git --delete ${branch}`, {
829
829
  // disableLog: true,
@@ -1528,6 +1528,16 @@ nvidia/gpu-operator \
1528
1528
 
1529
1529
  break;
1530
1530
  }
1531
+
1532
+ case 'k3s-template-env': {
1533
+ if (fs.existsSync('./engine-private/conf/dd-default')) {
1534
+ console.log('Cleaning up existing dd-default config for VM template environment setup');
1535
+ fs.removeSync('./engine-private/conf/dd-default');
1536
+ }
1537
+ shellExec(`node bin env clean`);
1538
+ shellExec(`sed -i "s/127.0.0.1/$(underpost ip --dhcp)/g" .env.example`);
1539
+ break;
1540
+ }
1531
1541
  }
1532
1542
  } catch (error) {
1533
1543
  logger.error(error, error.stack);
package/bin/index.js CHANGED
@@ -9,4 +9,5 @@ try {
9
9
  program.parse();
10
10
  } catch (error) {
11
11
  logger.error(error);
12
- }
12
+ process.exit(1);
13
+ }
package/bump.config.js ADDED
@@ -0,0 +1,26 @@
1
+ /**
2
+ * bumpp configuration for the Underpost engine.
3
+ *
4
+ * Owns the *canonical* version-bearing files (anything that exposes a literal `version` field
5
+ * bumpp can detect natively). Non-canonical files — image tags in workflows, README badges,
6
+ * doc strings, deployment.yaml image refs — are handled by the custom regex walker in
7
+ * src/cli/release.js (VERSION_BUMP_TARGETS), because bumpp only rewrites `version`-shaped lines.
8
+ *
9
+ * release.js drives bumpp programmatically (versionBump from 'bumpp') with commit/tag/push
10
+ * disabled, since the engine release flow stages and commits separately via `node bin cmt`.
11
+ *
12
+ * @see https://github.com/antfu/bumpp
13
+ */
14
+ export default {
15
+ files: [
16
+ 'package.json',
17
+ 'package-lock.json',
18
+ // engine-private confs are git-ignored and visited only if present at bump time.
19
+ 'engine-private/conf/**/package.json',
20
+ ],
21
+ commit: false,
22
+ tag: false,
23
+ push: false,
24
+ confirm: false,
25
+ recursive: false,
26
+ };
package/conf.js CHANGED
@@ -168,11 +168,25 @@ const DefaultConf = /**/ {
168
168
  head: ['Seo', 'Pwa', 'Css', 'DefaultScripts', 'Production'],
169
169
  body: ['CacheControl', 'DefaultSplashScreen', '404', '500', 'SwaggerDarkMode'],
170
170
  mailer: { userVerifyEmail: 'DefaultVerifyEmail', userRecoverEmail: 'DefaultRecoverEmail' },
171
- offline: [
172
- { path: '/offline', title: 'No Network Connection', client: 'NoNetworkConnection', head: [], body: [] },
173
- { path: '/maintenance', title: 'Server Maintenance', client: 'Maintenance', head: [], body: [] },
171
+ views: [
172
+ {
173
+ path: '/offline',
174
+ title: 'No Network Connection',
175
+ client: 'NoNetworkConnection',
176
+ head: [],
177
+ body: [],
178
+ offlineDefault: true,
179
+ },
180
+ {
181
+ path: '/maintenance',
182
+ title: 'Server Maintenance',
183
+ client: 'Maintenance',
184
+ head: [],
185
+ body: [],
186
+ maintenanceDefault: true,
187
+ },
188
+ { path: '/test', title: 'Test', client: 'Test', head: [], body: [] },
174
189
  ],
175
- pages: [{ path: '/test', title: 'Test', client: 'Test', head: [], body: [] }],
176
190
  },
177
191
  },
178
192
  server: {
@@ -187,10 +201,9 @@ const DefaultConf = /**/ {
187
201
  proxy: [80, 443],
188
202
  db: {
189
203
  provider: 'env:DB_PROVIDER:mongoose',
190
- host: 'env:DB_HOST:mongodb://127.0.0.1:27017',
204
+ host: 'env:DB_HOST:mongodb://mongodb-0.mongodb-service:27017',
191
205
  name: 'env:DB_NAME:default',
192
- user: 'env:DB_USER:',
193
- password: 'env:DB_PASSWORD:',
206
+ replicaSet: 'env:DB_REPLICA_SET:rs0',
194
207
  },
195
208
  mailer: {
196
209
  sender: {
@@ -23,7 +23,7 @@ spec:
23
23
  spec:
24
24
  containers:
25
25
  - name: dd-cron-backup
26
- image: underpost/underpost-engine:v3.2.9
26
+ image: underpost/underpost-engine:v3.2.11
27
27
  command:
28
28
  - /bin/sh
29
29
  - -c
@@ -23,7 +23,7 @@ spec:
23
23
  spec:
24
24
  containers:
25
25
  - name: dd-cron-dns
26
- image: underpost/underpost-engine:v3.2.9
26
+ image: underpost/underpost-engine:v3.2.11
27
27
  command:
28
28
  - /bin/sh
29
29
  - -c
@@ -17,7 +17,7 @@ spec:
17
17
  spec:
18
18
  containers:
19
19
  - name: dd-default-development-blue
20
- image: underpost/underpost-engine:v3.2.9
20
+ image: underpost/underpost-engine:v3.2.11
21
21
  # resources:
22
22
  # requests:
23
23
  # memory: "124Ki"
@@ -98,7 +98,7 @@ spec:
98
98
  spec:
99
99
  containers:
100
100
  - name: dd-default-development-green
101
- image: underpost/underpost-engine:v3.2.9
101
+ image: underpost/underpost-engine:v3.2.11
102
102
  # resources:
103
103
  # requests:
104
104
  # memory: "124Ki"
@@ -20,7 +20,7 @@ spec:
20
20
  spec:
21
21
  containers:
22
22
  - name: dd-test-development-blue
23
- image: underpost/underpost-engine:v3.2.9
23
+ image: underpost/underpost-engine:v3.2.11
24
24
  imagePullPolicy: IfNotPresent
25
25
  envFrom:
26
26
  - secretRef:
@@ -34,6 +34,7 @@ spec:
34
34
  underpost start --build --run dd-test development
35
35
 
36
36
 
37
+
37
38
  ---
38
39
  apiVersion: v1
39
40
  kind: Service
@@ -147,7 +148,7 @@ spec:
147
148
  spec:
148
149
  containers:
149
150
  - name: dd-test-development-green
150
- image: underpost/underpost-engine:v3.2.9
151
+ image: underpost/underpost-engine:v3.2.11
151
152
  imagePullPolicy: IfNotPresent
152
153
  envFrom:
153
154
  - secretRef:
@@ -161,6 +162,7 @@ spec:
161
162
  underpost start --build --run dd-test development
162
163
 
163
164
 
165
+
164
166
  ---
165
167
  apiVersion: v1
166
168
  kind: Service
@@ -1,8 +1,16 @@
1
1
  kind: Cluster
2
2
  apiVersion: kind.x-k8s.io/v1alpha4
3
+ networking:
4
+ ipFamily: ipv4
3
5
  nodes:
4
6
  - role: control-plane
7
+ extraMounts:
8
+ - hostPath: /data/mongodb
9
+ containerPath: /data/mongodb
5
10
  - role: worker
11
+ extraMounts:
12
+ - hostPath: /data/mongodb
13
+ containerPath: /data/mongodb
6
14
  # extraPortMappings:
7
15
  # - containerPort: 80
8
16
  # hostPort: 80
@@ -1,13 +1,22 @@
1
1
  config:
2
- limits.cpu: "2"
2
+ limits.cpu: '2'
3
3
  limits.memory: 4GB
4
- description: vm nat network
4
+ # Host-safety hardening:
5
+ # boot.autostart=false → the LXD daemon will NOT start any VM created with
6
+ # this profile when the host boots. The user explicitly brings VMs up
7
+ # after the host is verified healthy. Prevents a broken VM from blocking
8
+ # boot via snap.lxd.daemon.
9
+ # boot.host_shutdown_timeout=60 → bound the time the daemon waits for this
10
+ # VM to stop when the host is going down. Prevents an unresponsive VM
11
+ # from holding the host in an indefinite shutdown.
12
+ boot.autostart: 'false'
13
+ boot.host_shutdown_timeout: '60'
14
+ description: vm nat network (host-safe defaults)
5
15
  devices:
6
16
  eth0:
7
17
  name: eth0
8
18
  network: lxdbr0
9
19
  type: nic
10
- ipv4.address: 10.250.250.100
11
20
  root:
12
21
  path: /
13
22
  pool: local # lxc storage list
@@ -1,23 +1,59 @@
1
1
  apiVersion: v1
2
2
  kind: PersistentVolume
3
3
  metadata:
4
- name: mongodb-pv
4
+ name: mongodb-pv-0
5
+ labels:
6
+ app: mongodb
5
7
  spec:
6
8
  capacity:
7
9
  storage: 5Gi
8
10
  accessModes:
9
11
  - ReadWriteOnce
12
+ persistentVolumeReclaimPolicy: Retain
13
+ storageClassName: mongodb-storage-class
14
+ claimRef:
15
+ namespace: default
16
+ name: mongodb-storage-mongodb-0
10
17
  hostPath:
11
- path: /data/mongodb
18
+ path: /data/mongodb/v0
19
+ type: DirectoryOrCreate
12
20
  ---
13
21
  apiVersion: v1
14
- kind: PersistentVolumeClaim
22
+ kind: PersistentVolume
23
+ metadata:
24
+ name: mongodb-pv-1
25
+ labels:
26
+ app: mongodb
27
+ spec:
28
+ capacity:
29
+ storage: 5Gi
30
+ accessModes:
31
+ - ReadWriteOnce
32
+ persistentVolumeReclaimPolicy: Retain
33
+ storageClassName: mongodb-storage-class
34
+ claimRef:
35
+ namespace: default
36
+ name: mongodb-storage-mongodb-1
37
+ hostPath:
38
+ path: /data/mongodb/v1
39
+ type: DirectoryOrCreate
40
+ ---
41
+ apiVersion: v1
42
+ kind: PersistentVolume
15
43
  metadata:
16
- name: mongodb-pvc
44
+ name: mongodb-pv-2
45
+ labels:
46
+ app: mongodb
17
47
  spec:
18
- storageClassName: ''
48
+ capacity:
49
+ storage: 5Gi
19
50
  accessModes:
20
51
  - ReadWriteOnce
21
- resources:
22
- requests:
23
- storage: 5Gi
52
+ persistentVolumeReclaimPolicy: Retain
53
+ storageClassName: mongodb-storage-class
54
+ claimRef:
55
+ namespace: default
56
+ name: mongodb-storage-mongodb-2
57
+ hostPath:
58
+ path: /data/mongodb/v2
59
+ type: DirectoryOrCreate