Merge pull request #9547 from bcoca/galaxy_info_working
implemented info action for galaxy
This commit is contained in:
commit
88d33a32df
1 changed files with 63 additions and 9 deletions
|
@ -135,6 +135,7 @@ An optional section for the role authors to include contact information, or a we
|
||||||
#-------------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------------
|
||||||
|
|
||||||
VALID_ACTIONS = ("init", "info", "install", "list", "remove")
|
VALID_ACTIONS = ("init", "info", "install", "list", "remove")
|
||||||
|
SKIP_INFO_KEYS = ("platforms","readme_html", "related", "summary_fields", "average_aw_composite", "average_aw_score", "url" )
|
||||||
|
|
||||||
def get_action(args):
|
def get_action(args):
|
||||||
"""
|
"""
|
||||||
|
@ -237,6 +238,7 @@ def exit_without_ignore(options, rc=1):
|
||||||
print '- you can use --ignore-errors to skip failed roles.'
|
print '- you can use --ignore-errors to skip failed roles.'
|
||||||
sys.exit(rc)
|
sys.exit(rc)
|
||||||
|
|
||||||
|
|
||||||
#-------------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------------
|
||||||
# Galaxy API functions
|
# Galaxy API functions
|
||||||
#-------------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------------
|
||||||
|
@ -257,7 +259,7 @@ def api_get_config(api_server):
|
||||||
except:
|
except:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def api_lookup_role_by_name(api_server, role_name):
|
def api_lookup_role_by_name(api_server, role_name, notify=True):
|
||||||
"""
|
"""
|
||||||
Uses the Galaxy API to do a lookup on the role owner/name.
|
Uses the Galaxy API to do a lookup on the role owner/name.
|
||||||
"""
|
"""
|
||||||
|
@ -268,7 +270,8 @@ def api_lookup_role_by_name(api_server, role_name):
|
||||||
parts = role_name.split(".")
|
parts = role_name.split(".")
|
||||||
user_name = ".".join(parts[0:-1])
|
user_name = ".".join(parts[0:-1])
|
||||||
role_name = parts[-1]
|
role_name = parts[-1]
|
||||||
print "- downloading role '%s', owned by %s" % (role_name, user_name)
|
if notify:
|
||||||
|
print "- downloading role '%s', owned by %s" % (role_name, user_name)
|
||||||
except:
|
except:
|
||||||
parser.print_help()
|
parser.print_help()
|
||||||
print "- invalid role name (%s). Specify role as format: username.rolename" % role_name
|
print "- invalid role name (%s). Specify role as format: username.rolename" % role_name
|
||||||
|
@ -640,7 +643,7 @@ def execute_init(args, options, parser):
|
||||||
categories = []
|
categories = []
|
||||||
if not offline:
|
if not offline:
|
||||||
categories = api_get_list(api_server, "categories") or []
|
categories = api_get_list(api_server, "categories") or []
|
||||||
|
|
||||||
# group the list of platforms from the api based
|
# group the list of platforms from the api based
|
||||||
# on their names, with the release field being
|
# on their names, with the release field being
|
||||||
# appended to a list of versions
|
# appended to a list of versions
|
||||||
|
@ -676,7 +679,57 @@ def execute_info(args, options, parser):
|
||||||
from the galaxy API.
|
from the galaxy API.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
pass
|
if len(args) == 0:
|
||||||
|
# the user needs to specify a role
|
||||||
|
parser.print_help()
|
||||||
|
print "- you must specify a user/role name"
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
api_server = get_opt(options, "api_server", "galaxy.ansible.com")
|
||||||
|
api_config = api_get_config(api_server)
|
||||||
|
roles_path = get_opt(options, "roles_path")
|
||||||
|
|
||||||
|
for role in args:
|
||||||
|
|
||||||
|
role_info = {}
|
||||||
|
|
||||||
|
install_info = get_galaxy_install_info(role, options)
|
||||||
|
if install_info:
|
||||||
|
if 'version' in install_info:
|
||||||
|
install_info['intalled_version'] = install_info['version']
|
||||||
|
install_info.pop('version', None)
|
||||||
|
role_info.update(install_info)
|
||||||
|
|
||||||
|
remote_data = api_lookup_role_by_name(api_server, role, False)
|
||||||
|
if remote_data:
|
||||||
|
role_info.update(remote_data)
|
||||||
|
|
||||||
|
metadata = get_role_metadata(role, options)
|
||||||
|
if metadata:
|
||||||
|
role_info.update(metadata)
|
||||||
|
|
||||||
|
role_spec = ansible.utils.role_spec_parse(role)
|
||||||
|
if role_spec:
|
||||||
|
role_info.update(role_spec)
|
||||||
|
|
||||||
|
if role_info:
|
||||||
|
print "- %s:" % (role)
|
||||||
|
import pprint
|
||||||
|
for k in sorted(role_info.keys()):
|
||||||
|
|
||||||
|
if k in SKIP_INFO_KEYS:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if isinstance(role_info[k], dict):
|
||||||
|
print "\t%s: " % (k)
|
||||||
|
for key in sorted(role_info[k].keys()):
|
||||||
|
if key in SKIP_INFO_KEYS:
|
||||||
|
continue
|
||||||
|
print "\t\t%s: %s" % (key, role_info[k][key])
|
||||||
|
else:
|
||||||
|
print "\t%s: %s" % (k, role_info[k])
|
||||||
|
else:
|
||||||
|
print "- the role %s was not found" % role
|
||||||
|
|
||||||
def execute_install(args, options, parser):
|
def execute_install(args, options, parser):
|
||||||
"""
|
"""
|
||||||
|
@ -687,23 +740,24 @@ def execute_install(args, options, parser):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
role_file = get_opt(options, "role_file", None)
|
role_file = get_opt(options, "role_file", None)
|
||||||
api_server = get_opt(options, "api_server", "galaxy.ansible.com")
|
|
||||||
no_deps = get_opt(options, "no_deps", False)
|
|
||||||
roles_path = get_opt(options, "roles_path")
|
|
||||||
|
|
||||||
if len(args) == 0 and not role_file:
|
if len(args) == 0 and role_file is None:
|
||||||
# the user needs to specify one of either --role-file
|
# the user needs to specify one of either --role-file
|
||||||
# or specify a single user/role name
|
# or specify a single user/role name
|
||||||
parser.print_help()
|
parser.print_help()
|
||||||
print "- you must specify a user/role name or a roles file"
|
print "- you must specify a user/role name or a roles file"
|
||||||
sys.exit()
|
sys.exit()
|
||||||
elif len(args) == 1 and role_file:
|
elif len(args) == 1 and not role_file is None:
|
||||||
# using a role file is mutually exclusive of specifying
|
# using a role file is mutually exclusive of specifying
|
||||||
# the role name on the command line
|
# the role name on the command line
|
||||||
parser.print_help()
|
parser.print_help()
|
||||||
print "- please specify a user/role name, or a roles file, but not both"
|
print "- please specify a user/role name, or a roles file, but not both"
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
api_server = get_opt(options, "api_server", "galaxy.ansible.com")
|
||||||
|
no_deps = get_opt(options, "no_deps", False)
|
||||||
|
roles_path = get_opt(options, "roles_path")
|
||||||
|
|
||||||
roles_done = []
|
roles_done = []
|
||||||
if role_file:
|
if role_file:
|
||||||
f = open(role_file, 'r')
|
f = open(role_file, 'r')
|
||||||
|
|
Loading…
Reference in a new issue