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

Local actions, they're like aliases for actions with localhost #911

Closed
wants to merge 1 commit into from
Closed
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
28 changes: 21 additions & 7 deletions lib/ansible/playbook/task.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,20 +18,22 @@
from ansible import errors
from ansible import utils


class Task(object):

__slots__ = [
'name', 'action', 'only_if', 'async_seconds', 'async_poll_interval',
'notify', 'module_name', 'module_args', 'module_vars',
'play', 'notified_by', 'tags', 'register', 'with_items',
'delegate_to', 'first_available_file', 'ignore_errors'
'delegate_to', 'first_available_file', 'ignore_errors',
'local_action'
]

# to prevent typos and such
VALID_KEYS = [
'name', 'action', 'only_if', 'async', 'poll', 'notify', 'with_items',
'first_available_file', 'include', 'tags', 'register', 'ignore_errors',
'delegate_to'
'delegate_to', 'local_action'
]

def __init__(self, play, ds, module_vars=None):
Expand All @@ -45,10 +47,23 @@ def __init__(self, play, ds, module_vars=None):
self.play = play

# load various attributes
self.name = ds.get('name', None)
self.action = ds.get('action', '')
self.tags = [ 'all' ]
self.register = ds.get('register', None)
self.name = ds.get('name', None)
self.tags = [ 'all' ]
self.register = ds.get('register', None)

# Both are defined
if ('action' in ds) and ('local_action' in ds):
raise errors.AnsibleError("the 'action' and 'local_action' attributes can not be used together")
# Both are NOT defined
elif (not 'action' in ds) and (not 'local_action' in ds):
raise errors.AnsibleError("task missing an 'action' attribute")
# Only one of them is defined
elif 'local_action' in ds:
self.action = ds.get('local_action', '')
self.delegate_to = '127.0.0.1'
else:
self.action = ds.get('action', '')
self.delegate_to = ds.get('delegate_to', None)

# notified by is used by Playbook code to flag which hosts
# need to run a notifier
Expand All @@ -65,7 +80,6 @@ def __init__(self, play, ds, module_vars=None):
self.notify = ds.get('notify', [])
self.first_available_file = ds.get('first_available_file', None)
self.with_items = ds.get('with_items', None)
self.delegate_to = ds.get('delegate_to', None)

self.ignore_errors = ds.get('ignore_errors', False)

Expand Down