【JUNOS SPACE】REST APIでJUNOSを操作する_API操作編_その2

今回はデバイスから情報を取得してみます。
API経由でshow versionを実行します。

show versionの取得

参考
http://www.juniper.net/techpubs/en_US/junos-space-sdk/13.1/apiref/com.juniper.junos_space.sdk.help/JSDeviceManagerSvc/Docs/v1_rest.devices.id.exec-rpc.html

URI

POST /api/space/device-management/devices/{id}/exec-rpc

{id}は叩きたいデバイスのIDです。デバイスリストは前回取得済みなのでそこから確認。
今回はid=131092のデバイスで実施するのでURIは下記になります。

https://10.48.29.140/api/space/device-management/devices/131092/exec-rpc

ヘッダは参考の通り下記にします。

content-type=application/vnd.net.juniper.space.device-management.rpc+xml;version=1;charset=UTF-8

次にリクエストボディを作成します。
id=131092のデバイスにログインして下記コマンド発行します。

> show version | display xml rpc
<rpc-reply xmlns:junos="http://xml.juniper.net/junos/11.xxx/junos">
    <rpc>
        <get-software-information>
        </get-software-information>
    </rpc>
    <cli>
        <banner></banner>
    </cli>
</rpc-reply>

<rpc></rpc>で挟まれた箇所で下記のようにボディを生成します。

<netconf>
   <rpcCommands>
     <rpcCommand>
      <![CDATA[
        <get-software-information>
        </get-software-information>
               ]]>
      </rpcCommand>
   </rpcCommands>
</netconf>

全て揃ったのでPythonでリクエストを書くと下記になります。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import requests

url = 'https://10.48.29.140/api/space/device-management/devices/131092/exec-rpc/'
username = "super"
password = "juniper123"

headers = {
  "content-type": "application/vnd.net.juniper.space.device-management.rpc+xml;charset=UTF-8;version=1",
}

body = """
       <netconf>
      <rpcCommands>
        <rpcCommand>
         <![CDATA[
           <get-software-information>
           </get-software-information>
               ]]>
         </rpcCommand>
      </rpcCommands>
   </netconf>
    """
r = requests.post(url, auth=(username, password), data=body, headers=headers, verify=False)

print r.status_code
print r.text

実行するとXML形式でshow versionの結果が返ってきます。

200
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><netconf><status>Success</status><rpcCommands><rpcCommand>

                <get-software-information>
                </get-software-information>

</rpcCommand></rpcCommands><netConfReplies><netConfReply><status>Success</status><replyMsgData><software-information  xmlns:junos="http://xml.juniper.net/junos/11.4R6/junos">
<host-name>T_XXX1FW000</host-name>
<product-model>srx5800</product-model>
<product-name>srx5800</product-name>
<jsr/>
<package-information>
<name>junos</name>
<comment>JUNOS Software Release [11.xxxx]</comment>
</package-information>
</software-information>
</replyMsgData></netConfReply></netConfReplies><deviceFamily>junos</deviceFamily><isCluster>>false</isCluster><enableDiscardChanges>false</enableDiscardChanges><netconfConfirmedCommit>false</netconfConfirmedCommit></netconf>

リクエストボディを変更すれば他に色々と情報が取得出来るようになります。
リクエストボディの設定は各デバイスでshow xxx | display xml rpcを発行して確認できます。