X7ROOT File Manager
Current Path:
/usr/lib/python2.7/site-packages/cloudinit/config
usr
/
lib
/
python2.7
/
site-packages
/
cloudinit
/
config
/
📁
..
📄
__init__.py
(1.4 KB)
📄
__init__.pyc
(1.31 KB)
📄
__init__.pyo
(1.31 KB)
📄
cc_apt_configure.py
(32.8 KB)
📄
cc_apt_configure.pyc
(30.2 KB)
📄
cc_apt_configure.pyo
(30.2 KB)
📄
cc_apt_pipelining.py
(2.44 KB)
📄
cc_apt_pipelining.pyc
(2.48 KB)
📄
cc_apt_pipelining.pyo
(2.48 KB)
📄
cc_bootcmd.py
(3.5 KB)
📄
cc_bootcmd.pyc
(3.02 KB)
📄
cc_bootcmd.pyo
(3.02 KB)
📄
cc_byobu.py
(3.1 KB)
📄
cc_byobu.pyc
(3.09 KB)
📄
cc_byobu.pyo
(3.09 KB)
📄
cc_ca_certs.py
(4.09 KB)
📄
cc_ca_certs.pyc
(4.1 KB)
📄
cc_ca_certs.pyo
(4.1 KB)
📄
cc_chef.py
(13.17 KB)
📄
cc_chef.pyc
(10.79 KB)
📄
cc_chef.pyo
(10.79 KB)
📄
cc_debug.py
(3.08 KB)
📄
cc_debug.pyc
(3.35 KB)
📄
cc_debug.pyo
(3.35 KB)
📄
cc_disable_ec2_metadata.py
(1.56 KB)
📄
cc_disable_ec2_metadata.pyc
(1.57 KB)
📄
cc_disable_ec2_metadata.pyo
(1.57 KB)
📄
cc_disk_setup.py
(32.8 KB)
📄
cc_disk_setup.pyc
(28.91 KB)
📄
cc_disk_setup.pyo
(28.91 KB)
📄
cc_emit_upstart.py
(2 KB)
📄
cc_emit_upstart.pyc
(2.15 KB)
📄
cc_emit_upstart.pyo
(2.15 KB)
📄
cc_fan.py
(2.83 KB)
📄
cc_fan.pyc
(3.09 KB)
📄
cc_fan.pyo
(3.09 KB)
📄
cc_final_message.py
(2.35 KB)
📄
cc_final_message.pyc
(2.39 KB)
📄
cc_final_message.pyo
(2.39 KB)
📄
cc_foo.py
(2.07 KB)
📄
cc_foo.pyc
(702 B)
📄
cc_foo.pyo
(702 B)
📄
cc_growpart.py
(11.51 KB)
📄
cc_growpart.pyc
(11.12 KB)
📄
cc_growpart.pyo
(11.12 KB)
📄
cc_grub_dpkg.py
(2.87 KB)
📄
cc_grub_dpkg.pyc
(2.63 KB)
📄
cc_grub_dpkg.pyo
(2.63 KB)
📄
cc_keys_to_console.py
(2.36 KB)
📄
cc_keys_to_console.pyc
(2.39 KB)
📄
cc_keys_to_console.pyo
(2.39 KB)
📄
cc_landscape.py
(3.93 KB)
📄
cc_landscape.pyc
(4.02 KB)
📄
cc_landscape.pyo
(4.02 KB)
📄
cc_locale.py
(1.16 KB)
📄
cc_locale.pyc
(1.16 KB)
📄
cc_locale.pyo
(1.16 KB)
📄
cc_lxd.py
(10.27 KB)
📄
cc_lxd.pyc
(8.33 KB)
📄
cc_lxd.pyo
(8.33 KB)
📄
cc_mcollective.py
(5.08 KB)
📄
cc_mcollective.pyc
(3.8 KB)
📄
cc_mcollective.pyo
(3.8 KB)
📄
cc_migrator.py
(3.07 KB)
📄
cc_migrator.pyc
(3.18 KB)
📄
cc_migrator.pyo
(3.18 KB)
📄
cc_mounts.py
(17.24 KB)
📄
cc_mounts.pyc
(14.59 KB)
📄
cc_mounts.pyo
(14.59 KB)
📄
cc_ntp.py
(20.19 KB)
📄
cc_ntp.pyc
(15.74 KB)
📄
cc_ntp.pyo
(15.74 KB)
📄
cc_package_update_upgrade_install.py
(4.11 KB)
📄
cc_package_update_upgrade_install.pyc
(4.01 KB)
📄
cc_package_update_upgrade_install.pyo
(4.01 KB)
📄
cc_phone_home.py
(3.92 KB)
📄
cc_phone_home.pyc
(3.28 KB)
📄
cc_phone_home.pyo
(3.28 KB)
📄
cc_power_state_change.py
(7.65 KB)
📄
cc_power_state_change.pyc
(7.8 KB)
📄
cc_power_state_change.pyo
(7.8 KB)
📄
cc_puppet.py
(8.86 KB)
📄
cc_puppet.pyc
(7.06 KB)
📄
cc_puppet.pyo
(7.06 KB)
📄
cc_resizefs.py
(10.79 KB)
📄
cc_resizefs.pyc
(9.15 KB)
📄
cc_resizefs.pyo
(9.15 KB)
📄
cc_resolv_conf.py
(3.43 KB)
📄
cc_resolv_conf.pyc
(3.44 KB)
📄
cc_resolv_conf.pyo
(3.44 KB)
📄
cc_rh_subscription.py
(15.65 KB)
📄
cc_rh_subscription.pyc
(13.5 KB)
📄
cc_rh_subscription.pyo
(13.5 KB)
📄
cc_rightscale_userdata.py
(3.76 KB)
📄
cc_rightscale_userdata.pyc
(2.82 KB)
📄
cc_rightscale_userdata.pyo
(2.82 KB)
📄
cc_rsyslog.py
(14.1 KB)
📄
cc_rsyslog.pyc
(10.56 KB)
📄
cc_rsyslog.pyo
(10.56 KB)
📄
cc_runcmd.py
(3.11 KB)
📄
cc_runcmd.pyc
(2.73 KB)
📄
cc_runcmd.pyo
(2.73 KB)
📄
cc_salt_minion.py
(4.66 KB)
📄
cc_salt_minion.pyc
(3.78 KB)
📄
cc_salt_minion.pyo
(3.78 KB)
📄
cc_scripts_per_boot.py
(1.2 KB)
📄
cc_scripts_per_boot.pyc
(1.2 KB)
📄
cc_scripts_per_boot.pyo
(1.2 KB)
📄
cc_scripts_per_instance.py
(1.38 KB)
📄
cc_scripts_per_instance.pyc
(1.38 KB)
📄
cc_scripts_per_instance.pyo
(1.38 KB)
📄
cc_scripts_per_once.py
(1.31 KB)
📄
cc_scripts_per_once.pyc
(1.31 KB)
📄
cc_scripts_per_once.pyo
(1.31 KB)
📄
cc_scripts_user.py
(1.42 KB)
📄
cc_scripts_user.pyc
(1.38 KB)
📄
cc_scripts_user.pyo
(1.38 KB)
📄
cc_scripts_vendor.py
(1.38 KB)
📄
cc_scripts_vendor.pyc
(1.46 KB)
📄
cc_scripts_vendor.pyo
(1.46 KB)
📄
cc_seed_random.py
(4.39 KB)
📄
cc_seed_random.pyc
(4.53 KB)
📄
cc_seed_random.pyo
(4.53 KB)
📄
cc_set_hostname.py
(2.95 KB)
📄
cc_set_hostname.pyc
(2.72 KB)
📄
cc_set_hostname.pyo
(2.72 KB)
📄
cc_set_passwords.py
(8.45 KB)
📄
cc_set_passwords.pyc
(7.62 KB)
📄
cc_set_passwords.pyo
(7.62 KB)
📄
cc_snap.py
(8.11 KB)
📄
cc_snap.pyc
(7.54 KB)
📄
cc_snap.pyo
(7.54 KB)
📄
cc_snap_config.py
(5.37 KB)
📄
cc_snap_config.pyc
(5.03 KB)
📄
cc_snap_config.pyo
(5.03 KB)
📄
cc_snappy.py
(9.69 KB)
📄
cc_snappy.pyc
(9.27 KB)
📄
cc_snappy.pyo
(9.27 KB)
📄
cc_spacewalk.py
(2.89 KB)
📄
cc_spacewalk.pyc
(2.91 KB)
📄
cc_spacewalk.pyo
(2.91 KB)
📄
cc_ssh.py
(10.59 KB)
📄
cc_ssh.pyc
(9.11 KB)
📄
cc_ssh.pyo
(9.11 KB)
📄
cc_ssh_authkey_fingerprints.py
(3.43 KB)
📄
cc_ssh_authkey_fingerprints.pyc
(3.94 KB)
📄
cc_ssh_authkey_fingerprints.pyo
(3.94 KB)
📄
cc_ssh_import_id.py
(2.88 KB)
📄
cc_ssh_import_id.pyc
(2.72 KB)
📄
cc_ssh_import_id.pyo
(2.72 KB)
📄
cc_timezone.py
(1.15 KB)
📄
cc_timezone.pyc
(1.15 KB)
📄
cc_timezone.pyo
(1.15 KB)
📄
cc_ubuntu_advantage.py
(6.08 KB)
📄
cc_ubuntu_advantage.pyc
(6.12 KB)
📄
cc_ubuntu_advantage.pyo
(6.12 KB)
📄
cc_ubuntu_drivers.py
(5.66 KB)
📄
cc_ubuntu_drivers.pyc
(4.63 KB)
📄
cc_ubuntu_drivers.pyo
(4.63 KB)
📄
cc_update_etc_hosts.py
(3.33 KB)
📄
cc_update_etc_hosts.pyc
(2.99 KB)
📄
cc_update_etc_hosts.pyo
(2.99 KB)
📄
cc_update_hostname.py
(1.58 KB)
📄
cc_update_hostname.pyc
(1.66 KB)
📄
cc_update_hostname.pyo
(1.66 KB)
📄
cc_users_groups.py
(7.06 KB)
📄
cc_users_groups.pyc
(6.76 KB)
📄
cc_users_groups.pyo
(6.76 KB)
📄
cc_write_files.py
(4.95 KB)
📄
cc_write_files.pyc
(5.13 KB)
📄
cc_write_files.pyo
(5.13 KB)
📄
cc_yum_add_repo.py
(4.27 KB)
📄
cc_yum_add_repo.pyc
(3.88 KB)
📄
cc_yum_add_repo.pyo
(3.88 KB)
📄
cc_zypper_add_repo.py
(7.62 KB)
📄
cc_zypper_add_repo.pyc
(7.12 KB)
📄
cc_zypper_add_repo.pyo
(7.12 KB)
📄
schema.py
(14.06 KB)
📄
schema.pyc
(13.83 KB)
📄
schema.pyo
(13.83 KB)
Editing: cc_resizefs.py
# Copyright (C) 2011 Canonical Ltd. # Copyright (C) 2012 Hewlett-Packard Development Company, L.P. # # Author: Scott Moser <scott.moser@canonical.com> # Author: Juerg Haefliger <juerg.haefliger@hp.com> # # This file is part of cloud-init. See LICENSE file for license information. """Resizefs: cloud-config module which resizes the filesystem""" import errno import getopt import os import re import shlex import stat from textwrap import dedent from cloudinit.config.schema import ( get_schema_doc, validate_cloudconfig_schema) from cloudinit.settings import PER_ALWAYS from cloudinit import util NOBLOCK = "noblock" frequency = PER_ALWAYS distros = ['all'] schema = { 'id': 'cc_resizefs', 'name': 'Resizefs', 'title': 'Resize filesystem', 'description': dedent("""\ Resize a filesystem to use all avaliable space on partition. This module is useful along with ``cc_growpart`` and will ensure that if the root partition has been resized the root filesystem will be resized along with it. By default, ``cc_resizefs`` will resize the root partition and will block the boot process while the resize command is running. Optionally, the resize operation can be performed in the background while cloud-init continues running modules. This can be enabled by setting ``resize_rootfs`` to ``true``. This module can be disabled altogether by setting ``resize_rootfs`` to ``false``."""), 'distros': distros, 'examples': [ 'resize_rootfs: false # disable root filesystem resize operation'], 'frequency': PER_ALWAYS, 'type': 'object', 'properties': { 'resize_rootfs': { 'enum': [True, False, NOBLOCK], 'description': dedent("""\ Whether to resize the root partition. Default: 'true'""") } } } __doc__ = get_schema_doc(schema) # Supplement python help() def _resize_btrfs(mount_point, devpth): # If "/" is ro resize will fail. However it should be allowed since resize # makes everything bigger and subvolumes that are not ro will benefit. # Use a subvolume that is not ro to trick the resize operation to do the # "right" thing. The use of ".snapshot" is specific to "snapper" a generic # solution would be walk the subvolumes and find a rw mounted subvolume. if (not util.mount_is_read_write(mount_point) and os.path.isdir("%s/.snapshots" % mount_point)): return ('btrfs', 'filesystem', 'resize', 'max', '%s/.snapshots' % mount_point) else: return ('btrfs', 'filesystem', 'resize', 'max', mount_point) def _resize_ext(mount_point, devpth): return ('resize2fs', devpth) def _resize_xfs(mount_point, devpth): return ('xfs_growfs', mount_point) def _resize_ufs(mount_point, devpth): return ('growfs', '-y', mount_point) def _resize_zfs(mount_point, devpth): return ('zpool', 'online', '-e', mount_point, devpth) def _get_dumpfs_output(mount_point): return util.subp(['dumpfs', '-m', mount_point])[0] def _get_gpart_output(part): return util.subp(['gpart', 'show', part])[0] def _can_skip_resize_ufs(mount_point, devpth): # extract the current fs sector size """ # dumpfs -m / # newfs command for / (/dev/label/rootfs) newfs -L rootf -O 2 -U -a 4 -b 32768 -d 32768 -e 4096 -f 4096 -g 16384 -h 64 -i 8192 -j -k 6408 -m 8 -o time -s 58719232 /dev/label/rootf """ cur_fs_sz = None frag_sz = None dumpfs_res = _get_dumpfs_output(mount_point) for line in dumpfs_res.splitlines(): if not line.startswith('#'): newfs_cmd = shlex.split(line) opt_value = 'O:Ua:s:b:d:e:f:g:h:i:jk:m:o:L:' optlist, _args = getopt.getopt(newfs_cmd[1:], opt_value) for o, a in optlist: if o == "-s": cur_fs_sz = int(a) if o == "-f": frag_sz = int(a) # check the current partition size """ # gpart show /dev/da0 => 40 62914480 da0 GPT (30G) 40 1024 1 freebsd-boot (512K) 1064 58719232 2 freebsd-ufs (28G) 58720296 3145728 3 freebsd-swap (1.5G) 61866024 1048496 - free - (512M) """ expect_sz = None m = re.search('^(/dev/.+)p([0-9])$', devpth) gpart_res = _get_gpart_output(m.group(1)) for line in gpart_res.splitlines(): if re.search(r"freebsd-ufs", line): fields = line.split() expect_sz = int(fields[1]) # Normalize the gpart sector size, # because the size is not exactly the same as fs size. normal_expect_sz = (expect_sz - expect_sz % (frag_sz / 512)) if normal_expect_sz == cur_fs_sz: return True else: return False # Do not use a dictionary as these commands should be able to be used # for multiple filesystem types if possible, e.g. one command for # ext2, ext3 and ext4. RESIZE_FS_PREFIXES_CMDS = [ ('btrfs', _resize_btrfs), ('ext', _resize_ext), ('xfs', _resize_xfs), ('ufs', _resize_ufs), ('zfs', _resize_zfs), ] RESIZE_FS_PRECHECK_CMDS = { 'ufs': _can_skip_resize_ufs } def can_skip_resize(fs_type, resize_what, devpth): fstype_lc = fs_type.lower() for i, func in RESIZE_FS_PRECHECK_CMDS.items(): if fstype_lc.startswith(i): return func(resize_what, devpth) return False def maybe_get_writable_device_path(devpath, info, log): """Return updated devpath if the devpath is a writable block device. @param devpath: Requested path to the root device we want to resize. @param info: String representing information about the requested device. @param log: Logger to which logs will be added upon error. @returns devpath or updated devpath per kernel commandline if the device path is a writable block device, returns None otherwise. """ container = util.is_container() # Ensure the path is a block device. if (devpath == "/dev/root" and not os.path.exists(devpath) and not container): devpath = util.rootdev_from_cmdline(util.get_cmdline()) if devpath is None: log.warning("Unable to find device '/dev/root'") return None log.debug("Converted /dev/root to '%s' per kernel cmdline", devpath) if devpath == 'overlayroot': log.debug("Not attempting to resize devpath '%s': %s", devpath, info) return None # FreeBSD zpool can also just use gpt/<label> # with that in mind we can not do an os.stat on "gpt/whatever" # therefore return the devpath already here. if devpath.startswith('gpt/'): log.debug('We have a gpt label - just go ahead') return devpath # Alternatively, our device could simply be a name as returned by gpart, # such as da0p3 if not devpath.startswith('/dev/') and not os.path.exists(devpath): fulldevpath = '/dev/' + devpath.lstrip('/') log.debug("'%s' doesn't appear to be a valid device path. Trying '%s'", devpath, fulldevpath) devpath = fulldevpath try: statret = os.stat(devpath) except OSError as exc: if container and exc.errno == errno.ENOENT: log.debug("Device '%s' did not exist in container. " "cannot resize: %s", devpath, info) elif exc.errno == errno.ENOENT: log.warning("Device '%s' did not exist. cannot resize: %s", devpath, info) else: raise exc return None if not stat.S_ISBLK(statret.st_mode) and not stat.S_ISCHR(statret.st_mode): if container: log.debug("device '%s' not a block device in container." " cannot resize: %s" % (devpath, info)) else: log.warning("device '%s' not a block device. cannot resize: %s" % (devpath, info)) return None return devpath # The writable block devpath def handle(name, cfg, _cloud, log, args): if len(args) != 0: resize_root = args[0] else: resize_root = util.get_cfg_option_str(cfg, "resize_rootfs", True) validate_cloudconfig_schema(cfg, schema) if not util.translate_bool(resize_root, addons=[NOBLOCK]): log.debug("Skipping module named %s, resizing disabled", name) return # TODO(harlowja): allow what is to be resized to be configurable?? resize_what = "/" result = util.get_mount_info(resize_what, log) if not result: log.warning("Could not determine filesystem type of %s", resize_what) return (devpth, fs_type, mount_point) = result # if we have a zfs then our device path at this point # is the zfs label. For example: vmzroot/ROOT/freebsd # we will have to get the zpool name out of this # and set the resize_what variable to the zpool # so the _resize_zfs function gets the right attribute. if fs_type == 'zfs': zpool = devpth.split('/')[0] devpth = util.get_device_info_from_zpool(zpool) if not devpth: return # could not find device from zpool resize_what = zpool info = "dev=%s mnt_point=%s path=%s" % (devpth, mount_point, resize_what) log.debug("resize_info: %s" % info) devpth = maybe_get_writable_device_path(devpth, info, log) if not devpth: return # devpath was not a writable block device resizer = None if can_skip_resize(fs_type, resize_what, devpth): log.debug("Skip resize filesystem type %s for %s", fs_type, resize_what) return fstype_lc = fs_type.lower() for (pfix, root_cmd) in RESIZE_FS_PREFIXES_CMDS: if fstype_lc.startswith(pfix): resizer = root_cmd break if not resizer: log.warning("Not resizing unknown filesystem type %s for %s", fs_type, resize_what) return resize_cmd = resizer(resize_what, devpth) log.debug("Resizing %s (%s) using %s", resize_what, fs_type, ' '.join(resize_cmd)) if resize_root == NOBLOCK: # Fork to a child that will run # the resize command util.fork_cb( util.log_time, logfunc=log.debug, msg="backgrounded Resizing", func=do_resize, args=(resize_cmd, log)) else: util.log_time(logfunc=log.debug, msg="Resizing", func=do_resize, args=(resize_cmd, log)) action = 'Resized' if resize_root == NOBLOCK: action = 'Resizing (via forking)' log.debug("%s root filesystem (type=%s, val=%s)", action, fs_type, resize_root) def do_resize(resize_cmd, log): try: util.subp(resize_cmd) except util.ProcessExecutionError: util.logexc(log, "Failed to resize filesystem (cmd=%s)", resize_cmd) raise # TODO(harlowja): Should we add a fsck check after this to make # sure we didn't corrupt anything? # vi: ts=4 expandtab
Upload File
Create Folder