config inject/read/write: Fix umount errors with OS image files

Resolves: #1003
Change-type: patch
This commit is contained in:
Paulo Castro
2021-04-13 22:44:58 +01:00
parent 06f7683837
commit 0f9d78ab50
9 changed files with 63 additions and 97 deletions

View File

@ -1,6 +1,6 @@
/**
* @license
* Copyright 2016-2020 Balena Ltd.
* Copyright 2016-2021 Balena Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -54,16 +54,8 @@ export default class ConfigInjectCmd extends Command {
public static usage = 'config inject <file>';
public static flags: flags.Input<FlagsDef> = {
type: flags.string({
description:
'device type (Check available types with `balena devices supported`)',
char: 't',
required: true,
}),
drive: flags.string({
description: 'device filesystem or OS image location',
char: 'd',
}),
type: cf.deviceType,
drive: cf.driveOrImg,
help: cf.help,
};
@ -76,12 +68,11 @@ export default class ConfigInjectCmd extends Command {
ConfigInjectCmd,
);
const { promisify } = await import('util');
const umountAsync = promisify((await import('umount')).umount);
const { safeUmount } = await import('../../utils/helpers');
const drive =
options.drive || (await getVisuals().drive('Select the device/OS drive'));
await umountAsync(drive);
await safeUmount(drive);
const fs = await import('fs');
const configJSON = JSON.parse(

View File

@ -1,6 +1,6 @@
/**
* @license
* Copyright 2016-2020 Balena Ltd.
* Copyright 2016-2021 Balena Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -42,16 +42,8 @@ export default class ConfigReadCmd extends Command {
public static usage = 'config read';
public static flags: flags.Input<FlagsDef> = {
type: flags.string({
description:
'device type (Check available types with `balena devices supported`)',
char: 't',
required: true,
}),
drive: flags.string({
description: 'device filesystem or OS image location',
char: 'd',
}),
type: cf.deviceType,
drive: cf.driveOrImg,
help: cf.help,
};
@ -62,12 +54,11 @@ export default class ConfigReadCmd extends Command {
public async run() {
const { flags: options } = this.parse<FlagsDef, {}>(ConfigReadCmd);
const { promisify } = await import('util');
const umountAsync = promisify((await import('umount')).umount);
const { safeUmount } = await import('../../utils/helpers');
const drive =
options.drive || (await getVisuals().drive('Select the device drive'));
await umountAsync(drive);
await safeUmount(drive);
const config = await import('balena-config-json');
const configJSON = await config.read(drive, options.type);

View File

@ -1,6 +1,6 @@
/**
* @license
* Copyright 2016-2020 Balena Ltd.
* Copyright 2016-2021 Balena Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -42,16 +42,8 @@ export default class ConfigReconfigureCmd extends Command {
public static usage = 'config reconfigure';
public static flags: flags.Input<FlagsDef> = {
type: flags.string({
description:
'device type (Check available types with `balena devices supported`)',
char: 't',
required: true,
}),
drive: flags.string({
description: 'device filesystem or OS image location',
char: 'd',
}),
type: cf.deviceType,
drive: cf.driveOrImg,
advanced: flags.boolean({
description: 'show advanced commands',
char: 'v',
@ -66,16 +58,15 @@ export default class ConfigReconfigureCmd extends Command {
public async run() {
const { flags: options } = this.parse<FlagsDef, {}>(ConfigReconfigureCmd);
const { promisify } = await import('util');
const umountAsync = promisify((await import('umount')).umount);
const { safeUmount } = await import('../../utils/helpers');
const drive =
options.drive || (await getVisuals().drive('Select the device drive'));
await umountAsync(drive);
await safeUmount(drive);
const config = await import('balena-config-json');
const { uuid } = await config.read(drive, options.type);
await umountAsync(drive);
await safeUmount(drive);
const configureCommand = ['os', 'configure', drive, '--device', uuid];
if (options.advanced) {

View File

@ -1,6 +1,6 @@
/**
* @license
* Copyright 2016-2020 Balena Ltd.
* Copyright 2016-2021 Balena Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -61,16 +61,8 @@ export default class ConfigWriteCmd extends Command {
public static usage = 'config write <key> <value>';
public static flags: flags.Input<FlagsDef> = {
type: flags.string({
description:
'device type (Check available types with `balena devices supported`)',
char: 't',
required: true,
}),
drive: flags.string({
description: 'device filesystem or OS image location',
char: 'd',
}),
type: cf.deviceType,
drive: cf.driveOrImg,
help: cf.help,
};
@ -83,12 +75,11 @@ export default class ConfigWriteCmd extends Command {
ConfigWriteCmd,
);
const { promisify } = await import('util');
const umountAsync = promisify((await import('umount')).umount);
const { safeUmount } = await import('../../utils/helpers');
const drive =
options.drive || (await getVisuals().drive('Select the device drive'));
await umountAsync(drive);
await safeUmount(drive);
const config = await import('balena-config-json');
const configJSON = await config.read(drive, options.type);
@ -97,7 +88,7 @@ export default class ConfigWriteCmd extends Command {
const _ = await import('lodash');
_.set(configJSON, params.key, params.value);
await umountAsync(drive);
await safeUmount(drive);
await config.write(drive, options.type, configJSON);