Merge pull request #2053 from balena-os/fix-unmanaged-target-state-behavior

Allow local target state to be applied in unmanaged mode
This commit is contained in:
bulldozer-balena[bot] 2022-11-07 21:18:37 +00:00 committed by GitHub
commit fbdd43d00a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 32 additions and 30 deletions

View File

@ -32,7 +32,7 @@ type ContractRequirements = {
const contractRequirementVersions: ContractRequirements = {};
export function intialiseContractRequirements(opts: {
export function initializeContractRequirements(opts: {
supervisorVersion: string;
deviceType: string;
l4tVersion?: string;

View File

@ -6,7 +6,6 @@ import * as config from '../config';
import * as db from '../db';
import * as volumeManager from '../compose/volume-manager';
import * as serviceManager from '../compose/service-manager';
import * as deviceState from '../device-state';
import * as applicationManager from '../compose/application-manager';
import {
StatusError,
@ -62,7 +61,6 @@ async function createVolumeFromLegacyData(
*/
export async function normaliseLegacyDatabase() {
await apiBinder.initialized();
await deviceState.initialized();
if (apiBinder.balenaApi == null) {
throw new InternalInconsistencyError(
@ -268,15 +266,11 @@ export async function fromV2TargetState(
}
/**
* Convert v2 to v3 target apps. If local is false
* it will query the API to get the app uuid
* Retrieves the appUuid for an app from balena API
* @param appId
*/
export async function fromV2TargetApps(
apps: TargetAppsV2,
local = false,
): Promise<TargetApps> {
const getUUIDFromAPI = async (appId: number) => {
await apiBinder.initialized();
await deviceState.initialized();
if (apiBinder.balenaApi == null) {
throw new InternalInconsistencyError(
@ -285,22 +279,30 @@ export async function fromV2TargetApps(
}
const { balenaApi } = apiBinder;
const getUUIDFromAPI = async (appId: number) => {
const appDetails = await balenaApi.get({
resource: 'application',
id: appId,
options: {
$select: ['uuid'],
},
});
if (!appDetails || !appDetails.uuid) {
throw new StatusError(404, `No app with id ${appId} found on the API.`);
}
const appDetails = await balenaApi.get({
resource: 'application',
id: appId,
options: {
$select: ['uuid'],
},
});
return appDetails.uuid;
};
if (!appDetails || !appDetails.uuid) {
throw new StatusError(404, `No app with id ${appId} found on the API.`);
}
return appDetails.uuid;
};
/**
* Convert v2 to v3 target apps. If local is false
* it will query the API to get the app uuid
*/
export async function fromV2TargetApps(
apps: TargetAppsV2,
local = false,
): Promise<TargetApps> {
return (
(
await Promise.all(

View File

@ -8,7 +8,7 @@ import * as v1 from './device-api/v1';
import * as v2 from './device-api/v2';
import logMonitor from './logging/monitor';
import { intialiseContractRequirements } from './lib/contracts';
import { initializeContractRequirements } from './lib/contracts';
import { normaliseLegacyDatabase } from './lib/legacy';
import * as osRelease from './lib/os-release';
import log from './lib/supervisor-console';
@ -42,7 +42,7 @@ export class Supervisor {
const conf = await config.getMany(startupConfigFields);
intialiseContractRequirements({
initializeContractRequirements({
supervisorVersion: version,
deviceType: await config.get('deviceType'),
l4tVersion: await osRelease.getL4tVersion(),

View File

@ -8,7 +8,7 @@ import * as deviceState from '~/src/device-state';
import { appsJsonBackup, loadTargetFromFile } from '~/src/device-state/preload';
import { TargetState } from '~/src/types';
import { promises as fs } from 'fs';
import { intialiseContractRequirements } from '~/lib/contracts';
import { initializeContractRequirements } from '~/lib/contracts';
import { testfs } from 'mocha-pod';
import { createDockerImage } from '~/test-lib/docker-helper';
@ -21,7 +21,7 @@ describe('device-state', () => {
// Set the device uuid
await config.set({ uuid: 'local' });
intialiseContractRequirements({
initializeContractRequirements({
supervisorVersion: '11.0.0',
deviceType: 'intel-nuc',
});

View File

@ -5,7 +5,7 @@ import * as semver from 'semver';
import * as constants from '~/lib/constants';
import {
containerContractsFulfilled,
intialiseContractRequirements,
initializeContractRequirements,
validateContract,
} from '~/lib/contracts';
import * as osRelease from '~/lib/os-release';
@ -14,7 +14,7 @@ import * as fsUtils from '~/lib/fs-utils';
describe('lib/contracts', () => {
before(() => {
intialiseContractRequirements({
initializeContractRequirements({
supervisorVersion,
deviceType: 'intel-nuc',
l4tVersion: '32.2',
@ -436,7 +436,7 @@ describe('L4T version detection', () => {
execStub.restore();
}
seedExec(version);
intialiseContractRequirements({
initializeContractRequirements({
supervisorVersion,
deviceType: 'intel-nuc',
l4tVersion: await osRelease.getL4tVersion(),