コード例 #1
0
        public async Task <ExecutionResult> ConnectAsync(IChannel channel,
                                                         string subscriptionId,
                                                         string resourceGroupName,
                                                         string workspaceName,
                                                         string storageAccountConnectionString,
                                                         string location,
                                                         CredentialType credentialType,
                                                         CancellationToken?cancellationToken = null)
        {
            LastAction        = AzureClientAction.Connect;
            SubscriptionId    = subscriptionId;
            ResourceGroupName = resourceGroupName;
            WorkspaceName     = workspaceName;
            ConnectionString  = storageAccountConnectionString;
            Location          = location;
            CredentialType    = credentialType;

            ConnectToWorkspace?.Invoke(this, new ConnectToWorkspaceEventArgs(ExecuteStatus.Ok, null, location, storageAccountConnectionString != null, credentialType, TimeSpan.FromMilliseconds(1)));
            return(ExecuteStatus.Ok.ToExecutionResult());
        }
コード例 #2
0
        public async Task <ExecutionResult> ConnectAsync(IChannel channel,
                                                         string subscriptionId,
                                                         string resourceGroupName,
                                                         string workspaceName,
                                                         string storageAccountConnectionString,
                                                         string location,
                                                         CredentialType credentialType,
                                                         CancellationToken?cancellationToken = null)
        {
            var             duration = Stopwatch.StartNew();
            ExecutionResult?result   = null;

            try
            {
                // Capture the console output, specifically for the case the user is trying to use DeviceCode credentials
                // so they can get the message for auth.
                var currentOut = channel?.CaptureConsole();
                try
                {
                    var credential = CredentialFactory.CreateCredential(credentialType, subscriptionId);

                    var connectionResult = await ConnectToWorkspaceAsync(channel, subscriptionId, resourceGroupName, workspaceName, location, credential);

                    if (connectionResult.Status != ExecuteStatus.Ok)
                    {
                        result = connectionResult;
                        return(result.Value);
                    }

                    if (ActiveWorkspace == null)
                    {
                        result = AzureClientError.WorkspaceNotFound.ToExecutionResult();
                        return(result.Value);
                    }

                    Credential = credential;
                }
                finally
                {
                    System.Console.SetOut(currentOut);
                }

                StorageConnectionString = storageAccountConnectionString;
                ActiveTarget            = null;
                MostRecentJobId         = string.Empty;

                channel?.Stdout($"Connected to Azure Quantum workspace {ActiveWorkspace.WorkspaceName} in location {ActiveWorkspace.Location}.");

                if (ValidExecutionTargets.Count() == 0)
                {
                    channel?.Stderr($"No valid quantum computing execution targets found in Azure Quantum workspace {ActiveWorkspace.WorkspaceName}.");
                }

                result = ValidExecutionTargets.ToExecutionResult();
                return(result.Value);
            }
            finally
            {
                duration.Stop();

                ExecuteStatus    status           = result?.Status ?? ExecuteStatus.Error;
                AzureClientError?error            = result?.Output as AzureClientError?;
                bool             useCustomStorage = !string.IsNullOrWhiteSpace(StorageConnectionString);

                ConnectToWorkspace?.Invoke(this, new ConnectToWorkspaceEventArgs(status, error, location, useCustomStorage, credentialType, duration.Elapsed));
            }
        }