Skip to content

Commit d7703de

Browse files
committed
Fix updater: handle many packages in update/install functions
Signed-off-by: Ronan Abhamon <[email protected]>
1 parent 7b661ff commit d7703de

File tree

2 files changed

+16
-15
lines changed

2 files changed

+16
-15
lines changed

Diff for: SOURCES/etc/xapi.d/plugins/updater.py

+13-12
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,15 @@ def decorator(*args, **kwargs):
9595
return decorator
9696
return wrapper
9797

98+
def get_packages_from_args(args):
99+
packages = args.get('packages')
100+
if not packages:
101+
return []
102+
103+
import re
104+
packages = re.sub(r'\s+', ' ', packages).replace(',', ' ').split(' ')
105+
packages = filter(lambda package: package, packages)
106+
return dict.fromkeys(packages, '')
98107

99108
def display_package(p):
100109
if len(p.changelog):
@@ -113,7 +122,7 @@ def build_repo_list(enabled_repos, additional_repos):
113122
def install_helper(session, args, action):
114123
assert action in ('install', 'update')
115124

116-
packages = args.get('packages')
125+
packages = list(get_packages_from_args(args))
117126
if action == 'install' and not packages:
118127
raise Exception('Missing or empty argument `packages`')
119128

@@ -139,7 +148,7 @@ def install_helper(session, args, action):
139148

140149
command = ['yum', action, '--disablerepo=*', '--enablerepo=' + ','.join(repos), '-y']
141150
if packages:
142-
command.append(packages)
151+
command.extend(packages)
143152
res = run_command(command)
144153
session.xenapi.task.set_status(task, 'success')
145154
except Exception as e:
@@ -181,19 +190,11 @@ def update(session, args):
181190

182191
@error_wrapped
183192
def query_installed(session, args):
184-
packages = args.get('packages')
185-
if not packages:
186-
return '{}'
187-
188-
import re
189-
packages = re.sub(r'\s+', ' ', packages).replace(',', ' ').split(' ')
190-
packages = filter(lambda package: package, packages)
191-
if not packages:
193+
package_map = get_packages_from_args(args)
194+
if not package_map:
192195
return '{}'
193196

194-
package_map = dict.fromkeys(packages, '')
195197
packages = list(package_map)
196-
197198
command = ['rpm', '-q'] + packages
198199
result = run_command(command, check=False)
199200
package_info = result['stdout'].rstrip().split('\n')

Diff for: tests/test_updater.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ def test_install(self, run_command, fs):
2828
packages = 'toto tata titi'
2929
install(mock.MagicMock(), {'packages': packages})
3030
run_command.assert_called_once_with(
31-
['yum', 'install', '--disablerepo=*', '--enablerepo=' + ','.join(DEFAULT_REPOS), '-y', packages]
31+
['yum', 'install', '--disablerepo=*', '--enablerepo=' + ','.join(DEFAULT_REPOS), '-y'] + packages.split(' ')
3232
)
3333

3434
def test_install_without_packages(self, run_command, fs):
@@ -72,7 +72,7 @@ def test_update_with_packages(self, run_command, fs):
7272
packages = 'toto tata titi'
7373
update(mock.MagicMock(), {'packages': packages})
7474
run_command.assert_called_once_with(
75-
['yum', 'update', '--disablerepo=*', '--enablerepo=' + ','.join(DEFAULT_REPOS), '-y', packages]
75+
['yum', 'update', '--disablerepo=*', '--enablerepo=' + ','.join(DEFAULT_REPOS), '-y'] + packages.split(' ')
7676
)
7777

7878
def test_update_error(self, run_command, fs):
@@ -112,7 +112,7 @@ def test_update_with_additional_repos_and_packages(self, run_command, fs):
112112
packages = 'donald hortense'
113113
update(mock.MagicMock(), {'repos': 'riri, fifi, loulou', 'packages': packages})
114114
run_command.assert_called_once_with(
115-
['yum', 'update', '--disablerepo=*', '--enablerepo=' + ','.join(repos), '-y', packages]
115+
['yum', 'update', '--disablerepo=*', '--enablerepo=' + ','.join(repos), '-y'] + packages.split(' ')
116116
)
117117

118118
@mock.patch('updater.run_command', autospec=True)

0 commit comments

Comments
 (0)