protected void Initialize(MockContext context) { if (!initialized) { lock (locker) { if (!initialized) { testEnv = TestEnvironmentFactory.GetTestEnvironment(); resourcesClient = DigitalTwinsTestUtilities.GetResourceManagementClient(context, new RecordedDelegatingHandler { StatusCodeToReturn = HttpStatusCode.OK }); digitalTwinsClient = DigitalTwinsTestUtilities.GetDigitalTwinsClient(context, new RecordedDelegatingHandler { StatusCodeToReturn = HttpStatusCode.OK }); if (string.IsNullOrEmpty(Environment.GetEnvironmentVariable("AZURE_VM_TEST_LOCATION"))) { location = DigitalTwinsTestUtilities.DefaultLocation; } else { location = Environment.GetEnvironmentVariable("AZURE_VM_TEST_LOCATION").Replace(" ", "").ToLower(); } this.initialized = true; } } } }
public async Task CreateEndpointAsync(string instanceName) { var creds = GetAzureCredentials(); var subClient = new SubscriptionClient(creds); string nextPageLink = null; do { var subs = nextPageLink == null ? await subClient.Subscriptions.ListAsync() : await subClient.Subscriptions.ListNextAsync(nextPageLink); nextPageLink = subs.NextPageLink; foreach (var sub in subs) { var dtClient = new AzureDigitalTwinsManagementClient(creds); dtClient.SubscriptionId = sub.SubscriptionId; var instance = await FindDigitalTwinInstanceAsync(dtClient, instanceName); if (instance == null) { _log.LogWarning($"Unable to find instance with name {instanceName} in subscription {sub.SubscriptionId}"); continue; } var components = instance.Id.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries); if (components.Length != 8) { _log.LogWarning($"Unrecognized instance ID format: {instance.Id}"); continue; } DigitalTwinsEndpointResource endpoint = null; try { endpoint = await dtClient.DigitalTwinsEndpoint.GetAsync(components[3], instanceName, EndpointId); } catch (ErrorResponseException e) when(e.Response.StatusCode == HttpStatusCode.NotFound) { } if (endpoint == null) { await CreateNewEndpoint(dtClient, components[1], components[3], instanceName); } return; } } while (nextPageLink != null); throw new Exception($"Unable to find instance {instanceName}"); }
private async Task <DigitalTwinsDescription> FindDigitalTwinInstanceAsync(AzureDigitalTwinsManagementClient dtClient, string instanceName) { string nextPageLink = null; DigitalTwinsDescription match = null; do { var instances = nextPageLink == null ? await dtClient.DigitalTwins.ListAsync() : await dtClient.DigitalTwins.ListNextAsync(nextPageLink); nextPageLink = instances.NextPageLink; match = instances.FirstOrDefault(x => string.Equals(x.Name, instanceName, StringComparison.OrdinalIgnoreCase)); if (match != null) { break; } } while (nextPageLink != null); return(match); }
private async Task CreateNewEndpoint(AzureDigitalTwinsManagementClient dtClient, string subscriptionId, string resourceGroup, string instanceName) { var egClient = new EventGridManagementClient(GetAzureCredentials()); egClient.SubscriptionId = subscriptionId; var topics = await egClient.Topics.ListBySubscriptionAsync($"name eq '{instanceName}'"); var topic = topics.FirstOrDefault(); if (topic == null) { _log.LogError($"Unable to find topic {instanceName} in subscription {subscriptionId}"); return; } var topicResourceGroup = topic.Id.Split("/", StringSplitOptions.RemoveEmptyEntries)[3]; var keys = await egClient.Topics.ListSharedAccessKeysAsync(topicResourceGroup, instanceName); _log.LogInformation($"Creating endpoint for {instanceName}"); await dtClient.DigitalTwinsEndpoint.CreateOrUpdateAsync(resourceGroup, instanceName, EndpointId, new Microsoft.Azure.Management.DigitalTwins.Models.EventGrid(topic.Endpoint, keys.Key1, accessKey2: keys.Key2)); }