def compute_model_inheritance(self, site_design): """Compute inheritance of the design model. Given a fully populated Site model, compute the effective design by applying inheritance and references """ node_failed = [] try: nodes = site_design.baremetal_nodes for n in nodes or []: try: n.compile_applied_model( site_design, state_manager=self.state_manager) except Exception as ex: node_failed.append(n) self.logger.error( "Failed to build applied model for node %s." % n.name) if node_failed: raise errors.DesignError( "Failed to build applied model for %s" % ",".join( [x.name for x in node_failed])) except AttributeError: self.logger.debug( "Model inheritance skipped, no node definitions in site design." ) return
def get_network_link(self, link_key): for l in self.network_links: if l.get_id() == link_key: return l raise errors.DesignError( "NetworkLink %s not found in design state" % link_key)
def get_baremetal_node(self, node_key): for n in self.baremetal_nodes: if n.get_id() == node_key: return n raise errors.DesignError( "BaremetalNode %s not found in design state" % node_key)
def get_hardware_profile(self, profile_key): for p in self.hardware_profiles: if p.get_id() == profile_key: return p raise errors.DesignError( "HardwareProfile %s not found in design state" % profile_key)
def get_network(self, network_key): for n in self.networks: if n.get_id() == network_key: return n raise errors.DesignError( "Network %s not found in design state" % network_key)
def get_rack(self, rack_key): if self.racks: for r in self.racks: if r.get_id() == rack_key: return r raise errors.DesignError("Rack %s not found in design state" % rack_key)
def add_baremetal_node(self, new_baremetal_node): if new_baremetal_node is None: raise errors.DesignError("Invalid BaremetalNode model") if self.baremetal_nodes is None: self.baremetal_nodes = objects.BaremetalNodeList() self.baremetal_nodes.append(new_baremetal_node)
def add_hardware_profile(self, new_hardware_profile): if new_hardware_profile is None: raise errors.DesignError("Invalid HardwareProfile model") if self.hardware_profiles is None: self.hardware_profiles = objects.HardwareProfileList() self.hardware_profiles.append(new_hardware_profile)
def add_rack(self, new_rack): if new_rack is None: raise errors.DesignError("Invalid Rack model") if self.racks is None: self.racks = objects.RackList() self.racks.append(new_rack)
def add_network_link(self, new_network_link): if new_network_link is None: raise errors.DesignError("Invalid NetworkLink model") if self.network_links is None: self.network_links = objects.NetworkLinkList() self.network_links.append(new_network_link)
def get_host_profile(self, profile_key): if self.host_profiles: for p in self.host_profiles: if p.get_id() == profile_key: return p raise errors.DesignError("HostProfile %s not found in design state" % profile_key)
def get_bootaction(self, ba_key): """Select a boot action from this site design with the matchkey key. :param ba_key: Value should match the ``get_id()`` value of the BootAction returned """ for ba in self.bootactions: if ba.get_id() == ba_key: return ba raise errors.DesignError( "BootAction %s not found in design state" % ba_key)