underpost 2.99.4 → 2.99.6

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 (38) hide show
  1. package/.env.development +0 -3
  2. package/.env.production +1 -3
  3. package/.env.test +0 -3
  4. package/README.md +3 -3
  5. package/baremetal/commission-workflows.json +93 -4
  6. package/bin/deploy.js +56 -45
  7. package/cli.md +45 -28
  8. package/examples/static-page/README.md +101 -357
  9. package/examples/static-page/ssr-components/CustomPage.js +1 -13
  10. package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +40 -0
  11. package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +40 -0
  12. package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
  13. package/manifests/deployment/dd-test-development/deployment.yaml +2 -2
  14. package/package.json +3 -4
  15. package/scripts/disk-devices.sh +13 -0
  16. package/scripts/maas-setup.sh +13 -9
  17. package/scripts/rocky-kickstart.sh +294 -0
  18. package/src/cli/baremetal.js +657 -263
  19. package/src/cli/cloud-init.js +120 -120
  20. package/src/cli/env.js +4 -1
  21. package/src/cli/image.js +4 -37
  22. package/src/cli/index.js +56 -11
  23. package/src/cli/kickstart.js +149 -0
  24. package/src/cli/repository.js +3 -1
  25. package/src/cli/run.js +56 -10
  26. package/src/cli/secrets.js +0 -34
  27. package/src/cli/static.js +23 -23
  28. package/src/client/components/core/Docs.js +22 -3
  29. package/src/index.js +30 -5
  30. package/src/server/backup.js +11 -4
  31. package/src/server/client-build-docs.js +1 -1
  32. package/src/server/conf.js +0 -22
  33. package/src/server/cron.js +339 -130
  34. package/src/server/dns.js +10 -0
  35. package/src/server/logger.js +22 -27
  36. package/src/server/tls.js +14 -14
  37. package/examples/static-page/QUICK-REFERENCE.md +0 -481
  38. package/examples/static-page/STATIC-GENERATOR-GUIDE.md +0 -757
package/.env.development CHANGED
@@ -16,9 +16,6 @@ DEFAULT_DEPLOY_PATH=/
16
16
  MARIADB_HOST=changethis
17
17
  MARIADB_USER=changethis
18
18
  MARIADB_PASSWORD=changethis
19
- DD_LAMPP_TEST_DB_0=changethis
20
- WIFI=changethis
21
- ROUTER=changethis
22
19
  CLOUDINARY_CLOUD_NAME=changethis
23
20
  CLOUDINARY_API_KEY=changethis
24
21
  CLOUDINARY_API_SECRET=changethis
package/.env.production CHANGED
@@ -17,9 +17,7 @@ DEFAULT_DEPLOY_PATH=/
17
17
  MARIADB_HOST=changethis
18
18
  MARIADB_USER=changethis
19
19
  MARIADB_PASSWORD=changethis
20
- DD_LAMPP_TEST_DB_0=changethis
21
- WIFI=changethis
22
- ROUTER=changethis
20
+ WIFI_PASSWORD=changethis
23
21
  CLOUDINARY_CLOUD_NAME=changethis
24
22
  CLOUDINARY_API_KEY=changethis
25
23
  CLOUDINARY_API_SECRET=changethis
package/.env.test CHANGED
@@ -16,9 +16,6 @@ DEFAULT_DEPLOY_PATH=/
16
16
  MARIADB_HOST=changethis
17
17
  MARIADB_USER=changethis
18
18
  MARIADB_PASSWORD=changethis
19
- DD_LAMPP_TEST_DB_0=changethis
20
- WIFI=changethis
21
- ROUTER=changethis
22
19
  CLOUDINARY_CLOUD_NAME=changethis
23
20
  CLOUDINARY_API_KEY=changethis
24
21
  CLOUDINARY_API_SECRET=changethis
package/README.md CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
  <!-- badges -->
20
20
 
