예제 #1
0
        public async Task GroupAndDeployment()
        {
            DeviceManagementClient client = CreateClient();
            string groupid = "joegroup";

            /* list groups. */
            AsyncPageable <BinaryData> fetchResponse = client.GetGroupsAsync(new RequestContext());
            int counter = 0;

            await foreach (var item in fetchResponse)
            {
                Assert.IsNotNull(item);
                counter++;
            }

            Assert.IsTrue(counter > 0);

            /* create a group. */
            var body = new
            {
                groupId         = groupid,
                tags            = new string[] { groupid },
                createdDateTime = "2021-11-17T16:29:56.5770502+00:00",
                groupType       = "DeviceClassIdAndIoTHubTag",
                deviceClassId   = "0919e3ae422a2bfa8c84ff905813e60351e456d1"
            };
            Response createResponse = await client.CreateOrUpdateGroupAsync(groupid, RequestContent.Create(body), new RequestContext());

            Assert.IsTrue(createResponse.Status == 200);

            /* get a group. */
            Response getResponse = await client.GetGroupAsync(groupid, new RequestContext());

            Assert.IsTrue(getResponse.Status == 200);

            /* create a deployment. */
            string deploymentid   = "testdeployment1";
            var    deploymentBody = new
            {
                deploymentId  = deploymentid,
                startDateTime = "2021-09-02T16:29:56.5770502Z",
                groupId       = groupid,
                updateId      = new
                {
                    provider = "fabrikam",
                    name     = "vacuum",
                    version  = "2021.1117.1036.48"
                }
            };
            Response createDeploymentResponse = await client.CreateOrUpdateDeploymentAsync(groupid, deploymentid, RequestContent.Create(deploymentBody), new RequestContext());

            Assert.IsTrue(createDeploymentResponse.Status == 200);
            /* get deployment. */
            Response getDepoloymentResponse = await client.GetDeploymentAsync(groupid, deploymentid, new RequestContext());

            Assert.IsTrue(getDepoloymentResponse.Status == 200);

            /* delete deployment. */
            Response deleteDeploymentResponse = await client.DeleteDeploymentAsync(groupid, deploymentid, new RequestContext());

            Assert.IsTrue(deleteDeploymentResponse.Status == 204);

            /* delete group. */
            Response deleteGroupResponse = await client.DeleteGroupAsync(groupid, new RequestContext());

            Assert.IsTrue(deleteGroupResponse.Status == 204);
        }
예제 #2
0
        private async Task <string> CreateDeploymentGroupStepAsync()
        {
            string groupId        = _deviceTag;
            bool   createNewGroup = false;

            ConsoleEx.WriteLine(ConsoleColor.Yellow, "Querying deployment group...");
            try
            {
                Response groupResponse = await _managementClient.GetGroupAsync(groupId, new RequestContext());

                Console.WriteLine($"Deployment group {groupId} already exists.");
            }
            catch (RequestFailedException e)
            {
                if (e.Status == (int)HttpStatusCode.NotFound)
                {
                    createNewGroup = true;
                }
            }

            if (createNewGroup)
            {
                ConsoleEx.WriteLine(ConsoleColor.Yellow, "Creating deployment group...");
                var group = RequestContent.Create(new {
                    groupId   = groupId,
                    groupType = "IoTHubTag",
                    tags      = new [] {
                        groupId
                    },
                    deviceClassId   = "0919e3ae422a2bfa8c84ff905813e60351e456d1",
                    createdDateTime = DateTimeOffset.UtcNow.ToString()
                });

                Response groupResponse = await _managementClient.CreateOrUpdateGroupAsync(groupId, group);

                var groupDoc = JsonDocument.Parse(groupResponse.Content.ToMemory());

                if (groupDoc.RootElement.TryGetProperty("value", out var groupValue))
                {
                    Console.WriteLine($"Group {groupId} created.");
                    Console.WriteLine();

                    ConsoleEx.WriteLine(ConsoleColor.Yellow, "Waiting for the group to be populated with devices...");
                    Console.WriteLine("(this may take about five minutes to complete)");
                    bool repeat = true;
                    while (repeat)
                    {
                        groupResponse = await _managementClient.GetGroupAsync(groupId, new RequestContext());

                        if (groupValue.TryGetProperty("deviceCount", out var deviceCountValue) && deviceCountValue.GetInt32() > 0)
                        {
                            Console.WriteLine($"Deployment group {groupId} now has {deviceCountValue.GetInt32()} devices.");
                            repeat = false;
                        }
                        else
                        {
                            Console.Write(".");
                            await Task.Delay(DefaultRetryAfterValue);
                        }
                    }
                }
            }

            Console.WriteLine();
            return(groupId);
        }
