我正在构建一个Java应用程序以自动化我的应用程序中的一些典型的基础结构任务。我成功地调用了Azure API,但是我收到了一个(400)错误请求返回码/消息。我在eclipse中调试它,但在连接对象中找不到更有意义的数据。错误的请求 - 400使用Azure时添加数据磁盘REST API
我想要做的最初的简单任务是向我的IaaS虚拟机'gildev01'添加一个新的数据磁盘。我下面这个文档中的指南:http://msdn.microsoft.com/en-us/library/jj157199.aspx
的HTTPS URL是否正确,从management.core.windows.net其次是我的订阅ID,然后执行以下操作:
/服务/ hostedservices/gildev01 /部署/ gildev01 /角色/ gildev01/DataDisks
有效载荷如下:
<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编写代码。你能分享代码吗? –
创建一个空的数据磁盘 - 实际上,假设你是同一个Guarav Cynapta的创始人 - 这是来自你的博客,并为简单的启动/停止虚拟机工作...尝试添加代码 –