加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 空间 > 正文

OpenStack虚拟机如何获取metadata

发布时间:2018-08-29 23:17:23 所属栏目:空间 来源:佚名
导读:技术沙龙 | 邀您于8月25日与国美/AWS/转转三位专家共同探讨小程序电商实战 1. 关于OpenStack metadata服务 我们知道OpenStack虚拟机是通过cloud-init完成初始化配置,比如网卡配置、hostname、初始化密码以及密钥配置等。cloud-init是运行在虚拟机内部的一

前面已经介绍了OpenStack虚拟机从Nova Metadata服务获取metadata的过程。有时候我们可能需要调试虚拟机的metadata信息,验证传递的数据是否正确,而又嫌麻烦不希望进入虚拟机内部去调试。有什么方法能够直接调用nova-api-metadata服务获取虚拟机信息呢。

根据前面介绍的原理,我写了两个脚本实现:

第一个Python脚本sign_instance.py用于生成secret:

  1. sign_instance.py 
  2.  
  3. import six 
  4. import sys 
  5. import hmac 
  6. import hashlib 
  7.  
  8. def sign_instance_id(instance_id, secret=''): 
  9.     if isinstance(secret, six.text_type): 
  10.         secret = secret.encode('utf-8') 
  11.     if isinstance(instance_id, six.text_type): 
  12.         instance_id = instance_id.encode('utf-8') 
  13.     return hmac.new(secret, instance_id, hashlib.sha256).hexdigest() 
  14. print(sign_instance_id(sys.argv[1])) 

第二个bash脚本get_metadata.py实现获取虚拟机metadata:

  1. #!/bin/bash 
  2. metadata_server=http://192.168.1.16:8775 
  3. metadata_url=$metadata_server/openstack/latest 
  4. instance_id=$1 
  5. data=$2 
  6. if [[ -z $instance_id ]]; then echo "Usage: $0 <instance_id>" 
  7.     exit 1 
  8. fi tenant_id=$(nova show $instance_id | awk '/tenant_id/{print $4}') 
  9. sign_instance_id=$(python sign_instance.py $instance_id) 
  10. curl -sL -H "X-Instance-ID:$instance_id" -H "X-Instance-ID-Signature:$sign_instance_id" -H "X-Tenant-ID:$tenant_id"  $metadata_url/$data 

其中metadata_server为Nova Metadata服务地址。

用法如下:

  1. # ./get_metadata.sh daf32a70-42c9-4d30-8ec5-3a5d97582cff 
  2. meta_data.json 
  3. password 
  4. vendor_data.json 
  5. network_data.json 
  6. # ./get_metadata.sh daf32a70-42c9-4d30-8ec5-3a5d97582cff network_data.json | python -m json.tool 
  7.     "links": [ 
  8.         { 
  9.             "ethernet_mac_address": "fa:16:3e:e8:81:9b", 
  10.             "id": "tap28468932-9e", 
  11.             "mtu": 1450, 
  12.             "type": "ovs", 
  13.             "vif_id": "28468932-9ea0-43d0-b699-ba19bf65cae3" 
  14.         } 
  15.     ], 
  16.     "networks": [ 
  17.         { 
  18.             "id": "network0", 
  19.             "link": "tap28468932-9e", 
  20.             "network_id": "2c4b658c-f2a0-4a17-9ad2-c07e45e13a8a", 
  21.             "type": "ipv4_dhcp" 
  22.         } 
  23.     ], 
  24.     "services": [] 

5 总结

最后通过一张工作流图总结:

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读