|
|
|
@ -340,69 +340,29 @@ class GalaxyCLI(CLI):
|
|
|
|
|
self.display.display('- %s is already installed, skipping.' % role.name)
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
|
|
tmp_file = None
|
|
|
|
|
installed = False
|
|
|
|
|
if role.src and os.path.isfile(role.src):
|
|
|
|
|
# installing a local tar.gz
|
|
|
|
|
tmp_file = role.src
|
|
|
|
|
else:
|
|
|
|
|
if role.scm:
|
|
|
|
|
# create tar file from scm url
|
|
|
|
|
tmp_file = RoleRequirement.scm_archive_role(role.scm, role.src, role.version, role.name)
|
|
|
|
|
if role.src:
|
|
|
|
|
if '://' not in role.src:
|
|
|
|
|
role_data = self.api.lookup_role_by_name(role.src)
|
|
|
|
|
if not role_data:
|
|
|
|
|
self.display.warning("- sorry, %s was not found on %s." % (role.src, self.options.api_server))
|
|
|
|
|
self.exit_without_ignore()
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
|
|
role_versions = self.api.fetch_role_related('versions', role_data['id'])
|
|
|
|
|
if not role.version:
|
|
|
|
|
# convert the version names to LooseVersion objects
|
|
|
|
|
# and sort them to get the latest version. If there
|
|
|
|
|
# are no versions in the list, we'll grab the head
|
|
|
|
|
# of the master branch
|
|
|
|
|
if len(role_versions) > 0:
|
|
|
|
|
loose_versions = [LooseVersion(a.get('name',None)) for a in role_versions]
|
|
|
|
|
loose_versions.sort()
|
|
|
|
|
role.version = str(loose_versions[-1])
|
|
|
|
|
else:
|
|
|
|
|
role.version = 'master'
|
|
|
|
|
elif role.version != 'master':
|
|
|
|
|
if role_versions and role.version not in [a.get('name', None) for a in role_versions]:
|
|
|
|
|
self.display.warning('role is %s' % role)
|
|
|
|
|
self.display.warning("- the specified version (%s) was not found in the list of available versions (%s)." % (role.version, role_versions))
|
|
|
|
|
self.exit_without_ignore()
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
|
|
# download the role. if --no-deps was specified, we stop here,
|
|
|
|
|
# otherwise we recursively grab roles and all of their deps.
|
|
|
|
|
tmp_file = role.fetch(role_data)
|
|
|
|
|
|
|
|
|
|
if tmp_file:
|
|
|
|
|
self.display.debug('using %s' % tmp_file)
|
|
|
|
|
installed = role.install(tmp_file)
|
|
|
|
|
# we're done with the temp file, clean it up if we created it
|
|
|
|
|
if tmp_file != role.src:
|
|
|
|
|
os.unlink(tmp_file)
|
|
|
|
|
|
|
|
|
|
# install dependencies, if we want them
|
|
|
|
|
if not no_deps and installed:
|
|
|
|
|
role_dependencies = role.metadata.get('dependencies', [])
|
|
|
|
|
for dep in role_dependencies:
|
|
|
|
|
self.display.debug('Installing dep %s' % dep)
|
|
|
|
|
dep_req = RoleRequirement()
|
|
|
|
|
__, dep_name, __ = dep_req.parse(dep)
|
|
|
|
|
dep_role = GalaxyRole(self.galaxy, name=dep_name)
|
|
|
|
|
if dep_role.install_info is None or force:
|
|
|
|
|
if dep_role not in roles_left:
|
|
|
|
|
self.display.display('- adding dependency: %s' % dep_name)
|
|
|
|
|
roles_left.append(GalaxyRole(self.galaxy, name=dep_name))
|
|
|
|
|
else:
|
|
|
|
|
self.display.display('- dependency %s already pending installation.' % dep_name)
|
|
|
|
|
try:
|
|
|
|
|
installed = role.install()
|
|
|
|
|
except AnsibleError as e:
|
|
|
|
|
self.display.warning("- %s was NOT installed successfully: %s " % (role.name, str(e)))
|
|
|
|
|
self.exit_without_ignore()
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
|
|
# install dependencies, if we want them
|
|
|
|
|
if not no_deps and installed:
|
|
|
|
|
role_dependencies = role.metadata.get('dependencies', [])
|
|
|
|
|
for dep in role_dependencies:
|
|
|
|
|
self.display.debug('Installing dep %s' % dep)
|
|
|
|
|
dep_req = RoleRequirement()
|
|
|
|
|
__, dep_name, __ = dep_req.parse(dep)
|
|
|
|
|
dep_role = GalaxyRole(self.galaxy, name=dep_name)
|
|
|
|
|
if dep_role.install_info is None or force:
|
|
|
|
|
if dep_role not in roles_left:
|
|
|
|
|
self.display.display('- adding dependency: %s' % dep_name)
|
|
|
|
|
roles_left.append(GalaxyRole(self.galaxy, name=dep_name))
|
|
|
|
|
else:
|
|
|
|
|
self.display.display('- dependency %s is already installed, skipping.' % dep_name)
|
|
|
|
|
self.display.display('- dependency %s already pending installation.' % dep_name)
|
|
|
|
|
else:
|
|
|
|
|
self.display.display('- dependency %s is already installed, skipping.' % dep_name)
|
|
|
|
|
|
|
|
|
|
if not installed:
|
|
|
|
|
self.display.warning("- %s was NOT installed successfully." % role.name)
|
|
|
|
|