from cobbler import resource
from cobbler import utils
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"],
["uid", "", 0, "", False, "", 0, "str"],
# editable in UI
["action", "create", 0, "Action", True, "Create or remove file resource", 0, "str"],
["comment", "", 0, "Comment", True, "Free form text description", 0, "str"],
["group", "", 0, "Owner group in file system", True, "File owner group in file system", 0, "str"],
["is_dir", False, 0, "Is Directory", True, "Treat file resource as a directory", 0, "bool"],
["mode", "", 0, "Mode", True, "The mode of the file", 0, "str"],
["name", "", 0, "Name", True, "Name of file resource", 0, "str"],
["owner", "", 0, "Owner user in file system", True, "File owner user in file system", 0, "str"],
["owners", "SETTINGS:default_ownership", 0, "Owners", True, "Owners list for authz_ownership (space delimited)", [], "list"],
["path", "", 0, "Path", True, "The path for the file", 0, "str"],
["template", "", 0, "Template", True, "The template for the file", 0, "str"]
]
[docs]class File(resource.Resource):
"""
A Cobbler file object.
"""
TYPE_NAME = _("file")
COLLECTION_TYPE = "file"
#
# override some base class methods first (item.Item)
#
[docs] def make_clone(self):
_dict = self.to_dict()
cloned = File(self.collection_mgr)
cloned.from_dict(_dict)
return cloned
[docs] def get_fields(self):
return FIELDS
[docs] def check_if_valid(self):
"""
Insure name, path, owner, group, and mode are set.
Templates are only required for files, is_dir = False
"""
if not self.name:
raise CX("name is required")
if not self.path:
raise CX("path is required")
if not self.owner:
raise CX("owner is required")
if not self.group:
raise CX("group is required")
if not self.mode:
raise CX("mode is required")
if not self.is_dir and self.template == "":
raise CX("Template is required when not a directory")
#
# specific methods for item.File
#
[docs] def set_is_dir(self, is_dir):
"""
If true, treat file resource as a directory. Templates are ignored.
"""
self.is_dir = utils.input_boolean(is_dir)
# EOF