Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix variable injection in pause module args. Closes #1209 #1220

Merged
merged 1 commit into from
Oct 4, 2012
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
57 changes: 28 additions & 29 deletions lib/ansible/runner/action_plugins/pause.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
from ansible.callbacks import vv
from ansible.errors import AnsibleError as ae
from ansible.runner.return_data import ReturnData
from ansible.utils import getch
from ansible.utils import getch, template, parse_kv
from termios import tcflush, TCIFLUSH
import datetime
import sys
Expand Down Expand Up @@ -48,42 +48,41 @@ def __init__(self, runner):

def run(self, conn, tmp, module_name, module_args, inject):
''' run the pause actionmodule '''
args = self.runner.module_args
hosts = ', '.join(map(lambda x: x[1], self.runner.host_set))
args = parse_kv(template(self.runner.basedir, module_args, inject))

(self.pause_type, sep, pause_params) = args.partition('=')

if self.pause_type == '':
self.pause_type = 'prompt'
elif not self.pause_type in self.PAUSE_TYPES:
raise ae("invalid parameter for pause, '%s'. must be one of: %s" % \
(self.pause_type, ", ".join(self.PAUSE_TYPES)))

# error checking
if self.pause_type in ['minutes', 'seconds']:
# Are 'minutes' or 'seconds' keys that exist in 'args'?
if 'minutes' in args or 'seconds' in args:
try:
int(pause_params)
except ValueError:
raise ae("value given to %s parameter invalid: '%s', must be an integer" % \
self.pause_type, pause_params)

# The time() command operates in seconds so we need to
# recalculate for minutes=X values.
if self.pause_type == 'minutes':
self.seconds = int(pause_params) * 60
elif self.pause_type == 'seconds':
self.seconds = int(pause_params)
self.duration_unit = 'seconds'
if 'minutes' in args:
self.pause_type = 'minutes'
# The time() command operates in seconds so we need to
# recalculate for minutes=X values.
self.seconds = int(args['minutes']) * 60
else:
self.pause_type = 'seconds'
self.seconds = int(args['seconds'])
self.duration_unit = 'seconds'
except ValueError, e:
raise ae("non-integer value given for prompt duration:\n%s" % str(e))
# Is 'prompt' a key in 'args'?
elif 'prompt' in args:
self.pause_type = 'prompt'
self.prompt = "[%s]\n%s: " % (hosts, args['prompt'])
# Is 'args' empty, then this is the default prompted pause
elif len(args.keys()) == 0:
self.pause_type = 'prompt'
self.prompt = "[%s]\nPress enter to continue: " % hosts
# I have no idea what you're trying to do. But it's so wrong.
else:
# if no args are given we pause with a prompt
if pause_params == '':
self.prompt = "[%s]\nPress enter to continue: " % hosts
else:
self.prompt = "[%s]\n%s: " % (hosts, pause_params)
raise ae("invalid pause type given. must be one of: %s" % \
", ".join(self.PAUSE_TYPES))

vv("created 'pause' ActionModule: pause_type=%s, duration_unit=%s, calculated_seconds=%s, prompt=%s" % \
(self.pause_type, self.duration_unit, self.seconds, self.prompt))

########################################################################
# Begin the hard work!
try:
self._start()
if not self.pause_type == 'prompt':
Expand Down