diff options
author | Tim Bielawa <tbielawa@redhat.com> | 2012-03-12 23:11:54 -0400 |
---|---|---|
committer | Tim Bielawa <tbielawa@redhat.com> | 2012-03-12 23:11:54 -0400 |
commit | dfd2c6dce3db5c0701f41804fbb664d9a3ddd0aa (patch) | |
tree | 2e859e9a9110882d39dfc52314b60d7d91e00d3f | |
parent | ce85222fa6d7a5a4cc4c331b512df70755567499 (diff) | |
download | ansible-dfd2c6dce3db5c0701f41804fbb664d9a3ddd0aa.tar.gz |
Implement friendlier error handling.
Generic AnsibleError exception + host inventory missing exception.
First shot at catching these in a generic way in bin/ansible*.
-rwxr-xr-x | bin/ansible | 13 | ||||
-rwxr-xr-x | bin/ansible-playbook | 11 | ||||
-rw-r--r-- | lib/ansible/errors.py | 37 | ||||
-rwxr-xr-x | lib/ansible/runner.py | 6 |
4 files changed, 57 insertions, 10 deletions
diff --git a/bin/ansible b/bin/ansible index 9c90b3a79a..1704a45869 100755 --- a/bin/ansible +++ b/bin/ansible @@ -34,6 +34,7 @@ import ansible.runner import ansible.playbook import ansible.constants as C from ansible.utils import * +from ansible.errors import * ######################################################## @@ -193,7 +194,11 @@ class Cli(object): if __name__ == '__main__': cli = Cli() (options, args) = cli.parse() - (runner, results) = cli.run(options, args) - cli.output(runner, results, options, args) - - + try: + (runner, results) = cli.run(options, args) + except AnsibleError as e: + # Generic handler for ansible specific errors + print e + sys.exit(1) + else: + cli.output(runner, results, options, args) diff --git a/bin/ansible-playbook b/bin/ansible-playbook index c91a17bac5..6e2a65b9ef 100755 --- a/bin/ansible-playbook +++ b/bin/ansible-playbook @@ -96,15 +96,14 @@ def main(args): remote_pass=sshpass, callbacks=PlaybookCallbacks() ) - pb.run() + try: + pb.run() + except AnsibleError as e: + print e + return 1 return 0 if __name__ == "__main__": sys.exit(main(sys.argv[1:])) - - - - - diff --git a/lib/ansible/errors.py b/lib/ansible/errors.py new file mode 100644 index 0000000000..e055c09345 --- /dev/null +++ b/lib/ansible/errors.py @@ -0,0 +1,37 @@ +# (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/>. + + +class AnsibleError(Exception): + """ + The base Ansible exception from which all others should subclass. + """ + pass + + +class AnsibleInventoryNotFoundError(AnsibleError): + """ + Exception raised when the default or provided host inventory file + does not exist. + """ + def __init__(self, inventory): + self.inventory = inventory + self.msg = "Unable to continue, inventory file not found: %s" %\ + self.inventory + + def __str__(self): + return self.msg diff --git a/lib/ansible/runner.py b/lib/ansible/runner.py index 3b44b51bf8..f0cabc3058 100755 --- a/lib/ansible/runner.py +++ b/lib/ansible/runner.py @@ -39,6 +39,8 @@ import random import jinja2 import time from ansible.utils import * +from ansible.errors import AnsibleInventoryNotFoundError + ################################################ @@ -127,6 +129,10 @@ class Runner(object): return (host_list, {}) host_list = os.path.expanduser(host_list) + + if not os.path.exists(host_list): + raise AnsibleInventoryNotFoundError(host_list) + lines = file(host_list).read().split("\n") groups = {} groups['ungrouped'] = [] |