您现在的位置 >> Hadoop教程 >> Hadoop实战 >> 专题  
 

OpenStack建立实例完整过程源码详细分析(5)

【作者:Hadoop实战专家】【关键词:实例 调度器 name 方法 运行 】 【点击:71279次】【2013-10-1】
1、建立类型的实例都要调用哪些方法? 现在开始,开始分析great这个最重要的方法。准备实例,并且发送实例的信息和要运行实例的请求消息到远程调度器scheduler;# 以字典的形式返回查询结果; 2. 3. 9.  

相关热门搜索:mapreduce实例

大数据标签:bigdata

问题导读:
1、建立类型的实例都要调用哪些方法?

2、如何理解run_instances方法?

现在开始,开始分析great这个最重要的方法。我们回到第一篇文章中的run_instances方法:

1. def run_instances(self, context, **kwargs):

2.             """

3.             准备实例,并且发送实例的信息和要运行实例的请求消息到远程调度器scheduler;

4.             实现实例的简历和运行,由调度器完成;

5.             """

6.

7.             ......

8.

9.             # create:准备实例,并且发送实例的信息和要运行实例的请求消息到远程调度器scheduler;

10.             # 实现实例的简历和运行,由调度器完成,这部分代码实际上只是实现请求消息的发送;

11.             (instances, resv_id) = self.compute_api.create(context,

12.                 # get_instance_type_by_name:通过给定的name检索单个实例类型信息;

13.                 # 以字典的形式返回查询结果;

14.                 instance_type=instance_types.get_instance_type_by_name(kwargs.get('instance_type', None)),

15.                 image_href=image_uuid,

16.                 max_count=int(kwargs.get('max_count', min_count)),

17.                 min_count=min_count,

18.                 kernel_id=kwargs.get('kernel_id'),

19.                 ramdisk_id=kwargs.get('ramdisk_id'),

20.                 key_name=kwargs.get('key_name'),

21.                 user_data=kwargs.get('user_data'),

22.                 security_group=kwargs.get('security_group'),

23.                 availability_zone=kwargs.get('placement', {}).get('availability_zone'),

24.                 block_device_mapping=kwargs.get('block_device_mapping', {}))

25.             return self._format_run_instances(context, resv_id)

复制代码

这里调用的是/nova/compute/api.py中的creat方法,这是建立所有类型的实例都要调用的方法;

1. def create(self, context, instance_type,

2.                image_href, kernel_id=None, ramdisk_id=None,

3.                min_count=None, max_count=None,

4.                display_name=None, display_description=None,

5.                key_name=None, key_data=None, security_group=None,

6.                availability_zone=None, user_data=None, metadata=None,

7.                injected_files=None, admin_password=None,

8.                block_device_mapping=None, access_ip_v4=None,

9.                access_ip_v6=None, requested_networks=None, config_drive=None,

10.                auto_disk_config=None, scheduler_hints=None):

11.         """

12.         准备实例,并且发送实例的信息和要运行实例的请求消息到远程调度器scheduler;

13.         实现实例的简历和运行,由调度器完成,这部分代码实际上只是实现请求消息的发送;

14.         返回一个元组(实例或者是reservation_id的元组),元组里面的实例可以是“None”或者是实例字典的一个列表,这要取决于是否等待scheduler返回的信息;

15.         """

16.

17.         self._check_create_policies(context, availability_zone,requested_networks, block_device_mapping)

18.

19.         # 验证所有的输入实例参数;

20.         # 发送要运行实例('run_instance')的请求消息到远程调度器;

21.         return self._create_instance(

22.                                context, instance_type,

23.                                image_href, kernel_id, ramdisk_id,

24.                                min_count, max_count,

25.                                display_name, display_description,

26.                                key_name, key_data, security_group,

27.                                availability_zone, user_data, metadata,

28.                                injected_files, admin_password,

29.                                access_ip_v4, access_ip_v6,

30.                                requested_networks, config_drive,

31.                                block_device_mapping, auto_disk_config,

32.                                scheduler_hints=scheduler_hints)

复制代码

这里涉及到的参数太多,想看看具体的参数值都是什么,应用命令行:

1. nova boot --flavor 2 --key_name oskey --image 20612b24-c980-4900-b270-8e6b66e5f72f test3

复制代码

调试运行了一下,输出的参数值如下:

1. context = 

2. instance_type = {'memory_mb': 2048L, 'root_gb': 20L, 'deleted_at': None, 'name': u'm1.small', 'deleted': 0L, 'created_at': None, 'ephemeral_gb': 0L, 'updated_at': None, 'disabled': False, 'vcpus': 1L, 'extra_specs': {}, 'swap': 0L, 'rxtx_factor': 1.0, 'is_public': True, 'flavorid': u'2', 'vcpu_weight': None, 'id': 5L}

3. image_href = 20612b24-c980-4900-b270-8e6b66e5f72f

4. kernel_id = None

5. ramdisk_id = None

6. min_count = 1

7. max_count = 1

8. display_name = test3

9. display_description = test3

10. key_name = oskey

11. key_data = None

12. security_group = ['default']

13. availability_zone = None

14. user_data = None

15. metadata = {}

16. injected_files = []

17. admin_password = Piu4aSSNmSNk

18. block_device_mapping = []

19. access_ip_v4 = None

20. access_ip_v6 = None

21. requested_networks = None

22. config_drive = None

23. auto_disk_config = None

