Source code for cobbler.items.repo

from builtins import str
from cobbler.items import item
from cobbler import utils
from cobbler import validate
from cobbler.cexceptions import CX
from cobbler.utils import _


# this data structure is described in item.py
FIELDS = [
    # non-editable in UI (internal)
    ["ctime", 0, 0, "", False, "", 0, "float"],
    ["depth", 2, 0, "", False, "", 0, "float"],
    ["mtime", 0, 0, "", False, "", 0, "float"],
    ["parent", None, 0, "", False, "", 0, "str"],
    ["uid", None, 0, "", False, "", 0, "str"],

    # editable in UI
    ["apt_components", "", 0, "Apt Components (apt only)", True, "ex: main restricted universe", [], "list"],
    ["apt_dists", "", 0, "Apt Dist Names (apt only)", True, "ex: precise precise-updates", [], "list"],
    ["arch", "x86_64", 0, "Arch", True, "ex: i386, x86_64", ['i386', 'x86_64', 'ia64', 'ppc', 'ppc64', 'ppc64le', 'ppc64el', 's390', 's390x', 'arm', 'aarch64', 'noarch', 'src'], "str"],
    ["breed", "rsync", 0, "Breed", True, "", validate.REPO_BREEDS, "str"],
    ["comment", "", 0, "Comment", True, "Free form text description", 0, "str"],
    ["createrepo_flags", '<<inherit>>', 0, "Createrepo Flags", True, "Flags to use with createrepo", 0, "dict"],
    ["environment", {}, 0, "Environment Variables", True, "Use these environment variables during commands (key=value, space delimited)", 0, "dict"],
    ["keep_updated", True, 0, "Keep Updated", True, "Update this repo on next 'cobbler reposync'?", 0, "bool"],
    ["mirror", None, 0, "Mirror", True, "Address of yum or rsync repo to mirror", 0, "str"],
    ["mirror_locally", True, 0, "Mirror locally", True, "Copy files or just reference the repo externally?", 0, "bool"],
    ["name", "", 0, "Name", True, "Ex: f10-i386-updates", 0, "str"],
    ["owners", "SETTINGS:default_ownership", 0, "Owners", True, "Owners list for authz_ownership (space delimited)", [], "list"],
    ["priority", 99, 0, "Priority", True, "Value for yum priorities plugin, if installed", 0, "int"],
    ["proxy", "<<inherit>>", 0, "Proxy information", True, "http://example.com:8080, or <<inherit>> to use proxy_url_ext from settings, blank or <<None>> for no proxy", [], "str"],
    ["rpm_list", [], 0, "RPM List", True, "Mirror just these RPMs (yum only)", 0, "list"],
    ["yumopts", {}, 0, "Yum Options", True, "Options to write to yum config file", 0, "dict"],
]


[docs]class Repo(item.Item): """ A Cobbler repo object. """ TYPE_NAME = _("repo") COLLECTION_TYPE = "repo" def __init__(self, *args, **kwargs): super(Repo, self).__init__(*args, **kwargs) self.breed = None self.arch = None self.environment = None self.yumopts = None # # override some base class methods first (item.Item) #
[docs] def make_clone(self): _dict = self.to_dict() cloned = Repo(self.collection_mgr) cloned.from_dict(_dict) return cloned
[docs] def get_fields(self): return FIELDS
[docs] def get_parent(self): """ currently the Cobbler object space does not support subobjects of this object as it is conceptually not useful. """ return None
[docs] def check_if_valid(self): if self.name is None: raise CX("name is required") if self.mirror is None: raise CX("Error with repo %s - mirror is required" % (self.name))
# # specific methods for item.File # def _guess_breed(self): # backwards compatibility if not self.breed: if self.mirror.startswith("http://") or self.mirror.startswith("https://") or self.mirror.startswith("ftp://"): self.set_breed("yum") elif self.mirror.startswith("rhn://"): self.set_breed("rhn") else: self.set_breed("rsync")
[docs] def set_mirror(self, mirror): """ A repo is (initially, as in right now) is something that can be rsynced. reposync/repotrack integration over HTTP might come later. """ self.mirror = mirror if not self.arch: if mirror.find("x86_64") != -1: self.set_arch("x86_64") elif mirror.find("x86") != -1 or mirror.find("i386") != -1: self.set_arch("i386") self._guess_breed()
[docs] def set_keep_updated(self, keep_updated): """ This allows the user to disable updates to a particular repo for whatever reason. """ self.keep_updated = utils.input_boolean(keep_updated)
[docs] def set_yumopts(self, options): """ Kernel options are a space delimited list, like 'a=b c=d e=f g h i=j' or a dictionary. """ (success, value) = utils.input_string_or_dict(options, allow_multiples=False) if not success: raise CX(_("invalid yum options")) else: self.yumopts = value
[docs] def set_environment(self, options): """ Yum can take options from the environment. This puts them there before each reposync. """ (success, value) = utils.input_string_or_dict(options, allow_multiples=False) if not success: raise CX(_("invalid environment options")) else: self.environment = value
[docs] def set_priority(self, priority): """ Set the priority of the repository. 1= highest, 99=default Only works if host is using priorities plugin for yum. """ try: priority = int(str(priority)) except: raise CX(_("invalid priority level: %s") % priority) self.priority = priority
[docs] def set_rpm_list(self, rpms): """ Rather than mirroring the entire contents of a repository (Fedora Extras, for instance, contains games, and we probably don't want those), make it possible to list the packages one wants out of those repos, so only those packages + deps can be mirrored. """ self.rpm_list = utils.input_string_or_list(rpms)
[docs] def set_createrepo_flags(self, createrepo_flags): """ Flags passed to createrepo when it is called. Common flags to use would be -c cache or -g comps.xml to generate group information. """ if createrepo_flags is None: createrepo_flags = "" self.createrepo_flags = createrepo_flags
[docs] def set_breed(self, breed): if breed: return utils.set_repo_breed(self, breed)
[docs] def set_os_version(self, os_version): if os_version: return utils.set_repo_os_version(self, os_version)
[docs] def set_arch(self, arch): """ Override the arch used for reposync """ return utils.set_arch(self, arch, repo=True)
[docs] def set_mirror_locally(self, value): self.mirror_locally = utils.input_boolean(value)
[docs] def set_apt_components(self, value): self.apt_components = utils.input_string_or_list(value)
[docs] def set_apt_dists(self, value): self.apt_dists = utils.input_string_or_list(value) return True
[docs] def set_proxy(self, value): self.proxy = value return True
# EOF