CLI v12+ doesn't work with openBalena

Hi,

I’m running the latest version openBalena (v2.0.3 - 2020-06-01) and when I upgrade my CLI to anything past v12 commands like balena device <uuid> don’t work.

If I downgrade to v11.36.0 those commands start working again. Is this a problem with my setup as I can’t find anything on the forum about it?

Hello,
What message, if any, do you receive when the v12+ commands don’t work? Which OS are you running the CLI on?

Sorry, should have added that in the first place shouldn’t I?

I’m running the CLI on macOS Catalina 10.15.5.

Using CLI v12.7.3 I get the following debug when I try balena devices <uuid>:

BalenaRequestError: Request error: Internal Server Error
    at /usr/local/lib/balena-cli/node_modules/balena-request/build/request.js:189:17
From previous event:
    at /usr/local/lib/balena-cli/node_modules/balena-request/build/request.js:181:62
From previous event:
    at Object.exports.send (/usr/local/lib/balena-cli/node_modules/balena-request/build/request.js:180:8)
    at /usr/local/lib/balena-cli/node_modules/balena-pine/es2018/index.js:20:22
    at runCallback (timers.js:705:18)
    at tryOnImmediate (timers.js:676:5)
    at processImmediate (timers.js:658:5)
    at process.topLevelDomainCallback (domain.js:126:23)
From previous event:
    at BalenaPine._request (/usr/local/lib/balena-cli/node_modules/balena-pine/es2018/index.js:12:34)
    at BalenaPine.request (/usr/local/lib/balena-cli/node_modules/pinejs-client-core/es2018/index.js:952:29)
    at BalenaPine.get (/usr/local/lib/balena-cli/node_modules/pinejs-client-core/es2018/index.js:701:21)
    at /usr/local/lib/balena-cli/node_modules/balena-sdk/build/models/device.js:355:26
From previous event:
    at Object.get (/usr/local/lib/balena-cli/node_modules/balena-sdk/build/models/device.js:336:31)
    at Object.get (/usr/local/lib/balena-cli/node_modules/balena-sdk/build/util/callbacks.js:19:27)
    at DeviceCmd.run (/usr/local/lib/balena-cli/build/actions-oclif/device/index.js:13:55)
    at DeviceCmd._run (/usr/local/lib/balena-cli/node_modules/@oclif/command/lib/command.js:44:31)
    at process._tickCallback (internal/process/next_tick.js:68:7)

Other commands do still work though, for example balena devices returns just fine.

The error comes from the backend server and to find out what’s wrong you have to SSH into the open-balena API container and get its logs from journald.

Here’s the error log from the open-balena API backend container (I’ve substituted the actual UUID for <uuid>):