예제 #3
0
        /// <summary>
        /// Device Update for IoT Hub Sample: Deploy update to a test device
        /// </summary>
        /// <param name="updateVersion">Update version to retrieve.</param>
        /// <param name="deviceGroup">Device group to deploy the update to.</param>
        static async Task Main(string updateVersion, string deviceGroup)
        {
            Console.WriteLine("Device Update for IoT Hub Sample: Deploy update to a test device");
            Console.WriteLine();

            if (string.IsNullOrWhiteSpace(updateVersion))
            {
                throw new ArgumentException("You have to provider a valid update version.");
            }

            var credentials = new InteractiveBrowserCredential(Constant.TenantId, Constant.ClientId);
            var client      = new DeviceManagementClient(Constant.AccountEndpoint, Constant.Instance, credentials);

            Console.WriteLine("Retrieve update:");
            Console.WriteLine($"    Provider: {Constant.Provider}");
            Console.WriteLine($"    Name    : {Constant.Name}");
            Console.WriteLine($"    Version : {updateVersion}");

            Console.WriteLine();
            Console.WriteLine($"Checking existence of device group '{deviceGroup}'...");
            try
            {
                var response = await client.GetGroupAsync(deviceGroup);

                if (response.Status == (int)HttpStatusCode.NotFound)
                {
                    throw new ApplicationException($"Group '{deviceGroup}' doesn't exist. Create it before you create a deployment.");
                }
                Console.WriteLine($"Group '{deviceGroup}' already exists.");
            }
            catch (RequestFailedException e)
            {
                Console.WriteLine(e);
                throw;
            }

            Console.WriteLine();
            Console.WriteLine($"Creating deployment of update '{updateVersion}' to device group '{deviceGroup}'...");
            var deploymentId = $"test{DateTime.UtcNow.ToString("MMddhhmmss")}";
            var deployment   = new
            {
                deploymentId,
                startDateTime = DateTime.UtcNow.ToString("O"),
                groupId       = deviceGroup,
                updateId      = new
                {
                    manufacturer = Constant.Provider,
                    name         = Constant.Name,
                    version      = updateVersion
                }
            };
            var body = JsonSerializer.Serialize(deployment);

            Console.WriteLine();
            Console.WriteLine($"Deploying update '{updateVersion}' to device group '{deviceGroup}'...");
            Console.WriteLine($"(this may take a long time to finish)");
            try
            {
                var response = await client.CreateOrUpdateDeploymentAsync(deviceGroup, deploymentId, RequestContent.Create(body));

                bool repeat = true;
                while (repeat)
                {
                    response = await client.GetDeploymentStatusAsync(deviceGroup, deploymentId);

                    var doc = JsonDocument.Parse(response.Content.ToMemory());
                    if (doc.RootElement.TryGetProperty("devicesCompletedSucceededCount", out var deviceCountValue) && deviceCountValue.GetInt32() > 0)
                    {
                        Console.WriteLine($"\nSuccessfully deployed to {deviceCountValue.GetInt32()} devices.");
                        repeat = false;
                    }
                    else
                    {
                        Console.Write(".");
                        await Task.Delay(DefaultRetryAfterValue);
                    }
                }
            }
            catch (RequestFailedException e)
            {
                Console.WriteLine(e);
                throw;
            }
        }