Guest User

Untitled

a guest
Mar 5th, 2017
36
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.26 KB | None | 0 0
  1. #pip install paramiko
  2. #pip install neo4j-driver
  3.  
  4. import sys
  5. import paramiko
  6. import xml.etree.ElementTree as ET
  7.  
  8. graph_address = 'bolt://localhost:7687'
  9. graph_username = 'neo4j'
  10. graph_password = '1061982'
  11.  
  12. buffer_nbytes = 4096
  13. ssh_hostname = '172.27.6.97'
  14. ssh_port = 22
  15. ssh_username = 'binhld'
  16. ssh_password = '*sysiplog!'
  17.  
  18. def testGraph():
  19. from neo4j.v1 import GraphDatabase, basic_auth
  20. driver = GraphDatabase.driver(graph_address, auth=basic_auth(graph_username, graph_password))
  21. session = driver.session()
  22.  
  23. session.run("CREATE (a:Person {name: {name}, title: {title}})",
  24. {"name": "Arthur", "title": "King"})
  25.  
  26. result = session.run("MATCH (a:Person) WHERE a.name = {name} "
  27. "RETURN a.name AS name, a.title AS title",
  28. {"name": "Arthur"})
  29. for record in result:
  30. print("%s %s" % (record["title"], record["name"]))
  31.  
  32. session.close()
  33.  
  34. def runSSH(hostname, command):
  35. client = paramiko.Transport((hostname, ssh_port))
  36. client.connect(username=ssh_username, password=ssh_password)
  37.  
  38. stdout_data = []
  39. stderr_data = []
  40. session = client.open_channel(kind='session')
  41. session.exec_command(command)
  42. while True:
  43. if session.recv_ready():
  44. stdout_data.append(session.recv(buffer_nbytes))
  45. if session.recv_stderr_ready():
  46. stderr_data.append(session.recv_stderr(buffer_nbytes))
  47. if session.exit_status_ready():
  48. break
  49.  
  50. if session.recv_exit_status() == 0:
  51. return ''.join([str(x) for x in stdout_data])
  52. else:
  53. return 'exit status: '.join(session.recv_exit_status()).join(''.join([str(x) for x in stderr_data]))
  54.  
  55. session.close()
  56. client.close()
  57.  
  58. def testReadDatabase(input):
  59. import xml.etree.ElementTree as ET
  60. root = ET.fromstring(input)
  61. #for child in root[0][1]:
  62. xmlns = root[0].tag[root[0].tag.index('{'):root[0].tag.index('}')+1]
  63. print xmlns
  64.  
  65. for child in root[0][1].findall(xmlns+'isis-database-entry'):
  66. #print child.tag, child.attrib
  67. hostname = child.find(xmlns+'isis-tlv') \
  68. .find(xmlns+'hostname-tlv') \
  69. .find(xmlns+'hostname').text
  70. print hostname
  71. ipaddress = child.find(xmlns+'isis-tlv') \
  72. .find(xmlns+'ipaddress-tlv') \
  73. .find(xmlns+'address').text
  74. print ipaddress
  75.  
  76. #for child2 in tlv:
  77. # print child2.tag#, child2.attrib
  78. #print db.rpc-reply.isis-database.isis-database-entry.isis-tlv.hostname-tlv
  79. #print child.tag, child.attrib
  80.  
  81. def main():
  82. #testGraph()
  83. #print runSSH(ssh_hostname, 'show isis database extensive | display xml')
  84. #test = runSSH(ssh_hostname, 'show isis database extensive | display xml')
  85. #testReadDatabase(test)
  86.  
  87. #print runSSH(ssh_hostname, 'show isis database GSHT-LAB-MC01 extensive')
  88. #print runSSH(ssh_hostname, 'show isis adjacency | display xml')
  89. #print runSSH(ssh_hostname, 'show isis hostname')
  90. #print runSSH(ssh_hostname, 'show isis interface')
  91. #print runSSH(ssh_hostname, 'show interfaces ae1')
  92. #print runSSH(ssh_hostname, 'show configuration interfaces ae1.0')
  93. #print runSSH(ssh_hostname, 'show configuration interfaces ae2.0')
  94. #print runSSH(ssh_hostname, 'show configuration interfaces lo0.0')
  95. #print runSSH(ssh_hostname, 'show isis database extensive | display xml')
  96.  
  97. createNode()
  98. createLink()
  99.  
  100. def createNode():
  101. input = runSSH(ssh_hostname, 'show isis database extensive | display xml')
  102. root = ET.fromstring(input)
  103.  
  104. xmlns = root[0].tag[root[0].tag.index('{'):root[0].tag.index('}')+1]
  105. print xmlns
  106.  
  107. from neo4j.v1 import GraphDatabase, basic_auth
  108. driver = GraphDatabase.driver(graph_address, auth=basic_auth(graph_username, graph_password))
  109. session = driver.session()
  110.  
  111. session.run("MATCH (n:Node) OPTIONAL MATCH (n)-[r]-() DELETE r,n")
  112.  
  113. for child in root[0][1].findall(xmlns+'isis-database-entry'):
  114. #print child.tag, child.attrib
  115. hostname = child.find(xmlns+'isis-tlv') \
  116. .find(xmlns+'hostname-tlv') \
  117. .find(xmlns+'hostname').text
  118. print hostname
  119. ipaddress = child.find(xmlns+'isis-tlv') \
  120. .find(xmlns+'ipaddress-tlv') \
  121. .find(xmlns+'address').text
  122. print ipaddress
  123.  
  124. session.run("CREATE (a:Node {title: {title}, hostname: {hostname}, ipaddress: {ipaddress}})",
  125. {"title": hostname, "hostname": hostname, "ipaddress": ipaddress})
  126.  
  127. session.close()
  128.  
  129. def createLink():
  130. from neo4j.v1 import GraphDatabase, basic_auth
  131. driver = GraphDatabase.driver(graph_address, auth=basic_auth(graph_username, graph_password))
  132. session = driver.session()
  133.  
  134. nodes = session.run("MATCH (n:Node) RETURN n.hostname AS hostname, n.ipaddress AS ipaddress")
  135.  
  136. for node in nodes:
  137. hostname = node["hostname"]
  138. ipaddress = node["ipaddress"]
  139.  
  140. input = runSSH(ipaddress, 'show isis adjacency | display xml')
  141. root = ET.fromstring(input)
  142.  
  143. xmlns = root[0].tag[root[0].tag.index('{'):root[0].tag.index('}')+1]
  144. print xmlns
  145.  
  146. for child in root[0].findall(xmlns+'isis-adjacency'):
  147. #print child.tag, child.attrib
  148. interface_name = child.find(xmlns+'interface-name').text
  149. print interface_name
  150. system_name = child.find(xmlns+'system-name').text
  151. print system_name
  152. adjacency_state = child.find(xmlns+'adjacency-state').text
  153. print adjacency_state
  154.  
  155. command = "MATCH (n1:Node {hostname:'%s'}), \
  156. (n2:Node {hostname:'%s'}) \
  157. CREATE (n1)-[:LINKED {name:'%s', state:'%s'}]->(n2)" % \
  158. (hostname, system_name, interface_name, adjacency_state)
  159. session.run(command)
  160. #session.run("MATCH (n1:Node {hostname:'{hostname1}'}), \
  161. # (n2:Node {hostname:'{hostname2}'}) \
  162. # CREATE (n1)-[:LINKED {name:'{name}', state:'{state}'}]->(n2)",
  163. # {"hostname1": hostname, "hostname2": system_name, "name": interface_name, "state": adjacency_state})
  164.  
  165. session.close()
  166.  
  167. if __name__ == "__main__" :
  168. main()
Add Comment
Please, Sign In to add comment