diff options
| author | Scott Moser <smoser@ubuntu.com> | 2016-03-03 15:24:44 -0500 | 
|---|---|---|
| committer | Scott Moser <smoser@ubuntu.com> | 2016-03-03 15:24:44 -0500 | 
| commit | b1046db66bbed6a063f218992449b8abfd1ae99b (patch) | |
| tree | 6257cc656dc780b81c7fbb7ff0b5e32a3a297d2b | |
| parent | 42d3efe69caeb2bb1ebdd67f1bae3e8f2134ff85 (diff) | |
| parent | cb64cf1e14a474794654f5d1586b117912bed4f9 (diff) | |
| download | vyos-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.py | 36 | ||||
| -rw-r--r-- | tests/unittests/test_handler/test_handler_lxd.py | 16 | 
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) | 
