mirror of
https://github.com/balena-os/balena-supervisor.git
synced 2025-01-11 15:32:47 +00:00
Respect an initialDeviceName field in the config.json
Closes: #909 Change-type: minor Signed-off-by: Cameron Diver <cameron@balena.io>
This commit is contained in:
parent
dec79e11f4
commit
b5918f0d84
@ -169,6 +169,7 @@ export class APIBinder {
|
|||||||
'apiEndpoint',
|
'apiEndpoint',
|
||||||
'unmanaged',
|
'unmanaged',
|
||||||
'bootstrapRetryDelay',
|
'bootstrapRetryDelay',
|
||||||
|
'initialDeviceName',
|
||||||
]);
|
]);
|
||||||
let { apiEndpoint } = conf;
|
let { apiEndpoint } = conf;
|
||||||
const { unmanaged, bootstrapRetryDelay } = conf;
|
const { unmanaged, bootstrapRetryDelay } = conf;
|
||||||
@ -197,7 +198,19 @@ export class APIBinder {
|
|||||||
// Either we haven't reported our initial config or we've been re-provisioned
|
// Either we haven't reported our initial config or we've been re-provisioned
|
||||||
if (apiEndpoint !== initialConfigReported) {
|
if (apiEndpoint !== initialConfigReported) {
|
||||||
log.info('Reporting initial configuration');
|
log.info('Reporting initial configuration');
|
||||||
await this.reportInitialConfig(apiEndpoint, bootstrapRetryDelay);
|
// We fetch the deviceId here to ensure it's been set
|
||||||
|
const deviceId = await config.get('deviceId');
|
||||||
|
if (deviceId == null) {
|
||||||
|
throw new InternalInconsistencyError(
|
||||||
|
`Attempt to report initial configuration without a device ID`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
await this.reportInitialConfig(
|
||||||
|
apiEndpoint,
|
||||||
|
deviceId,
|
||||||
|
bootstrapRetryDelay,
|
||||||
|
conf.initialDeviceName ?? undefined,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
log.debug('Starting current state report');
|
log.debug('Starting current state report');
|
||||||
@ -605,7 +618,11 @@ export class APIBinder {
|
|||||||
|
|
||||||
// Creates the necessary config vars in the API to match the current device state,
|
// Creates the necessary config vars in the API to match the current device state,
|
||||||
// without overwriting any variables that are already set.
|
// without overwriting any variables that are already set.
|
||||||
private async reportInitialEnv(apiEndpoint: string) {
|
private async reportInitialEnv(
|
||||||
|
apiEndpoint: string,
|
||||||
|
deviceId: number,
|
||||||
|
initialName?: string,
|
||||||
|
) {
|
||||||
if (this.balenaApi == null) {
|
if (this.balenaApi == null) {
|
||||||
throw new InternalInconsistencyError(
|
throw new InternalInconsistencyError(
|
||||||
'Attempt to report initial environment without an API client',
|
'Attempt to report initial environment without an API client',
|
||||||
@ -628,7 +645,6 @@ export class APIBinder {
|
|||||||
const targetConfig = await this.deviceState.deviceConfig.formatConfigKeys(
|
const targetConfig = await this.deviceState.deviceConfig.formatConfigKeys(
|
||||||
targetConfigUnformatted,
|
targetConfigUnformatted,
|
||||||
);
|
);
|
||||||
const deviceId = await config.get('deviceId');
|
|
||||||
|
|
||||||
if (!currentState.local.config) {
|
if (!currentState.local.config) {
|
||||||
throw new InternalInconsistencyError(
|
throw new InternalInconsistencyError(
|
||||||
@ -660,19 +676,30 @@ export class APIBinder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (initialName != null) {
|
||||||
|
await this.reportInitialName(deviceId, initialName);
|
||||||
|
}
|
||||||
|
|
||||||
await config.set({ initialConfigReported: apiEndpoint });
|
await config.set({ initialConfigReported: apiEndpoint });
|
||||||
}
|
}
|
||||||
|
|
||||||
private async reportInitialConfig(
|
private async reportInitialConfig(
|
||||||
apiEndpoint: string,
|
apiEndpoint: string,
|
||||||
|
deviceId: number,
|
||||||
retryDelay: number,
|
retryDelay: number,
|
||||||
|
initialName?: string,
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
try {
|
try {
|
||||||
await this.reportInitialEnv(apiEndpoint);
|
await this.reportInitialEnv(apiEndpoint, deviceId, initialName);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
log.error('Error reporting initial configuration, will retry', err);
|
log.error('Error reporting initial configuration, will retry', err);
|
||||||
await Bluebird.delay(retryDelay);
|
await Bluebird.delay(retryDelay);
|
||||||
await this.reportInitialConfig(apiEndpoint, retryDelay);
|
await this.reportInitialConfig(
|
||||||
|
apiEndpoint,
|
||||||
|
deviceId,
|
||||||
|
retryDelay,
|
||||||
|
initialName,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -897,6 +924,25 @@ export class APIBinder {
|
|||||||
|
|
||||||
return router;
|
return router;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async reportInitialName(
|
||||||
|
deviceId: number,
|
||||||
|
name: string,
|
||||||
|
): Promise<void> {
|
||||||
|
if (this.balenaApi == null) {
|
||||||
|
throw new InternalInconsistencyError(
|
||||||
|
`Attempt to set an initial device name without an API client`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
await this.balenaApi.patch({
|
||||||
|
resource: 'device',
|
||||||
|
id: deviceId,
|
||||||
|
body: {
|
||||||
|
device_name: name,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default APIBinder;
|
export default APIBinder;
|
||||||
|
@ -82,6 +82,10 @@ export const schemaTypes = {
|
|||||||
type: PermissiveBoolean,
|
type: PermissiveBoolean,
|
||||||
default: false,
|
default: false,
|
||||||
},
|
},
|
||||||
|
initialDeviceName: {
|
||||||
|
type: t.string,
|
||||||
|
default: NullOrUndefined,
|
||||||
|
},
|
||||||
|
|
||||||
// Database types
|
// Database types
|
||||||
apiSecret: {
|
apiSecret: {
|
||||||
|
@ -79,6 +79,11 @@ export const schema = {
|
|||||||
mutable: true,
|
mutable: true,
|
||||||
removeIfNull: false,
|
removeIfNull: false,
|
||||||
},
|
},
|
||||||
|
initialDeviceName: {
|
||||||
|
source: 'config.json',
|
||||||
|
mutable: false,
|
||||||
|
removeIfNull: false,
|
||||||
|
},
|
||||||
|
|
||||||
apiSecret: {
|
apiSecret: {
|
||||||
source: 'db',
|
source: 'db',
|
||||||
|
Loading…
Reference in New Issue
Block a user