4 # Copyright (c) 2016 NEC Corporation and others
7 # This program and the accompanying materials are made available under the
8 # terms of the Eclipse Public License v1.0 which accompanies this
9 # distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
18 # response code to check the rest calls
19 RESP_GET_SUCCESS = 200
23 con_header = {'Accept': 'application/json', 'content-type': 'application/json'}
24 authentication = ('admin', 'admin')
27 def validate_cluster(ipaddress):
28 """ method to check the cluster status
30 ipaddress(str): ip address of the ODL controller
32 url = "http://" + ipaddress + ":8181/jolokia/read/akka:type=Cluster"
34 resp = requests.get(url, headers=con_header, auth=authentication)
35 except requests.exceptions.RequestException:
36 print("controller is unreachable")
39 if resp.status_code == RESP_NOT_FOUND:
40 print("jolokia not installed, resp code", resp.status_code)
41 print("Problem with accessing jolokia")
44 elif resp.status_code != RESP_GET_SUCCESS:
45 print("error in getting response, resp code", resp.status_code)
48 data = json.loads(resp.content)
49 cluster_status = data['value']['ClusterStatus']
50 status = json.loads(cluster_status)
51 members = status['members']
53 entity_owner_list = []
55 for member in members:
56 # spliting the ip address of the node from json object
58 # "akka.tcp://opendaylight-cluster-data@10.106.138.137:2550"
59 ip = re.search('@(.+?):', member['address']).group(1)
60 node_status = ip + "-" + member['status']
61 member_list.append(node_status)
62 url1 = "http://" + ip +\
63 ":8181/jolokia/read/org.opendaylight.controller:"\
64 "Category=ShardManager,name=shard-manager-operational,"\
65 "type=DistributedOperationalDatastore"
66 resp1 = requests.get(url1, headers=con_header, auth=authentication)
67 if resp1.status_code != RESP_GET_SUCCESS:
68 print("error in getting response for the node", ip)
69 print("response content", resp1.content)
71 data2 = json.loads(resp1.content)
72 member_role = data2['value']['MemberName']
73 entity_owner_list.append(ip + ":" + member_role)
74 leader = data['value']['Leader']
76 leaderNode = leader[leader.index('@') + 1:leader.rindex(':')]
77 for leader_node in member_list:
78 address = leader_node.split('-')
79 if address[0] == leaderNode:
80 print("=================== Leader Node ======================\n")
82 member_list.remove(leader_node)
83 print("=================== Follower Node ====================\n")
85 list_entity_owners(ipaddress, entity_owner_list)
88 def list_entity_owners(ipaddress, entity_owner_list):
89 """ method to list the entity owners
91 ipaddress(str): ip address of the ODL controller
92 entity_owner_list(list): list of member role in cluster
94 entity = ":8181/restconf/operational/entity-owners:entity-owners"
95 url = "http://" + ipaddress + entity
96 resp = requests.get(url, headers=con_header, auth=authentication)
97 if resp.status_code != RESP_GET_SUCCESS:
98 print("controller is down, resp_code", resp.status_code)
99 print("response content", resp.content)
101 data = json.loads(resp.content)
102 ovsdb = data['entity-owners']['entity-type']
103 print("\n\n=================== Entity Details ===================\n")
105 entities = e_type['entity']
106 for entity in entities:
108 if len(entity['owner']) > 0:
109 print("NODE ID", str(id[id.rindex('=') + 2:len(id) - 2]))
110 print("OWNER", str(entity['owner']))
111 for owner in entity_owner_list:
112 owner_role = owner.split(':')
113 if entity['owner'] == owner_role[1]:
114 print("IP Address", str(owner_role[0]))
119 if __name__ == '__main__':
120 print('*****Cluster Status******')
121 ipaddress = raw_input("Please enter ipaddress to find Leader Node : ")
122 validate_cluster(ipaddress)
125 print("Cluster checker loaded as Module")