Merge pull request #37109 from meaksh/zypper-distupgrade-support-2015.8

Some improvements for Zypper `dist-upgrade`
This commit is contained in:
Nicole Thomas 2016-10-20 13:41:08 -06:00 committed by GitHub
commit 8c46d69251
2 changed files with 20 additions and 10 deletions

View file

@ -1083,7 +1083,7 @@ def upgrade(refresh=True,
Perform a system dist-upgrade. Default: False
fromrepo
Specify a package repository to upgrade from. Default: None
Specify a list of package repositories to upgrade from. Default: None
novendorchange
If set to True, no allow vendor changes. Default: False
@ -1098,7 +1098,7 @@ 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 fromrepo='["MyRepoName"]' novendorchange=True
salt '*' pkg.upgrade dist-upgrade=True dryrun=True
'''
ret = {'changes': {},
@ -1121,23 +1121,30 @@ def upgrade(refresh=True,
__zypper__.noraise.call(*cmd_update + ['--debug-solver'])
if fromrepo:
cmd_update.extend(['--from', fromrepo])
log.info('Targeting repo {0!r}'.format(fromrepo))
for repo in fromrepo:
cmd_update.extend(['--from', repo])
log.info('Targeting repos: {0!r}'.format(fromrepo))
if novendorchange:
cmd_update.append('--no-allow-vendor-change')
log.info('Disabling vendor changes')
# TODO: Grains validation should be moved to Zypper class
if __grains__['osrelease_info'][0] > 11:
cmd_update.append('--no-allow-vendor-change')
log.info('Disabling vendor changes')
else:
log.warn('Disabling vendor changes is not supported on this Zypper version')
old = list_pkgs()
__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()
else:
__context__.pop('pkg.list_pkgs', None)
new = list_pkgs()
ret['changes'] = salt.utils.compare_dicts(old, new)
if dryrun or not ret['result']:
ret['comment'] = (__zypper__.stdout() + os.linesep + __zypper__.stderr()).strip()
return ret

View file

@ -50,6 +50,7 @@ from salt.modules import zypper
# Globals
zypper.__salt__ = dict()
zypper.__grains__ = dict()
zypper.__context__ = dict()
zypper.rpm = None
@ -331,6 +332,7 @@ class ZypperTestCase(TestCase):
@patch('salt.modules.zypper.refresh_db', MagicMock(return_value=True))
@patch('salt.modules.zypper._systemd_scope', MagicMock(return_value=False))
@patch.dict('salt.modules.zypper.__grains__', {'osrelease_info': [12, 1]})
def test_upgrade_success(self):
'''
Test system upgrade and dist-upgrade success.
@ -358,13 +360,14 @@ class ZypperTestCase(TestCase):
zypper_mock.assert_any_call('dist-upgrade', '--auto-agree-with-licenses', '--dry-run', '--debug-solver')
with patch('salt.modules.zypper.list_pkgs', MagicMock(side_effect=[{"vim": "1.1"}, {"vim": "1.2"}])):
ret = zypper.upgrade(dist_upgrade=True, fromrepo="Dummy", novendorchange=True)
ret = zypper.upgrade(dist_upgrade=True, fromrepo=["Dummy", "Dummy2"], novendorchange=True)
self.assertTrue(ret['result'])
self.assertDictEqual(ret['changes'], {"vim": {"old": "1.1", "new": "1.2"}})
zypper_mock.assert_any_call('dist-upgrade', '--auto-agree-with-licenses', '--from', "Dummy", '--no-allow-vendor-change')
zypper_mock.assert_any_call('dist-upgrade', '--auto-agree-with-licenses', '--from', "Dummy", '--from', 'Dummy2', '--no-allow-vendor-change')
@patch('salt.modules.zypper.refresh_db', MagicMock(return_value=True))
@patch('salt.modules.zypper._systemd_scope', MagicMock(return_value=False))
@patch.dict('salt.modules.zypper.__grains__', {'osrelease_info': [12, 1]})
def test_upgrade_failure(self):
'''
Test system upgrade failure.
@ -393,7 +396,7 @@ Repository 'DUMMY' not found by its alias, number, or URI.
with patch('salt.modules.zypper.__zypper__', FailingZypperDummy()) as zypper_mock:
zypper_mock.noraise.call = MagicMock()
with patch('salt.modules.zypper.list_pkgs', MagicMock(side_effect=[{"vim": "1.1"}, {"vim": "1.1"}])):
ret = zypper.upgrade(dist_upgrade=True, fromrepo="DUMMY")
ret = zypper.upgrade(dist_upgrade=True, fromrepo=["DUMMY"])
self.assertFalse(ret['result'])
self.assertEqual(ret['comment'], zypper_out.strip())
self.assertDictEqual(ret['changes'], {})