Beispiel #1
0
def cli(**kwargs):
    """CLI command that calls fetch_release()"""
    release = kwargs.get("release", None)
    _file = kwargs.get("_file", False)

    if kwargs['plugin_file'] and kwargs['name'] is None:
        ioc_common.logit({
            "level": "EXCEPTION",
            "message": "Please supply a --name for plugin-file."
        })

    if release is not None:
        if release.lower() == "latest":
            release = ioc_common.parse_latest_release()
            kwargs["release"] = release

        try:
            float(release.rsplit("-", 1)[0].rsplit("-", 1)[0])
        except ValueError:
            ioc_common.logit({
                "level": "EXCEPTION",
                "message": "Please supply a valid entry."
            })

        if not _file:
            ioc_common.check_release_newer(release)

    ioc.IOCage().fetch(**kwargs)
Beispiel #2
0
def cli(**kwargs):
    """CLI command that calls fetch_release()"""
    release = kwargs.get("release", None)
    _file = kwargs.get("_file", False)

    proxy = kwargs.pop('proxy')
    if proxy:
        os.environ.update({'http_proxy': proxy, 'https_proxy': proxy})

    if release is not None:
        if release.lower() == "latest":
            release = ioc_common.parse_latest_release()
            kwargs["release"] = release

        try:
            float(release.rsplit("-", 1)[0].rsplit("-", 1)[0])
        except ValueError:
            ioc_common.logit({
                "level": "EXCEPTION",
                "message": "Please supply a valid entry."
            })

        if not _file:
            ioc_common.check_release_newer(release, major_only=True)

    ioc.IOCage().fetch(**kwargs)
Beispiel #3
0
def cli(**kwargs):
    """CLI command that calls fetch_release()"""
    release = kwargs.get("release", None)
    _file = kwargs.get("_file", False)

    proxy = kwargs.pop('proxy')
    if proxy:
        os.environ.update({
            'http_proxy': proxy,
            'https_proxy': proxy
        })

    if kwargs['plugin_file'] and kwargs['name'] is None:
        ioc_common.logit({
            "level": "EXCEPTION",
            "message": "Please supply a --name for plugin-file."
        })

    if release is not None:
        if release.lower() == "latest":
            release = ioc_common.parse_latest_release()
            kwargs["release"] = release

        try:
            float(release.rsplit("-", 1)[0].rsplit("-", 1)[0])
        except ValueError:
            ioc_common.logit({
                "level": "EXCEPTION",
                "message": "Please supply a valid entry."
            })

        if not _file:
            ioc_common.check_release_newer(release)

    ioc.IOCage().fetch(**kwargs)