Parsing GET /resin/device?$filter=startswith(uuid,%27<uuid>%27)&$select=device_name,id,device_type,overall_status,is_online,ip_address,mac_address,last_connectivity_event,uuid,is_on__commit,supervisor_version,is_web_accessible,note,os_version&$expand=belongs_to__application($select=app_name)
Failed to translate url:  {
	"resource": "device",
	"options": {
		"$filter": [
			"call",
			{
				"args": [
					{
						"name": "uuid",
						"property": null
					},
					{
						"bind": 0
					}
				],
				"method": "startswith"
			}
		],
		"$select": {
			"properties": [
				{
					"name": "device_name",
					"property": null
				},
				{
					"name": "id",
					"property": null
				},
				{
					"name": "device_type",
					"property": null
				},
				{
					"name": "overall_status",
					"property": null
				},
				{
					"name": "is_online",
					"property": null
				},
				{
					"name": "ip_address",
					"property": null
				},
				{
					"name": "mac_address",
					"property": null
				},
				{
					"name": "last_connectivity_event",
					"property": null
				},
				{
					"name": "uuid",
					"property": null
				},
				{
					"name": "is_on__commit",
					"property": null
				},
				{
					"name": "supervisor_version",
					"property": null
				},
				{
					"name": "is_web_accessible",
					"property": null
				},
				{
					"name": "note",
					"property": null
				},
				{
					"name": "os_version",
					"property": null
				}
			]
		},
		"$expand": {
			"properties": [
				{
					"name": "belongs_to__application",
					"property": null,
					"count": null,
					"options": {
						"$select": {
							"properties": [
								{
									"name": "app_name",
									"property": null
								}
							]
						}
					}
				}
			]
		}
	}
} GET SyntaxError: Could not resolve relationship mapping
    at OData2AbstractSQL.ResolveRelationship (/usr/src/app/node_modules/@resin/odata-to-abstract-sql/out/odata-to-abstract-sql.js:514:19)
    at OData2AbstractSQL.ReferencedField (/usr/src/app/node_modules/@resin/odata-to-abstract-sql/out/odata-to-abstract-sql.js:562:46)
    at OData2AbstractSQL.AliasSelectField (/usr/src/app/node_modules/@resin/odata-to-abstract-sql/out/odata-to-abstract-sql.js:546:38)
    at AddSelectFields._.reject.map.field (/usr/src/app/node_modules/@resin/odata-to-abstract-sql/out/odata-to-abstract-sql.js:532:36)
    at arrayMap (/usr/src/app/node_modules/lodash/lodash.js:639:23)
    at Function.map (/usr/src/app/node_modules/lodash/lodash.js:9556:14)
    at interceptor (/usr/src/app/node_modules/lodash/lodash.js:16993:35)
    at thru (/usr/src/app/node_modules/lodash/lodash.js:8797:14)
    at /usr/src/app/node_modules/lodash/lodash.js:4374:28
    at arrayReduce (/usr/src/app/node_modules/lodash/lodash.js:683:21)
    at baseWrapperValue (/usr/src/app/node_modules/lodash/lodash.js:4373:14)
    at LazyWrapper.lazyValue [as value] (/usr/src/app/node_modules/lodash/lodash.js:1859:16)
    at baseWrapperValue (/usr/src/app/node_modules/lodash/lodash.js:4371:25)
    at LodashWrapper.wrapperValue (/usr/src/app/node_modules/lodash/lodash.js:9052:14)
    at OData2AbstractSQL.AddSelectFields (/usr/src/app/node_modules/@resin/odata-to-abstract-sql/out/odata-to-abstract-sql.js:533:18)
    at OData2AbstractSQL.PathSegment (/usr/src/app/node_modules/@resin/odata-to-abstract-sql/out/odata-to-abstract-sql.js:351:18)
    at OData2AbstractSQL.match (/usr/src/app/node_modules/@resin/odata-to-abstract-sql/out/odata-to-abstract-sql.js:177:32)
    at memoizeWeak (/usr/src/app/node_modules/@resin/pinejs/out/sbvr-api/uri-parser.js:55:51)
    at /usr/src/app/node_modules/es5-ext/function/#/partial.js:14:16
    at /usr/src/app/node_modules/memoizee/lib/configure-map.js:61:24
    at /usr/src/app/node_modules/memoizee/lib/weak.js:87:21
    at memoizedOdata2AbstractSQL (/usr/src/app/node_modules/@resin/pinejs/out/sbvr-api/uri-parser.js:78:56)
    at exports.translateUri (/usr/src/app/node_modules/@resin/pinejs/out/sbvr-api/uri-parser.js:184:34)
    at tryCatcher (/usr/src/app/node_modules/bluebird/js/release/util.js:16:23)
    at Promise._settlePromiseFromHandler (/usr/src/app/node_modules/bluebird/js/release/promise.js:512:31)
    at Promise._settlePromise (/usr/src/app/node_modules/bluebird/js/release/promise.js:569:18)
    at Promise._settlePromise0 (/usr/src/app/node_modules/bluebird/js/release/promise.js:614:10)
    at Promise._settlePromises (/usr/src/app/node_modules/bluebird/js/release/promise.js:694:18)
    at Promise._fulfill (/usr/src/app/node_modules/bluebird/js/release/promise.js:638:18)
    at Promise._resolveCallback (/usr/src/app/node_modules/bluebird/js/release/promise.js:432:57)
    at Promise._settlePromiseFromHandler (/usr/src/app/node_modules/bluebird/js/release/promise.js:524:17)
    at Promise._settlePromise (/usr/src/app/node_modules/bluebird/js/release/promise.js:569:18)
    at Promise._settlePromise0 (/usr/src/app/node_modules/bluebird/js/release/promise.js:614:10)
    at Promise._settlePromises (/usr/src/app/node_modules/bluebird/js/release/promise.js:694:18)
    at Promise._fulfill (/usr/src/app/node_modules/bluebird/js/release/promise.js:638:18)
    at Promise._resolveCallback (/usr/src/app/node_modules/bluebird/js/release/promise.js:432:57)
    at Promise._settlePromiseFromHandler (/usr/src/app/node_modules/bluebird/js/release/promise.js:524:17)
    at Promise._settlePromise (/usr/src/app/node_modules/bluebird/js/release/promise.js:569:18)
    at Promise._settlePromise0 (/usr/src/app/node_modules/bluebird/js/release/promise.js:614:10)
    at Promise._settlePromises (/usr/src/app/node_modules/bluebird/js/release/promise.js:694:18)
    at Promise._fulfill (/usr/src/app/node_modules/bluebird/js/release/promise.js:638:18)
    at MappingPromiseArray.PromiseArray._resolve (/usr/src/app/node_modules/bluebird/js/release/promise_array.js:126:19)
    at MappingPromiseArray._promiseFulfilled (/usr/src/app/node_modules/bluebird/js/release/map.js:101:18)
    at Promise._settlePromise (/usr/src/app/node_modules/bluebird/js/release/promise.js:574:26)
    at Promise._settlePromise0 (/usr/src/app/node_modules/bluebird/js/release/promise.js:614:10)
    at Promise._settlePromises (/usr/src/app/node_modules/bluebird/js/release/promise.js:694:18)
    at Promise._fulfill (/usr/src/app/node_modules/bluebird/js/release/promise.js:638:18)
    at Promise._resolveCallback (/usr/src/app/node_modules/bluebird/js/release/promise.js:432:57)
    at Promise._settlePromiseFromHandler (/usr/src/app/node_modules/bluebird/js/release/promise.js:524:17)
    at Promise._settlePromise (/usr/src/app/node_modules/bluebird/js/release/promise.js:569:18)
    at Promise._settlePromise0 (/usr/src/app/node_modules/bluebird/js/release/promise.js:614:10)
    at Promise._settlePromises (/usr/src/app/node_modules/bluebird/js/release/promise.js:694:18)
    at Promise._fulfill (/usr/src/app/node_modules/bluebird/js/release/promise.js:638:18)
    at Promise._resolveCallback (/usr/src/app/node_modules/bluebird/js/release/promise.js:432:57)
    at Holder$2._callFunction (<anonymous>:19:29)
    at _drainQueueStep (/usr/src/app/node_modules/bluebird/js/release/async.js:142:12)
    at _drainQueue (/usr/src/app/node_modules/bluebird/js/release/async.js:131:9)
    at Async._drainQueues (/usr/src/app/node_modules/bluebird/js/release/async.js:147:5)
    at Immediate.Async.drainQueues [as _onImmediate] (/usr/src/app/node_modules/bluebird/js/release/async.js:17:14)
    at runCallback (timers.js:705:18)
    at tryOnImmediate (timers.js:676:5)
    at processImmediate (timers.js:658:5)
    at process.topLevelDomainCallback (domain.js:120:23)
 SyntaxError: Could not resolve relationship mapping
    at OData2AbstractSQL.ResolveRelationship (/usr/src/app/node_modules/@resin/odata-to-abstract-sql/out/odata-to-abstract-sql.js:514:19)
    at OData2AbstractSQL.ReferencedField (/usr/src/app/node_modules/@resin/odata-to-abstract-sql/out/odata-to-abstract-sql.js:562:46)
    at OData2AbstractSQL.AliasSelectField (/usr/src/app/node_modules/@resin/odata-to-abstract-sql/out/odata-to-abstract-sql.js:546:38)
    at AddSelectFields._.reject.map.field (/usr/src/app/node_modules/@resin/odata-to-abstract-sql/out/odata-to-abstract-sql.js:532:36)
    at arrayMap (/usr/src/app/node_modules/lodash/lodash.js:639:23)
    at Function.map (/usr/src/app/node_modules/lodash/lodash.js:9556:14)
    at interceptor (/usr/src/app/node_modules/lodash/lodash.js:16993:35)
    at thru (/usr/src/app/node_modules/lodash/lodash.js:8797:14)
    at /usr/src/app/node_modules/lodash/lodash.js:4374:28
    at arrayReduce (/usr/src/app/node_modules/lodash/lodash.js:683:21)
    at baseWrapperValue (/usr/src/app/node_modules/lodash/lodash.js:4373:14)
    at LazyWrapper.lazyValue [as value] (/usr/src/app/node_modules/lodash/lodash.js:1859:16)
    at baseWrapperValue (/usr/src/app/node_modules/lodash/lodash.js:4371:25)
    at LodashWrapper.wrapperValue (/usr/src/app/node_modules/lodash/lodash.js:9052:14)
    at OData2AbstractSQL.AddSelectFields (/usr/src/app/node_modules/@resin/odata-to-abstract-sql/out/odata-to-abstract-sql.js:533:18)
    at OData2AbstractSQL.PathSegment (/usr/src/app/node_modules/@resin/odata-to-abstract-sql/out/odata-to-abstract-sql.js:351:18)
    at OData2AbstractSQL.match (/usr/src/app/node_modules/@resin/odata-to-abstract-sql/out/odata-to-abstract-sql.js:177:32)
    at memoizeWeak (/usr/src/app/node_modules/@resin/pinejs/out/sbvr-api/uri-parser.js:55:51)
    at /usr/src/app/node_modules/es5-ext/function/#/partial.js:14:16
    at /usr/src/app/node_modules/memoizee/lib/configure-map.js:61:24
    at /usr/src/app/node_modules/memoizee/lib/weak.js:87:21
    at memoizedOdata2AbstractSQL (/usr/src/app/node_modules/@resin/pinejs/out/sbvr-api/uri-parser.js:78:56)
    at exports.translateUri (/usr/src/app/node_modules/@resin/pinejs/out/sbvr-api/uri-parser.js:184:34)
    at tryCatcher (/usr/src/app/node_modules/bluebird/js/release/util.js:16:23)
    at Promise._settlePromiseFromHandler (/usr/src/app/node_modules/bluebird/js/release/promise.js:512:31)
    at Promise._settlePromise (/usr/src/app/node_modules/bluebird/js/release/promise.js:569:18)
    at Promise._settlePromise0 (/usr/src/app/node_modules/bluebird/js/release/promise.js:614:10)
    at Promise._settlePromises (/usr/src/app/node_modules/bluebird/js/release/promise.js:694:18)
    at Promise._fulfill (/usr/src/app/node_modules/bluebird/js/release/promise.js:638:18)
    at Promise._resolveCallback (/usr/src/app/node_modules/bluebird/js/release/promise.js:432:57)
    at Promise._settlePromiseFromHandler (/usr/src/app/node_modules/bluebird/js/release/promise.js:524:17)
    at Promise._settlePromise (/usr/src/app/node_modules/bluebird/js/release/promise.js:569:18)
    at Promise._settlePromise0 (/usr/src/app/node_modules/bluebird/js/release/promise.js:614:10)
    at Promise._settlePromises (/usr/src/app/node_modules/bluebird/js/release/promise.js:694:18)
    at Promise._fulfill (/usr/src/app/node_modules/bluebird/js/release/promise.js:638:18)
    at Promise._resolveCallback (/usr/src/app/node_modules/bluebird/js/release/promise.js:432:57)
    at Promise._settlePromiseFromHandler (/usr/src/app/node_modules/bluebird/js/release/promise.js:524:17)
    at Promise._settlePromise (/usr/src/app/node_modules/bluebird/js/release/promise.js:569:18)
    at Promise._settlePromise0 (/usr/src/app/node_modules/bluebird/js/release/promise.js:614:10)
    at Promise._settlePromises (/usr/src/app/node_modules/bluebird/js/release/promise.js:694:18)
    at Promise._fulfill (/usr/src/app/node_modules/bluebird/js/release/promise.js:638:18)
    at MappingPromiseArray.PromiseArray._resolve (/usr/src/app/node_modules/bluebird/js/release/promise_array.js:126:19)
    at MappingPromiseArray._promiseFulfilled (/usr/src/app/node_modules/bluebird/js/release/map.js:101:18)
    at Promise._settlePromise (/usr/src/app/node_modules/bluebird/js/release/promise.js:574:26)
    at Promise._settlePromise0 (/usr/src/app/node_modules/bluebird/js/release/promise.js:614:10)
    at Promise._settlePromises (/usr/src/app/node_modules/bluebird/js/release/promise.js:694:18)
    at Promise._fulfill (/usr/src/app/node_modules/bluebird/js/release/promise.js:638:18)
    at Promise._resolveCallback (/usr/src/app/node_modules/bluebird/js/release/promise.js:432:57)
    at Promise._settlePromiseFromHandler (/usr/src/app/node_modules/bluebird/js/release/promise.js:524:17)
    at Promise._settlePromise (/usr/src/app/node_modules/bluebird/js/release/promise.js:569:18)
    at Promise._settlePromise0 (/usr/src/app/node_modules/bluebird/js/release/promise.js:614:10)
    at Promise._settlePromises (/usr/src/app/node_modules/bluebird/js/release/promise.js:694:18)
    at Promise._fulfill (/usr/src/app/node_modules/bluebird/js/release/promise.js:638:18)
    at Promise._resolveCallback (/usr/src/app/node_modules/bluebird/js/release/promise.js:432:57)
    at Holder$2._callFunction (<anonymous>:19:29)
    at _drainQueueStep (/usr/src/app/node_modules/bluebird/js/release/async.js:142:12)
    at _drainQueue (/usr/src/app/node_modules/bluebird/js/release/async.js:131:9)
    at Async._drainQueues (/usr/src/app/node_modules/bluebird/js/release/async.js:147:5)
    at Immediate.Async.drainQueues [as _onImmediate] (/usr/src/app/node_modules/bluebird/js/release/async.js:17:14)
    at runCallback (timers.js:705:18)
    at tryOnImmediate (timers.js:676:5)
    at processImmediate (timers.js:658:5)
    at process.topLevelDomainCallback (domain.js:120:23)
Parsing PATCH /resin/service_instance(60)

Hello, This is due to some incompatibilities between openBalena and the SDK version that the latest v12 CLI uses. Please could you downgrade to CLI v12.3.3 (the latest version without these issues), and see if the issues persist? (they should not). The incompatibilities will be resolved in a future openBalena release, and in the mean time we are looking at ways of better communicating this. Thank you.