summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Moser <smoser@ubuntu.com>2016-03-03 15:24:44 -0500
committerScott Moser <smoser@ubuntu.com>2016-03-03 15:24:44 -0500
commitb1046db66bbed6a063f218992449b8abfd1ae99b (patch)
tree6257cc656dc780b81c7fbb7ff0b5e32a3a297d2b
parent42d3efe69caeb2bb1ebdd67f1bae3e8f2134ff85 (diff)
parentcb64cf1e14a474794654f5d1586b117912bed4f9 (diff)
downloadvyos-cloud-init-b1046db66bbed6a063f218992449b8abfd1ae99b.tar.gz
vyos-cloud-init-b1046db66bbed6a063f218992449b8abfd1ae99b.zip
lxd fix bug and only run if enabled.
The lxd module would run lxd init even if no lxd/init config was provided.
-rw-r--r--cloudinit/config/cc_lxd.py36
-rw-r--r--tests/unittests/test_handler/test_handler_lxd.py16
2 files changed, 34 insertions, 18 deletions
diff --git a/cloudinit/config/cc_lxd.py b/cloudinit/config/cc_lxd.py
index 84eec7a5..63b8fb63 100644
--- a/cloudinit/config/cc_lxd.py
+++ b/cloudinit/config/cc_lxd.py
@@ -47,27 +47,29 @@ def handle(name, cfg, cloud, log, args):
return
init_cfg = lxd_cfg.get('init')
- if not init_cfg:
- init_cfg = {}
-
if not isinstance(init_cfg, dict):
log.warn("lxd/init config must be a dictionary. found a '%s'",
- type(init_cfg))
+ type(init_cfg))
init_cfg = {}
- packages = []
- if (init_cfg.get("storage_backend") == "zfs" and not util.which('zfs')):
- packages.append('zfs')
+ if not init_cfg:
+ log.debug("no lxd/init config. disabled.")
+ return
+ packages = []
# Ensure lxd is installed
if not util.which("lxd"):
packages.append('lxd')
-
+
+ # if using zfs, get the utils
+ if init_cfg.get("storage_backend") == "zfs" and not util.which('zfs'):
+ packages.append('zfs')
+
if len(packages):
try:
cloud.distro.install_packages(packages)
- except util.ProcessExecutionError as e:
- log.warn("failed to install packages %s: %s", packages, e)
+ except util.ProcessExecutionError as exc:
+ log.warn("failed to install packages %s: %s", packages, exc)
return
# Set up lxd if init config is given
@@ -75,11 +77,9 @@ def handle(name, cfg, cloud, log, args):
'network_address', 'network_port', 'storage_backend',
'storage_create_device', 'storage_create_loop',
'storage_pool', 'trust_password')
-
- if init_cfg:
- cmd = ['lxd', 'init', '--auto']
- for k in init_keys:
- if init_cfg.get(k):
- cmd.extend(["--%s=%s" %
- (k.replace('_', '-'), str(init_cfg[k]))])
- util.subp(cmd)
+ cmd = ['lxd', 'init', '--auto']
+ for k in init_keys:
+ if init_cfg.get(k):
+ cmd.extend(["--%s=%s" %
+ (k.replace('_', '-'), str(init_cfg[k]))])
+ util.subp(cmd)
diff --git a/tests/unittests/test_handler/test_handler_lxd.py b/tests/unittests/test_handler/test_handler_lxd.py
index 65794a41..7ffa2a53 100644
--- a/tests/unittests/test_handler/test_handler_lxd.py
+++ b/tests/unittests/test_handler/test_handler_lxd.py
@@ -57,3 +57,19 @@ class TestLxd(t_help.TestCase):
self.assertTrue(cc.distro.install_packages.called)
install_pkg = cc.distro.install_packages.call_args_list[0][0][0]
self.assertEquals(sorted(install_pkg), ['lxd', 'zfs'])
+
+ @mock.patch("cloudinit.config.cc_lxd.util")
+ def test_no_init_does_nothing(self, mock_util):
+ cc = self._get_cloud('ubuntu')
+ cc.distro = mock.MagicMock()
+ cc_lxd.handle('cc_lxd', {'lxd': {}}, cc, LOG, [])
+ self.assertFalse(cc.distro.install_packages.called)
+ self.assertFalse(mock_util.subp.called)
+
+ @mock.patch("cloudinit.config.cc_lxd.util")
+ def test_no_lxd_does_nothing(self, mock_util):
+ cc = self._get_cloud('ubuntu')
+ cc.distro = mock.MagicMock()
+ cc_lxd.handle('cc_lxd', {'package_update': True}, cc, LOG, [])
+ self.assertFalse(cc.distro.install_packages.called)
+ self.assertFalse(mock_util.subp.called)