Skip to content
This repository was archived by the owner on Mar 13, 2024. It is now read-only.

Commit ecfd9aa

Browse files
committed
Adds Red Hat (yum) support with Wrapper class
1 parent afd91b3 commit ecfd9aa

File tree

3 files changed

+50
-9
lines changed

3 files changed

+50
-9
lines changed

updatewrapper/__init__.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,10 @@
22
import os
33
import sys
44

5-
from ansible.module_utils._text import to_bytes
6-
75
from updatewrapper.host import Host
86
from updatewrapper.utils.display import ask_yes_no, print_banner, print_info, print_notice, print_success, print_warning, spinner_list
97
from updatewrapper.utils.file import get_config_file, get_hosts, get_logfile, save_output
8+
from updatewrapper.wrapper import Wrapper
109

1110

1211
def wrap(hosts, out_dir):
@@ -22,22 +21,23 @@ def wrap(hosts, out_dir):
2221
print()
2322
for host in hosts:
2423
try:
24+
wrapper = Wrapper(host)
25+
2526
print_info('BEGIN host %s' % host.addr)
2627
host.ask_passwords()
2728

28-
print_success('Updating APT index files')
29-
host.run('apt-get update')
29+
print_success('Updating index cache')
30+
wrapper.update_cache()
3031

3132
print_success('Listing available package upgrades')
32-
returncode, stdout, stderr = host.run('apt-get --show-upgraded --assume-no upgrade')
33+
returns = wrapper.check_update()
3334

34-
if to_bytes('The following packages will be upgraded') in stdout:
35+
if wrapper.has_update(*returns):
3536
print_warning('Some packages need to be upgraded')
3637

3738
if ask_yes_no('Do you want to continue?'):
38-
3939
print_success('Installing available package upgrades')
40-
returncode, stdout, stderr = host.run('apt-get --show-upgraded --assume-yes upgrade')
40+
returncode, stdout, stderr = wrapper.perform_update()
4141

4242
logfile = get_logfile(host.name, out_dir)
4343
save_output(logfile, stdout)

updatewrapper/host.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,14 @@
1919

2020

2121
class Host:
22-
def __init__(self, name='localhost', addr='localhost', port='22', user='root', sudo=False, sudo_pass=False):
22+
def __init__(self, name='localhost', addr='localhost', port='22', user='root', sudo=False, sudo_pass=False, flavor='debian'):
2323
self.name = addr if name is 'localhost' else name
2424
self.addr = name if addr is 'localhost' else addr
2525
self.port = port
2626
self.user = user
2727
self.sudo = sudo or sudo_pass
2828
self.sudo_pass = sudo_pass
29+
self.flavor = flavor
2930

3031
self._passwords = None
3132

updatewrapper/wrapper.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
from ansible.module_utils._text import to_bytes
2+
3+
4+
class Wrapper:
5+
def __init__(self, host):
6+
self.host = host
7+
self.flavor = host.flavor if host.flavor in ['debian', 'redhat'] else None
8+
9+
if self.flavor is None:
10+
raise ValueError('Invalid flavor')
11+
12+
def is_debian(self):
13+
return self.flavor == 'debian'
14+
15+
def is_redhat(self):
16+
return self.flavor == 'redhat'
17+
18+
def update_cache(self):
19+
if self.is_debian():
20+
return self.host.run('apt-get update')
21+
elif self.is_redhat():
22+
return self.host.run('yum clean expire-cache')
23+
24+
def check_update(self):
25+
if self.is_debian():
26+
return self.host.run('apt-get --show-upgraded --assume-no upgrade')
27+
elif self.is_redhat():
28+
return self.host.run('yum check-update')
29+
30+
def has_update(self, returncode, stdout, stderr):
31+
if self.is_debian():
32+
return to_bytes('The following packages will be upgraded') in stdout
33+
elif self.is_redhat():
34+
return returncode == 100
35+
36+
def perform_update(self):
37+
if self.is_debian():
38+
return self.host.run('apt-get --show-upgraded --assume-yes upgrade')
39+
elif self.is_redhat():
40+
return self.host.run('yum --assumeyes update')

0 commit comments

Comments
 (0)