'Constructor.  Requires a back reference to the CollectionManager object.
NOTE: is_subobject is used for objects that allow inheritance in their trees.  This
inheritance refers to conceptual inheritance, not Python inheritance.  Objects created
with is_subobject need to call their set_parent() method immediately after creation
and pass in a value of an object of the same type.  Currently this is only supported
for profiles.  Subobjects blend their data with their parent objects and only require
a valid parent name and a name for themselves, so other required options can be
gathered from items further up the cobbler tree.
distro
profile
profile  <-- created with is_subobject=True
system   <-- created as normal
For consistancy, there is some code supporting this in all object types, though it is only usable
(and only should be used) for profiles at this time.  Objects that are children of
objects of the same type (i.e. subprofiles) need to pass this in as True.  Otherwise, just
use False for is_subobject and the parent object will (therefore) have a different type.'

def __init__(self, collection_mgr, is_subobject=False):

    self.collection_mgr = collection_mgr
    self.settings = self.collection_mgr._settings
    self.clear(is_subobject)
    self.parent = ''
    self.children = {}
    self.log_func = self.collection_mgr.api.log
    self.ctime = 0
    self.mtime = 0
    self.uid = ''
    self.kernel_options = None
    self.kernel_options_post = None
    self.autoinstall_meta = None
    self.fetchable_files = None
    self.boot_files = None
    self.template_files = None
    self.name = None
    self.last_cached_mtime = 0
    self.cached_dict = ''
