def prepare_set_args(argv): if argv.count("setoptions") > 1: raise CmdLineInputError( "Keyword 'setoptions' may be mentioned at most once" ) resource_set_args, constraint_options_args = ( parse_args.split_list(argv, "setoptions") if "setoptions" in argv else (argv, []) ) if not resource_set_args: raise CmdLineInputError() resource_set_list = prepare_resource_sets(resource_set_args) if( not resource_set_list or not all(resource_set["ids"] for resource_set in resource_set_list) ): raise CmdLineInputError() constraint_options = {} if constraint_options_args: constraint_options = parse_args.prepare_options(constraint_options_args) return (resource_set_list, constraint_options)
def quorum_device_add_cmd(lib, argv, modificators): # we expect "model" keyword once, followed by the actual model value options_lists = parse_args.split_list(argv, "model") if len(options_lists) != 2: raise CmdLineInputError() # check if model value was specified if not options_lists[1] or "=" in options_lists[1][0]: raise CmdLineInputError() generic_options = parse_args.prepare_options(options_lists[0]) model = options_lists[1][0] model_options = parse_args.prepare_options(options_lists[1][1:]) if "model" in generic_options: raise CmdLineInputError( "Model cannot be specified in generic options" ) lib.quorum.add_device( model, model_options, generic_options, force_model=modificators["force"], force_options=modificators["force"], skip_offline_nodes=modificators["skip_offline_nodes"] )
def prepare_resource_sets(cmdline_args): return [ { "ids": [id for id in args if "=" not in id], "options": parse_args.prepare_options( [opt for opt in args if "=" in opt] ), } for args in parse_args.split_list(cmdline_args, "set") ]
def quorum_device_update_cmd(lib, argv, modificators): # we expect "model" keyword once options_lists = parse_args.split_list(argv, "model") if len(options_lists) == 1: generic_options = parse_args.prepare_options(options_lists[0]) model_options = dict() elif len(options_lists) == 2: generic_options = parse_args.prepare_options(options_lists[0]) model_options = parse_args.prepare_options(options_lists[1]) else: raise CmdLineInputError() if "model" in generic_options: raise CmdLineInputError("Model cannot be specified in generic options") lib.quorum.update_device( model_options, generic_options, force_options=modificators["force"], skip_offline_nodes=modificators["skip_offline_nodes"])
def quorum_device_update_cmd(lib, argv, modificators): # we expect "model" keyword once options_lists = parse_args.split_list(argv, "model") if len(options_lists) == 1: generic_options = parse_args.prepare_options(options_lists[0]) model_options = dict() elif len(options_lists) == 2: generic_options = parse_args.prepare_options(options_lists[0]) model_options = parse_args.prepare_options(options_lists[1]) else: raise CmdLineInputError() if "model" in generic_options: raise CmdLineInputError( "Model cannot be specified in generic options" ) lib.quorum.update_device( model_options, generic_options, force_options=modificators["force"], skip_offline_nodes=modificators["skip_offline_nodes"] )
def test_behave_like_string_split_when_the_separator_edges(self): self.assertEqual([[], ['a', 'b'], ['c', 'd'], []], split_list(['|', 'a', 'b', '|', 'c', 'd', "|"], '|'))
def test_returns_splited_list(self): self.assertEqual([['a', 'b'], ['c', 'd']], split_list(['a', 'b', '|', 'c', 'd'], '|'))
def test_returns_list_with_original_when_separator_not_in_original(self): self.assertEqual([['a', 'b']], split_list(['a', 'b'], 'c'))
def test_behave_like_string_split_when_the_separator_edges(self): self.assertEqual( [[], ['a', 'b'], ['c', 'd'], []], split_list(['|','a', 'b', '|', 'c', 'd', "|"], '|') )
def test_returns_splited_list(self): self.assertEqual( [['a', 'b'], ['c', 'd']], split_list(['a', 'b', '|', 'c', 'd'], '|') )
def test_behave_like_string_split_when_the_separator_edges(self): self.assertEqual( [[], ["a", "b"], ["c", "d"], []], split_list(["|", "a", "b", "|", "c", "d", "|"], "|"), )
def test_returns_splited_list(self): self.assertEqual([["a", "b"], ["c", "d"]], split_list(["a", "b", "|", "c", "d"], "|"))
def test_returns_list_with_original_when_separator_not_in_original(self): self.assertEqual([["a", "b"]], split_list(["a", "b"], "c"))