簡體   English   中英

創建自動化作業以使用REST API執行azure Runbook

[英]Create an automation job to execute azure runbook using REST API

在此鏈接中( 使用來自java的REST api創建azure自動化帳戶 )我詢問了如何創建自動化帳戶以創建Runbook。 現在,我已經創建了一個自動化帳戶以及一個已發布的Runbook,我想執行(啟動)Runbook。 為了做到這一點,我正在關注此鏈接( https://msdn.microsoft.com/en-us/library/azure/mt163849.aspx ),但我收到一個錯誤:

Server Error</h1></div>
<div id="content">
 <div class="content-container"><fieldset>
  <h2>404 - File or directory not found.</h2>
  <h3>The resource you are looking for might have been removed, had its name changed, or is temporarily unavailable

這是java函數:

    private static int processPutRequest(URL url, byte[] data, String contentType, String keyStore, String keyStorePassword) 
    throws UnrecoverableKeyException, KeyManagementException, KeyStoreException, NoSuchAlgorithmException, IOException {
       SSLSocketFactory sslFactory = getSSLSocketFactory(keyStore, keyStorePassword);
       HttpsURLConnection con = null;
       con = (HttpsURLConnection) url.openConnection();
       con.setSSLSocketFactory(sslFactory);
       con.setDoOutput(true);
       con.setRequestMethod("PUT");
       con.addRequestProperty("x-ms-version", "2013-08-01");
       con.setRequestProperty("Content-Length", String.valueOf(data.length));
       con.setRequestProperty("Content-Type", contentType);

       DataOutputStream requestStream = new DataOutputStream (con.getOutputStream());
       requestStream.write(data);
       requestStream.flush();
       requestStream.close();

       System.out.println(con.getResponseMessage());

       InputStream error = ((HttpURLConnection) con).getErrorStream();

       BufferedReader br = null;
       if (error == null) {
          InputStream inputstream = con.getInputStream();
          br = new BufferedReader(new InputStreamReader(inputstream));
       } else {
          br = new BufferedReader(new InputStreamReader(error));
       }
       String response = "";
       String nachricht;
       while ((nachricht = br.readLine()) != null){
          response += nachricht;
       }
       System.out.println(response);
       return con.getResponseCode();
   }

   public static void createJobId(String keyStorePath, String keyStorePassword, String subscriptionId)
throws  UnrecoverableKeyException, KeyManagementException, KeyStoreException, NoSuchAlgorithmException, IOException
   {
       String url = String.format("https://management.core.windows.net/%s/cloudServices/OaaSCSI6EGAZU6F6QTCK5XRVT45FKJC6RC7IQIQW3OPR7SVLE4ZPD4IQQQ-East-US/resources/automation/~/automationAccounts/xdtauto/jobs/8c3e715-9b27?api-version=2014-12-08", subscriptionId);
       String requestBody = "{ \"properties\":{ \"runbook\":{ \"name\":\"createVM\" } } }";
       int createResponseCode = processPutRequest(new URL(url), requestBody.getBytes(), "application/json", keyStorePath, keyStorePassword);
       System.out.println("JOB created :: " + createResponseCode);
   }

我的猜測是錯誤是由於您沒有傳遞正確的GUID作為要創建的作業的作業ID。 您正在傳遞8c3e715-9b27但GUID的格式為xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

@喬的猜測是正確的。

請參閱鏈接https://msdn.microsoft.com/en-us/library/azure/mt163849.aspx 如文件所示,

在Windows PowerShell中,您可以使用this命令創建作業ID:[GUID] :: NewGuid()。ToString()。

C#/ .NET中的GUID由功能“System.Guid.NewGuid()”生成。 在Java中,UUID與GUID相同。 請參閱UUID類鏈接http://docs.oracle.com/javase/8/docs/api/java/util/UUID.html ,它由函數“java.util.UUID.randomUUID()”生成。

因此,您的代碼應修改如下:

public static void createJobId(String keyStorePath, String keyStorePassword, String subscriptionId)
            throws UnrecoverableKeyException, KeyManagementException, KeyStoreException, NoSuchAlgorithmException,
            IOException {
        String automationName = <auto_account_name>;
        String jobId=java.util.UUID.randomUUID().toString();
        String url = String.format(
                "https://management.core.windows.net/%s/cloudServices/ OaaSCSI6EGAZU6F6QTCK5XRVT45FKJC6RC7IQIQW3OPR7SVLE4ZPD4IQQQ-East-US/resources/automation/~/automationAccounts/%s/jobs/%s?api-version=2014-12-08",
                subscriptionId, automationName, jobId);
        System.out.println("URL: "+url);
        String requestBody = "{ \"properties\":{ \"runbook\":{ \"name\":\"<RUNBOOK_NAME>\" } } }";
        int createResponseCode = processPutRequest(new URL(url), requestBody.getBytes(), "application/json",
                keyStorePath, keyStorePassword);
        System.out.println("JOB created :: " + createResponseCode);
    }

如果您已正確創建Runbook並在請求正文中設置了正確的Runbook名稱,則代碼將作為預測並響應StatusCode 201。

但是我在你的線程中發現了另一個函數“createRunbook”的問題使用java的REST api創建了azure自動化帳戶 ,在create Runbook的請求體中需要元素“properties / publishContentLink / uri”(參考https:// msdn.microsoft.com/en-us/library/azure/mt163812.aspx )。

在此輸入圖像描述

因此,如果創建作業的響應主體包含信息{“code”:“NotFound”,“message”:“Runbook not found。”},我建議您檢查代碼並查看Azure Portal上的Runbook頁面。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM