Refactor device-config as part of device-state

Move the device-config module to the device-state folder and export only
those functions that are needed elsewhere in the codebase

This moves us closer to making the device-state module the only way to
modify application and configuration.

Change-type: patch
This commit is contained in:
Felipe Lalanne 2024-10-21 17:17:21 -03:00
parent 89ddfa6554
commit 51f1fb0f30
No known key found for this signature in database
GPG Key ID: 03E696BFD472B26A
8 changed files with 34 additions and 29 deletions

View File

@ -5,7 +5,6 @@ import _ from 'lodash';
import type { PinejsClientRequest } from 'pinejs-client-request'; import type { PinejsClientRequest } from 'pinejs-client-request';
import * as config from '../config'; import * as config from '../config';
import * as deviceConfig from '../device-config';
import * as eventTracker from '../event-tracker'; import * as eventTracker from '../event-tracker';
import { loadBackupFromMigration } from '../lib/migration'; import { loadBackupFromMigration } from '../lib/migration';
@ -332,10 +331,10 @@ async function reportInitialEnv(
); );
} }
const defaultConfig = deviceConfig.getDefaults(); const defaultConfig = deviceState.getDefaultConfig();
const currentConfig = await deviceConfig.getCurrent(); const currentConfig = await deviceState.getCurrentConfig();
const targetConfig = deviceConfig.formatConfigKeys(targetConfigUnformatted); const targetConfig = deviceState.formatConfigKeys(targetConfigUnformatted);
if (!currentConfig) { if (!currentConfig) {
throw new InternalInconsistencyError( throw new InternalInconsistencyError(

View File

@ -11,7 +11,6 @@ import { Volume } from '../compose/volume';
import * as commitStore from '../compose/commit'; import * as commitStore from '../compose/commit';
import * as config from '../config'; import * as config from '../config';
import * as db from '../db'; import * as db from '../db';
import * as deviceConfig from '../device-config';
import * as logger from '../logging'; import * as logger from '../logging';
import * as images from '../compose/images'; import * as images from '../compose/images';
import * as volumeManager from '../compose/volume-manager'; import * as volumeManager from '../compose/volume-manager';
@ -512,7 +511,7 @@ router.get('/v2/device/tags', async (_req, res) => {
}); });
router.get('/v2/device/vpn', async (_req, res) => { router.get('/v2/device/vpn', async (_req, res) => {
const conf = await deviceConfig.getCurrent(); const conf = await deviceState.getCurrentConfig();
// Build VPNInfo // Build VPNInfo
const info = { const info = {
enabled: conf.SUPERVISOR_VPN_CONTROL === 'true', enabled: conf.SUPERVISOR_VPN_CONTROL === 'true',

View File

@ -2,21 +2,22 @@ import _ from 'lodash';
import { inspect } from 'util'; import { inspect } from 'util';
import { promises as fs } from 'fs'; import { promises as fs } from 'fs';
import * as config from './config'; import * as config from '../config';
import * as db from './db'; import * as db from '../db';
import * as logger from './logging'; import * as logger from '../logging';
import * as dbus from './lib/dbus'; import * as dbus from '../lib/dbus';
import type { EnvVarObject } from './types'; import type { EnvVarObject } from '../types';
import { UnitNotLoadedError } from './lib/errors'; import { UnitNotLoadedError } from '../lib/errors';
import { checkInt, checkTruthy } from './lib/validation'; import { checkInt, checkTruthy } from '../lib/validation';
import log from './lib/supervisor-console'; import log from '../lib/supervisor-console';
import * as configUtils from './config/utils'; import * as fsUtils from '../lib/fs-utils';
import type { SchemaTypeKey } from './config/schema-type'; import { pathOnRoot } from '../lib/host-utils';
import { matchesAnyBootConfig } from './config/backends';
import type { ConfigBackend } from './config/backends/backend'; import * as configUtils from '../config/utils';
import { Odmdata } from './config/backends/odmdata'; import type { SchemaTypeKey } from '../config/schema-type';
import * as fsUtils from './lib/fs-utils'; import { matchesAnyBootConfig } from '../config/backends';
import { pathOnRoot } from './lib/host-utils'; import type { ConfigBackend } from '../config/backends/backend';
import { Odmdata } from '../config/backends/odmdata';
const vpnServiceName = 'openvpn'; const vpnServiceName = 'openvpn';
@ -210,7 +211,7 @@ const configKeys: Dictionary<ConfigOption> = {
}, },
}; };
export const validKeys = [ const validKeys = [
'SUPERVISOR_VPN_CONTROL', 'SUPERVISOR_VPN_CONTROL',
'OVERRIDE_LOCK', 'OVERRIDE_LOCK',
..._.map(configKeys, 'envVarName'), ..._.map(configKeys, 'envVarName'),

View File

@ -9,7 +9,7 @@ import * as config from '../config';
import * as logger from '../logging'; import * as logger from '../logging';
import * as network from '../network'; import * as network from '../network';
import * as deviceConfig from '../device-config'; import * as deviceConfig from './device-config';
import * as constants from '../lib/constants'; import * as constants from '../lib/constants';
import * as dbus from '../lib/dbus'; import * as dbus from '../lib/dbus';
@ -26,6 +26,12 @@ import type { InstancedDeviceState } from './target-state';
import * as TargetState from './target-state'; import * as TargetState from './target-state';
export { getTarget, setTarget } from './target-state'; export { getTarget, setTarget } from './target-state';
export {
formatConfigKeys,
getCurrent as getCurrentConfig,
getDefaults as getDefaultConfig,
} from './device-config';
import type { DeviceLegacyState, DeviceState, DeviceReport } from '../types'; import type { DeviceLegacyState, DeviceState, DeviceReport } from '../types';
import type { import type {
CompositionStepT, CompositionStepT,

View File

@ -6,9 +6,9 @@ import { imageFromService } from '../compose/images';
import { NumericIdentifier } from '../types'; import { NumericIdentifier } from '../types';
import { setTarget } from './target-state'; import { setTarget } from './target-state';
import * as config from '../config'; import * as config from '../config';
import * as deviceConfig from '../device-config';
import * as eventTracker from '../event-tracker'; import * as eventTracker from '../event-tracker';
import * as imageManager from '../compose/images'; import * as imageManager from '../compose/images';
import * as deviceState from '../device-state';
import { import {
AppsJsonParseError, AppsJsonParseError,
@ -126,8 +126,8 @@ export async function loadTargetFromFile(appsPath: string): Promise<boolean> {
await imageManager.save(image); await imageManager.save(image);
} }
const deviceConf = await deviceConfig.getCurrent(); const deviceConf = await deviceState.getCurrentConfig();
const formattedConf = deviceConfig.formatConfigKeys(preloadState.config); const formattedConf = deviceState.formatConfigKeys(preloadState.config);
const localState = { const localState = {
[uuid]: { [uuid]: {
name: '', name: '',

View File

@ -6,7 +6,7 @@ import * as config from '../config';
import * as db from '../db'; import * as db from '../db';
import * as globalEventBus from '../event-bus'; import * as globalEventBus from '../event-bus';
import * as deviceConfig from '../device-config'; import * as deviceConfig from './device-config';
import { TargetStateError } from '../lib/errors'; import { TargetStateError } from '../lib/errors';
import { takeGlobalLockRO, takeGlobalLockRW } from '../lib/process-lock'; import { takeGlobalLockRO, takeGlobalLockRW } from '../lib/process-lock';

View File

@ -5,7 +5,7 @@ import type { SinonStub, SinonSpy } from 'sinon';
import { stub, spy } from 'sinon'; import { stub, spy } from 'sinon';
import { expect } from 'chai'; import { expect } from 'chai';
import * as deviceConfig from '~/src/device-config'; import * as deviceConfig from '~/src/device-state/device-config';
import * as fsUtils from '~/lib/fs-utils'; import * as fsUtils from '~/lib/fs-utils';
import * as logger from '~/src/logging'; import * as logger from '~/src/logging';
import { Extlinux } from '~/src/config/backends/extlinux'; import { Extlinux } from '~/src/config/backends/extlinux';

View File

@ -8,7 +8,7 @@ import { expect } from 'chai';
import * as TargetState from '~/src/api-binder/poll'; import * as TargetState from '~/src/api-binder/poll';
import Log from '~/lib/supervisor-console'; import Log from '~/lib/supervisor-console';
import * as request from '~/lib/request'; import * as request from '~/lib/request';
import * as deviceConfig from '~/src/device-config'; import * as deviceConfig from '~/src/device-state/device-config';
import { UpdatesLockedError } from '~/lib/errors'; import { UpdatesLockedError } from '~/lib/errors';
import { setTimeout } from 'timers/promises'; import { setTimeout } from 'timers/promises';