From a64b36fdb9550b4d3e245d4791ef74c2b9491aac Mon Sep 17 00:00:00 2001 From: Thodoris Greasidis Date: Mon, 16 Sep 2019 15:59:21 +0300 Subject: [PATCH] Support moving devices to applications of a compatible architecture Connects-to: #1433 Change-type: minor Signed-off-by: Thodoris Greasidis --- lib/actions/device.coffee | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/lib/actions/device.coffee b/lib/actions/device.coffee index cffe1343..cb7566d6 100644 --- a/lib/actions/device.coffee +++ b/lib/actions/device.coffee @@ -366,11 +366,22 @@ exports.move = patterns = require('../utils/patterns') balena.models.device.get(params.uuid, expandForAppName).then (device) -> - return options.application or patterns.selectApplication (application) -> - return _.every [ - application.device_type is device.device_type - device.belongs_to__application[0].app_name isnt application.app_name - ] + return options.application if options.application + + return Promise.all([ + balena.models.device.getManifestBySlug(device.device_type) + balena.models.config.getDeviceTypes() + ]).then ([deviceDeviceType, deviceTypes]) -> + compatibleDeviceTypes = deviceTypes.filter (dt) -> + balena.models.os.isArchitectureCompatibleWith(deviceDeviceType.arch, dt.arch) && + !!dt.isDependent == !!deviceDeviceType.isDependent && + dt.state != 'DISCONTINUED' + + return patterns.selectApplication (application) -> + return _.every [ + _.some(compatibleDeviceTypes, (dt) -> dt.slug == application.device_type) + device.belongs_to__application[0].app_name isnt application.app_name + ] .tap (application) -> return balena.models.device.move(params.uuid, application) .then (application) ->