Merge pull request #2482 from balena-io/key-expiry

Add provisioning key expiry date option to config generate options
This commit is contained in:
bulldozer-balena[bot] 2022-05-25 11:59:06 +00:00 committed by GitHub
commit 226f45f732
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 88 additions and 24 deletions

View File

@ -811,6 +811,10 @@ path to the config JSON file, see `balena os build-config`
custom key name assigned to generated provisioning api key custom key name assigned to generated provisioning api key
#### --provisioning-key-expiry-date PROVISIONING-KEY-EXPIRY-DATE
expiry date assigned to generated provisioning api key (format: YYYY-MM-DD)
## device local-mode <uuid> ## device local-mode <uuid>
Output current local mode status, or enable/disable local mode Output current local mode status, or enable/disable local mode
@ -2236,6 +2240,10 @@ paths to local files to place into the 'system-connections' directory
custom key name assigned to generated provisioning api key custom key name assigned to generated provisioning api key
#### --provisioning-key-expiry-date PROVISIONING-KEY-EXPIRY-DATE
expiry date assigned to generated provisioning api key (format: YYYY-MM-DD)
## os initialize <image> ## os initialize <image>
Initialize an os image for a device with a previously Initialize an os image for a device with a previously
@ -2373,6 +2381,10 @@ supervisor cloud polling interval in minutes (e.g. for device variables)
custom key name assigned to generated provisioning api key custom key name assigned to generated provisioning api key
#### --provisioning-key-expiry-date PROVISIONING-KEY-EXPIRY-DATE
expiry date assigned to generated provisioning api key (format: YYYY-MM-DD)
## config inject <file> ## config inject <file>
Inject a 'config.json' file to a balenaOS image file or attached SD card or Inject a 'config.json' file to a balenaOS image file or attached SD card or

View File

@ -37,6 +37,7 @@ interface FlagsDef {
wifiKey?: string; wifiKey?: string;
appUpdatePollInterval?: string; appUpdatePollInterval?: string;
'provisioning-key-name'?: string; 'provisioning-key-name'?: string;
'provisioning-key-expiry-date'?: string;
help: void; help: void;
} }
@ -81,7 +82,11 @@ export default class ConfigGenerateCmd extends Command {
dev: cf.dev, dev: cf.dev,
device: { device: {
...cf.device, ...cf.device,
exclusive: ['fleet', 'provisioning-key-name'], exclusive: [
'fleet',
'provisioning-key-name',
'provisioning-key-expiry-date',
],
}, },
deviceApiKey: flags.string({ deviceApiKey: flags.string({
description: description:
@ -120,6 +125,11 @@ export default class ConfigGenerateCmd extends Command {
description: 'custom key name assigned to generated provisioning api key', description: 'custom key name assigned to generated provisioning api key',
exclusive: ['device'], exclusive: ['device'],
}), }),
'provisioning-key-expiry-date': flags.string({
description:
'expiry date assigned to generated provisioning api key (format: YYYY-MM-DD)',
exclusive: ['device'],
}),
help: cf.help, help: cf.help,
}; };
@ -196,6 +206,7 @@ export default class ConfigGenerateCmd extends Command {
answers.version = options.version; answers.version = options.version;
answers.developmentMode = options.dev; answers.developmentMode = options.dev;
answers.provisioningKeyName = options['provisioning-key-name']; answers.provisioningKeyName = options['provisioning-key-name'];
answers.provisioningKeyExpiryDate = options['provisioning-key-expiry-date'];
// Generate config // Generate config
const { generateDeviceConfig, generateApplicationConfig } = await import( const { generateDeviceConfig, generateApplicationConfig } = await import(

View File

@ -31,6 +31,7 @@ interface FlagsDef {
config?: string; config?: string;
help: void; help: void;
'provisioning-key-name'?: string; 'provisioning-key-name'?: string;
'provisioning-key-expiry-date'?: string;
} }
export default class DeviceInitCmd extends Command { export default class DeviceInitCmd extends Command {
@ -97,6 +98,10 @@ export default class DeviceInitCmd extends Command {
'provisioning-key-name': flags.string({ 'provisioning-key-name': flags.string({
description: 'custom key name assigned to generated provisioning api key', description: 'custom key name assigned to generated provisioning api key',
}), }),
'provisioning-key-expiry-date': flags.string({
description:
'expiry date assigned to generated provisioning api key (format: YYYY-MM-DD)',
}),
help: cf.help, help: cf.help,
}; };
@ -185,6 +190,14 @@ export default class DeviceInitCmd extends Command {
options['provisioning-key-name'], options['provisioning-key-name'],
); );
} }
if (options['provisioning-key-expiry-date']) {
configureCommand.push(
'--provisioning-key-expiry-date',
options['provisioning-key-expiry-date'],
);
}
await runCommand(configureCommand); await runCommand(configureCommand);
} }

