iotedgedev icon indicating copy to clipboard operation
iotedgedev copied to clipboard

Add support for DPS

Open EliiseS opened this issue 3 years ago • 2 comments

In our project we're using DPS to provison our edge devices. Right now we have a mixed solution of using iotedgedev build --push and az iot edge deployment create for our deployments. This works when you don't set the DEVICE_CONNECTION_STRING in the .env file.

Would it be possible to add DPS support for iotedge deploy and do you have plans to support it?

Example of a DPS provisioned device connection string: HostName=soak-iot-hub.azure-devices.net;DeviceId=soak-edge-device;x509=true Example of a regular device connection string: HostName=iotedgedev-iothub-d278b7.azure-devices.net;DeviceId=iotedgedev-edgedevice;SharedAccessKey=NfS9UhVSljRM4=

Steps to reproduce issue:

  1. Provision and set up IoTEdge with a Virtual Machine by following the QuickStart guide
  2. In the generated .env replace DEVICE_CONNECTION_STRING value with "HostName=soak-iot-hub.azure-devices.net;DeviceId=<your_edge_device_id>;x509=true" where the <your_edge_device_id> is the same as the DeviceId from your original DEVICE_CONNECTION_STRING
  3. Retry: iotedgedev solution deploy

Current solution

The DEVICE_CONNECTION_STRING value is only required for extracting the DeviceId for all commands in the iotedgedev CLI, with the exception of the commands that use the simulator (iotedgehubdev).

The .env template also already contains EDGE_DEVICE_ID value, which id currently only used to retrieve the device connection string using Azure CLI: image image

There are a number of commands that check that the DEVICE_CONNECTION_STRING is set in commands that only use the DeviceId: image

When using a DPS device connection string, the device connection string is set to empty, failing the above validations: image

Implementation suggestion

  • Set the DeviceId from either DEVICE_CONNECTION_STRING or EDGE_DEVICE_ID, favoring one over the other when both are set or failing validation if both are set to a different DeviceIds
  • Change validation for commands that only require DeviceId to only verify DeviceId is set
    • Change iotedgedev solution deploy validation #576
  • When the DEVICE_CONNECTION_STRING is a DPS connection string, still extract and set the DeviceId #576

EliiseS avatar Jul 13 '21 12:07 EliiseS

hi! :)

angie4u avatar May 16 '22 22:05 angie4u

I'll pick this up

seanmiller168 avatar May 16 '22 22:05 seanmiller168