Skip to content

Commit a068ca2

Browse files
committed
linstor: add network path api in linstor-manager
Add getNetworkPath, setNetworkPath and destroyNetworkPath to the linstor-manager plugin. Signed-off-by: Damien Thenot <[email protected]>
1 parent e7ffbab commit a068ca2

File tree

2 files changed

+87
-1
lines changed

2 files changed

+87
-1
lines changed

drivers/linstor-manager

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1183,6 +1183,51 @@ def set_node_preferred_interface(session, args):
11831183
raise XenAPIPlugin.Failure('-1', [str(e)])
11841184
return str(True)
11851185

1186+
def get_network_path(session, args):
1187+
group_name = args["groupName"]
1188+
node1 = args["node1"]
1189+
node2 = args["node2"]
1190+
1191+
linstor = LinstorVolumeManager(
1192+
get_controller_uri(),
1193+
group_name,
1194+
logger=util.SMlog
1195+
)
1196+
try:
1197+
return str(linstor.get_node_path(node1, node2))
1198+
except Exception as e:
1199+
raise XenAPIPlugin.Failure('-1', [str(e)])
1200+
1201+
def set_network_path(session, args):
1202+
group_name = args["groupName"]
1203+
hostname1 = args["node1"]
1204+
hostname2 = args["node2"]
1205+
network_name = args["network"]
1206+
1207+
linstor = LinstorVolumeManager(
1208+
get_controller_uri(),
1209+
group_name,
1210+
logger=util.SMlog
1211+
)
1212+
try:
1213+
return str(linstor.set_node_path(hostname1, hostname2, network_name))
1214+
except Exception as e:
1215+
raise XenAPIPlugin.Failure('-1', [str(e)])
1216+
1217+
def destroy_network_path(session, args):
1218+
group_name = args["groupName"]
1219+
hostname1 = args["node1"]
1220+
hostname2 = args["node2"]
1221+
1222+
linstor = LinstorVolumeManager(
1223+
get_controller_uri(),
1224+
group_name,
1225+
logger=util.SMlog
1226+
)
1227+
try:
1228+
return str(linstor.destroy_node_path(hostname1, hostname2))
1229+
except Exception as e:
1230+
raise XenAPIPlugin.Failure('-1', [str(e)])
11861231

11871232
if __name__ == '__main__':
11881233
XenAPIPlugin.dispatch({
@@ -1238,5 +1283,9 @@ if __name__ == '__main__':
12381283
'modifyNodeInterface': modify_node_interface,
12391284
'listNodeInterfaces': list_node_interfaces,
12401285
'getNodePreferredInterface': get_node_preferred_interface,
1241-
'setNodePreferredInterface': set_node_preferred_interface
1286+
'setNodePreferredInterface': set_node_preferred_interface,
1287+
1288+
'getNetworkPath': get_network_path,
1289+
'setNetworkPath': set_network_path,
1290+
'destroyNetworkPath': destroy_network_path
12421291
})

drivers/linstorvolumemanager.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@
4646
PLUGIN = 'linstor-manager'
4747

4848

49+
PATH_NAME = "xostor"
50+
4951
# ==============================================================================
5052

5153
def get_local_volume_openers(resource_name, volume):
@@ -1613,6 +1615,41 @@ def set_node_preferred_interface(self, node_name, name):
16131615
'Failed to set preferred node interface on `{}`: {}'.format(node_name, error_str)
16141616
)
16151617

1618+
def get_node_path(self, hostname1, hostname2):
1619+
result = self._linstor.node_conn_list_specific_pair(node_a=hostname1, node_b=hostname2)
1620+
errors = self._filter_errors(result)
1621+
if errors:
1622+
error_str = self._get_error_str(errors)
1623+
raise LinstorVolumeManagerError(
1624+
'Failed to get node connection for `{}` <-> `{}`: {}'.format(hostname1, hostname2, error_str)
1625+
)
1626+
return result
1627+
1628+
def set_node_path(self, hostname1, hostname2, network_name):
1629+
property_name1 = "Paths/{netname}/{node_name}".format(netname=PATH_NAME, node_name=hostname1)
1630+
property_name2 = "Paths/{netname}/{node_name}".format(netname=PATH_NAME, node_name=hostname2)
1631+
result = self._linstor.node_conn_modify(hostname1, hostname2, property_dict={property_name1: network_name, property_name2: network_name}, delete_props=None)
1632+
errors = self._filter_errors(result)
1633+
if errors:
1634+
error_str = self._get_error_str(errors)
1635+
raise LinstorVolumeManagerError(
1636+
'Failed to set node connection: {}'.format(error_str)
1637+
)
1638+
return result
1639+
1640+
def destroy_node_path(self, hostname1, hostname2):
1641+
property_name1 = "Paths/{netname}/{node_name}".format(netname=PATH_NAME, node_name=hostname1)
1642+
property_name2 = "Paths/{netname}/{node_name}".format(netname=PATH_NAME, node_name=hostname2)
1643+
result = self._linstor.node_conn_modify(hostname1, hostname2, property_dict=None, delete_props=[property_name1, property_name2])
1644+
errors = self._filter_errors(result)
1645+
if errors:
1646+
error_str = self._get_error_str(errors)
1647+
raise LinstorVolumeManagerError(
1648+
'Failed to set node connection: {}'.format(error_str)
1649+
)
1650+
return result
1651+
1652+
16161653
def get_nodes_info(self):
16171654
"""
16181655
Get all nodes + statuses, used or not by the pool.

0 commit comments

Comments
 (0)