OXIESEC PANEL
- Current Dir:
/
/
usr
/
lib
/
python3
/
dist-packages
/
cloudinit
/
config
Server IP: 10.0.0.4
Upload:
Create Dir:
Name
Size
Modified
Perms
📁
..
-
07/01/2022 06:30:50 AM
rwxr-xr-x
📄
__init__.py
0 bytes
05/18/2022 04:04:36 PM
rw-r--r--
📁
__pycache__
-
07/01/2022 06:30:50 AM
rwxr-xr-x
📄
cc_apk_configure.py
5.56 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_apt_configure.py
31.87 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_apt_pipelining.py
2.63 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_bootcmd.py
2.69 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_byobu.py
3.49 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_ca_certs.py
7.34 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_chef.py
13.62 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_debug.py
3.37 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_disable_ec2_metadata.py
1.85 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_disk_setup.py
32 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_fan.py
2.93 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_final_message.py
2.97 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_growpart.py
18.87 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_grub_dpkg.py
5.62 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_install_hotplug.py
3.64 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_keyboard.py
1.87 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_keys_to_console.py
3.45 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_landscape.py
4.67 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_locale.py
1.7 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_lxd.py
11.12 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_mcollective.py
6.01 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_migrator.py
3.34 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_mounts.py
19.33 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_ntp.py
16.53 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_package_update_upgrade_install.py
4.13 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_phone_home.py
5.3 KB
06/15/2022 04:38:21 PM
rw-r--r--
📄
cc_power_state_change.py
7.47 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_puppet.py
12.86 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_refresh_rmc_and_interface.py
5.31 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_reset_rmc.py
4.36 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_resizefs.py
9.9 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_resolv_conf.py
4.5 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_rh_subscription.py
16.86 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_rightscale_userdata.py
4.05 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_rsyslog.py
9.58 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_runcmd.py
2.66 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_salt_minion.py
5.36 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_scripts_per_boot.py
1.5 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_scripts_per_instance.py
1.66 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_scripts_per_once.py
1.61 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_scripts_user.py
1.69 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_scripts_vendor.py
2.14 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_seed_random.py
4.64 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_set_hostname.py
4.45 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_set_passwords.py
10.17 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_snap.py
6.16 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_spacewalk.py
3.33 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_ssh.py
13.88 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_ssh_authkey_fingerprints.py
4.06 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_ssh_import_id.py
5.63 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_timezone.py
1.25 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_ubuntu_advantage.py
5.67 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_ubuntu_drivers.py
4.63 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_update_etc_hosts.py
4.93 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_update_hostname.py
3.22 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_users_groups.py
7.43 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_write_files.py
6.46 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_write_files_deferred.py
1.46 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_yum_add_repo.py
6.92 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
cc_zypper_add_repo.py
6.31 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
modules.py
10.57 KB
05/18/2022 04:04:36 PM
rw-r--r--
📄
schema.py
27.82 KB
06/15/2022 04:38:21 PM
rw-r--r--
📁
schemas
-
07/01/2022 06:30:50 AM
rwxr-xr-x
Editing: cc_lxd.py
Close
# Copyright (C) 2016 Canonical Ltd. # # Author: Wesley Wiedenmeier <wesley.wiedenmeier@canonical.com> # # This file is part of cloud-init. See LICENSE file for license information. """LXD: configure lxd with ``lxd init`` and optionally lxd-bridge""" import os from textwrap import dedent from cloudinit import log as logging from cloudinit import subp, util from cloudinit.config.schema import MetaSchema, get_meta_doc from cloudinit.settings import PER_INSTANCE LOG = logging.getLogger(__name__) _DEFAULT_NETWORK_NAME = "lxdbr0" MODULE_DESCRIPTION = """\ This module configures lxd with user specified options using ``lxd init``. If lxd is not present on the system but lxd configuration is provided, then lxd will be installed. If the selected storage backend is zfs, then zfs will be installed if missing. If network bridge configuration is provided, then lxd-bridge will be configured accordingly. """ distros = ["ubuntu"] meta: MetaSchema = { "id": "cc_lxd", "name": "LXD", "title": "Configure LXD with ``lxd init`` and optionally lxd-bridge", "description": MODULE_DESCRIPTION, "distros": distros, "examples": [ dedent( """\ # Simplest working directory backed LXD configuration lxd: init: storage_backend: dir """ ), dedent( """\ lxd: init: network_address: 0.0.0.0 network_port: 8443 storage_backend: zfs storage_pool: datapool storage_create_loop: 10 bridge: mode: new name: lxdbr0 ipv4_address: 10.0.8.1 ipv4_netmask: 24 ipv4_dhcp_first: 10.0.8.2 ipv4_dhcp_last: 10.0.8.3 ipv4_dhcp_leases: 250 ipv4_nat: true ipv6_address: fd98:9e0:3744::1 ipv6_netmask: 64 ipv6_nat: true domain: lxd """ ), ], "frequency": PER_INSTANCE, } __doc__ = get_meta_doc(meta) 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", name ) return if not isinstance(lxd_cfg, dict): log.warning( "lxd config must be a dictionary. found a '%s'", type(lxd_cfg) ) return # Grab the configuration init_cfg = lxd_cfg.get("init") if not isinstance(init_cfg, dict): log.warning( "lxd/init config must be a dictionary. found a '%s'", type(init_cfg), ) init_cfg = {} bridge_cfg = lxd_cfg.get("bridge", {}) if not isinstance(bridge_cfg, dict): log.warning( "lxd/bridge config must be a dictionary. found a '%s'", type(bridge_cfg), ) bridge_cfg = {} # Install the needed packages packages = [] if not subp.which("lxd"): packages.append("lxd") if init_cfg.get("storage_backend") == "zfs" and not subp.which("zfs"): packages.append("zfsutils-linux") if len(packages): try: cloud.distro.install_packages(packages) except subp.ProcessExecutionError as exc: log.warning("failed to install packages %s: %s", packages, exc) return # Set up lxd if init config is given if init_cfg: init_keys = ( "network_address", "network_port", "storage_backend", "storage_create_device", "storage_create_loop", "storage_pool", "trust_password", ) subp.subp(["lxd", "waitready", "--timeout=300"]) cmd = ["lxd", "init", "--auto"] for k in init_keys: if init_cfg.get(k): cmd.extend( ["--%s=%s" % (k.replace("_", "-"), str(init_cfg[k]))] ) subp.subp(cmd) # Set up lxd-bridge if bridge config is given dconf_comm = "debconf-communicate" if bridge_cfg: net_name = bridge_cfg.get("name", _DEFAULT_NETWORK_NAME) if os.path.exists("/etc/default/lxd-bridge") and subp.which( dconf_comm ): # Bridge configured through packaging debconf = bridge_to_debconf(bridge_cfg) # Update debconf database try: log.debug("Setting lxd debconf via " + dconf_comm) data = ( "\n".join( ["set %s %s" % (k, v) for k, v in debconf.items()] ) + "\n" ) subp.subp(["debconf-communicate"], data) except Exception: util.logexc( log, "Failed to run '%s' for lxd with" % dconf_comm ) # Remove the existing configuration file (forces re-generation) util.del_file("/etc/default/lxd-bridge") # Run reconfigure log.debug("Running dpkg-reconfigure for lxd") subp.subp(["dpkg-reconfigure", "lxd", "--frontend=noninteractive"]) else: # Built-in LXD bridge support cmd_create, cmd_attach = bridge_to_cmd(bridge_cfg) maybe_cleanup_default( net_name=net_name, did_init=bool(init_cfg), create=bool(cmd_create), attach=bool(cmd_attach), ) if cmd_create: log.debug("Creating lxd bridge: %s" % " ".join(cmd_create)) _lxc(cmd_create) if cmd_attach: log.debug( "Setting up default lxd bridge: %s" % " ".join(cmd_attach) ) _lxc(cmd_attach) elif bridge_cfg: raise RuntimeError( "Unable to configure lxd bridge without %s." + dconf_comm ) def bridge_to_debconf(bridge_cfg): debconf = {} if bridge_cfg.get("mode") == "none": debconf["lxd/setup-bridge"] = "false" debconf["lxd/bridge-name"] = "" elif bridge_cfg.get("mode") == "existing": debconf["lxd/setup-bridge"] = "false" debconf["lxd/use-existing-bridge"] = "true" debconf["lxd/bridge-name"] = bridge_cfg.get("name") elif bridge_cfg.get("mode") == "new": debconf["lxd/setup-bridge"] = "true" if bridge_cfg.get("name"): debconf["lxd/bridge-name"] = bridge_cfg.get("name") if bridge_cfg.get("ipv4_address"): debconf["lxd/bridge-ipv4"] = "true" debconf["lxd/bridge-ipv4-address"] = bridge_cfg.get("ipv4_address") debconf["lxd/bridge-ipv4-netmask"] = bridge_cfg.get("ipv4_netmask") debconf["lxd/bridge-ipv4-dhcp-first"] = bridge_cfg.get( "ipv4_dhcp_first" ) debconf["lxd/bridge-ipv4-dhcp-last"] = bridge_cfg.get( "ipv4_dhcp_last" ) debconf["lxd/bridge-ipv4-dhcp-leases"] = bridge_cfg.get( "ipv4_dhcp_leases" ) debconf["lxd/bridge-ipv4-nat"] = bridge_cfg.get("ipv4_nat", "true") if bridge_cfg.get("ipv6_address"): debconf["lxd/bridge-ipv6"] = "true" debconf["lxd/bridge-ipv6-address"] = bridge_cfg.get("ipv6_address") debconf["lxd/bridge-ipv6-netmask"] = bridge_cfg.get("ipv6_netmask") debconf["lxd/bridge-ipv6-nat"] = bridge_cfg.get( "ipv6_nat", "false" ) if bridge_cfg.get("domain"): debconf["lxd/bridge-domain"] = bridge_cfg.get("domain") else: raise Exception('invalid bridge mode "%s"' % bridge_cfg.get("mode")) return debconf def bridge_to_cmd(bridge_cfg): if bridge_cfg.get("mode") == "none": return None, None bridge_name = bridge_cfg.get("name", _DEFAULT_NETWORK_NAME) cmd_create = [] cmd_attach = ["network", "attach-profile", bridge_name, "default", "eth0"] if bridge_cfg.get("mode") == "existing": return None, cmd_attach if bridge_cfg.get("mode") != "new": raise Exception('invalid bridge mode "%s"' % bridge_cfg.get("mode")) cmd_create = ["network", "create", bridge_name] if bridge_cfg.get("ipv4_address") and bridge_cfg.get("ipv4_netmask"): cmd_create.append( "ipv4.address=%s/%s" % (bridge_cfg.get("ipv4_address"), bridge_cfg.get("ipv4_netmask")) ) if bridge_cfg.get("ipv4_nat", "true") == "true": cmd_create.append("ipv4.nat=true") if bridge_cfg.get("ipv4_dhcp_first") and bridge_cfg.get( "ipv4_dhcp_last" ): dhcp_range = "%s-%s" % ( bridge_cfg.get("ipv4_dhcp_first"), bridge_cfg.get("ipv4_dhcp_last"), ) cmd_create.append("ipv4.dhcp.ranges=%s" % dhcp_range) else: cmd_create.append("ipv4.address=none") if bridge_cfg.get("ipv6_address") and bridge_cfg.get("ipv6_netmask"): cmd_create.append( "ipv6.address=%s/%s" % (bridge_cfg.get("ipv6_address"), bridge_cfg.get("ipv6_netmask")) ) if bridge_cfg.get("ipv6_nat", "false") == "true": cmd_create.append("ipv6.nat=true") else: cmd_create.append("ipv6.address=none") if bridge_cfg.get("domain"): cmd_create.append("dns.domain=%s" % bridge_cfg.get("domain")) return cmd_create, cmd_attach def _lxc(cmd): env = { "LC_ALL": "C", "HOME": os.environ.get("HOME", "/root"), "USER": os.environ.get("USER", "root"), } subp.subp(["lxc"] + list(cmd) + ["--force-local"], update_env=env) def maybe_cleanup_default( net_name, did_init, create, attach, profile="default", nic_name="eth0" ): """Newer versions of lxc (3.0.1+) create a lxdbr0 network when 'lxd init --auto' is run. Older versions did not. By removing any that lxd-init created, we simply leave the add/attach code intact. https://github.com/lxc/lxd/issues/4649""" if net_name != _DEFAULT_NETWORK_NAME or not did_init: return fail_assume_enoent = "failed. Assuming it did not exist." succeeded = "succeeded." if create: msg = "Detach of lxd network '%s' from profile '%s' %s" try: _lxc(["network", "detach-profile", net_name, profile]) LOG.debug(msg, net_name, profile, succeeded) except subp.ProcessExecutionError as e: if e.exit_code != 1: raise e LOG.debug(msg, net_name, profile, fail_assume_enoent) else: msg = "Deletion of lxd network '%s' %s" _lxc(["network", "delete", net_name]) LOG.debug(msg, net_name, succeeded) if attach: msg = "Removal of device '%s' from profile '%s' %s" try: _lxc(["profile", "device", "remove", profile, nic_name]) LOG.debug(msg, nic_name, profile, succeeded) except subp.ProcessExecutionError as e: if e.exit_code != 1: raise e LOG.debug(msg, nic_name, profile, fail_assume_enoent) # vi: ts=4 expandtab