Merge "Allow to specify parameters for action"

This commit is contained in:
Jenkins 2017-02-27 12:56:59 +00:00 committed by Gerrit Code Review
commit a67f526fcb
2 changed files with 30 additions and 4 deletions

View File

@ -33,6 +33,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)
@ -50,7 +51,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
@ -63,6 +68,7 @@ class Action(object):
"nodes-config": utils.get_nodes_config(CONF.nodes),
"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)
@ -86,6 +92,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):
exports_map = utils.get_repositories_exports()
exports_template = jinja_utils.generate_jinja_imports(exports_map)
@ -347,7 +368,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
@ -355,7 +376,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):

View File

@ -341,12 +341,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 get_status_for_single_action(action_obj)