def get_template_definition(cls, server_type, os, coe): '''Get enabled TemplateDefinitions. Returns the enabled TemplateDefinition class for the provided cluster_type. With the following classes: class TemplateDefinition1(TemplateDefinition): provides = [ ('server_type1', 'os1', 'coe1') ] class TemplateDefinition2(TemplateDefinition): provides = [ ('server_type2', 'os2', 'coe2') ] And the following entry_points: magnum.template_definitions = template_name_1 = some.python.path:TemplateDefinition1 template_name_2 = some.python.path:TemplateDefinition2 get_template_name_1_definition('server_type2', 'os2', 'coe2') will return: TemplateDefinition2 :param server_type: The server_type the cluster definition will build on :param os: The operating system the cluster definition will build on :param coe: The Container Orchestration Environment the cluster will produce :return: class ''' definition_map = cls.get_template_definitions() cluster_type = (server_type, os, coe) if cluster_type not in definition_map: raise exception.ClusterTypeNotSupported(server_type=server_type, os=os, coe=coe) type_definitions = definition_map[cluster_type] for name in cfg.CONF.cluster.enabled_definitions: if name in type_definitions: return type_definitions[name]() raise exception.ClusterTypeNotEnabled(server_type=server_type, os=os, coe=coe)
def get_driver(cls, server_type, os, coe): """Get Driver. Returns the Driver class for the provided cluster_type. With the following classes: class Driver1(Driver): provides = [ ('server_type1', 'os1', 'coe1') ] class Driver2(Driver): provides = [ ('server_type2', 'os2', 'coe2') ] And the following entry_points: magnum.drivers = driver_name_1 = some.python.path:Driver1 driver_name_2 = some.python.path:Driver2 get_driver('server_type2', 'os2', 'coe2') will return: Driver2 :param server_type: The server_type the cluster definition will build on :param os: The operating system the cluster definition will build on :param coe: The Container Orchestration Environment the cluster will produce :return: class """ definition_map = cls.get_drivers() cluster_type = (server_type, os, coe) if cluster_type not in definition_map: raise exception.ClusterTypeNotSupported( server_type=server_type, os=os, coe=coe) driver_info = definition_map[cluster_type] # TODO(muralia): once --drivername is supported as an input during # cluster create, change the following line to use driver name for # loading. return driver.DriverManager("magnum.drivers", driver_info['entry_point_name']).driver()