salt/search-the-entire-cache_dir-because-storage-paths-ch.patch
Klaus Kämpf ae1540a455 Accepting request 514025 from systemsmanagement:saltstack:testing
- Bugfix: clean up `change` attribute from interface dict (upstream)
  Issue: https://github.com/saltstack/salt/issues/41461
  PR: 1. https://github.com/saltstack/salt/pull/41487
      2. https://github.com/saltstack/salt/pull/41533
Added:
  * clean-up-change-attribute-from-interface-dict.patch

- Bugfix: orchestrate and batches returns false failed information
  https://github.com/saltstack/salt/issues/40635
- speed-up cherrypy by removing sleep call
- wrong os_family grains on SUSE - fix unittests (bsc#1038855)
- fix setting the language on SUSE systems (bsc#1038855)
- Bugfix: unable to use hostname for minion ID as '127' (upstream)
- Bugfix: remove sleep call in CheppryPy API handler (upstream)
- Fix core grains constants for timezone (bsc#1032931)
- Added:
  * bugfix-unable-to-use-127-as-hostname.patch
  * fix-grain-for-os_family-on-suse-series.patch
  * fix-os_family-case-in-unittest.patch
  * fix-setting-language-on-suse-systems.patch
  * fixed-issue-with-parsing-of-master-minion-returns-wh.patch
  * rest_cherrypy-remove-sleep-call.patch
  * use-correct-grain-constants-for-timezone.patch

- Update to 2016.11.4
  See https://docs.saltstack.com/en/develop/topics/releases/2016.11.4.html
  for full changelog
- Changed:
  * add-options-for-dockerng.patch
  * fix-regression-in-file.get_managed-add-unit-tests.patch

OBS-URL: https://build.opensuse.org/request/show/514025
OBS-URL: https://build.opensuse.org/package/show/systemsmanagement:saltstack/salt?expand=0&rev=89
2017-08-04 10:29:26 +00:00

186 lines
8.3 KiB
Diff

From c9eb78888326d6ca6173a8d6059e1de26884030e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pablo=20Su=C3=A1rez=20Hern=C3=A1ndez?=
<psuarezhernandez@suse.com>
Date: Tue, 18 Apr 2017 16:04:14 +0100
Subject: [PATCH] Search the entire CACHE_DIR because storage paths
change across versions
Prevents zero length error on Python 2.6
Fixes Zypper unit test
Enhances pkg.list_downloaded information of a package
Listing all patches instead of security ones only
Adapting Zypper test to new list_downloaded output
Fixes zypper test error after backporting
Pylint fixes
---
salt/modules/yumpkg.py | 18 +++++++++++++-----
salt/modules/zypper.py | 17 ++++++++++++-----
salt/states/pkg.py | 3 ++-
tests/unit/modules/zypper_test.py | 20 ++++++++++++++------
4 files changed, 41 insertions(+), 17 deletions(-)
diff --git a/salt/modules/yumpkg.py b/salt/modules/yumpkg.py
index f6777d770f..690d0c4e3a 100644
--- a/salt/modules/yumpkg.py
+++ b/salt/modules/yumpkg.py
@@ -18,8 +18,8 @@ Support for YUM/DNF
from __future__ import absolute_import
import contextlib
import copy
+import datetime
import fnmatch
-import glob
import itertools
import logging
import os
@@ -816,9 +816,17 @@ def list_downloaded():
CACHE_DIR = os.path.join('/var/cache/', _yum())
ret = {}
- for package_path in glob.glob(os.path.join(CACHE_DIR, '*/*/*/packages/*.rpm')):
- pkg_info = __salt__['lowpkg.bin_pkg_info'](package_path)
- ret.setdefault(pkg_info['name'], {})[pkg_info['version']] = package_path
+ for root, dirnames, filenames in os.walk(CACHE_DIR):
+ for filename in fnmatch.filter(filenames, '*.rpm'):
+ package_path = os.path.join(root, filename)
+ pkg_info = __salt__['lowpkg.bin_pkg_info'](package_path)
+ pkg_timestamp = int(os.path.getctime(package_path))
+ ret.setdefault(pkg_info['name'], {})[pkg_info['version']] = {
+ 'path': package_path,
+ 'size': os.path.getsize(package_path),
+ 'creation_date_time_t': pkg_timestamp,
+ 'creation_date_time': datetime.datetime.fromtimestamp(pkg_timestamp).isoformat(),
+ }
return ret
@@ -2804,7 +2812,7 @@ def _get_patches(installed_only=False):
'''
patches = {}
- cmd = [_yum(), '--quiet', 'updateinfo', 'list', 'security', 'all']
+ cmd = [_yum(), '--quiet', 'updateinfo', 'list', 'all']
ret = __salt__['cmd.run_stdout'](
cmd,
python_shell=False
diff --git a/salt/modules/zypper.py b/salt/modules/zypper.py
index 28087f5dbd..6055966904 100644
--- a/salt/modules/zypper.py
+++ b/salt/modules/zypper.py
@@ -15,7 +15,7 @@ Package support for openSUSE via the zypper package manager
# Import python libs
from __future__ import absolute_import
import copy
-import glob
+import fnmatch
import logging
import re
import os
@@ -1797,10 +1797,17 @@ def list_downloaded():
CACHE_DIR = '/var/cache/zypp/packages/'
ret = {}
- # Zypper storage is repository_tag/arch/package-version.rpm
- for package_path in glob.glob(os.path.join(CACHE_DIR, '*/*/*.rpm')):
- pkg_info = __salt__['lowpkg.bin_pkg_info'](package_path)
- ret.setdefault(pkg_info['name'], {})[pkg_info['version']] = package_path
+ for root, dirnames, filenames in os.walk(CACHE_DIR):
+ for filename in fnmatch.filter(filenames, '*.rpm'):
+ package_path = os.path.join(root, filename)
+ pkg_info = __salt__['lowpkg.bin_pkg_info'](package_path)
+ pkg_timestamp = int(os.path.getctime(package_path))
+ ret.setdefault(pkg_info['name'], {})[pkg_info['version']] = {
+ 'path': package_path,
+ 'size': os.path.getsize(package_path),
+ 'creation_date_time_t': pkg_timestamp,
+ 'creation_date_time': datetime.datetime.fromtimestamp(pkg_timestamp).isoformat(),
+ }
return ret
diff --git a/salt/states/pkg.py b/salt/states/pkg.py
index d185002d41..0983712b4c 100644
--- a/salt/states/pkg.py
+++ b/salt/states/pkg.py
@@ -2081,7 +2081,8 @@ def patch_installed(name, advisory_ids=None, downloadonly=None, **kwargs):
if not ret['changes'] and not ret['comment']:
status = 'downloaded' if downloadonly else 'installed'
ret['result'] = True
- ret['comment'] = 'Related packages are already {}'.format(status)
+ ret['comment'] = ('Advisory patch is not needed or related packages '
+ 'are already {0}'.format(status))
return ret
diff --git a/tests/unit/modules/zypper_test.py b/tests/unit/modules/zypper_test.py
index 39bd2e73e8..c9d44d102c 100644
--- a/tests/unit/modules/zypper_test.py
+++ b/tests/unit/modules/zypper_test.py
@@ -486,7 +486,10 @@ Repository 'DUMMY' not found by its alias, number, or URI.
self.assertEqual(len(list_patches), 3)
self.assertDictEqual(list_patches, PATCHES_RET)
- @patch('glob.glob', MagicMock(return_value=['/var/cache/zypper/packages/foo/bar/test_package.rpm']))
+ @patch('os.walk', MagicMock(return_value=[('test', 'test', 'test')]))
+ @patch('os.path.getsize', MagicMock(return_value=123456))
+ @patch('os.path.getctime', MagicMock(return_value=1234567890.123456))
+ @patch('fnmatch.filter', MagicMock(return_value=['/var/cache/zypper/packages/foo/bar/test_package.rpm']))
def test_list_downloaded(self):
'''
Test downloaded packages listing.
@@ -495,7 +498,12 @@ Repository 'DUMMY' not found by its alias, number, or URI.
'''
DOWNLOADED_RET = {
'test-package': {
- '1.0': '/var/cache/zypper/packages/foo/bar/test_package.rpm'
+ '1.0': {
+ 'path': '/var/cache/zypper/packages/foo/bar/test_package.rpm',
+ 'size': 123456,
+ 'creation_date_time_t': 1234567890,
+ 'creation_date_time': '2009-02-13T23:31:30',
+ }
}
}
@@ -530,7 +538,7 @@ Repository 'DUMMY' not found by its alias, number, or URI.
self.assertEqual(zypper.download("nmap", "foo"), test_out)
@patch('salt.modules.zypper._systemd_scope', MagicMock(return_value=False))
- @patch('salt.modules.zypper.list_downloaded', MagicMock(side_effect=[{}, {'vim': {'1.1': '/foo/bar/test.rpm'}}]))
+ @patch('salt.modules.zypper.list_downloaded', MagicMock(side_effect=[{}, {'vim': {'1.1': {'path': '/foo/bar/test.rpm', 'size': 1234, 'creation_date_time_t': 1234567890, 'creation_date_time': '2009-02-13T23:31:30'}}}]))
def test_install_with_downloadonly(self):
'''
Test a package installation with downloadonly=True.
@@ -548,10 +556,10 @@ Repository 'DUMMY' not found by its alias, number, or URI.
'--download-only',
'vim'
)
- self.assertDictEqual(ret, {'vim': {'new': {'1.1': '/foo/bar/test.rpm'}, 'old': ''}})
+ self.assertDictEqual(ret, {'vim': {'new': {'1.1': {'path': '/foo/bar/test.rpm', 'size': 1234, 'creation_date_time_t': 1234567890, 'creation_date_time': '2009-02-13T23:31:30'}}, 'old': ''}})
@patch('salt.modules.zypper._systemd_scope', MagicMock(return_value=False))
- @patch('salt.modules.zypper.list_downloaded', MagicMock(return_value={'vim': {'1.1': '/foo/bar/test.rpm'}}))
+ @patch('salt.modules.zypper.list_downloaded', MagicMock(return_value={'vim': {'1.1': {'path': '/foo/bar/test.rpm', 'size': 1234, 'creation_date_time_t': 1234567890, 'creation_date_time': '2017-01-01T11:00:00'}}}))
def test_install_with_downloadonly_already_downloaded(self):
'''
Test a package installation with downloadonly=True when package is already downloaded.
@@ -603,7 +611,7 @@ Repository 'DUMMY' not found by its alias, number, or URI.
'''
with patch.dict(zypper.__salt__, {'pkg_resource.parse_targets': MagicMock(return_value=({'SUSE-PATCH-XXX': None}, 'advisory'))}):
with patch('salt.modules.zypper.__zypper__.noraise.call', MagicMock()) as zypper_mock:
- with self.assertRaisesRegex(CommandExecutionError, '^Advisory id "SUSE-PATCH-XXX" not found$'):
+ with self.assertRaisesRegexp(CommandExecutionError, '^Advisory id "SUSE-PATCH-XXX" not found$'):
zypper.install(advisory_ids=['SUSE-PATCH-XXX'])
def test_remove_purge(self):
--
2.12.2