24. scheduler_hints = {}

复制代码

可以看到context这个上下文信息对象,是由类nova.context.RequestContext实例化来的,那我们具体看一下,这个上下文运行环境都包括哪些信息:

1. class RequestContext(object):

2.

3.     def __init__(self, user_id, project_id, is_admin=None, read_deleted="no",

4.                  roles=None, remote_address=None, timestamp=None,

5.                  request_id=None, auth_token=None, overwrite=True,

6.                  quota_class=None, user_name=None, project_name=None,

7.                  service_catalog=None, instance_lock_checked=False, **kwargs):

8.

9.         if kwargs:

10.             LOG.warn(_('Arguments dropped when creating context: %s') %

11.                     str(kwargs))

12.

13.         self.user_id = user_id

14.         self.project_id = project_id

15.         self.roles = roles or []

16.         self.read_deleted = read_deleted

17.         self.remote_address = remote_address

18.         if not timestamp:

19.             timestamp = timeutils.utcnow()

20.         if isinstance(timestamp, basestring):

21.             timestamp = timeutils.parse_strtime(timestamp)

22.         self.timestamp = timestamp

23.         if not request_id:

24.             request_id = generate_request_id()

25.         self.request_id = request_id

26.         self.auth_token = auth_token

27.

28.         if service_catalog:

29.             self.service_catalog = [s for s in service_catalog

30.                 if s.get('type') in ('volume')]

31.         else:

32.             self.service_catalog = []

33.

34.         self.instance_lock_checked = instance_lock_checked

35.

36.         self.quota_class = quota_class

37.         self.user_name = user_name

38.         self.project_name = project_name

39.         self.is_admin = is_admin

40.         if self.is_admin is None:

41.             self.is_admin = policy.check_is_admin(self)

42.         if overwrite or not hasattr(local.store, 'context'):

43.             self.update_store()

44.

45.     ......

复制代码

我们在看看在这里context中的信息具体值都是什么,会更加有助我们理解context,调试运行一下:

1. user_id = afc380206e2549ad930396d9050d20cf

2. project_id = 0e492e86f22e4d19bd523f1e7ca64566

3. roles = [u'admin', u'KeystoneAdmin', u'KeystoneServiceAdmin']

4. read_deleted = no

5. remote_address = 172.21.6.145

6. timestamp = 2013-06-23 16:36:37.399405

7. request_id = req-f0255b14-833d-4fff-b973-23c35f70ddda

8. auth_token = 7e7bb3cf84ab43269010bb55410064b3

9. service_catalog = [{u'endpoints': [{u'adminURL': u'http://172.21.5.161:8776/v1/0e492e86f22e4d19bd523f1e7ca64566', u'region': u'RegionOne', u'id': u'753a1ad55e91469794e2eb7ac4c3df92', u'internalURL': u'http://172.21.5.161:8776/v1/0e492e86f22e4d19bd523f1e7ca64566', u'publicURL': u'http://172.21.6.145:8776/v1/0e492e86f22e4d19bd523f1e7ca64566'}], u'endpoints_links': [], u'type': u'volume', u'name': u'cinder'}]

10. instance_lock_checked = False

11. quota_class = None

12. user_name = admin

13. project_name = admin

14. is_admin = True

复制代码

注意,本文接着上一篇文章:
OpenStack建立实例完整过程源码详细分析(4)

下一篇,内容:OpenStack建立实例完整过程源码详细分析(6)

大数据系列相关文章:

最新评论
Miley2014-09-10 02:38:02
屌爆了!我在京东JD.COM购买了Hadoop实战(第2版),★★☆☆☆:书籍很不错 对于我这样的菜鸟来说 够用了#京东让红包飞#超的! http://t.cn/8kmHU8D
yaojian2014-09-10 12:20:24
阿里巴巴 上的 听便宜的
Egbert He2014-09-10 05:43:57
其实只是当了背黑锅的,哈哈
阿飞2014-09-10 01:51:15
【基于大数据分析系统Hadoop13个开源工具】来源: 中国行业研究网 Hadoop是由Apache基金会开发的一个大数据分布式系统基础架构,最早版本是2003年原Yahoo!DougCutting根据Google发布的学术论文研究而来。用户可以在... --发布到微刊《项目数据分析师CPDA》http://t.cn/8Fdk4mm
sally2014-09-09 08:47:25
我也正要做这个。。。
悠扬仙子2014-09-08 07:54:16
就是配置了啊
潘潘2014-09-07 11:15:04
腾讯大规模Hadoop集群实践,推荐 大数据资料:http://t.cn/8F3knn0 (发自@微博桌面 http://t.cn/zjj9IWH)
小甜甜2014-09-07 04:14:36
[图片]
2014-09-07 02:50:24
发表了博文 《以业务之名:SAP专注于Hadoop以及金融服务》 - 时至今日,企业员工迫切希望能在工作环境中拥有来自个人生活的各类消费级使用体验,这样的要求也驱使CIO们不得不全力应对数量愈发庞大的 http://t.cn/RvXCwxL
李叉鸣2014-09-06 08:37:51
【大数据和Hadoop的关系分析】 Henry和我正在进行一项检查大数据以及其真正意义的工作。大数据是一个流行语。和许多流行语一样,大数据这个词用得有些滥了,但是它包含了一些真正的有用性和技术。@北京汇智方圆项目数据分析师事务所
 
  • Hadoop生态系统资料推荐