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)
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)
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)
def __iter__(self): if self.remote: # TODO: Please abstract this in the future req = requests.get( 'https://download.freebsd.org/ftp/' f'releases/{os.uname().machine}/', timeout=10) assert req.status_code == 200 for release in filter( lambda r: (r if not self.eol_check else r not in self.eol_list ) and not check_release_newer(r, raise_error=False), re.findall(r'href="(\d.*RELEASE)/"', req.content.decode('utf-8'))): yield self.resource(release) else: for r in super().__iter__(): yield r
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})
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})
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 })