Beispiel #4
0
def cli(release, template, count, props, pkglist, basejail, clone_basejail,
        thickjail, empty, short, name, _uuid, thickconfig):

    if _uuid:
        try:
            uuid.UUID(_uuid, version=4)
        except ValueError:
            ioc_common.logit({
                "level": "EXCEPTION",
                "message": "Please provide a valid UUID"
            })
        else:
            if count > 1:
                ioc_common.logit({
                    "level":
                    "EXCEPTION",
                    "message":
                    "Flag --count cannot be used with --uuid"
                })

    if name:
        # noinspection Annotator
        valid = True if re.match(r"^[a-zA-Z0-9\._-]+$", name) else False

        if not valid:
            ioc_common.logit({
                "level":
                "EXCEPTION",
                "message":
                f"Invalid character in {name}, please remove it."
            })

        # At this point we don't care
        _uuid = name

    if release and "=" in release:
        ioc_common.logit({
            "level": "EXCEPTION",
            "message": "Please supply a valid RELEASE!"
        })
    elif release and release.lower() == "latest":
        release = ioc_common.parse_latest_release()

    if release:
        try:
            ioc_common.check_release_newer(release)
        except ValueError:
            # We're assuming they understand the implications of a custom
            # scheme
            iocroot = ioc.PoolAndDataset().get_iocroot()
            path = f'{iocroot}/releases/{release}/root'
            _release = ioc_common.get_jail_freebsd_version(path, release)

            try:
                ioc_common.check_release_newer(_release)
            except ValueError:
                # We tried
                pass

    # We don't really care it's not a RELEASE at this point.
    release = template if template else release

    if pkglist:
        _pkgformat = """
{
    "pkgs": [
    "foo",
    "bar"
    ]
}"""

        if not os.path.isfile(pkglist):
            ioc_common.logit({
                "level":
                "EXCEPTION",
                "message":
                f"{pkglist} does not exist!\n"
                "Please supply a JSON file with the format:"
                f" {_pkgformat}"
            })
        else:
            try:
                # Just try to open the JSON with the right key.
                with open(pkglist, "r") as p:
                    json.load(p)["pkgs"]  # noqa
            except json.JSONDecodeError:
                ioc_common.logit({
                    "level":
                    "EXCEPTION",
                    "message":
                    "Please supply a valid"
                    f" JSON file with the format:{_pkgformat}"
                })

    if empty:
        release = "EMPTY"

    if clone_basejail:
        # We want to still create a basejail
        basejail = True

    iocage = ioc.IOCage(skip_jails=True)

    try:
        iocage.create(release,
                      props,
                      count,
                      pkglist=pkglist,
                      template=template,
                      short=short,
                      _uuid=_uuid,
                      basejail=basejail,
                      thickjail=thickjail,
                      empty=empty,
                      thickconfig=thickconfig,
                      clone_basejail=clone_basejail)
    except (RuntimeError, ioc_exceptions.JailMissingConfiguration) as err:
        if template and "Dataset" in str(err) or str(err).startswith(
                'Template'):
            # We want to list the available templates first
            ioc_common.logit({
                "level": "ERROR",
                "message": f"Template: {release} not found!"
            })
            templates = ioc.IOCage(silent=True).list('template')
            template_names = ''
            for temp in templates:
                template_names += '\n  ' + temp[1]

            ioc_common.logit({
                'level': 'EXCEPTION',
                'message': f'Created Templates:{template_names}'
            })
            exit(1)
        else:
            # Standard errors
            ioc_common.logit({"level": "EXCEPTION", "message": err})
Beispiel #5
0
def cli(release, template, count, props, pkglist, basejail, thickjail, empty,
        short, name, _uuid, force):

    if name:
        # noinspection Annotator
        valid = True if re.match("^[a-zA-Z0-9\._-]+$", name) else False

        if not valid:
            ioc_common.logit({
                "level":
                "EXCEPTION",
                "message":
                f"Invalid character in {name}, please remove it."
            })

        # At this point we don't care
        _uuid = name

    if release and "=" in release:
        ioc_common.logit({
            "level": "EXCEPTION",
            "message": "Please supply a valid RELEASE!"
        })
    elif release and release.lower() == "latest":
        release = ioc_common.parse_latest_release()

    if release:
        release = release.upper()
        ioc_common.check_release_newer(release)

    # We don't really care it's not a RELEASE at this point.
    release = template if template else release

    if pkglist:
        _pkgformat = """
{
    "pkgs": [
    "foo",
    "bar"
    ]
}"""

        if not os.path.isfile(pkglist):
            ioc_common.logit({
                "level":
                "EXCEPTION",
                "message":
                f"{pkglist} does not exist!\n"
                "Please supply a JSON file with the format:"
                f" {_pkgformat}"
            })
        else:
            try:
                # Just try to open the JSON with the right key.
                with open(pkglist, "r") as p:
                    json.load(p)["pkgs"]  # noqa
            except json.JSONDecodeError:
                ioc_common.logit({
                    "level":
                    "EXCEPTION",
                    "message":
                    "Please supply a valid"
                    f" JSON file with the format:{_pkgformat}"
                })

    if empty:
        release = "EMPTY"

    iocage = ioc.IOCage(skip_jails=True)

    try:
        iocage.create(release,
                      props,
                      count,
                      pkglist=pkglist,
                      template=template,
                      short=short,
                      _uuid=_uuid,
                      basejail=basejail,
                      thickjail=thickjail,
                      empty=empty)
    except RuntimeError as err:
        if template and "Dataset" in str(err):
            # We want to list the available templates first
            ioc_common.logit({
                "level": "ERROR",
                "message": f"Template: {release} not found!"
            })
            templates = ioc.IOCage().list("template")

            for temp in templates:
                ioc_common.logit({
                    "level": "EXCEPTION",
                    "message": f"Created Templates:\n  {temp[1]}"
                })
            exit(1)
        else:
            # Standard errors
            ioc_common.logit({"level": "EXCEPTION", "message": err})
