Esempio n. 1
0
def jail_auto_configure():
    """
    Auto configure the jail settings

    The first ZFS volume found will be selected.
    A dataset called jails will be created, if it already exists then
    append "_N" where N 2..100 until a dataset is not found.
    """

    volume = Volume.objects.filter(vol_fstype="ZFS")
    if not volume.exists():
        raise MiddlewareError(_("You need to create a Volume to proceed!"))
    volume = volume[0]
    basename = "%s/jails" % volume.vol_name
    name = basename
    for i in xrange(2, 100):
        datasets = list_datasets(path="/mnt/%s" % name, recursive=False)
        if not datasets:
            break
        else:
            name = "%s_%d" % (basename, i)
    rv, err = notifier().create_zfs_dataset(name)
    if rv != 0:
        raise MiddlewareError(_("Failed to create dataset %s: %s") % (name, err))

    try:
        jail = JailsConfiguration.objects.latest("id")
    except JailsConfiguration.DoesNotExist:
        jail = JailsConfiguration()
    jail.jc_path = "/mnt/%s" % name
    jail.save()
Esempio n. 2
0
def jail_auto_configure():
    import platform

    """
    Auto configure the jail settings

    The first ZFS volume found will be selected.
    A dataset called jails will be created, if it already exists then
    append "_N" where N 2..100 until a dataset is not found.
    """

    vol_fstype = 'ZFS'
    volume = Volume.objects.filter(vol_fstype='ZFS')
    if not volume.exists():
        raise MiddlewareError(_("You need to create a ZFS volume to proceed!"))

    volume = volume[0]
    basename = "%s/jails" % volume.vol_name

    name = basename
    for i in xrange(2, 100):
        datasets = list_datasets(
            path="/mnt/%s" % name,
            recursive=False,
        )
        if not datasets:
            break
        else:
            name = "%s_%d" % (basename, i)
    rv, err = notifier().create_zfs_dataset(name)
    if rv != 0:
        raise MiddlewareError(_("Failed to create dataset %(name)s: %(error)s") % {
            'name': name,
            'error': err,
        })

    try:
        jail = JailsConfiguration.objects.latest('id')
    except JailsConfiguration.DoesNotExist:
        jail = JailsConfiguration()
    jail.jc_path = "/mnt/%s" % name
    jail.save()

    w = warden.Warden()
    w.wtmp = jail.jc_path
    w.jdir = jail.jc_path
    w.release = platform.release().strip()
    w.save()
Esempio n. 3
0
def jail_auto_configure():
    import platform
    """
    Auto configure the jail settings

    The first ZFS volume found will be selected.
    A dataset called jails will be created, if it already exists then
    append "_N" where N 2..100 until a dataset is not found.
    """

    vol_fstype = 'ZFS'
    volume = Volume.objects.filter(vol_fstype='ZFS')
    if not volume.exists():
        raise MiddlewareError(_("You need to create a ZFS volume to proceed!"))

    volume = volume[0]
    basename = "%s/jails" % volume.vol_name

    name = basename
    for i in xrange(2, 100):
        datasets = list_datasets(
            path="/mnt/%s" % name,
            recursive=False,
        )
        if not datasets:
            break
        else:
            name = "%s_%d" % (basename, i)
    rv, err = notifier().create_zfs_dataset(name)
    if rv != 0:
        raise MiddlewareError(
            _("Failed to create dataset %(name)s: %(error)s") % {
                'name': name,
                'error': err,
            })

    try:
        jail = JailsConfiguration.objects.latest('id')
    except JailsConfiguration.DoesNotExist:
        jail = JailsConfiguration()
    jail.jc_path = "/mnt/%s" % name
    jail.save()

    w = warden.Warden()
    w.wtmp = jail.jc_path
    w.jdir = jail.jc_path
    w.release = platform.release().strip()
    w.save()