View File

@ -43,6 +43,7 @@ interface FlagsDef {
'system-connection': string[]; 'system-connection': string[];
'initial-device-name'?: string; 'initial-device-name'?: string;
'provisioning-key-name'?: string; 'provisioning-key-name'?: string;
'provisioning-key-expiry-date'?: string;
} }
interface ArgsDef { interface ArgsDef {
@ -58,6 +59,7 @@ interface Answers {
wifiSsid?: string; wifiSsid?: string;
wifiKey?: string; wifiKey?: string;
provisioningKeyName?: string; provisioningKeyName?: string;
provisioningKeyExpiryDate?: string;
} }
export default class OsConfigureCmd extends Command { export default class OsConfigureCmd extends Command {
@ -121,7 +123,7 @@ export default class OsConfigureCmd extends Command {
config: flags.string({ config: flags.string({
description: description:
'path to a pre-generated config.json file to be injected in the OS image', 'path to a pre-generated config.json file to be injected in the OS image',
exclusive: ['provisioning-key-name'], exclusive: ['provisioning-key-name', 'provisioning-key-expiry-date'],
}), }),
'config-app-update-poll-interval': flags.integer({ 'config-app-update-poll-interval': flags.integer({
description: description:
@ -138,7 +140,14 @@ export default class OsConfigureCmd extends Command {
description: 'WiFi SSID (network name) (non-interactive configuration)', description: 'WiFi SSID (network name) (non-interactive configuration)',
}), }),
dev: cf.dev, dev: cf.dev,
device: { ...cf.device, exclusive: ['fleet', 'provisioning-key-name'] }, device: {
...cf.device,
exclusive: [
'fleet',
'provisioning-key-name',
'provisioning-key-expiry-date',
],
},
'device-type': flags.string({ 'device-type': flags.string({
description: description:
'device type slug (e.g. "raspberrypi3") to override the fleet device type', 'device type slug (e.g. "raspberrypi3") to override the fleet device type',
@ -161,6 +170,11 @@ export default class OsConfigureCmd extends Command {
description: 'custom key name assigned to generated provisioning api key', description: 'custom key name assigned to generated provisioning api key',
exclusive: ['config', 'device'], exclusive: ['config', 'device'],
}), }),
'provisioning-key-expiry-date': flags.string({
description:
'expiry date assigned to generated provisioning api key (format: YYYY-MM-DD)',
exclusive: ['config', 'device'],
}),
help: cf.help, help: cf.help,
}; };
@ -235,6 +249,7 @@ export default class OsConfigureCmd extends Command {
answers.version = osVersion; answers.version = osVersion;
answers.developmentMode = options.dev; answers.developmentMode = options.dev;
answers.provisioningKeyName = options['provisioning-key-name']; answers.provisioningKeyName = options['provisioning-key-name'];
answers.provisioningKeyExpiryDate = options['provisioning-key-expiry-date'];
if (_.isEmpty(configJson)) { if (_.isEmpty(configJson)) {
if (device) { if (device) {

52
npm-shrinkwrap.json generated
View File

@ -2694,9 +2694,9 @@
"integrity": "sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==" "integrity": "sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw=="
}, },
"@types/json-schema": { "@types/json-schema": {
"version": "7.0.9", "version": "7.0.11",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
"integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ=="
}, },
"@types/jsonstream": { "@types/jsonstream": {
"version": "0.8.30", "version": "0.8.30",
@ -3981,49 +3981,61 @@
} }
}, },
"balena-sdk": { "balena-sdk": {
"version": "16.9.0", "version": "16.20.4",
"resolved": "https://registry.npmjs.org/balena-sdk/-/balena-sdk-16.9.0.tgz", "resolved": "https://registry.npmjs.org/balena-sdk/-/balena-sdk-16.20.4.tgz",
"integrity": "sha512-iuIiXAEkDXoEtUJzFG5RO+rvudqMsoBppdgQLOrnIdWc14T+mvwWUFKAHHAkvxnA0GLmbxqGp7qo3uVMgS2Ojw==", "integrity": "sha512-e6uho8v9S7TO0V1RMCBWNLViY0+PH39snQuHKGy5jZ1YfwTMk/e/Po/99SUBylcAyqqXGN9QjV5Id2X4fiPQow==",
"requires": { "requires": {
"@balena/es-version": "^1.0.0", "@balena/es-version": "^1.0.0",
"@types/json-schema": "^7.0.9", "@types/json-schema": "^7.0.9",
"@types/lodash": "^4.14.168", "@types/node": "^12.20.50",
"@types/memoizee": "^0.4.5",
"@types/node": "^10.17.55",
"abortcontroller-polyfill": "^1.7.1", "abortcontroller-polyfill": "^1.7.1",
"balena-auth": "^4.1.0", "balena-auth": "^4.1.0",
"balena-errors": "^4.7.1", "balena-errors": "^4.7.1",
"balena-hup-action-utils": "~4.1.0", "balena-hup-action-utils": "~4.1.0",
"balena-pine": "^12.4.0",
"balena-register-device": "^7.1.0", "balena-register-device": "^7.1.0",
"balena-request": "^11.5.0", "balena-request": "^11.5.5",
"balena-semver": "^2.3.0", "balena-semver": "^2.3.0",
"balena-settings-client": "^4.0.6", "balena-settings-client": "^4.0.6",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"memoizee": "^0.4.15", "memoizee": "^0.4.15",
"moment": "^2.29.1", "moment": "^2.29.1",
"ndjson": "^2.0.0", "ndjson": "^2.0.0",
"pinejs-client-core": "^6.9.6",
"tslib": "^2.1.0" "tslib": "^2.1.0"
}, },
"dependencies": { "dependencies": {
"@types/node": { "@types/node": {
"version": "10.17.60", "version": "12.20.52",
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.52.tgz",
"integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" "integrity": "sha512-cfkwWw72849SNYp3Zx0IcIs25vABmFh73xicxhCkTcvtZQeIez15PpwQN8fY3RD7gv1Wrxlc9MEtfMORZDEsGw=="
}, },
"balena-hup-action-utils": { "balena-hup-action-utils": {
"version": "4.1.0", "version": "4.1.1",
"resolved": "https://registry.npmjs.org/balena-hup-action-utils/-/balena-hup-action-utils-4.1.0.tgz", "resolved": "https://registry.npmjs.org/balena-hup-action-utils/-/balena-hup-action-utils-4.1.1.tgz",
"integrity": "sha512-aLVlbdXhJi1rHpTmF9/YbheWtgAmwDUBPk3eKXhJuOZWg4XDnhbP4DUOdPBIM+U+rvXcPeBKOYqsswO0ymd96w==", "integrity": "sha512-VpyH3py5NPMBJe1fwj5NFUeq58i2V5VaXU1EMa0ja/kUCUwTM1HL5nfNNOU3bd66V+VGqCw49iO7Wppccg3pPg==",
"requires": { "requires": {
"balena-semver": "^2.0.0", "balena-semver": "^2.0.0",
"tslib": "^2.0.0" "tslib": "^2.0.0"
} }
}, },
"balena-request": {
"version": "11.5.5",
"resolved": "https://registry.npmjs.org/balena-request/-/balena-request-11.5.5.tgz",
"integrity": "sha512-sQG+OBAUKOW4KENPRGqit/34l3kWZqoT+aUdpitIG8QdKUrRjKQkjkCmDzprDEDJuXfWoCToKdleN9tYwRCXEw==",
"requires": {
"@balena/node-web-streams": "^0.2.3",
"balena-errors": "^4.7.1",
"fetch-ponyfill": "^7.1.0",
"fetch-readablestream": "^0.2.0",
"progress-stream": "^2.0.0",
"qs": "^6.9.4",
"tslib": "^2.0.0"
}
},
"tslib": { "tslib": {
"version": "2.3.1", "version": "2.4.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
"integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ=="
} }
} }
}, },

View File

@ -209,7 +209,7 @@
"balena-image-manager": "^7.1.1", "balena-image-manager": "^7.1.1",
"balena-preload": "^12.0.1", "balena-preload": "^12.0.1",
"balena-release": "^3.2.0", "balena-release": "^3.2.0",
"balena-sdk": "^16.9.0", "balena-sdk": "^16.20.4",
"balena-semver": "^2.3.0", "balena-semver": "^2.3.0",
"balena-settings-client": "^4.0.7", "balena-settings-client": "^4.0.7",
"balena-settings-storage": "^7.0.0", "balena-settings-storage": "^7.0.0",

View File

@ -59,6 +59,7 @@ if (process.platform !== 'win32') {
'--config-network ethernet', '--config-network ethernet',
'--initial-device-name testDeviceName', '--initial-device-name testDeviceName',
'--provisioning-key-name testKey', '--provisioning-key-name testKey',
'--provisioning-key-expiry-date 2050-12-12',
]; ];
const { err } = await runCommand(command.join(' ')); const { err } = await runCommand(command.join(' '));