Allow to specify parameters for action
User can define parameters in action in the following format: action: parameters: - key: some_param default_value: value These parameters can be override using --parameter option. For example: ccp action run tempest --parameter tests-set=full Parameters can be used in config files using the following template: {{ action_parameters.some_key }} Change-Id: I433624acd210ade57fa4d506e988fb6521cc738d
This commit is contained in:
parent
64100ecfe2
commit
d717bde142
|
@ -31,6 +31,7 @@ class Action(object):
|
|||
self.command = kwargs.pop("command")
|
||||
self.dependencies = kwargs.pop("dependencies", ())
|
||||
self.files = kwargs.pop("files", ())
|
||||
self.parameters = kwargs.pop("parameters", ())
|
||||
self.restart_policy = kwargs.pop("restart_policy",
|
||||
RESTART_POLICY_NEVER)
|
||||
|
||||
|
@ -48,7 +49,11 @@ class Action(object):
|
|||
def validate(self):
|
||||
pass
|
||||
|
||||
def run(self):
|
||||
def run(self, user_parameters=None):
|
||||
if user_parameters:
|
||||
self.user_parameters = user_parameters
|
||||
else:
|
||||
self.user_parameters = ()
|
||||
self._create_configmap()
|
||||
self._create_action()
|
||||
return self.k8s_name
|
||||
|
@ -60,6 +65,7 @@ class Action(object):
|
|||
"config": CONF.configs._json(sort_keys=True),
|
||||
"workflow": self._get_workflow()
|
||||
}
|
||||
data["config"]["action_parameters"] = self._get_custom_parameters()
|
||||
data.update(self._get_file_templates())
|
||||
|
||||
cm = templates.serialize_configmap(self.k8s_name, data)
|
||||
|
@ -83,6 +89,21 @@ class Action(object):
|
|||
})
|
||||
return json.dumps({"workflow": wf})
|
||||
|
||||
def _get_custom_parameters(self):
|
||||
parameters = {}
|
||||
# add defaults
|
||||
for param in self.parameters:
|
||||
parameters[param["key"]] = param["default_value"]
|
||||
# process user params
|
||||
for param in self.user_parameters:
|
||||
key, sep, value = param.partition("=")
|
||||
if key in parameters:
|
||||
parameters[key] = value
|
||||
else:
|
||||
raise Exception("Parameter %s is not allowed for %s action",
|
||||
key, self.name)
|
||||
return parameters
|
||||
|
||||
def _get_file_templates(self):
|
||||
# TODO(sreshetniak): use imports and add macros CM
|
||||
data = {}
|
||||
|
@ -277,7 +298,7 @@ def get_action(action_name):
|
|||
action_name))
|
||||
|
||||
|
||||
def run_action(action_name):
|
||||
def run_action(action_name, user_parameters=None):
|
||||
"""Run action.
|
||||
|
||||
:returns: str -- action name
|
||||
|
@ -285,7 +306,7 @@ def run_action(action_name):
|
|||
"""
|
||||
action = get_action(action_name)
|
||||
action.validate()
|
||||
return action.run()
|
||||
return action.run(user_parameters)
|
||||
|
||||
|
||||
def list_action_status(action_type=None):
|
||||
|
|
|
@ -346,12 +346,17 @@ class ActionRun(BaseCommand, show.ShowOne):
|
|||
parser = super(ActionRun, self).get_parser(*args, **kwargs)
|
||||
parser.add_argument("action",
|
||||
help="Run action")
|
||||
parser.add_argument("-p", "--parameter",
|
||||
action="append",
|
||||
help="Parameters for action in format param=value."
|
||||
" Option can be repetable.")
|
||||
return parser
|
||||
|
||||
def take_action(self, parsed_args):
|
||||
self._fetch_repos()
|
||||
config.load_component_defaults()
|
||||
action_name = action.run_action(parsed_args.action)
|
||||
action_name = action.run_action(parsed_args.action,
|
||||
parsed_args.parameter)
|
||||
action_obj = action.get_action_status_by_name(action_name)
|
||||
return (
|
||||
ACTION_FIELDS,
|
||||
|
|
Loading…
Reference in New Issue