Merge "swift-ring-builder --yes option"
This commit is contained in:
commit
c40de1cbc8
@ -97,6 +97,11 @@ Nerd explanation:
|
|||||||
.PD
|
.PD
|
||||||
|
|
||||||
|
|
||||||
|
.SH OPTIONS
|
||||||
|
.TP
|
||||||
|
.I "\-y, \-\-yes"
|
||||||
|
Assume a yes response to all questions
|
||||||
|
|
||||||
.SH COMMANDS
|
.SH COMMANDS
|
||||||
|
|
||||||
.PD 0
|
.PD 0
|
||||||
|
@ -181,7 +181,7 @@ def _parse_add_values(argvish):
|
|||||||
return parsed_devs
|
return parsed_devs
|
||||||
|
|
||||||
|
|
||||||
def _set_weight_values(devs, weight):
|
def _set_weight_values(devs, weight, opts):
|
||||||
if not devs:
|
if not devs:
|
||||||
print('Search value matched 0 devices.\n'
|
print('Search value matched 0 devices.\n'
|
||||||
'The on-disk ring builder is unchanged.')
|
'The on-disk ring builder is unchanged.')
|
||||||
@ -191,8 +191,9 @@ def _set_weight_values(devs, weight):
|
|||||||
print('Matched more than one device:')
|
print('Matched more than one device:')
|
||||||
for dev in devs:
|
for dev in devs:
|
||||||
print(' %s' % format_device(dev))
|
print(' %s' % format_device(dev))
|
||||||
if input('Are you sure you want to update the weight for '
|
if not opts.yes and \
|
||||||
'these %s devices? (y/N) ' % len(devs)) != 'y':
|
input('Are you sure you want to update the weight for '
|
||||||
|
'these %s devices? (y/N) ' % len(devs)) != 'y':
|
||||||
print('Aborting device modifications')
|
print('Aborting device modifications')
|
||||||
exit(EXIT_ERROR)
|
exit(EXIT_ERROR)
|
||||||
|
|
||||||
@ -222,7 +223,7 @@ def _parse_set_weight_values(argvish):
|
|||||||
devs.extend(builder.search_devs(
|
devs.extend(builder.search_devs(
|
||||||
parse_search_value(devstr)) or [])
|
parse_search_value(devstr)) or [])
|
||||||
weight = float(weightstr)
|
weight = float(weightstr)
|
||||||
_set_weight_values(devs, weight)
|
_set_weight_values(devs, weight, opts)
|
||||||
else:
|
else:
|
||||||
if len(args) != 1:
|
if len(args) != 1:
|
||||||
print(Commands.set_weight.__doc__.strip())
|
print(Commands.set_weight.__doc__.strip())
|
||||||
@ -231,13 +232,13 @@ def _parse_set_weight_values(argvish):
|
|||||||
devs.extend(builder.search_devs(
|
devs.extend(builder.search_devs(
|
||||||
parse_search_values_from_opts(opts)) or [])
|
parse_search_values_from_opts(opts)) or [])
|
||||||
weight = float(args[0])
|
weight = float(args[0])
|
||||||
_set_weight_values(devs, weight)
|
_set_weight_values(devs, weight, opts)
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
print(e)
|
print(e)
|
||||||
exit(EXIT_ERROR)
|
exit(EXIT_ERROR)
|
||||||
|
|
||||||
|
|
||||||
def _set_info_values(devs, change):
|
def _set_info_values(devs, change, opts):
|
||||||
|
|
||||||
if not devs:
|
if not devs:
|
||||||
print("Search value matched 0 devices.\n"
|
print("Search value matched 0 devices.\n"
|
||||||
@ -248,8 +249,9 @@ def _set_info_values(devs, change):
|
|||||||
print('Matched more than one device:')
|
print('Matched more than one device:')
|
||||||
for dev in devs:
|
for dev in devs:
|
||||||
print(' %s' % format_device(dev))
|
print(' %s' % format_device(dev))
|
||||||
if input('Are you sure you want to update the info for '
|
if not opts.yes and \
|
||||||
'these %s devices? (y/N) ' % len(devs)) != 'y':
|
input('Are you sure you want to update the info for '
|
||||||
|
'these %s devices? (y/N) ' % len(devs)) != 'y':
|
||||||
print('Aborting device modifications')
|
print('Aborting device modifications')
|
||||||
exit(EXIT_ERROR)
|
exit(EXIT_ERROR)
|
||||||
|
|
||||||
@ -354,11 +356,11 @@ def _parse_set_info_values(argvish):
|
|||||||
if change_value or not change:
|
if change_value or not change:
|
||||||
raise ValueError('Invalid set info change value: %s' %
|
raise ValueError('Invalid set info change value: %s' %
|
||||||
repr(argvish[1]))
|
repr(argvish[1]))
|
||||||
_set_info_values(devs, change)
|
_set_info_values(devs, change, opts)
|
||||||
else:
|
else:
|
||||||
devs = builder.search_devs(parse_search_values_from_opts(opts))
|
devs = builder.search_devs(parse_search_values_from_opts(opts))
|
||||||
change = parse_change_values_from_opts(opts)
|
change = parse_change_values_from_opts(opts)
|
||||||
_set_info_values(devs, change)
|
_set_info_values(devs, change, opts)
|
||||||
|
|
||||||
|
|
||||||
def _parse_remove_values(argvish):
|
def _parse_remove_values(argvish):
|
||||||
@ -382,7 +384,7 @@ def _parse_remove_values(argvish):
|
|||||||
devs.extend(builder.search_devs(
|
devs.extend(builder.search_devs(
|
||||||
parse_search_values_from_opts(opts)))
|
parse_search_values_from_opts(opts)))
|
||||||
|
|
||||||
return devs
|
return (devs, opts)
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
print(e)
|
print(e)
|
||||||
exit(EXIT_ERROR)
|
exit(EXIT_ERROR)
|
||||||
@ -641,6 +643,7 @@ swift-ring-builder <builder_file> add
|
|||||||
"""
|
"""
|
||||||
swift-ring-builder <builder_file> set_weight <search-value> <weight>
|
swift-ring-builder <builder_file> set_weight <search-value> <weight>
|
||||||
[<search-value> <weight] ...
|
[<search-value> <weight] ...
|
||||||
|
[--yes]
|
||||||
|
|
||||||
or
|
or
|
||||||
|
|
||||||
@ -648,6 +651,7 @@ swift-ring-builder <builder_file> set_weight
|
|||||||
--region <region> --zone <zone> --ip <ip or hostname> --port <port>
|
--region <region> --zone <zone> --ip <ip or hostname> --port <port>
|
||||||
--replication-ip <r_ip or r_hostname> --replication-port <r_port>
|
--replication-ip <r_ip or r_hostname> --replication-port <r_port>
|
||||||
--device <device_name> --meta <meta> --weight <weight>
|
--device <device_name> --meta <meta> --weight <weight>
|
||||||
|
[--yes]
|
||||||
|
|
||||||
Where <r_ip>, <r_hostname> and <r_port> are replication ip, hostname
|
Where <r_ip>, <r_hostname> and <r_port> are replication ip, hostname
|
||||||
and port.
|
and port.
|
||||||
@ -656,6 +660,8 @@ swift-ring-builder <builder_file> set_weight
|
|||||||
Resets the devices' weights. No partitions will be reassigned to or from
|
Resets the devices' weights. No partitions will be reassigned to or from
|
||||||
the device until after running 'rebalance'. This is so you can make
|
the device until after running 'rebalance'. This is so you can make
|
||||||
multiple device changes and rebalance them all just once.
|
multiple device changes and rebalance them all just once.
|
||||||
|
|
||||||
|
Option --yes assume a yes response to all questions.
|
||||||
"""
|
"""
|
||||||
# if len(argv) < 5 or len(argv) % 2 != 1:
|
# if len(argv) < 5 or len(argv) % 2 != 1:
|
||||||
if len(argv) < 5:
|
if len(argv) < 5:
|
||||||
@ -675,6 +681,7 @@ swift-ring-builder <builder_file> set_weight
|
|||||||
swift-ring-builder <builder_file> set_info
|
swift-ring-builder <builder_file> set_info
|
||||||
<search-value> <ip>:<port>[R<r_ip>:<r_port>]/<device_name>_<meta>
|
<search-value> <ip>:<port>[R<r_ip>:<r_port>]/<device_name>_<meta>
|
||||||
[<search-value> <ip>:<port>[R<r_ip>:<r_port>]/<device_name>_<meta>] ...
|
[<search-value> <ip>:<port>[R<r_ip>:<r_port>]/<device_name>_<meta>] ...
|
||||||
|
[--yes]
|
||||||
|
|
||||||
or
|
or
|
||||||
|
|
||||||
@ -687,6 +694,7 @@ swift-ring-builder <builder_file> set_info
|
|||||||
--change-replication-port <r_port>
|
--change-replication-port <r_port>
|
||||||
--change-device <device_name>
|
--change-device <device_name>
|
||||||
--change-meta <meta>
|
--change-meta <meta>
|
||||||
|
[--yes]
|
||||||
|
|
||||||
Where <r_ip>, <r_hostname> and <r_port> are replication ip, hostname
|
Where <r_ip>, <r_hostname> and <r_port> are replication ip, hostname
|
||||||
and port.
|
and port.
|
||||||
@ -699,6 +707,8 @@ swift-ring-builder <builder_file> set_info
|
|||||||
<ip>:<port>/<device_name>_<meta> parameter; just give what you
|
<ip>:<port>/<device_name>_<meta> parameter; just give what you
|
||||||
want to change. For instance set_info d74 _"snet: 5.6.7.8" would
|
want to change. For instance set_info d74 _"snet: 5.6.7.8" would
|
||||||
just update the meta data for device id 74.
|
just update the meta data for device id 74.
|
||||||
|
|
||||||
|
Option --yes assume a yes response to all questions.
|
||||||
"""
|
"""
|
||||||
if len(argv) < 5:
|
if len(argv) < 5:
|
||||||
print(Commands.set_info.__doc__.strip())
|
print(Commands.set_info.__doc__.strip())
|
||||||
@ -719,6 +729,7 @@ swift-ring-builder <builder_file> set_info
|
|||||||
def remove():
|
def remove():
|
||||||
"""
|
"""
|
||||||
swift-ring-builder <builder_file> remove <search-value> [search-value ...]
|
swift-ring-builder <builder_file> remove <search-value> [search-value ...]
|
||||||
|
[--yes]
|
||||||
|
|
||||||
or
|
or
|
||||||
|
|
||||||
@ -726,6 +737,7 @@ swift-ring-builder <builder_file> remove
|
|||||||
--region <region> --zone <zone> --ip <ip or hostname> --port <port>
|
--region <region> --zone <zone> --ip <ip or hostname> --port <port>
|
||||||
--replication-ip <r_ip or r_hostname> --replication-port <r_port>
|
--replication-ip <r_ip or r_hostname> --replication-port <r_port>
|
||||||
--device <device_name> --meta <meta> --weight <weight>
|
--device <device_name> --meta <meta> --weight <weight>
|
||||||
|
[--yes]
|
||||||
|
|
||||||
Where <r_ip>, <r_hostname> and <r_port> are replication ip, hostname
|
Where <r_ip>, <r_hostname> and <r_port> are replication ip, hostname
|
||||||
and port.
|
and port.
|
||||||
@ -737,6 +749,8 @@ swift-ring-builder <builder_file> remove
|
|||||||
remove command. This will not take effect until after running 'rebalance'.
|
remove command. This will not take effect until after running 'rebalance'.
|
||||||
This is so you can make multiple device changes and rebalance them all just
|
This is so you can make multiple device changes and rebalance them all just
|
||||||
once.
|
once.
|
||||||
|
|
||||||
|
Option --yes assume a yes response to all questions.
|
||||||
"""
|
"""
|
||||||
if len(argv) < 4:
|
if len(argv) < 4:
|
||||||
print(Commands.remove.__doc__.strip())
|
print(Commands.remove.__doc__.strip())
|
||||||
@ -744,7 +758,7 @@ swift-ring-builder <builder_file> remove
|
|||||||
print(parse_search_value.__doc__.strip())
|
print(parse_search_value.__doc__.strip())
|
||||||
exit(EXIT_ERROR)
|
exit(EXIT_ERROR)
|
||||||
|
|
||||||
devs = _parse_remove_values(argv[3:])
|
devs, opts = _parse_remove_values(argv[3:])
|
||||||
|
|
||||||
if not devs:
|
if not devs:
|
||||||
print('Search value matched 0 devices.\n'
|
print('Search value matched 0 devices.\n'
|
||||||
@ -755,8 +769,9 @@ swift-ring-builder <builder_file> remove
|
|||||||
print('Matched more than one device:')
|
print('Matched more than one device:')
|
||||||
for dev in devs:
|
for dev in devs:
|
||||||
print(' %s' % format_device(dev))
|
print(' %s' % format_device(dev))
|
||||||
if input('Are you sure you want to remove these %s '
|
if not opts.yes and \
|
||||||
'devices? (y/N) ' % len(devs)) != 'y':
|
input('Are you sure you want to remove these %s '
|
||||||
|
'devices? (y/N) ' % len(devs)) != 'y':
|
||||||
print('Aborting device removals')
|
print('Aborting device removals')
|
||||||
exit(EXIT_ERROR)
|
exit(EXIT_ERROR)
|
||||||
|
|
||||||
|
@ -586,6 +586,8 @@ def parse_args(argvish):
|
|||||||
help="Device name (e.g. md0, sdb1) for change")
|
help="Device name (e.g. md0, sdb1) for change")
|
||||||
parser.add_option('-M', '--change-meta', type="string", default="",
|
parser.add_option('-M', '--change-meta', type="string", default="",
|
||||||
help="Extra device info (just a string) for change")
|
help="Extra device info (just a string) for change")
|
||||||
|
parser.add_option('-y', '--yes', default=False, action="store_true",
|
||||||
|
help="Assume a yes response to all questions")
|
||||||
return parser.parse_args(argvish)
|
return parser.parse_args(argvish)
|
||||||
|
|
||||||
|
|
||||||
|
@ -233,7 +233,7 @@ class TestCommands(unittest.TestCase, RunSwiftRingBuilderMixin):
|
|||||||
# Test no devices
|
# Test no devices
|
||||||
# _set_weight_values doesn't take argv-like arguments
|
# _set_weight_values doesn't take argv-like arguments
|
||||||
self.assertSystemExit(
|
self.assertSystemExit(
|
||||||
EXIT_ERROR, ringbuilder._set_weight_values, [], 100)
|
EXIT_ERROR, ringbuilder._set_weight_values, [], 100, {})
|
||||||
|
|
||||||
def test_parse_set_weight_values_number_of_arguments(self):
|
def test_parse_set_weight_values_number_of_arguments(self):
|
||||||
# Test Number of arguments abnormal
|
# Test Number of arguments abnormal
|
||||||
@ -249,7 +249,7 @@ class TestCommands(unittest.TestCase, RunSwiftRingBuilderMixin):
|
|||||||
# Test no devices
|
# Test no devices
|
||||||
# _set_info_values doesn't take argv-like arguments
|
# _set_info_values doesn't take argv-like arguments
|
||||||
self.assertSystemExit(
|
self.assertSystemExit(
|
||||||
EXIT_ERROR, ringbuilder._set_info_values, [], 100)
|
EXIT_ERROR, ringbuilder._set_info_values, [], 100, {})
|
||||||
|
|
||||||
def test_parse_set_info_values_number_of_arguments(self):
|
def test_parse_set_info_values_number_of_arguments(self):
|
||||||
# Test Number of arguments abnormal
|
# Test Number of arguments abnormal
|
||||||
|
Loading…
Reference in New Issue
Block a user