81adae619a
This flag will show playbook output from non-failing commands. -v is also added to /usr/bin/ansible, but not yet used. I also gutted some internals code dealing with 'invocations' which allowed the callback to know what module invoked it. This is not something 0.5 does or needed, so callbacks have been simplified.
108 lines
3.5 KiB
Python
Executable file
108 lines
3.5 KiB
Python
Executable file
#!/usr/bin/env python
|
|
# (C) 2012, Michael DeHaan, <michael.dehaan@gmail.com>
|
|
|
|
# This file is part of Ansible
|
|
#
|
|
# Ansible is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# Ansible is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
#######################################################
|
|
|
|
import sys
|
|
import getpass
|
|
|
|
import ansible.playbook
|
|
import ansible.constants as C
|
|
from ansible import errors
|
|
from ansible import callbacks
|
|
from ansible import utils
|
|
|
|
def main(args):
|
|
''' run ansible-playbook operations '''
|
|
|
|
# create parser for CLI options
|
|
usage = "%prog playbook.yml"
|
|
parser = utils.base_parser(constants=C, usage=usage, connect_opts=True, runas_opts=True)
|
|
parser.add_option('-e', '--extra-vars', dest="extra_vars", default=None,
|
|
help="set additional key=value variables from the CLI")
|
|
|
|
options, args = parser.parse_args(args)
|
|
|
|
if len(args) == 0:
|
|
parser.print_help(file=sys.stderr)
|
|
return 1
|
|
|
|
sshpass = None
|
|
sudopass = None
|
|
if options.ask_pass:
|
|
sshpass = getpass.getpass(prompt="SSH password: ")
|
|
if options.ask_sudo_pass:
|
|
sudopass = getpass.getpass(prompt="sudo password: ")
|
|
options.sudo = True
|
|
if options.sudo_user:
|
|
options.sudo = True
|
|
options.sudo_user = options.sudo_user or C.DEFAULT_SUDO_USER
|
|
extra_vars = utils.parse_kv(options.extra_vars)
|
|
|
|
# run all playbooks specified on the command line
|
|
for playbook in args:
|
|
|
|
stats = callbacks.AggregateStats()
|
|
playbook_cb = callbacks.PlaybookCallbacks(verbose=options.verbose)
|
|
runner_cb = callbacks.PlaybookRunnerCallbacks(stats, verbose=options.verbose)
|
|
|
|
pb = ansible.playbook.PlayBook(
|
|
playbook=playbook,
|
|
module_path=options.module_path,
|
|
host_list=options.inventory,
|
|
forks=options.forks,
|
|
verbose=options.verbose,
|
|
remote_user=options.remote_user,
|
|
remote_pass=sshpass,
|
|
callbacks=playbook_cb,
|
|
runner_callbacks=runner_cb,
|
|
stats=stats,
|
|
timeout=options.timeout,
|
|
transport=options.connection,
|
|
sudo=options.sudo,
|
|
sudo_user=options.sudo_user,
|
|
sudo_pass=sudopass,
|
|
extra_vars=extra_vars,
|
|
private_key_file=options.private_key_file
|
|
)
|
|
try:
|
|
|
|
pb.run()
|
|
hosts = sorted(pb.stats.processed.keys())
|
|
print callbacks.banner("PLAY RECAP")
|
|
for h in hosts:
|
|
t = pb.stats.summarize(h)
|
|
print "%-30s : ok=%4s changed=%4s unreachable=%4s failed=%4s " % (h,
|
|
t['ok'], t['changed'], t['unreachable'], t['failures']
|
|
)
|
|
print "\n"
|
|
|
|
except errors.AnsibleError, e:
|
|
print >>sys.stderr, "ERROR: %s" % e
|
|
return 1
|
|
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
try:
|
|
sys.exit(main(sys.argv[1:]))
|
|
except errors.AnsibleError, e:
|
|
print >>sys.stderr, "ERROR: %s" % e
|
|
sys.exit(1)
|
|
|