diff options
| author | Sankar Tanguturi <stanguturi@stanguturi-rhel> | 2016-03-11 11:29:15 -0800 | 
|---|---|---|
| committer | Sankar Tanguturi <stanguturi@stanguturi-rhel> | 2016-03-11 11:29:15 -0800 | 
| commit | a3fd7441f8ea4d25e96b9bc0eca7cbb6164a4691 (patch) | |
| tree | 74a6ebbe7c91c30467577eb231fab8c5f188b93c /cloudinit/config/cc_lxd.py | |
| parent | a6e0922a4d34ede6df000dd8fc4bb3531218d69f (diff) | |
| parent | 41470d29f5888baf7ec78e170cc0d6d981dcf63e (diff) | |
| download | vyos-cloud-init-a3fd7441f8ea4d25e96b9bc0eca7cbb6164a4691.tar.gz vyos-cloud-init-a3fd7441f8ea4d25e96b9bc0eca7cbb6164a4691.zip | |
- Executed 'bzr merge' and resolved all the conflicts.
- Now my branch is identical to trunk.dist
Diffstat (limited to 'cloudinit/config/cc_lxd.py')
| -rw-r--r-- | cloudinit/config/cc_lxd.py | 85 | 
1 files changed, 85 insertions, 0 deletions
| diff --git a/cloudinit/config/cc_lxd.py b/cloudinit/config/cc_lxd.py new file mode 100644 index 00000000..63b8fb63 --- /dev/null +++ b/cloudinit/config/cc_lxd.py @@ -0,0 +1,85 @@ +# vi: ts=4 expandtab +# +#    Copyright (C) 2016 Canonical Ltd. +# +#    Author: Wesley Wiedenmeier <wesley.wiedenmeier@canonical.com> +# +#    This program is free software: you can redistribute it and/or modify +#    it under the terms of the GNU General Public License version 3, as +#    published by the Free Software Foundation. +# +#    This program is distributed in the hope that it will be useful, +#    but WITHOUT ANY WARRANTY; without even the implied warranty of +#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +#    GNU General Public License for more details. +# +#    You should have received a copy of the GNU General Public License +#    along with this program.  If not, see <http://www.gnu.org/licenses/>. + +""" +This module initializes lxd using 'lxd init' + +Example config: +  #cloud-config +  lxd: +    init: +      network_address: <ip addr> +      network_port: <port> +      storage_backend: <zfs/dir> +      storage_create_device: <dev> +      storage_create_loop: <size> +      storage_pool: <name> +      trust_password: <password> +""" + +from cloudinit import util + + +def handle(name, cfg, cloud, log, args): +    # Get config +    lxd_cfg = cfg.get('lxd') +    if not lxd_cfg: +        log.debug("Skipping module named %s, not present or disabled by cfg") +        return +    if not isinstance(lxd_cfg, dict): +        log.warn("lxd config must be a dictionary. found a '%s'", +                 type(lxd_cfg)) +        return + +    init_cfg = lxd_cfg.get('init') +    if not isinstance(init_cfg, dict): +        log.warn("lxd/init config must be a dictionary. found a '%s'", +                 type(init_cfg)) +        init_cfg = {} + +    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 exc: +            log.warn("failed to install packages %s: %s", packages, exc) +            return + +    # Set up lxd if init config is given +    init_keys = ( +        'network_address', 'network_port', 'storage_backend', +        'storage_create_device', 'storage_create_loop', +        'storage_pool', 'trust_password') +    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) | 
