openstack scheduler filter类

前一段时间看了openstack filter类的代码在这里做一个简单的记录:

filter类示例,如果一个compute结点满足条件就返回True,否则返回False:

class MyFilter(filters.BaseHostFilter):
	def host_passes(self, host_state, filter_properties):
		free_ram = host_state.free_ram_mb
		requested_ram = filter_properties.get('instance_type')['memory_mb']		
		if(free_ram > requested_ram ):
    			return True
		else:
    			return False

添加自定义的Filter主要有一下两步:

Put “my_filter.py” to the  /usr/share/pyshared/nova/scheduler/filters/folder, make a soft link of it in the  /usr/lib/python2.7/dist-packages/nova/scheduler/filters / folder. The class name in the “my_filter.py” file is “MyFilter”.


In the nova.conf file configuration as follows:
     scheduler_available_filters = nova.scheduler.filters.all_filters
     scheduler_default_filters = RetryFilter, …… , MyFilter


host_state主要参数,host_state其实是openstack中的一个类:

  self.host = host
        self.nodename = node
        self.update_capabilities(capabilities, service)

        # Mutable available resources.
        # These will change as resources are virtually "consumed".
        self.total_usable_ram_mb = 0
        self.total_usable_disk_gb = 0
        self.disk_mb_used = 0
        self.free_ram_mb = 0
        self.free_disk_mb = 0
        self.vcpus_total = 0
        self.vcpus_used = 0

        # Additional host information from the compute node stats:
        self.vm_states = {}
        self.task_states = {}
        self.num_instances = 0
        self.num_instances_by_project = {}
        self.num_instances_by_os_type = {}
        self.num_io_ops = 0

        # Other information
        self.host_ip = None
        self.hypervisor_type = None
        self.hypervisor_version = None
        self.hypervisor_hostname = None
        self.cpu_info = None
        self.supported_instances = None

        # Resource oversubscription values for the compute host:
        self.limits = {}

        # Generic metrics from compute nodes
        self.metrics = {}

        self.updated = None


filter_properties数据:

key: instance_type, value: {u'root_gb': 1, 
							 u'name': u'm1.tiny', 
							 u'ephemeral_gb': 0, 
							 u'memory_mb': 512, 
							 u'vcpus': 1, 
							 u'extra_specs': {}, 
							 u'swap': 0, 
							 u'rxtx_factor': 1.0, 
							 u'flavorid': u'1', 
							 u'vcpu_weight': None, 
							 u'id': 2}
 
 key: config_options, value: {}
 
 
 key: retry, value: {'num_attempts': 1, 
					 'hosts': []}
					 
 key: context, value: <nova.context.RequestContext object at 0x54848d0>
 
 key: request_spec, value: 
	{u'num_instances': 1, 
	u'block_device_mapping': 
	[{u'instance_uuid': u'b45bd6d8-aee1-47a7-a6e6-3a9596629418', 
							   u'guest_format': None, u'boot_index': 0, 
							   u'delete_on_termination': True, 
							   u'no_device': None, 
							   u'connection_info': None, 
							   u'snapshot_id': None, 
							   u'device_name': None, 
							   u'disk_bus': None, 
							   u'image_id': 
							   u'114b7f75-0888-4ad3-b4fc-4f759068cf3d', 
							   u'source_type': u'image', 
							   u'device_type': u'disk', 
							   u'volume_id': None, 
							   u'destination_type': u'local', 
							   u'volume_size': None}], 
	u'image': {u'status': u'active', 
			   u'name': u'cirros-0.3.2-x86_64', 
			   u'deleted': False, 
			   u'container_format': u'bare', 
			   u'created_at': u'2014-07-23T10:53:32.000000', 
			   u'disk_format': u'qcow2',
			   u'updated_at': u'2014-07-23T10:53:33.000000', 
			   u'id': u'114b7f75-0888-4ad3-b4fc-4f759068cf3d', 
			   u'owner': u'b6714662cfe844dda85594b3c2ed0176', 
			   u'min_ram': 0, 
			   u'checksum': u'64d7c1cd2b6f60c92c14662941cb7913', 
			   u'min_disk': 0, 
			   u'is_public': True, 
			   u'deleted_at': None, 
			   u'properties': {}, 
			   u'size': 13167616}, 
	u'instance_type': {u'root_gb': 1, 
					   u'name': u'm1.tiny', 
					   u'ephemeral_gb': 0, 
					   u'memory_mb': 512, 
					   u'vcpus': 1, 
					   u'extra_specs': {}, 
					   u'swap': 0, 
					   u'rxtx_factor': 1.0, 
					   u'flavorid': u'1', 
					   u'vcpu_weight': None, 
					   u'id': 2}, 
	u'instance_properties': 
	    {u'vm_state': u'building', 
			 u'availability_zone': None, 
			 u'terminated_at': None, 
			 u'ephemeral_gb': 0, 
			 u'instance_type_id': 2, 
			 u'user_data': None, 
			 u'cleaned': False, 
			 u'vm_mode': None, 
			 u'deleted_at': None, 
			 u'reservation_id': u'r-b2tta803',
			 u'id': 79, 
			 u'security_groups': 
				[{u'project_id': u'b6714662cfe844dda85594b3c2ed0176', 
				   u'user_id': u'b8f5586fd05a4cfd8d78ba69b0b0eb8a', 
				   u'description': u'default', 
				   u'deleted': False, 
				   u'created_at': u'2014-07-23T09:57:31.000000', 
				   u'updated_at': None, 
				   u'deleted_at': None, 
				   u'id': 1, 
				   u'name': u'default'}], 
			 u'disable_terminate': False, 
			 u'display_name': u'test1', 
			 u'uuid': u'b45bd6d8-aee1-47a7-a6e6-3a9596629418', 
			 u'default_swap_device': None, 
			 u'info_cache': {u'instance_uuid': u'b45bd6d8-aee1-47a7-a6e6-3a9596629418', 
							 u'deleted': False, 
							 u'created_at': u'2014-08-19T01:53:46.000000', 
							 u'updated_at': None, 
							 u'network_info': [], 
							 u'deleted_at': None}, 
			 u'hostname': u'test1', 
			 u'launched_on': None, 
			 u'display_description': u'test1', 
			 u'key_data': u'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC9HYBP22bdhlOy1w6xnlBtS27pQ8f5cuBKbp8wYoBSNkcm7Ely4hCpCWIhN0EAE3DqYQDFXAzJmY8azBYSaBqw8c8lak1jpfDk6k04Hu8wGkj3VWesRbx6ncbtn82SDRl5ZVXdNd8b8lQMU+nWdT4QHQX7hEM/CBjm1P7lcNZYWnHlxNpXorh8qcRp8stjpRsBvOKC4IqpJKpDNCeKZMZXFOpe3kGbOidvnxEoOKJtqWxxZB3dsKLV/i4+JyBExH4P8IS3h0dPXCesDwYxzZzszZP5Nzyx7YDNzyqLvtOdST/nwyBvM7POww1yoIa4pqiToDuUFwpchYypLVxNnry9 Generated by Nova\n', u'kernel_id': u'', u'power_state': 0, u'default_ephemeral_device': None, u'progress': 0, u'project_id': u'b6714662cfe844dda85594b3c2ed0176', 
			 u'launched_at': None, 
			 u'scheduled_at': None, 
			 u'node': None, 
			 u'ramdisk_id': u'', 
			 u'access_ip_v6': None, 
			 u'access_ip_v4': None, 
			 u'deleted': False, 
			 u'key_name': u'kp1', 
			 u'updated_at': None, 
			 u'host': None, 
			 u'ephemeral_key_uuid': None, 
			 u'architecture': None, 
			 u'user_id': u'b8f5586fd05a4cfd8d78ba69b0b0eb8a', 
			 u'system_metadata': 
				{u'image_min_disk': u'1', 
					  u'instance_type_memory_mb': u'512', 
					  u'instance_type_swap': u'0', 
					  u'instance_type_vcpu_weight': None, 
					  u'instance_type_root_gb': u'1', 
					  u'instance_type_id': u'2', 
					  u'instance_type_name': u'm1.tiny', 
					  u'instance_type_ephemeral_gb': u'0', 
					  u'instance_type_rxtx_factor': u'1.0', 
					  u'instance_type_flavorid': u'1', 
					  u'image_container_format': u'bare', 
					  u'instance_type_vcpus': u'1', 
					  u'image_min_ram': u'0', 
					  u'image_disk_format': u'qcow2', 
					  u'image_base_image_ref': u'114b7f75-0888-4ad3-b4fc-4f759068cf3d'}, 
			 u'task_state': u'scheduling', 
			 u'shutdown_terminate': False, 
			 u'cell_name': None, 
			 u'root_gb': 1, 
			 u'locked': False, 
			 u'name': u'instance-0000004f', 
			 u'created_at': u'2014-08-19T01:53:46.000000',
			 u'locked_by': None, 
			 u'launch_index': 0, 
			 u'metadata': {}, 
			 u'memory_mb': 512, 
			 u'vcpus': 1, 
			 u'image_ref': u'114b7f75-0888-4ad3-b4fc-4f759068cf3d', 
			 u'root_device_name': None, 
			 u'auto_disk_config': False, 
			 u'os_type': None, 
			 u'config_drive': u''}, 
	u'security_group': [u'default'], 
	u'instance_uuids': [u'b45bd6d8-aee1-47a7-a6e6-3a9596629418']}
 key: os_type, value: None
 key: project_id, value: b6714662cfe844dda85594b3c2ed0176
 key: scheduler_hints, value: {}





你可能感兴趣的:(openstack scheduler filter类)