21
- [![Node.js CI](https://github.com/underpostnet/engine/actions/workflows/docker-image.ci.yml/badge.svg?branch=master)](https://github.com/underpostnet/engine/actions/workflows/docker-image.yml) [![Test](https://github.com/underpostnet/engine/actions/workflows/coverall.ci.yml/badge.svg?branch=master)](https://github.com/underpostnet/engine/actions/workflows/coverall.ci.yml) [![Downloads](https://img.shields.io/npm/dm/underpost.svg)](https://www.npmjs.com/package/underpost) [![Socket Badge](https://socket.dev/api/badge/npm/package/underpost/2.99.4)](https://socket.dev/npm/package/underpost/overview/2.99.4) [![Coverage Status](https://coveralls.io/repos/github/underpostnet/engine/badge.svg?branch=master)](https://coveralls.io/github/underpostnet/engine?branch=master) [![Version](https://img.shields.io/npm/v/underpost.svg)](https://www.npmjs.org/package/underpost) [![License](https://img.shields.io/npm/l/underpost.svg)](https://www.npmjs.com/package/underpost)
21
+ [![Node.js CI](https://github.com/underpostnet/engine/actions/workflows/docker-image.ci.yml/badge.svg?branch=master)](https://github.com/underpostnet/engine/actions/workflows/docker-image.yml) [![Test](https://github.com/underpostnet/engine/actions/workflows/coverall.ci.yml/badge.svg?branch=master)](https://github.com/underpostnet/engine/actions/workflows/coverall.ci.yml) [![Downloads](https://img.shields.io/npm/dm/underpost.svg)](https://www.npmjs.com/package/underpost) [![Socket Badge](https://socket.dev/api/badge/npm/package/underpost/2.99.6)](https://socket.dev/npm/package/underpost/overview/2.99.6) [![Coverage Status](https://coveralls.io/repos/github/underpostnet/engine/badge.svg?branch=master)](https://coveralls.io/github/underpostnet/engine?branch=master) [![Version](https://img.shields.io/npm/v/underpost.svg)](https://www.npmjs.org/package/underpost) [![License](https://img.shields.io/npm/l/underpost.svg)](https://www.npmjs.com/package/underpost)
22
22
 
23
23
  <!-- end-badges -->
24
24
 
@@ -66,7 +66,7 @@ Run dev client server
66
66
  npm run dev
67
67
  ```
68
68
  <!-- -->
69
- ## underpost ci/cd cli v2.99.4
69
+ ## underpost ci/cd cli v2.99.6
70
70
 
71
71
  ### Usage: `underpost [options] [command]`
72
72
  ```
@@ -93,7 +93,7 @@ Commands:
93
93
  install Quickly imports Underpost npm dependencies by copying them.
94
94
  db [options] [deploy-list] Manages database operations with support for MariaDB and MongoDB, including import/export, multi-pod targeting, and Git integration.
95
95
  metadata [options] [deploy-id] [host] [path] Manages cluster metadata operations, including import and export.
96
- cron [options] [deploy-list] [job-list] Manages cron jobs, including initialization, execution, and configuration updates.
96
+ cron [options] [deploy-list] [job-list] Manages cron jobs: execute jobs directly or generate and apply K8s CronJob manifests.
97
97
  fs [options] [path] Manages file storage, defaulting to file upload operations.
98
98
  test [options] [deploy-list] Manages and runs tests, defaulting to the current Underpost default test suite.
99
99
  monitor [options] <deploy-id> [env] Manages health server monitoring for specified deployments.
@@ -2,10 +2,11 @@
2
2
  "rpi4mbarm64-iso-ram": {
3
3
  "type": "iso-ram",
4
4
  "osIdLike": "debian ubuntu",
5
+ "architecture": "arm64",
5
6
  "isoUrl": "https://cdimage.ubuntu.com/releases/24.04/release/ubuntu-24.04.3-live-server-arm64.iso",
6
7
  "tftpPrefix": "rpi4mb",
7
8
  "bootstrapHttpServerPort": 8888,
8
- "menuentryStr": "UNDERPOST.NET UEFI/GRUB/MAAS RPi4 ISO-RAM commissioning (ARM64)",
9
+ "menuentryStr": "UNDERPOST.NET UEFI/GRUB/MAAS RPi4 ISO-RAM Ubuntu 24.04 ephemeral commissioning (ARM64)",
9
10
  "networkInterfaceName": "enabcm6e4ei0",
10
11
  "chronyc": {
11
12
  "timezone": "America/Santiago",
@@ -31,9 +32,10 @@
31
32
  "rpi4mbarm64-chroot": {
32
33
  "type": "chroot-debootstrap",
33
34
  "osIdLike": "debian ubuntu",
35
+ "architecture": "arm64",
34
36
  "tftpPrefix": "rpi4mb",
35
37
  "bootstrapHttpServerPort": 8888,
36
- "menuentryStr": "UNDERPOST.NET UEFI/GRUB/MAAS RPi4 CHROOT commissioning (ARM64)",
38
+ "menuentryStr": "UNDERPOST.NET UEFI/GRUB/MAAS RPi4 CHROOT Ubuntu 24.04 ephemeral commissioning (ARM64)",
37
39
  "networkInterfaceName": "enabcm6e4ei0",
38
40
  "firmwares": [
39
41
  {
@@ -65,10 +67,11 @@
65
67
  "rpi4mbarm64-iso-nfs": {
66
68
  "type": "iso-nfs",
67
69
  "osIdLike": "debian ubuntu",
70
+ "architecture": "arm64",
68
71
  "isoUrl": "https://cdimage.ubuntu.com/releases/24.04/release/ubuntu-24.04.3-live-server-arm64.iso",
69
72
  "tftpPrefix": "rpi4mb",
70
73
  "bootstrapHttpServerPort": 8888,
71
- "menuentryStr": "UNDERPOST.NET UEFI/GRUB/MAAS RPi4 ISO-NFS commissioning (ARM64)",
74
+ "menuentryStr": "UNDERPOST.NET UEFI/GRUB/MAAS RPi4 ISO-NFS Ubuntu 24.04 ephemeral commissioning (ARM64)",
72
75
  "networkInterfaceName": "enabcm6e4ei0",
73
76
  "chronyc": {
74
77
  "timezone": "America/Santiago",
@@ -94,9 +97,10 @@
94
97
  "rpi4mbarm64-chroot-rocky9": {
95
98
  "type": "chroot-container",
96
99
  "osIdLike": "rhel centos fedora",
100
+ "architecture": "arm64",
97
101
  "tftpPrefix": "rpi4mb",
98
102
  "bootstrapHttpServerPort": 8888,
99
- "menuentryStr": "UNDERPOST.NET Rocky9 Container CHROOT NFS (ARM64)",
103
+ "menuentryStr": "UNDERPOST.NET Container CHROOT Rocky Linux 9 ephemeral commissioning (ARM64)",
100
104
  "networkInterfaceName": "eth0",
101
105
  "firmwares": [
102
106
  {
@@ -117,5 +121,90 @@
117
121
  "keyboard": {
118
122
  "layout": "es"
119
123
  }
124
+ },
125
+ "hp-envy-iso-nfs": {
126
+ "type": "iso-nfs",
127
+ "osIdLike": "debian ubuntu",
128
+ "architecture": "amd64",
129
+ "isoUrl": "https://releases.ubuntu.com/releases/24.04/ubuntu-24.04.3-live-server-amd64.iso",
130
+ "tftpPrefix": "envy",
131
+ "bootstrapHttpServerPort": 8888,
132
+ "menuentryStr": "UNDERPOST.NET UEFI/ISO-IPXE/MAAS hp-envy ISO-NFS Ubuntu 24.04 ephemeral commissioning (AMD64)",
133
+ "networkInterfaceName": "eth0",
134
+ "chronyc": {
135
+ "timezone": "America/Santiago",
136
+ "chronyConfPath": "/etc/chrony/chrony.conf"
137
+ },
138
+ "firmwares": [],
139
+ "maas": {
140
+ "commissioning": {
141
+ "architecture": "amd64/hwe-24.04-edge",
142
+ "name": "ubuntu/noble"
143
+ }
144
+ },
145
+ "keyboard": {
146
+ "layout": "es"
147
+ }
148
+ },
149
+ "hp-envy-iso-ram": {
150
+ "type": "iso-ram",
151
+ "osIdLike": "debian ubuntu",
152
+ "architecture": "amd64",
153
+ "isoUrl": "https://releases.ubuntu.com/releases/24.04/ubuntu-24.04.3-live-server-amd64.iso",
154
+ "tftpPrefix": "envy",
155
+ "bootstrapHttpServerPort": 8888,
156
+ "menuentryStr": "UNDERPOST.NET UEFI/ISO-IPXE/MAAS hp-envy ISO-RAM Ubuntu 24.04 ephemeral commissioning (AMD64)",
157
+ "networkInterfaceName": "eth0",
158
+ "chronyc": {
159
+ "timezone": "America/Santiago",
160
+ "chronyConfPath": "/etc/chrony/chrony.conf"
161
+ },
162
+ "firmwares": [],
163
+ "maas": {
164
+ "commissioning": {
165
+ "architecture": "amd64/hwe-24.04-edge",
166
+ "name": "ubuntu/noble"
167
+ }
168
+ },
169
+ "keyboard": {
170
+ "layout": "es"
171
+ }
172
+ },
173
+ "hp-envy-iso-ram-rocky9": {
174
+ "type": "iso-ram",
175
+ "osIdLike": "rhel centos fedora",
176
+ "architecture": "amd64",
177
+ "isoUrl": "https://download.rockylinux.org/pub/rocky/9/isos/x86_64/Rocky-9-latest-x86_64-boot.iso",
178
+ "tftpPrefix": "envy-rocky9",
179
+ "bootstrapHttpServerPort": 8888,
180
+ "menuentryStr": "UNDERPOST.NET UEFI/ISO-IPXE/KICKSTART-ANACONDA hp-envy ISO-RAM Rocky Linux 9 ephemeral commissioning (AMD64)",
181
+ "networkInterfaceName": "eth0",
182
+ "chronyc": {
183
+ "timezone": "America/Santiago",
184
+ "chronyConfPath": "/etc/chrony/chrony.conf"
185
+ },
186
+ "firmwares": [],
187
+ "container": {
188
+ "image": "quay.io/rockylinux/rockylinux:9",
189
+ "architecture": "amd64",
190
+ "packages": [
191
+ "kernel",
192
+ "kernel-core",
193
+ "kernel-modules",
194
+ "linux-firmware",
195
+ "dracut",
196
+ "dracut-network",
197
+ "dracut-config-generic",
198
+ "dracut-live",
199
+ "nfs-utils",
200
+ "tar",
201
+ "iproute",
202
+ "openssh-server",
203
+ "openssh-clients"
204
+ ]
205
+ },
206
+ "keyboard": {
207
+ "layout": "es"
208
+ }
120
209
  }
121
210
  }
package/bin/deploy.js CHANGED
@@ -468,7 +468,10 @@ try {
468
468
  shellExec(`node bin new --deploy-id dd-default`);
469
469
  console.log(fs.existsSync(`./engine-private/conf/dd-default`));
470
470
  shellExec(`sudo rm -rf ./engine-private/conf/dd-default`);
471
- shellExec(`node bin/deploy build-env`);
471
+ shellExec(
472
+ `node bin cron --cmd 'cd /home/dd/engine && node bin run secret && node bin env dd-cron production' --git --kubeadm --dev --setup-start`,
473
+ );
474
+ shellExec(`node bin/deploy build-envs`);
472
475
  break;
473
476
  }
474
477
 
@@ -477,7 +480,7 @@ try {
477
480
  shellExec(
478
481
  `underpost secret underpost --create-from-file /home/dd/engine/engine-private/conf/dd-cron/.env.production`,
479
482
  );
480
- shellExec(`node bin/deploy sync-deploy-envs`);
483
+ shellExec(`node bin/deploy sync-envs`);
481
484
  shellExec(`node bin/build dd conf`);
482
485
  shellExec(`git add . && cd ./engine-private && git add .`);
483
486
  shellExec(`node bin cmt . ci package-pwa-microservices-template 'New release v:${process.argv[3]}'`);
@@ -537,45 +540,6 @@ ${shellExec(`git log | grep Author: | sort -u`, { stdout: true }).split(`\n`).jo
537
540
 
538
541
  break;
539
542
  }
540
- case 'build-env': {
541
- const buildEnv = (privateEnvPath, originEnv, env) => {
542
- const privateEnv = dotenv.parse(fs.readFileSync(privateEnvPath, 'utf8'));
543
- for (const key of Object.keys(privateEnv)) {
544
- if (key in env) {
545
- console.warn(`Key ${key} already exists in origin env`);
546
- continue;
547
- }
548
- if (key in originEnv) {
549
- console.warn(`Key ${key} already exists in origin env`);
550
- env[key] = originEnv[key];
551
- continue;
552
- }
553
- env[key] =
554
- `${key}`.toUpperCase().match('API') ||
555
- `${key}`.toUpperCase().match('KEY') ||
556
- `${key}`.toUpperCase().match('SECRET') ||
557
- `${key}`.toUpperCase().match('TOKEN') ||
558
- `${key}`.toUpperCase().match('PASSWORD') ||
559
- `${key}`.toUpperCase().match('MAC')
560
- ? 'changethis'
561
- : isNaN(parseFloat(privateEnv[key]))
562
- ? `${privateEnv[key]}`.match(`@`)
563
- ? 'admin@default.net'
564
- : 'changethis'
565
- : privateEnv[key];
566
- }
567
- return env;
568
- };
569
- for (let envPath of ['.env.development', '.env.production', '.env.test']) {
570
- const originEnv = dotenv.parse(fs.readFileSync(`./${envPath}`, 'utf8'));
571
-
572
- let env = {};
573
- env = buildEnv(`./engine-private/conf/dd-cron/${envPath}`, originEnv, env);
574
- env = buildEnv(`./engine-private/conf/dd-core/${envPath}`, originEnv, env);
575
- writeEnv(envPath, env);
576
- }
577
- break;
578
- }
579
543
 
580
544
  case 'maas-db': {
581
545
  // DROP, ALTER, CREATE, WITH ENCRYPTED
@@ -1121,20 +1085,67 @@ nvidia/gpu-operator \
1121
1085
  break;
1122
1086
  }
1123
1087
 
1124
- case 'sync-deploy-envs': {
1125
- const envObj = dotenv.parse(fs.readFileSync(`./engine-private/conf/dd-cron/.env.production`));
1088
+ case 'build-envs': {
1089
+ const buildEnv = (privateEnvPath, originEnv, env) => {
1090
+ const privateEnv = dotenv.parse(fs.readFileSync(privateEnvPath, 'utf8'));
1091
+ for (const key of Object.keys(privateEnv)) {
1092
+ if (key in env) {
1093
+ console.warn(`Key ${key} already exists in origin env`);
1094
+ continue;
1095
+ }
1096
+ if (key in originEnv) {
1097
+ console.warn(`Key ${key} already exists in origin env`);
1098
+ env[key] = originEnv[key];
1099
+ continue;
1100
+ }
1101
+ env[key] =
1102
+ `${key}`.toUpperCase().match('API') ||
1103
+ `${key}`.toUpperCase().match('KEY') ||
1104
+ `${key}`.toUpperCase().match('SECRET') ||
1105
+ `${key}`.toUpperCase().match('TOKEN') ||
1106
+ `${key}`.toUpperCase().match('PASSWORD') ||
1107
+ `${key}`.toUpperCase().match('MAC')
1108
+ ? 'changethis'
1109
+ : isNaN(parseFloat(privateEnv[key]))
1110
+ ? `${privateEnv[key]}`.match(`@`)
1111
+ ? 'admin@default.net'
1112
+ : 'changethis'
1113
+ : privateEnv[key];
1114
+ }
1115
+ return env;
1116
+ };
1117
+ for (let envPath of ['.env.development', '.env.production', '.env.test']) {
1118
+ const originEnv = dotenv.parse(fs.readFileSync(`./${envPath}`, 'utf8'));
1119
+
1120
+ let env = {};
1121
+ env = buildEnv(`./engine-private/conf/dd-cron/${envPath}`, originEnv, env);
1122
+ env = buildEnv(`./engine-private/conf/dd-core/${envPath}`, originEnv, env);
1123
+ writeEnv(envPath, env);
1124
+ }
1125
+ break;
1126
+ }
1127
+
1128
+ case 'sync-envs': {
1126
1129
  for (const deployId of ['dd-cron'].concat(
1127
1130
  fs.readFileSync(`./engine-private/deploy/dd.router`, 'utf8').split(','),
1128
1131
  )) {
1129
1132
  for (const env of ['production', 'development', 'test']) {
1130
1133
  const _envObj = dotenv.parse(fs.readFileSync(`./engine-private/conf/${deployId}/.env.${env}`, 'utf8'));
1131
- _envObj.GITHUB_TOKEN = envObj.GITHUB_TOKEN;
1134
+ for (const env of []) {
1135
+ delete _envObj[env];
1136
+ }
1132
1137
  writeEnv(`./engine-private/conf/${deployId}/.env.${env}`, _envObj);
1133
1138
  }
1134
1139
  }
1135
1140
  break;
1136
1141
  }
1137
1142
 
1143
+ case 'envs': {
1144
+ shellExec(`node bin/deploy sync-envs`);
1145
+ shellExec(`node bin/deploy build-envs`);
1146
+ break;
1147
+ }
1148
+
1138
1149
  case 'cyberia': {
1139
1150
  const { CyberiaDependencies } = await import(`../src/client/components/cyberia-portal/CommonCyberiaPortal.js`);
1140
1151
  for (const dep of Object.keys(CyberiaDependencies)) {
@@ -1148,7 +1159,7 @@ nvidia/gpu-operator \
1148
1159
  const help = `node bin/deploy pw <script-path> <from-path-in-pod> [to-path-on-local]`;
1149
1160
  const scriptPath = process.argv[3];
1150
1161
  const fromPath = process.argv[4];
1151
- const toPath = process.argv[5] ? process.argv[5] : fromPath ? `./${fromPath.split('/').pop()}` : '';
1162
+ const toPath = process.argv[5] ? process.argv[5] : fromPath ? `/tmp/${fromPath.split('/').pop()}` : '';
1152
1163
  if (scriptPath === 'help') {
1153
1164
  logger.info(help);
1154
1165
  break;
package/cli.md CHANGED
@@ -1,4 +1,4 @@
1
- ## underpost ci/cd cli v2.99.4
1
+ ## underpost ci/cd cli v2.99.6
2
2
 
3
3
  ### Usage: `underpost [options] [command]`
4
4
  ```
@@ -25,7 +25,7 @@ Commands:
25
25
  install Quickly imports Underpost npm dependencies by copying them.
26
26
  db [options] [deploy-list] Manages database operations with support for MariaDB and MongoDB, including import/export, multi-pod targeting, and Git integration.
27
27
  metadata [options] [deploy-id] [host] [path] Manages cluster metadata operations, including import and export.
28
- cron [options] [deploy-list] [job-list] Manages cron jobs, including initialization, execution, and configuration updates.
28
+ cron [options] [deploy-list] [job-list] Manages cron jobs: execute jobs directly or generate and apply K8s CronJob manifests.
29
29
  fs [options] [path] Manages file storage, defaulting to file upload operations.
30
30
  test [options] [deploy-list] Manages and runs tests, defaulting to the current Underpost default test suite.
31
31
  monitor [options] <deploy-id> [env] Manages health server monitoring for specified deployments.
@@ -243,12 +243,6 @@ Options:
243
243
  --manifest <path> Web manifest path.
244
244
  --head-components <paths> Comma-separated SSR head component paths.
245
245
  --body-components <paths> Comma-separated SSR body component paths.
246
- --deploy-id <deploy-id> Build static assets for a specific deployment
247
- ID.
248
- --build Triggers the static build process for the
249
- specified deployment ID.
250
- --build-host <build-host> Sets a custom build host for static documents or
251
- assets.
252
246
  --build-path <build-path> Sets a custom build path for static documents or
253
247
  assets.
254
248
  --env <env> Sets the environment for the static build (e.g.,
@@ -261,6 +255,8 @@ Options:
261
255
  --lang <lang> HTML lang attribute (default: en).
262
256
  --dir <dir> HTML dir attribute (default: ltr).
263
257
  --dev Sets the development cli context
258
+ --run-sv [port] Start a standalone Express static server to
259
+ preview the static build (default port: 5000).
264
260
  -h, --help display help for command
265
261
 
266
262
  ```
@@ -286,6 +282,8 @@ Options:
286
282
  --deploy-id <deploy-id> Sets the deployment configuration ID for the
287
283
  operation context.
288
284
  --build Sets the build context for the operation.
285
+ --copy Copies the configuration value to the clipboard
286
+ (only for get operation).
289
287
  -h, --help display help for command
290
288
 
291
289
  ```
@@ -495,7 +493,7 @@ Manages secrets for various platforms.
495
493
 
496
494
  Arguments:
497
495
  platform The secret management platform. Options:
498
- docker, underpost.
496
+ underpost.
499
497
 
500
498
  Options:
501
499
  --init Initializes the secrets platform
@@ -546,10 +544,6 @@ Options:
546
544
  management.
547
545
  --node-name Set node name for kubeadm or k3s cluster
548
546
  env image context management.
549
- --secrets Includes Dockerfile environment secrets
550
- during the build.
551
- --secrets-path [secrets-path] Specifies a custom path for Dockerfile
552
- environment secrets.
553
547
  --reset Performs a build without using the
554
548
  cache.
555
549
  --dev Use development mode.
@@ -638,22 +632,39 @@ Options:
638
632
  ```
639
633
  Usage: underpost cron [options] [deploy-list] [job-list]
640
634
 
641
- Manages cron jobs, including initialization, execution, and configuration
642
- updates.
635
+ Manages cron jobs: execute jobs directly or generate and apply K8s CronJob
636
+ manifests.
643
637
 
644
638
  Arguments:
645
- deploy-list A comma-separated list of deployment IDs (e.g.,
646
- "default-a,default-b").
647
- job-list A comma-separated list of job IDs. Options:
648
- dns,backup. Defaults to all available jobs.
639
+ deploy-list A comma-separated list of deployment IDs (e.g.,
640
+ "default-a,default-b").
641
+ job-list A comma-separated list of job IDs. Options:
642
+ dns,backup. Defaults to all available jobs.
649
643
 
650
644
  Options:
651
- --init-pm2-cronjobs Initializes PM2 cron jobs from configuration for
652
- the specified deployment IDs.
653
- --git Uploads cron job configurations to GitHub.
654
- --update-package-scripts Updates package.json start scripts for each
655
- deploy-id configuration.
656
- -h, --help display help for command
645
+ --generate-k8s-cronjobs Generates Kubernetes CronJob YAML manifests from
646
+ cron configuration.
647
+ --apply Applies generated K8s CronJob manifests to the
648
+ cluster via kubectl.
649
+ --setup-start [deploy-id] Updates deploy-id package.json start script and
650
+ generates+applies its K8s CronJob manifests.
651
+ --namespace <namespace> Kubernetes namespace for the CronJob resources
652
+ (default: "default").
653
+ --image <image> Custom container image for the CronJob pods.
654
+ --git Pass --git flag to cron job execution.
655
+ --cmd <cmd> Optional pre-script commands to run before cron
656
+ execution.
657
+ --dev Use local ./ base path instead of global underpost
658
+ installation.
659
+ --k3s Use k3s cluster context (apply directly on host).
660
+ --kind Use kind cluster context (apply via kind-worker
661
+ container).
662
+ --kubeadm Use kubeadm cluster context (apply directly on
663
+ host).
664
+ --dry-run Preview cron jobs without executing them.
665
+ --create-job-now After applying manifests, immediately create a Job
666
+ from each CronJob (requires --apply).
667
+ -h, --help display help for command
657
668
 
658
669
  ```
659
670
 
@@ -800,7 +811,7 @@ Options:
800
811
  Runs specified scripts using various runners.
801
812
 
802
813
  Arguments:
803
- runner-id The runner ID to run. Options: dev-cluster,metadata,svc-ls,svc-rm,ssh-deploy-info,dev-hosts-expose,dev-hosts-restore,cluster-build,template-deploy,template-deploy-image,clean,pull,release-deploy,ssh-deploy,ide,crypto-policy,sync,stop,ssh-deploy-stop,ssh-deploy-db-rollback,ssh-deploy-db,ssh-deploy-db-status,tz,cron,get-proxy,instance-promote,instance,ls-deployments,host-update,dd-container,ip-info,db-client,git-conf,promote,metrics,cluster,deploy,disk-clean,disk-usage,dev,service,etc-hosts,sh,log,ps,ptls,release-cmt,deploy-test,sync-replica,tf-vae-test,spark-template,rmi,kill,secret,underpost-config,gpu-env,tf-gpu-test,deploy-job.
814
+ runner-id The runner ID to run. Options: dev-cluster,metadata,svc-ls,svc-rm,ssh-deploy-info,dev-hosts-expose,dev-hosts-restore,cluster-build,template-deploy,template-deploy-image,clean,pull,release-deploy,ssh-deploy,ide,crypto-policy,sync,stop,ssh-deploy-stop,ssh-deploy-db-rollback,ssh-deploy-db,ssh-deploy-db-status,tz,cron,get-proxy,instance-promote,instance,ls-deployments,host-update,dd-container,ip-info,db-client,git-conf,promote,metrics,cluster,deploy,disk-clean,disk-devices,disk-usage,dev,service,etc-hosts,sh,log,ps,ptls,release-cmt,deploy-test,sync-replica,tf-vae-test,spark-template,rmi,kill,secret,underpost-config,gpu-env,tf-gpu-test,deploy-job.
804
815
  path The input value, identifier, or path for the operation.
805
816
 
806
817
  Options:
@@ -842,7 +853,8 @@ Options:
842
853
  --expose Enables service exposure for the runner execution.
843
854
  --conf-server-path <conf-server-path> Sets a custom configuration server path.
844
855
  --underpost-root <underpost-root> Sets a custom Underpost root path.
845
- --cron-jobs <jobs> Comma-separated list of cron jobs to run before executing the script.
856
+ --cmd-cron-jobs <cmd-cron-jobs> Pre-script commands to run before cron job execution.
857
+ --deploy-id-cron-jobs <deploy-id-cron-jobs> Specifies deployment IDs to synchronize cron jobs with during execution.
846
858
  --timezone <timezone> Sets the timezone for the runner execution.
847
859
  --kubeadm Sets the kubeadm cluster context for the runner execution.
848
860
  --k3s Sets the k3s cluster context for the runner execution.
@@ -863,6 +875,8 @@ Options:
863
875
  --monitor-status-kind-type <kind-type> Sets the Kubernetes resource kind type to monitor (default: "pods").
864
876
  --monitor-status-delta-ms <milliseconds> Sets the polling interval in milliseconds for status monitoring (default: 1000).
865
877
  --monitor-status-max-attempts <attempts> Sets the maximum number of status check attempts (default: 600).
878
+ --dry-run Preview operations without executing them.
879
+ --create-job-now After applying cron manifests, immediately create a Job from each CronJob (forwarded to cron runner).
866
880
  -h, --help display help for command
867
881
 
868
882
  ```
@@ -941,6 +955,7 @@ Options:
941
955
  --mac <mac> Specifies the MAC address for baremetal machine operations. Use "random" for random MAC, "hardware" to use device's actual MAC (no spoofing), or specify a MAC address.
942
956
  --ipxe Chainloads iPXE to normalize identity before commissioning.
943
957
  --ipxe-rebuild Forces rebuild of iPXE binary with embedded boot script.
958
+ --ipxe-build-iso <iso-path> Builds a standalone iPXE ISO with embedded script for the specified workflow ID.
944
959
  --install-packer Installs Packer CLI.
945
960
  --packer-maas-image-template <template-path> Creates a new image folder from canonical/packer-maas template path (requires workflow-id).
946
961
  --packer-workflow-id <workflow-id> Specifies the workflow ID for Packer MAAS image operations.
@@ -950,11 +965,13 @@ Options:
950
965
  --remove-machines <system-ids> Removes baremetal machines by comma-separated system IDs, or use "all"
951
966
  --clear-discovered Clears all discovered baremetal machines from the database.
952
967
  --commission Init workflow for commissioning a physical machine.
968
+ --bootstrap-http-server-run Runs a temporary bootstrap HTTP server for generic purposes such as serving iPXE scripts or ISO images during commissioning.
953
969
  --bootstrap-http-server-path <path> Sets a custom bootstrap HTTP server path for baremetal commissioning.
954
970
  --bootstrap-http-server-port <port> Sets a custom bootstrap HTTP server port for baremetal commissioning.
955
971
  --iso-url <url> Uses a custom ISO URL for baremetal machine commissioning.
956
972
  --nfs-build Builds an NFS root filesystem for a workflow id config architecture using QEMU emulation.
957
973
  --nfs-mount Mounts the NFS root filesystem for a workflow id config architecture.
974
+ --nfs-reset Resets the NFS server completely, closing all connections before reloading exports.
958
975
  --nfs-unmount Unmounts the NFS root filesystem for a workflow id config architecture.
959
976
  --nfs-build-server Builds the NFS server for a workflow id config architecture.
960
977
  --nfs-sh Copies QEMU emulation root entrypoint shell command to the clipboard.
@@ -966,7 +983,7 @@ Options:
966
983
  --rocky-tools-test Tests rocky linux tools in chroot environment.
967
984
  --bootcmd <bootcmd-list> Comma-separated list of boot commands to execute.
968
985
  --runcmd <runcmd-list> Comma-separated list of run commands to execute.
969
- --logs <log-id> Displays logs for log id: dhcp, cloud, machine, cloud-config.
986
+ --logs <log-id> Displays logs for log id: dhcp,dhcp-lease,dhcp-lan,cloud-init,cloud-init-machine,cloud-init-config
970
987
  --dev Sets the development context environment for baremetal operations.
971
988
  --ls Lists available boot resources and machines.
972
989
  -h, --help display help for command