Esempio n. 4
0
def jail_auto_configure():
    import platform

    """
    Auto configure the jail settings

    The first ZFS volume found will be selected.
    A dataset called jails will be created, if it already exists then
    append "_N" where N 2..100 until a dataset is not found.
    """

    vol_fstype = 'ZFS'
    volume = Volume.objects.filter(vol_fstype='ZFS')
    if not volume.exists():
        log.warn("ZFS is recommended for plugins!")
        volume = Volume.objects.filter(vol_fstype='UFS')
        if not volume.exists():
            raise MiddlewareError(_("You need to create a volume to proceed!"))
        vol_fstype = 'UFS'  

    volume = volume[0]
    basename = "%s/jails" % volume.vol_name

    if vol_fstype == 'ZFS':
        name = basename
        for i in xrange(2, 100):
            datasets = list_datasets(
                path="/mnt/%s" % name,
                recursive=False,
            )
            if not datasets:
                break
            else:
                name = "%s_%d" % (basename, i)
        rv, err = notifier().create_zfs_dataset(name)
        if rv != 0:
            raise MiddlewareError(_("Failed to create dataset %(name)s: %(error)s") % {
                'name': name,
                'error': err,
            })

    elif vol_fstype == 'UFS':
        name = "/mnt/%s" % basename
        if os.path.exists(name):
            max = 1
            dirs = glob.glob("%s_*" % name)
            if dirs:
                for d in dirs:
                    parts = d.split('_')
                    if len(parts) > 1 and re.match('^[0-9]+$', parts[1]):
                        num = int(parts[1])
                        if num > max:
                            max = num

            name = "%s_%d" % (name, max + 1)

        name = name.replace('/mnt/', '')
        try:
            os.makedirs("/mnt/%s" % name)

        except Exception as e:
            raise MiddlewareError(_("Failed to create directory %(name)s: %(error)s") % {
                'name': name,
                'error': e
            })

    try:
        jail = JailsConfiguration.objects.latest('id')
    except JailsConfiguration.DoesNotExist:
        jail = JailsConfiguration()
    jail.jc_path = "/mnt/%s" % name
    jail.save()

    w = warden.Warden()
    w.wtmp = jail.jc_path
    w.jdir = jail.jc_path
    w.release = platform.release().strip()
    w.save()
Esempio n. 5
0
def jail_auto_configure():
    import platform

    """
    Auto configure the jail settings

    The first ZFS volume found will be selected.
    A dataset called jails will be created, if it already exists then
    append "_N" where N 2..100 until a dataset is not found.
    """

    vol_fstype = 'ZFS'
    volume = Volume.objects.filter(vol_fstype='ZFS')
    if not volume.exists():
        log.warn("ZFS is recommended for plugins!")
        volume = Volume.objects.filter(vol_fstype='UFS')
        if not volume.exists():
            raise MiddlewareError(_("You need to create a volume to proceed!"))
        vol_fstype = 'UFS'  

    volume = volume[0]
    basename = "%s/jails" % volume.vol_name

    if vol_fstype == 'ZFS':
        name = basename
        for i in xrange(2, 100):
            datasets = list_datasets(
                path="/mnt/%s" % name,
                recursive=False,
            )
            if not datasets:
                break
            else:
                name = "%s_%d" % (basename, i)
        rv, err = notifier().create_zfs_dataset(name)
        if rv != 0:
            raise MiddlewareError(_("Failed to create dataset %(name)s: %(error)s") % {
                'name': name,
                'error': err,
            })

    elif vol_fstype == 'UFS':
        name = "/mnt/%s" % basename
        if os.path.exists(name):
            max = 1
            dirs = glob.glob("%s_*" % name)
            if dirs:
                for d in dirs:
                    parts = d.split('_')
                    if len(parts) > 1 and re.match('^[0-9]+$', parts[1]):
                        num = int(parts[1])
                        if num > max:
                            max = num

            name = "%s_%d" % (name, max + 1)

        name = name.replace('/mnt/', '')
        try:
            os.makedirs("/mnt/%s" % name)

        except Exception as e:
            raise MiddlewareError(_("Failed to create directory %(name)s: %(error)s") % {
                'name': name,
                'error': e
            })

    try:
        jail = JailsConfiguration.objects.latest('id')
    except JailsConfiguration.DoesNotExist:
        jail = JailsConfiguration()
    jail.jc_path = "/mnt/%s" % name
    jail.save()

    w = warden.Warden()
    w.wtmp = jail.jc_path
    w.jdir = jail.jc_path
    w.release = platform.release().strip()
    w.save()