Adding 'dist-upgrade' support to zypper module

This commit is contained in:
Pablo Suárez Hernández 2016-10-18 14:14:42 +01:00
parent 7dd91c2880
commit 4bcfef2ba2

View file

@ -1047,7 +1047,12 @@ def install(name=None,
return salt.utils.compare_dicts(old, new)
def upgrade(refresh=True):
def upgrade(refresh=True,
dryrun=False,
dist_upgrade=False,
fromrepo=None,
novendorchange=False,
**kwargs):
'''
.. versionchanged:: 2015.8.12,2016.3.3,Carbon
On minions running systemd>=205, `systemd-run(1)`_ is now used to
@ -1070,6 +1075,19 @@ def upgrade(refresh=True):
If set to False it depends on zypper if a refresh is
executed.
dryrun
If set to True, it creates a debug solver log file and then perform
a dry-run upgrade (no changes are made). Default: False
dist_upgrade
Perform a system dist-upgrade. Default: False
fromrepo
Specify a package repository to upgrade from. Default: None
novendorchange
If set to True, no allow vendor changes. Default: False
Return a dict containing the new package names and versions::
{'<package>': {'old': '<old-version>',
@ -1080,16 +1098,41 @@ def upgrade(refresh=True):
.. code-block:: bash
salt '*' pkg.upgrade
salt '*' pkg.upgrade dist-upgrade=True fromrepo="MyRepoName" novendorchange=True
salt '*' pkg.upgrade dist-upgrade=True dryrun=True
'''
ret = {'changes': {},
'result': True,
'comment': '',
}
cmd_update = ['dist-upgrade'] if dist_upgrade else ['update']
cmd_update.extend(['--auto-agree-with-licenses'])
if refresh:
refresh_db()
if dryrun:
cmd_update.extend(['--dry-run'])
if dist_upgrade:
if dryrun:
# Creates a solver test case for debugging.
log.info('Executing debugsolver and performing a dry-run dist-upgrade')
cmd_debugsolver = cmd_update + ['--debug-solver']
__zypper__.noraise.call(*cmd_debugsolver)
if fromrepo:
fromrepoopt = ['--from', fromrepo]
log.info('Targeting repo {0!r}'.format(fromrepo))
cmd_update.extend(fromrepoopt)
if novendorchange:
log.info('Disabling changes of vendor')
cmd_update.extend(['--no-allow-vendor-change'])
old = list_pkgs()
__zypper__(systemd_scope=_systemd_scope()).noraise.call('update', '--auto-agree-with-licenses')
__zypper__(systemd_scope=_systemd_scope()).noraise.call(*cmd_update)
if __zypper__.exit_code not in __zypper__.SUCCESS_EXIT_CODES:
ret['result'] = False
ret['comment'] = (__zypper__.stdout() + os.linesep + __zypper__.stderr()).strip()