def _get_node_group_data(self, node_group): if node_group.flavor_id not in self.requested_flavors: flavor = nova.get_flavor(id=node_group.flavor_id) self.requested_flavors[node_group.flavor_id] = flavor else: flavor = self.requested_flavors[node_group.flavor_id] cpu = flavor.vcpus ram = flavor.ram data = {} # config recommendations was taken from Ambari code os = self._get_os_ram_recommendation(self._transform_mb_to_gb(ram)) hbase = self._get_hbase_ram_recommendations( self._transform_mb_to_gb(ram)) reserved_ram = self._transform_gb_to_mb(os + hbase) min_container_size = self._get_min_size_of_container( self._transform_mb_to_gb(ram)) # we use large amount of containers to allow users to run # at least 4 jobs at same time on clusters based on small flavors data["containers"] = int(max(8, min(2 * cpu, ram / min_container_size))) data["ramPerContainer"] = (ram - reserved_ram) / data["containers"] data["ramPerContainer"] = max(data["ramPerContainer"], min_container_size) data["ramPerContainer"] = min(2048, int(data["ramPerContainer"])) data["ramPerContainer"] = int(data["ramPerContainer"]) data["mapMemory"] = int(data["ramPerContainer"]) data["reduceMemory"] = int(2 * data["ramPerContainer"]) data["amMemory"] = int(min(data["mapMemory"], data["reduceMemory"])) return data
def _get_node_group_data(self, node_group): if node_group.flavor_id not in self.requested_flavors: flavor = nova.get_flavor(id=node_group.flavor_id) self.requested_flavors[node_group.flavor_id] = flavor else: flavor = self.requested_flavors[node_group.flavor_id] cpu = flavor.vcpus ram = flavor.ram data = {} # config recommendations was taken from Ambari code os = self._get_os_ram_recommendation(self._transform_mb_to_gb(ram)) hbase = self._get_hbase_ram_recommendations( self._transform_mb_to_gb(ram)) reserved_ram = self._transform_gb_to_mb(os + hbase) min_container_size = self._get_min_size_of_container( self._transform_mb_to_gb(ram)) # we use large amount of containers to allow users to run # at least 4 jobs at same time on clusters based on small flavors data["containers"] = int(max( 8, min(2 * cpu, ram / min_container_size))) data["ramPerContainer"] = (ram - reserved_ram) / data["containers"] data["ramPerContainer"] = max(data["ramPerContainer"], min_container_size) data["ramPerContainer"] = min(2048, int(data["ramPerContainer"])) data["ramPerContainer"] = int(data["ramPerContainer"]) data["mapMemory"] = int(data["ramPerContainer"]) data["reduceMemory"] = int(2 * data["ramPerContainer"]) data["amMemory"] = int(min(data["mapMemory"], data["reduceMemory"])) return data
def _get_bootable_volume(self, node_group): node_group_flavor = nova.get_flavor(id=node_group.flavor_id) image_size = node_group_flavor.disk properties = {} properties["size"] = image_size properties["image"] = node_group.get_image_id() if node_group.boot_volume_type: properties["volume_type"] = node_group.boot_volume_type if node_group.boot_volume_availability_zone: properties["availability_zone"] = ( node_group.boot_volume_availability_zone) if node_group.boot_volume_local_to_instance: properties["scheduler_hints"] = { "local_to_instance": { "get_param": "instance" } } return { "bootable_volume": { "type": "OS::Cinder::Volume", "properties": properties } }
def _get_bootable_volume(self, node_group): node_group_flavor = nova.get_flavor(id=node_group.flavor_id) image_size = node_group_flavor.disk properties = {} properties["size"] = image_size properties["image"] = node_group.get_image_id() if node_group.boot_volume_type: properties["volume_type"] = node_group.boot_volume_type if node_group.boot_volume_availability_zone: properties["availability_zone"] = ( node_group.boot_volume_availability_zone ) if node_group.boot_volume_local_to_instance: properties["scheduler_hints"] = { "local_to_instance": {"get_param": "instance"}} return { "bootable_volume": { "type": "OS::Cinder::Volume", "properties": properties } }
def _get_bootable_volume(self, node_group): node_group_flavor = nova.get_flavor(id=node_group.flavor_id) image_size = node_group_flavor.disk return { "bootable_volume": { "type": "OS::Cinder::Volume", "properties": { "size": image_size, "image": node_group.get_image_id() } } }
def get_ephemeral(node_group): return nova.get_flavor(id=node_group.flavor_id).ephemeral
def get_flavor(**kwargs): return nova.get_flavor(**kwargs)