[WIP] force install role and its deps (#49347)
This commit is contained in:
parent
42c35a2e01
commit
ad57efff8f
2 changed files with 25 additions and 6 deletions
2
changelogs/fragments/force_role_with_deps.yml
Normal file
2
changelogs/fragments/force_role_with_deps.yml
Normal file
|
@ -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')
|
||||
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')
|
||||
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):
|
||||
''' 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")
|
||||
|
||||
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 = []
|
||||
if role_file:
|
||||
|
@ -321,7 +329,7 @@ class GalaxyCLI(CLI):
|
|||
try:
|
||||
required_roles = yaml.safe_load(f.read())
|
||||
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:
|
||||
raise AnsibleError("No roles found in file: %s" % role_file)
|
||||
|
@ -404,16 +412,25 @@ class GalaxyCLI(CLI):
|
|||
continue
|
||||
if dep_role.install_info is None:
|
||||
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)
|
||||
else:
|
||||
display.display('- dependency %s already pending installation.' % dep_role.name)
|
||||
else:
|
||||
if dep_role.install_info['version'] != dep_role.version:
|
||||
display.warning('- dependency %s from role %s differs from already installed version (%s), skipping' %
|
||||
(str(dep_role), role.name, dep_role.install_info['version']))
|
||||
if force_deps:
|
||||
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:
|
||||
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:
|
||||
display.warning("- %s was NOT installed successfully." % role.name)
|
||||
|
|
Loading…
Reference in a new issue