【发布时间】:2014-01-23 00:46:43
【问题描述】:
我正在构建一个 Java 应用程序来自动化我的应用程序中的一些典型基础架构任务。我成功调用 Azure API,但收到 (400) 错误请求返回代码/消息。我正在eclipse中调试这个,但是在连接对象中找不到任何更有意义的数据。
我尝试做的最初的简单任务是向我的 IaaS 虚拟机“gildev01”添加一个新的数据磁盘。我正在遵循本文档中的指导:http://msdn.microsoft.com/en-us/library/jj157199.aspx
HTTPS URL 正确,以 management.core.windows.net 开头,后跟我的订阅 ID,然后是:
/services/hostedservices/gildev01/deployments/gildev01/roles/gildev01/DataDisks
payload如下:
<DataVirtualHardDisk xmlns="http://schemas.microsoft.com/windowsazure" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<HostCaching>ReadWrite</HostCaching>
<DiskLabel>java-disklabel-1</DiskLabel>
<DiskName>javadisk1</DiskName>
<LogicalDiskSizeInGB>1000</LogicalDiskSizeInGB>
<MediaLink>http://<myacct>.blob.core.windows.net/vhds/javadisk1.vhd</MediaLink>
</DataVirtualHardDisk>
所以 - 两个问题:
1) 关于我在 URL 或有效负载上做错了什么有什么想法吗?
2) 关于如何从响应对象中获取更多信息的任何建议?
添加 Java 代码:
private String addDataDisk (URL url, String keyStore, String keyStorePassword) throws UnrecoverableKeyException, KeyManagementException, KeyStoreException, NoSuchAlgorithmException, IOException {
SSLSocketFactory sslFactory = getSSLSocketFactory(keyStore, keyStorePassword);
String requestBody = "<DataVirtualHardDisk xmlns=\"http://schemas.microsoft.com/windowsazure\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\"><HostCaching>ReadWrite</HostCaching><DiskLabel>java-disklabel-1</DiskLabel><DiskName>javadisk1</DiskName><LogicalDiskSizeInGB>1000</LogicalDiskSizeInGB><MediaLink>http://myacct.blob.core.windows.net/vhds/javadisk1.vhd</MediaLink></DataVirtualHardDisk>");
HttpsURLConnection con = null;
con = (HttpsURLConnection) url.openConnection();
con.setSSLSocketFactory(sslFactory);
con.setDoOutput(true);
con.setRequestMethod("POST");
con.addRequestProperty("x-ms-version", "2013-08-01");
con.setRequestProperty("Content-Length", String.valueOf(requestBody.length()));
con.setRequestProperty("Content-Type", "application/xml");
DataOutputStream requestStream = new DataOutputStream (con.getOutputStream());
requestStream.write(requestBody.getBytes());
requestStream.flush();
requestStream.close();
String responseMessage = con.getResponseMessage()+" - "+Integer.toString(con.getResponseCode());
【问题讨论】:
-
您是在创建一个空的数据盘还是尝试使用现有的 VHD 创建一个新的数据盘?另外我猜你正在用Java编写代码。可以分享一下代码吗?
-
创建一个空的数据磁盘 - 实际上,假设你是 Cynapta 的同一个 Guarav 创始人 - 这是来自你的博客,适用于简单的启动/停止 vm ...尝试添加代码