[WIP] force install role and its deps (#49347)
parent
42c35a2e01
commit
ad57efff8f
|
@ -0,0 +1,2 @@
|
||||||
|
minor_changes:
|
||||||
|
- allow user to force install a role and it's dependencies
|
|
@ -115,6 +115,9 @@ class GalaxyCLI(CLI):
|
||||||
' file (/etc/ansible/roles if not configured)', type='str')
|
' file (/etc/ansible/roles if not configured)', type='str')
|
||||||
if self.action in ("init", "install"):
|
if self.action in ("init", "install"):
|
||||||
self.parser.add_option('-f', '--force', dest='force', action='store_true', default=False, help='Force overwriting an existing role')
|
self.parser.add_option('-f', '--force', dest='force', action='store_true', default=False, help='Force overwriting an existing role')
|
||||||
|
if self.action == "install":
|
||||||
|
self.parser.add_option('--force-with-deps', dest='force_with_deps', action='store_true', default=False,
|
||||||
|
help="Force overwriting an existing role and it's dependencies")
|
||||||
|
|
||||||
def init_parser(self):
|
def init_parser(self):
|
||||||
''' create an options parser for bin/ansible '''
|
''' create an options parser for bin/ansible '''
|
||||||
|
@ -311,7 +314,12 @@ class GalaxyCLI(CLI):
|
||||||
raise AnsibleOptionsError("- you must specify a user/role name or a roles file")
|
raise AnsibleOptionsError("- you must specify a user/role name or a roles file")
|
||||||
|
|
||||||
no_deps = context.CLIARGS['no_deps']
|
no_deps = context.CLIARGS['no_deps']
|
||||||
force = context.CLIARGS['force']
|
force_deps = context.CLIARGS['force_with_deps']
|
||||||
|
|
||||||
|
if no_deps and force_deps:
|
||||||
|
raise AnsibleOptionsError("You cannot both force dependencies and no dependencies")
|
||||||
|
|
||||||
|
force = context.CLIARGS['force'] or force_deps
|
||||||
|
|
||||||
roles_left = []
|
roles_left = []
|
||||||
if role_file:
|
if role_file:
|
||||||
|
@ -321,7 +329,7 @@ class GalaxyCLI(CLI):
|
||||||
try:
|
try:
|
||||||
required_roles = yaml.safe_load(f.read())
|
required_roles = yaml.safe_load(f.read())
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise AnsibleError("Unable to load data from the requirements file: %s" % role_file)
|
raise AnsibleError("Unable to load data from the requirements file (%s): %s" % (role_file, to_native(e)))
|
||||||
|
|
||||||
if required_roles is None:
|
if required_roles is None:
|
||||||
raise AnsibleError("No roles found in file: %s" % role_file)
|
raise AnsibleError("No roles found in file: %s" % role_file)
|
||||||
|
@ -404,16 +412,25 @@ class GalaxyCLI(CLI):
|
||||||
continue
|
continue
|
||||||
if dep_role.install_info is None:
|
if dep_role.install_info is None:
|
||||||
if dep_role not in roles_left:
|
if dep_role not in roles_left:
|
||||||
display.display('- adding dependency: %s' % str(dep_role))
|
display.display('- adding dependency: %s' % to_text(dep_role))
|
||||||
roles_left.append(dep_role)
|
roles_left.append(dep_role)
|
||||||
else:
|
else:
|
||||||
display.display('- dependency %s already pending installation.' % dep_role.name)
|
display.display('- dependency %s already pending installation.' % dep_role.name)
|
||||||
else:
|
else:
|
||||||
if dep_role.install_info['version'] != dep_role.version:
|
if dep_role.install_info['version'] != dep_role.version:
|
||||||
display.warning('- dependency %s from role %s differs from already installed version (%s), skipping' %
|
if force_deps:
|
||||||
(str(dep_role), role.name, dep_role.install_info['version']))
|
display.display('- changing dependant role %s from %s to %s' %
|
||||||
|
(dep_role.name, dep_role.install_info['version'], dep_role.version or "unspecified"))
|
||||||
|
dep_role.remove()
|
||||||
|
roles_left.append(dep_role)
|
||||||
|
else:
|
||||||
|
display.warning('- dependency %s from role %s differs from already installed version (%s), skipping' %
|
||||||
|
(to_text(dep_role), role.name, dep_role.install_info['version']))
|
||||||
else:
|
else:
|
||||||
display.display('- dependency %s is already installed, skipping.' % dep_role.name)
|
if force_deps:
|
||||||
|
roles_left.append(dep_role)
|
||||||
|
else:
|
||||||
|
display.display('- dependency %s is already installed, skipping.' % dep_role.name)
|
||||||
|
|
||||||
if not installed:
|
if not installed:
|
||||||
display.warning("- %s was NOT installed successfully." % role.name)
|
display.warning("- %s was NOT installed successfully." % role.name)
|
||||||
|
|
Loading…
Reference in New Issue