Beispiel #6
0
def cli(release, template, count, props, pkglist, basejail, thickjail, empty,
        short, name, _uuid, thickconfig):

    if _uuid:
        try:
            uuid.UUID(_uuid, version=4)
        except ValueError:
            ioc_common.logit({
                "level": "EXCEPTION",
                "message": "Please provide a valid UUID"
            })
        else:
            if count > 1:
                ioc_common.logit({
                    "level": "EXCEPTION",
                    "message": "Flag --count cannot be used with --uuid"
                })

    if name:
        # noinspection Annotator
        valid = True if re.match(r"^[a-zA-Z0-9\._-]+$", name) else False

        if not valid:
            ioc_common.logit({
                "level": "EXCEPTION",
                "message": f"Invalid character in {name}, please remove it."
            })

        # At this point we don't care
        _uuid = name

    if release and "=" in release:
        ioc_common.logit({
            "level": "EXCEPTION",
            "message": "Please supply a valid RELEASE!"
        })
    elif release and release.lower() == "latest":
        release = ioc_common.parse_latest_release()

    if release:
        try:
            ioc_common.check_release_newer(release)
        except ValueError:
            # We're assuming they understand the implications of a custom
            # scheme
            iocroot = ioc.PoolAndDataset().get_iocroot()
            path = f'{iocroot}/releases/{release}/root'
            _release = ioc_common.get_jail_freebsd_version(path, release)

            try:
                ioc_common.check_release_newer(_release)
            except ValueError:
                # We tried
                pass

    # We don't really care it's not a RELEASE at this point.
    release = template if template else release

    if pkglist:
        _pkgformat = """
{
    "pkgs": [
    "foo",
    "bar"
    ]
}"""

        if not os.path.isfile(pkglist):
            ioc_common.logit({
                "level": "EXCEPTION",
                "message": f"{pkglist} does not exist!\n"
                           "Please supply a JSON file with the format:"
                           f" {_pkgformat}"
            })
        else:
            try:
                # Just try to open the JSON with the right key.
                with open(pkglist, "r") as p:
                    json.load(p)["pkgs"]  # noqa
            except json.JSONDecodeError:
                ioc_common.logit({
                    "level": "EXCEPTION",
                    "message": "Please supply a valid"
                               f" JSON file with the format:{_pkgformat}"
                })

    if empty:
        release = "EMPTY"

    iocage = ioc.IOCage(skip_jails=True)

    try:
        iocage.create(release, props, count, pkglist=pkglist,
                      template=template, short=short, _uuid=_uuid,
                      basejail=basejail, thickjail=thickjail, empty=empty,
                      thickconfig=thickconfig)
    except RuntimeError as err:
        if template and "Dataset" in str(err):
            # We want to list the available templates first
            ioc_common.logit({
                "level": "ERROR",
                "message": f"Template: {release} not found!"
            })
            templates = ioc.IOCage().list("template")

            for temp in templates:
                ioc_common.logit({
                    "level": "EXCEPTION",
                    "message": f"Created Templates:\n  {temp[1]}"
                })
            exit(1)
        else:
            # Standard errors
            ioc_common.logit({
                "level": "EXCEPTION",
                "message": err
            })