如何使用Java API获取使用资源管理器创建的VM(非经典VM)列表?为什么我们需要租户ID、客户端ID和客户端密钥来创建'com.microsoft.azure.management.compute.ComputeManagementClient'对象?
是否可以使用订阅ID和Azure门户凭据完成此操作?与azure-mgmt-compute项目提供的示例需要这些租户ID、客户端ID不同,当我们在Azure门户上创建VM(选择资源管理器)时,我们不需要这些详细信息。
如何使用Java API获取使用资源管理器创建的VM(非经典VM)列表?为什么我们需要租户ID、客户端ID和客户端密钥来创建'com.microsoft.azure.management.compute.ComputeManagementClient'对象?
是否可以使用订阅ID和Azure门户凭据完成此操作?与azure-mgmt-compute项目提供的示例需要这些租户ID、客户端ID不同,当我们在Azure门户上创建VM(选择资源管理器)时,我们不需要这些详细信息。
感谢@GauravMantri的详细解释。
如何使用Java API获取创建于资源管理器中的VM(非经典)列表?
根据Virtual Machine REST的Azure参考,您可以使用需要验证Azure Resource Manager请求的公共参数和标头REST API获取资源组中所有VM的列表。
以下是使用Java API的示例代码。
// The parameters include clientId, clientSecret, tenantId, subscriptionId and resourceGroupName.
private static final String clientId = "<client-id>";
private static final String clientSecret = "<key>";
private static final String tenantId = "<tenant-id>";
private static final String subscriptionId = "<subscription-id>";
private static final String resouceGroupName = "<resource-group-name>";
// The function for getting the access token via Class AuthenticationResult
private static AuthenticationResult getAccessTokenFromServicePrincipalCredentials()
throws ServiceUnavailableException, MalformedURLException, ExecutionException, InterruptedException {
AuthenticationContext context;
AuthenticationResult result = null;
ExecutorService service = null;
try {
service = Executors.newFixedThreadPool(1);
// TODO: add your tenant id
context = new AuthenticationContext("https://login.windows.net/" + tenantId, false, service);
// TODO: add your client id and client secret
ClientCredential cred = new ClientCredential(clientId, clientSecret);
Future<AuthenticationResult> future = context.acquireToken("https://management.azure.com/", cred, null);
result = future.get();
} finally {
service.shutdown();
}
if (result == null) {
throw new ServiceUnavailableException("authentication result was null");
}
return result;
}
// The process for getting the list of VMs in a resource group
Configuration config = ManagementConfiguration.configure(null, new URI("https://management.core.windows.net"),
subscriptionId,
getAccessTokenFromServicePrincipalCredentials().getAccessToken());
ComputeManagementClient client = ComputeManagementService.create(config);
VirtualMachineListResponse listResponse = client.getVirtualMachinesOperations().list(resourceGroupName);
ArrayList<VirtualMachine> list = listResponse.getVirtualMachines();