summaryrefslogtreecommitdiff
path: root/bin/ansible-galaxy
diff options
context:
space:
mode:
authorWill Thames <will@thames.id.au>2014-08-19 19:54:48 +1000
committerMichael DeHaan <michael@ansible.com>2014-08-21 17:15:23 -0400
commitbf9ea81c4b58f58f1ddeb9127fb4be946605f12f (patch)
tree76294d3c3a8319d2312543135744043894b91cc1 /bin/ansible-galaxy
parent31540246dd1d05379ad03437656759479590c06d (diff)
downloadansible-bf9ea81c4b58f58f1ddeb9127fb4be946605f12f.tar.gz
Make galaxy work when API server not available
`ansible-galaxy init --offline ...` can create a role without talking to the galaxy api server `ansible-galaxy install ...` only needs to talk to the galaxy api server for galaxy roles, not tar files or scm archives Fixed a bug in command line role installation
Diffstat (limited to 'bin/ansible-galaxy')
-rwxr-xr-xbin/ansible-galaxy37
1 files changed, 21 insertions, 16 deletions
diff --git a/bin/ansible-galaxy b/bin/ansible-galaxy
index 79594bad97..74fb82fbb0 100755
--- a/bin/ansible-galaxy
+++ b/bin/ansible-galaxy
@@ -174,6 +174,9 @@ def build_option_parser(action):
'-p', '--init-path', dest='init_path', default="./",
help='The path in which the skeleton role will be created. '
'The default is the current working directory.')
+ parser.add_option(
+ '--offline', dest='offline', default=False, action='store_true',
+ help="Don't query the galaxy API when creating roles")
elif action == "install":
parser.set_usage("usage: %prog install [options] [-r FILE | role_name(s)[,version] | scm+role_repo_url[,version] | tar_file(s)]")
parser.add_option(
@@ -573,11 +576,13 @@ def execute_init(args, options, parser):
init_path = get_opt(options, 'init_path', './')
api_server = get_opt(options, "api_server", "galaxy.ansible.com")
force = get_opt(options, 'force', False)
+ offline = get_opt(options, 'offline', False)
- api_config = api_get_config(api_server)
- if not api_config:
- print "The API server (%s) is not responding, please try again later." % api_server
- sys.exit(1)
+ if not offline:
+ api_config = api_get_config(api_server)
+ if not api_config:
+ print "The API server (%s) is not responding, please try again later." % api_server
+ sys.exit(1)
try:
role_name = args.pop(0).strip()
@@ -623,12 +628,12 @@ def execute_init(args, options, parser):
# datastructure in place, plus with all of the available
# tags/platforms included (but commented out) and the
# dependencies section
- platforms = api_get_list(api_server, "platforms")
- if not platforms:
- platforms = []
- categories = api_get_list(api_server, "categories")
- if not categories:
- categories = []
+ platforms = []
+ if not offline:
+ platforms = api_get_list(api_server, "platforms") or []
+ categories = []
+ if not offline:
+ categories = api_get_list(api_server, "categories") or []
# group the list of platforms from the api based
# on their names, with the release field being
@@ -692,11 +697,6 @@ def execute_install(args, options, parser):
print "Please specify a user/role name, or a roles file, but not both"
sys.exit(1)
- api_config = api_get_config(api_server)
- if not api_config:
- print "The API server (%s) is not responding, please try again later." % api_server
- sys.exit(1)
-
roles_done = []
if role_file:
f = open(role_file, 'r')
@@ -709,7 +709,7 @@ def execute_install(args, options, parser):
else:
# roles were specified directly, so we'll just go out grab them
# (and their dependencies, unless the user doesn't want us to).
- roles_left = args
+ roles_left = map(ansible.utils.role_spec_parse, args)
while len(roles_left) > 0:
# query the galaxy API for the role data
@@ -730,6 +730,11 @@ def execute_install(args, options, parser):
tmp_file = fetch_role(role_src, None, None, options)
else:
# installing from galaxy
+ api_config = api_get_config(api_server)
+ if not api_config:
+ print "The API server (%s) is not responding, please try again later." % api_server
+ sys.exit(1)
+
role_data = api_lookup_role_by_name(api_server, role_src)
if not role_data:
print "Sorry, %s was not found on %s." % (role_src, api_server)