mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Add a "-o" override option so hosts not in a playbook can still be managed by a playbook.
This commit is contained in:
parent
b213437bfa
commit
9df612f007
3 changed files with 39 additions and 21 deletions
|
@ -50,6 +50,8 @@ def main(args):
|
||||||
help="ask for SSH password")
|
help="ask for SSH password")
|
||||||
parser.add_option("-M", "--module-path", dest="module_path",
|
parser.add_option("-M", "--module-path", dest="module_path",
|
||||||
help="path to module library", default=C.DEFAULT_MODULE_PATH)
|
help="path to module library", default=C.DEFAULT_MODULE_PATH)
|
||||||
|
parser.add_option('-o', '--override-hosts', dest="override_hosts", default=None,
|
||||||
|
help="run playbook against these hosts regardless of inventory settings")
|
||||||
parser.add_option('-T', '--timeout', default=C.DEFAULT_TIMEOUT, type='int',
|
parser.add_option('-T', '--timeout', default=C.DEFAULT_TIMEOUT, type='int',
|
||||||
dest='timeout', help="set the SSH timeout in seconds")
|
dest='timeout', help="set the SSH timeout in seconds")
|
||||||
|
|
||||||
|
@ -62,6 +64,9 @@ def main(args):
|
||||||
sshpass = None
|
sshpass = None
|
||||||
if options.ask_pass:
|
if options.ask_pass:
|
||||||
sshpass = getpass.getpass(prompt="SSH password: ")
|
sshpass = getpass.getpass(prompt="SSH password: ")
|
||||||
|
override_hosts = None
|
||||||
|
if options.override_hosts:
|
||||||
|
override_hosts = options.override_hosts.split(",")
|
||||||
|
|
||||||
# run all playbooks specified on the command line
|
# run all playbooks specified on the command line
|
||||||
for playbook in args:
|
for playbook in args:
|
||||||
|
@ -73,7 +78,8 @@ def main(args):
|
||||||
verbose=True,
|
verbose=True,
|
||||||
remote_pass=sshpass,
|
remote_pass=sshpass,
|
||||||
callbacks=callbacks.PlaybookCallbacks(),
|
callbacks=callbacks.PlaybookCallbacks(),
|
||||||
timeout=options.timeout
|
timeout=options.timeout,
|
||||||
|
override_hosts=override_hosts,
|
||||||
)
|
)
|
||||||
try:
|
try:
|
||||||
results = pb.run()
|
results = pb.run()
|
||||||
|
|
|
@ -54,6 +54,7 @@ class PlayBook(object):
|
||||||
timeout = C.DEFAULT_TIMEOUT,
|
timeout = C.DEFAULT_TIMEOUT,
|
||||||
remote_user = C.DEFAULT_REMOTE_USER,
|
remote_user = C.DEFAULT_REMOTE_USER,
|
||||||
remote_pass = C.DEFAULT_REMOTE_PASS,
|
remote_pass = C.DEFAULT_REMOTE_PASS,
|
||||||
|
override_hosts = None,
|
||||||
verbose = False,
|
verbose = False,
|
||||||
callbacks = None):
|
callbacks = None):
|
||||||
|
|
||||||
|
@ -65,6 +66,7 @@ class PlayBook(object):
|
||||||
self.remote_pass = remote_pass
|
self.remote_pass = remote_pass
|
||||||
self.verbose = verbose
|
self.verbose = verbose
|
||||||
self.callbacks = callbacks
|
self.callbacks = callbacks
|
||||||
|
self.override_hosts = override_hosts
|
||||||
self.callbacks.set_playbook(self)
|
self.callbacks.set_playbook(self)
|
||||||
|
|
||||||
# store the list of changes/invocations/failure counts
|
# store the list of changes/invocations/failure counts
|
||||||
|
@ -83,7 +85,8 @@ class PlayBook(object):
|
||||||
self.basedir = os.path.dirname(playbook)
|
self.basedir = os.path.dirname(playbook)
|
||||||
self.playbook = self._parse_playbook(playbook)
|
self.playbook = self._parse_playbook(playbook)
|
||||||
|
|
||||||
self.host_list, self.groups = ansible.runner.Runner.parse_hosts(host_list)
|
self.host_list, self.groups = ansible.runner.Runner.parse_hosts(
|
||||||
|
host_list, override_hosts=self.override_hosts)
|
||||||
|
|
||||||
# *****************************************************
|
# *****************************************************
|
||||||
|
|
||||||
|
@ -499,7 +502,11 @@ class PlayBook(object):
|
||||||
''' run a list of tasks for a given pattern, in order '''
|
''' run a list of tasks for a given pattern, in order '''
|
||||||
|
|
||||||
# get configuration information about the pattern
|
# get configuration information about the pattern
|
||||||
pattern = pg['hosts']
|
pattern = pg.get('hosts',None)
|
||||||
|
if self.override_hosts:
|
||||||
|
pattern = 'all'
|
||||||
|
if pattern is None:
|
||||||
|
raise errors.AnsibleError('hosts declaration is required')
|
||||||
|
|
||||||
vars = self._get_vars(pg, self.basedir)
|
vars = self._get_vars(pg, self.basedir)
|
||||||
vars_files = pg.get('vars_files', {})
|
vars_files = pg.get('vars_files', {})
|
||||||
|
|
|
@ -149,9 +149,14 @@ class Runner(object):
|
||||||
# *****************************************************
|
# *****************************************************
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def parse_hosts(cls, host_list):
|
def parse_hosts(cls, host_list, override_hosts=None):
|
||||||
''' parse the host inventory file, returns (hosts, groups) '''
|
''' parse the host inventory file, returns (hosts, groups) '''
|
||||||
|
|
||||||
|
if override_hosts is not None:
|
||||||
|
if type(override_hosts) != list:
|
||||||
|
raise errors.AnsibleError("override hosts must be a list")
|
||||||
|
return (override_hosts, dict(ungrouped=override_hosts))
|
||||||
|
|
||||||
if type(host_list) == list:
|
if type(host_list) == list:
|
||||||
raise Exception("function can only be called on inventory files")
|
raise Exception("function can only be called on inventory files")
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue