summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cloudinit/config/cc_growpart.py26
-rw-r--r--tests/unittests/test_handler/test_handler_growpart.py35
2 files changed, 40 insertions, 21 deletions
diff --git a/cloudinit/config/cc_growpart.py b/cloudinit/config/cc_growpart.py
index 96e72350..6d647be1 100644
--- a/cloudinit/config/cc_growpart.py
+++ b/cloudinit/config/cc_growpart.py
@@ -26,6 +26,12 @@ from cloudinit import util
frequency = PER_ALWAYS
+DEFAULT_CONFIG = {
+ 'mode': 'auto',
+ 'devices': ['/'],
+}
+
+
def resizer_factory(mode):
resize_class = None
if mode == "auto":
@@ -144,7 +150,7 @@ def devent2dev(devent):
return result[0]
-def resize(resizer, devices, log):
+def resize_devices(resizer, devices, log):
resized = []
for devent in devices:
try:
@@ -185,8 +191,9 @@ def resize(resizer, devices, log):
def handle(name, cfg, _cloud, log, _args):
if 'growpart' not in cfg:
- log.debug("Skipping module named %s, no growpart entry", name)
- return
+ log.debug("No 'growpart' entry in cfg. Using default: %s" %
+ DEFAULT_CONFIG)
+ cfg['growpart'] = DEFAULT_CONFIG
mycfg = cfg.get('growpart')
if not isinstance(mycfg, dict):
@@ -198,6 +205,11 @@ def handle(name, cfg, _cloud, log, _args):
log.debug("growpart disabled: mode=%s" % mode)
return
+ devices = util.get_cfg_option_list(cfg, "devices", ["/"])
+ if not len(devices):
+ log.debug("growpart: empty device list")
+ return
+
try:
resizer = resizer_factory(mode)
except (ValueError, TypeError) as e:
@@ -206,14 +218,8 @@ def handle(name, cfg, _cloud, log, _args):
raise e
return
- devices = util.get_cfg_option_list(cfg, "devices", ["/"])
- if not len(devices):
- log.debug("growpart: empty device list")
- return
-
- resized = resize(resizer, devices, log)
+ resized = resize_devices(resizer, devices, log)
log.debug("resized: %s" % resized)
RESIZERS = (('parted', ResizeParted), ('growpart', ResizeGrowPart))
-
diff --git a/tests/unittests/test_handler/test_handler_growpart.py b/tests/unittests/test_handler/test_handler_growpart.py
index 7fb58a06..9a033d6b 100644
--- a/tests/unittests/test_handler/test_handler_growpart.py
+++ b/tests/unittests/test_handler/test_handler_growpart.py
@@ -106,16 +106,6 @@ class TestDisabled(MockerTestCase):
self.handle(self.name, config, self.cloud_init, self.log, self.args)
- def test_no_config(self):
- #Test that nothing is done if no 'growpart' config
- config = { }
- self.mocker.replace(cc_growpart.resizer_factory,
- passthrough=False)
- self.mocker.replay()
-
- self.handle(self.name, config, self.cloud_init, self.log, self.args)
-
-
class TestConfig(MockerTestCase):
def setUp(self):
super(TestConfig, self).setUp()
@@ -162,6 +152,28 @@ class TestConfig(MockerTestCase):
ret = cc_growpart.resizer_factory(mode="auto")
self.assertTrue(isinstance(ret, cc_growpart.ResizeParted))
+ def test_handle_with_no_growpart_entry(self):
+ #if no 'growpart' entry in config, then mode=auto should be used
+
+ myresizer = object()
+
+ factory = self.mocker.replace(cc_growpart.resizer_factory,
+ passthrough=False)
+ rsdevs = self.mocker.replace(cc_growpart.resize_devices,
+ passthrough=False)
+ factory("auto")
+ self.mocker.result(myresizer)
+ rsdevs(myresizer, ["/"], self.log)
+ self.mocker.result(["/"])
+ self.mocker.replay()
+
+ try:
+ orig_resizers = cc_growpart.RESIZERS
+ cc_growpart.RESIZERS = (('mysizer', object),)
+ self.handle(self.name, {}, self.cloud_init, self.log, self.args)
+ finally:
+ cc_growpart.RESIZERS = orig_resizers
+
class TestResize(MockerTestCase):
def setUp(self):
@@ -203,7 +215,8 @@ class TestResize(MockerTestCase):
cc_growpart.device_part_info = simple_device_part_info
os.stat = mystat
- resized = cc_growpart.resize(myresizer(), devs + enoent, self.log)
+ resized = cc_growpart.resize_devices(myresizer(), devs + enoent,
+ self.log)
self.assertEqual(devs, resized)
self.assertEqual(resize_calls,