return res, vol
def local_path(self, volume):
- dres, dvol = self._resource_name_volnr_for_volume(volume)
+ d_res_name, d_vol_nr = self._resource_name_volnr_for_volume(volume)
res, data = self.call_or_reconnect(self.odm.text_query,
[dm_const.TQ_GET_PATH,
- dres,
- str(dvol)])
+ d_res_name,
+ str(d_vol_nr)])
self._check_result(res)
if len(data) == 1:
"""
# TODO(PM): consistency groups
- dres = self.is_clean_volume_name(volume['id'], DM_VN_PREFIX)
+ d_res_name = self.is_clean_volume_name(volume['id'], DM_VN_PREFIX)
res = self.call_or_reconnect(self.odm.create_resource,
- dres,
+ d_res_name,
self.empty_dict)
self._check_result(res, ignore=[dm_exc.DM_EEXIST], ret=None)
props = self._priv_hash_from_volume(volume)
# TODO(PM): properties - redundancy, etc
res = self.call_or_reconnect(self.odm.create_volume,
- dres,
+ d_res_name,
self._vol_size_to_dm(volume['size']),
props)
self._check_result(res)
# If we crashed between create_volume and the deploy call,
# the volume might be defined but not exist on any server. Oh my.
res = self.call_or_reconnect(self.odm.auto_deploy,
- dres, self.drbdmanage_redundancy,
+ d_res_name, self.drbdmanage_redundancy,
0, True)
self._check_result(res)
# TODO(pm): CG
- self._wait_for_node_assignment(dres, 0, self.empty_list)
+ self._wait_for_node_assignment(d_res_name, 0, self.empty_list)
if self.drbdmanage_devs_on_controller:
# TODO(pm): CG
res = self.call_or_reconnect(self.odm.assign,
socket.gethostname(),
- dres,
+ d_res_name,
self.empty_dict)
self._check_result(res, ignore=[dm_exc.DM_EEXIST])
def delete_volume(self, volume):
"""Deletes a resource."""
- dres, dvol = self._resource_name_volnr_for_volume(
+ d_res_name, d_vol_nr = self._resource_name_volnr_for_volume(
volume,
empty_ok=True)
- if not dres:
+ if not d_res_name:
# OK, already gone.
return True
# TODO(PM): check if in use? Ask whether Primary, or just check result?
- res = self.call_or_reconnect(self.odm.remove_volume, dres, dvol, False)
+ res = self.call_or_reconnect(self.odm.remove_volume,
+ d_res_name, d_vol_nr, False)
self._check_result(res, ignore=[dm_exc.DM_ENOENT])
res, rl = self.call_or_reconnect(self.odm.list_volumes,
- [dres],
+ [d_res_name],
0,
self.empty_dict,
self.empty_list)
# version (errorneously, IMO) returns no *resource*, too.
if len(rl) > 1:
message = _('DRBDmanage expected one resource ("%(res)s"), '
- 'got %(n)d') % {'res': dres, 'n': len(rl)}
+ 'got %(n)d') % {'res': d_res_name, 'n': len(rl)}
raise exception.VolumeBackendAPIException(data=message)
# Delete resource, if empty
if (not rl) or (not rl[0]) or (len(rl[0][2]) == 0):
- res = self.call_or_reconnect(self.odm.remove_resource, dres, False)
+ res = self.call_or_reconnect(self.odm.remove_resource,
+ d_res_name, False)
self._check_result(res, ignore=[dm_exc.DM_ENOENT])
def create_volume_from_snapshot(self, volume, snapshot):
LOG.debug("create vol from snap: from %(snap)s make %(vol)s",
{'snap': snapshot['id'], 'vol': volume['id']})
# TODO(PM): Consistency groups.
- dres, sname, sprop = self._resource_and_snap_data_from_snapshot(
+ d_res_name, sname, sprop = self._resource_and_snap_data_from_snapshot(
snapshot)
new_res = self.is_clean_volume_name(volume['id'], DM_VN_PREFIX)
res = self.call_or_reconnect(self.odm.restore_snapshot,
new_res,
- dres,
+ d_res_name,
sname,
r_props,
v_props)
return self._stats
def extend_volume(self, volume, new_size):
- dres, dvol = self._resource_name_volnr_for_volume(volume)
+ d_res_name, d_vol_nr = self._resource_name_volnr_for_volume(volume)
res = self.call_or_reconnect(self.odm.resize_volume,
- dres, dvol, -1,
+ d_res_name, d_vol_nr, -1,
{"size": self._vol_size_to_dm(new_size)},
0)
self._check_result(res)
"""Creates a snapshot."""
sn_name = self.snapshot_name_from_cinder_snapshot(snapshot)
- dres, dvol = self._resource_name_volnr_for_volume(
+ d_res_name, d_vol_nr = self._resource_name_volnr_for_volume(
snapshot["volume_id"])
res, data = self.call_or_reconnect(self.odm.list_assignments,
self.empty_dict,
- [dres],
+ [d_res_name],
0,
self.empty_dict,
self.empty_list)
if len(nodes) < 1:
raise exception.VolumeBackendAPIException(
_('Snapshot res "%s" that is not deployed anywhere?') %
- (dres))
+ (d_res_name))
props = self._priv_hash_from_volume(snapshot)
res = self.call_or_reconnect(self.odm.create_snapshot,
- dres, sn_name, nodes, props)
+ d_res_name, sn_name, nodes, props)
self._check_result(res)
def delete_snapshot(self, snapshot):
"""Deletes a snapshot."""
- dres, sname, _ = self._resource_and_snap_data_from_snapshot(
+ d_res_name, sname, _ = self._resource_and_snap_data_from_snapshot(
snapshot, empty_ok=True)
- if not dres:
+ if not d_res_name:
# resource already gone?
LOG.warning(_LW("snapshot: %s not found, "
"skipping delete operation"), snapshot['id'])
return True
res = self.call_or_reconnect(self.odm.remove_snapshot,
- dres, sname, True)
+ d_res_name, sname, True)
return self._check_result(res, ignore=[dm_exc.DM_ENOENT])
return self._stats
def _return_local_access(self, nodename, volume,
- dres=None, volume_path=None):
+ d_res_name=None, volume_path=None):
if not volume_path:
volume_path = self.local_path(volume)
}
def _return_drbdadm_config(self, volume, nodename,
- dres=None, volume_path=None):
+ d_res_name=None, volume_path=None):
- if not dres:
- dres, dvol = self._resource_name_volnr_for_volume(volume)
+ if not d_res_name:
+ d_res_name, d_vol_nr = self._resource_name_volnr_for_volume(volume)
res, data = self.call_or_reconnect(
self.odm.text_query,
- ['export_conf_split_up', nodename, dres])
+ ['export_conf_split_up', nodename, d_res_name])
self._check_result(res)
config = six.text_type(data.pop(0))
'devices': [volume_path],
'provider_auth': subst_data['shared-secret'],
'config': config,
- 'name': dres,
+ 'name': d_res_name,
}
}
return getattr(nodeattr, dm_const.FLAG_EXTERNAL,
dm_const.BOOL_FALSE) == dm_const.BOOL_TRUE
- def _return_connection_data(self, nodename, volume, dres=None):
+ def _return_connection_data(self, nodename, volume, d_res_name=None):
if self._is_external_node(nodename):
- return self._return_drbdadm_config(nodename, volume, dres=dres)
+ return self._return_drbdadm_config(nodename,
+ volume,
+ d_res_name=d_res_name)
else:
return self._return_local_access(nodename, volume)
def create_export(self, context, volume, connector):
- dres, dvol = self._resource_name_volnr_for_volume(volume)
+ d_res_name, d_vol_nr = self._resource_name_volnr_for_volume(volume)
nodename = connector["host"]
}))
res = self.call_or_reconnect(
- self.odm.assign, nodename, dres, assg_prop)
+ self.odm.assign, nodename, d_res_name, assg_prop)
self._check_result(res, ignore=[dm_exc.DM_EEXIST])
# Wait for DRBDmanage to have completed that action.
# (ie. they're now ready to receive the connection).
if self._is_external_node(nodename):
self._wait_for_node_assignment(
- dres, dvol, [],
+ d_res_name, d_vol_nr, [],
check_vol_deployed=False,
filter_props={
# must be deployed
})
else:
self._wait_for_node_assignment(
- dres, dvol, [nodename],
+ d_res_name, d_vol_nr, [nodename],
check_vol_deployed=True,
filter_props={
CS_DEPLOYED: dm_const.BOOL_TRUE,
def terminate_connection(self, volume, connector,
force=False, **kwargs):
- dres, dvol = self._resource_name_volnr_for_volume(
+ d_res_name, d_vol_nr = self._resource_name_volnr_for_volume(
volume, empty_ok=True)
- if not dres:
+ if not d_res_name:
return
nodename = connector["host"]
# if it has local storage, we keep it.
res, data = self.call_or_reconnect(
self.odm.list_assignments,
- [nodename], [dres], 0,
+ [nodename], [d_res_name], 0,
self.empty_list, self.empty_list)
self._check_result(res, ignore=[dm_exc.DM_ENOENT])
# remove until *all* volumes are detached
res = self.call_or_reconnect(self.odm.unassign,
- nodename, dres, force)
+ nodename, d_res_name, force)
self._check_result(res, ignore=[dm_exc.DM_ENOENT])
else:
# more than one assignment?