ただ、生のintrospectデータはXMLのため、ブラウザでは見えないタグなどがついていてpythonでは扱いにくいです。
contrail_sandeshlibs.py はintrospectのXMLデータをpythonのdict/list形式に変換するプログラムです。
contrail_sandeshlibs.pyはxmlの'@type'のTypeが'sandesh', 'struct', 'i64', 'i32', 'i16', 'u64', 'u32', 'u16', 'double', 'string', 'bool'の場合、Pythonの辞書キーをセットします。
もし、タイプがlistの場合、共通の辞書キーの中にリストを格納します。
contrail_sandeshlibs.py はsandeshのテーブル名から多数のdef定義してあります。
例えば、def get_vn_list(self, name='') はVnListRespから命名されています。
それぞれのdefはコメントを参照してください。
注意: 幾つかのdefは大量のデータを返します。特にifmap系のデータは大量です。事故を防ぐため、幾つかのifmapのdefはフラグを立てないと全てのデータを取ることはできません。全てを取得したい場合、ifmap_dump=Trueを引数にセットしてください。
** vrouter introspect のドキュメントはこちら
** bumtreedisp.py と tor_tsn_compare.pyはこのライブラリを使っています。
使い方
1) librariesのインストールsys
copy
xmltodict
urllib2
** contrail_sandeshlibs.py は以下のライブラリを使っています。xmltodictは標準ライブラリではないですが、Contrailが使っているライブラリです
2) contrail_sandeshlibs のインポート
3) ホスト名とポートのセット. デフォルト値 hostname=127.0.0.1 port=8085
ポート番号はデーモン毎に異なります。こちらを参照してください。 RolesDaemaonPorts.
4) オブジェクトの作成
5) インスタンスの実行。引数をつけることが可能です。
### Sample code
from contrail_sandeshlibs import *
hostname='172.27.113.207'
port='8085'
a = GetContrailSandesh(hostname=hostname,port=port)
py_dict = a.get_vn_list(name='default-domain:test-project1:VRRPvn1')
return py_dict
### Example:Result{u'VnListResp': {u'vn_list': {u'vxlan_id': u'7833', u'bridging': u'true', u'name': u'default-domain:test-project1:VRRPvn1', u'admin_state': u'true', u'mirror_acl_uuid': '', u'acl_uuid': '', u'config_vxlan_id': u'0', u'enable_rpf': u'true', u'ipv4_forwarding': u'true', u'flood_unknown_unicast': u'false', u'vrf_name': u'default-domain:test-project1:VRRPvn1:VRRPvn1', u'layer2_forwarding': u'true', u'ipam_host_routes': {u'ipam_name': u'default-domain:default-project:default-network-ipam', u'host_routes': ''}, u'mirror_cfg_acl_uuid': '', u'ipam_data': {u'dns_server': u'10.0.0.2', u'dhcp_enable': u'true', u'ipam_name': u'default-domain:default-project:default-network-ipam', u'ip_prefix': u'10.0.0.0', u'prefix_len': u'24', u'gateway': u'10.0.0.1'}, u'vn_id': u'7833', u'uuid': u'bf34d68a-1eb7-4722-ac78-d7d6104de250'}}}
### Example:Raw XML これは元データです。これが上のようなdictに変換されます<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="/universal_parse.xsl"?>
<__VnListResp_list type="slist">
<VnListResp type="sandesh">
<vn_list type="list" identifier="1">
<list type="struct" size="1">
<VnSandeshData>
<name type="string" identifier="1">default-domain:test-project1:VRRPvn1</name>
<uuid type="string" identifier="2">bf34d68a-1eb7-4722-ac78-d7d6104de250</uuid>
<acl_uuid type="string" identifier="3" link="AclReq"/>
<mirror_acl_uuid type="string" identifier="4" link="AclReq"/>
<mirror_cfg_acl_uuid type="string" identifier="5" link="AclReq"/>
<vrf_name type="string" identifier="6" link="VrfListReq">default-domain:test-project1:VRRPvn1:VRRPvn1</vrf_name>
<ipam_data type="list" identifier="7">
<list type="struct" size="1">
<VnIpamData>
<ip_prefix type="string" identifier="1">10.0.0.0</ip_prefix>
<prefix_len type="i32" identifier="2">24</prefix_len>
<gateway type="string" identifier="3">10.0.0.1</gateway>
<ipam_name type="string" identifier="4">default-domain:default-project:default-network-ipam</ipam_name>
<dhcp_enable type="string" identifier="5">true</dhcp_enable>
<dns_server type="string" identifier="6">10.0.0.2</dns_server>
</VnIpamData>
</list>
</ipam_data>
<ipam_host_routes type="list" identifier="8">
<list type="struct" size="1">
<VnIpamHostRoutes>
<ipam_name type="string" identifier="1">default-domain:default-project:default-network-ipam</ipam_name>
<host_routes type="list" identifier="2">
<list type="string" size="0"/>
</host_routes>
</VnIpamHostRoutes>
</list>
</ipam_host_routes>
<layer2_forwarding type="bool" identifier="9">true</layer2_forwarding>
<ipv4_forwarding type="bool" identifier="10">true</ipv4_forwarding>
<admin_state type="bool" identifier="11">true</admin_state>
<vxlan_id type="i32" identifier="12">7833</vxlan_id>
<config_vxlan_id type="i32" identifier="13">0</config_vxlan_id>
<vn_id type="i32" identifier="14">7833</vn_id>
<enable_rpf type="bool" identifier="15">true</enable_rpf>
<bridging type="bool" identifier="16">true</bridging>
<flood_unknown_unicast type="bool" identifier="17">false</flood_unknown_unicast>
</VnSandeshData>
</list>
</vn_list>
<more type="bool" identifier="0">true</more>
</VnListResp>
<Pagination type="sandesh">
<req type="struct" identifier="1">
<PageReqData>
<prev_page type="string" identifier="1" link="PageReq"/>
<next_page type="string" identifier="2" link="PageReq"/>
<first_page type="string" identifier="3" link="PageReq">begin:0,end:99,table:db.vn.0,name:default-domain:test-project1:VRRPvn1</first_page>
<all type="string" identifier="4" link="PageReq">begin:-1,end:-1,table:db.vn.0,name:default-domain:test-project1:VRRPvn1</all>
<table_size type="u32" identifier="5">2</table_size>
<entries type="string" identifier="6">0-0/1</entries>
</PageReqData>
</req>
<more type="bool" identifier="0">false</more>
</Pagination>
</__VnListResp_list>
0 件のコメント:
コメントを投稿