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

Commit 6f8d087

Browse files
committed
Adds abstract class to manage flavors
1 parent c9cd1f8 commit 6f8d087

File tree

5 files changed

+71
-42
lines changed

5 files changed

+71
-42
lines changed

updatewrapper/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from updatewrapper.host import Host
66
from updatewrapper.utils.display import ask_yes_no, print_banner, print_info, print_notice, print_success, print_warning, spinner_list
77
from updatewrapper.utils.file import get_config_file, get_hosts, get_logfile, save_output
8-
from updatewrapper.wrapper import Wrapper
8+
from updatewrapper.flavor import get_flavor_wrapper
99

1010

1111
def wrap(hosts, out_dir):
@@ -21,7 +21,7 @@ def wrap(hosts, out_dir):
2121
print()
2222
for host in hosts:
2323
try:
24-
wrapper = Wrapper(host)
24+
wrapper = get_flavor_wrapper(host)
2525

2626
print_info('BEGIN host %s' % host.addr)
2727
host.ask_passwords()

updatewrapper/flavor/__init__.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import abc
2+
import importlib
3+
4+
5+
def get_flavor_wrapper(host):
6+
flavor = host.flavor if host.flavor in ['debian', 'redhat'] else None
7+
8+
if flavor is None:
9+
raise ValueError('Invalid flavor')
10+
11+
Wrapper = getattr(importlib.import_module('updatewrapper.flavor.' + flavor), flavor.capitalize())
12+
13+
return Wrapper(host)
14+
15+
16+
class FlavorBase:
17+
__metaclass__ = abc.ABCMeta
18+
19+
def __init__(self, host):
20+
self.host = host
21+
22+
@abc.abstractmethod
23+
def update_cache(self):
24+
pass
25+
26+
@abc.abstractmethod
27+
def check_update(self):
28+
pass
29+
30+
@abc.abstractmethod
31+
def has_update(self, returncode, stdout, stderr):
32+
pass
33+
34+
@abc.abstractmethod
35+
def perform_update(self):
36+
pass
37+

updatewrapper/flavor/debian.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from ansible.module_utils._text import to_bytes
2+
3+
from updatewrapper.flavor import FlavorBase
4+
5+
6+
class Debian(FlavorBase):
7+
def update_cache(self):
8+
return self.host.run('apt-get update')
9+
10+
def check_update(self):
11+
return self.host.run('apt-get --show-upgraded --assume-no upgrade')
12+
13+
def has_update(self, returncode, stdout, stderr):
14+
return to_bytes('The following packages will be upgraded') in stdout
15+
16+
def perform_update(self):
17+
return self.host.run('apt-get --show-upgraded --assume-yes upgrade')

updatewrapper/flavor/redhat.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from updatewrapper.flavor import FlavorBase
2+
3+
4+
class Redhat(FlavorBase):
5+
def update_cache(self):
6+
return self.host.run('yum clean expire-cache')
7+
8+
def check_update(self):
9+
return self.host.run('yum check-update')
10+
11+
def has_update(self, returncode, stdout, stderr):
12+
return returncode == 100
13+
14+
def perform_update(self):
15+
return self.host.run('yum --assumeyes update')

updatewrapper/wrapper.py

Lines changed: 0 additions & 40 deletions
This file was deleted.

0 commit comments

Comments
 (0)