| 前面已经介绍了OpenStack虚拟机从Nova Metadata服务获取metadata的过程。有时候我们可能需要调试虚拟机的metadata信息,验证传递的数据是否正确,而又嫌麻烦不希望进入虚拟机内部去调试。有什么方法能够直接调用nova-api-metadata服务获取虚拟机信息呢。 根据前面介绍的原理,我写了两个脚本实现: 第一个Python脚本sign_instance.py用于生成secret: sign_instance.py  import six import sys import hmac import hashlib  def sign_instance_id(instance_id, secret=''):     if isinstance(secret, six.text_type):         secret = secret.encode('utf-8')     if isinstance(instance_id, six.text_type):         instance_id = instance_id.encode('utf-8')     return hmac.new(secret, instance_id, hashlib.sha256).hexdigest() print(sign_instance_id(sys.argv[1])) 
 第二个bash脚本get_metadata.py实现获取虚拟机metadata: #!/bin/bash metadata_server=http://192.168.1.16:8775 metadata_url=$metadata_server/openstack/latest instance_id=$1 data=$2 if [[ -z $instance_id ]]; then echo "Usage: $0 <instance_id>"     exit 1 fi tenant_id=$(nova show $instance_id | awk '/tenant_id/{print $4}') sign_instance_id=$(python sign_instance.py $instance_id) 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服务地址。 用法如下: # ./get_metadata.sh daf32a70-42c9-4d30-8ec5-3a5d97582cff meta_data.json password vendor_data.json network_data.json # ./get_metadata.sh daf32a70-42c9-4d30-8ec5-3a5d97582cff network_data.json | python -m json.tool {     "links": [         {             "ethernet_mac_address": "fa:16:3e:e8:81:9b",             "id": "tap28468932-9e",             "mtu": 1450,             "type": "ovs",             "vif_id": "28468932-9ea0-43d0-b699-ba19bf65cae3"         }     ],     "networks": [         {             "id": "network0",             "link": "tap28468932-9e",             "network_id": "2c4b658c-f2a0-4a17-9ad2-c07e45e13a8a",             "type": "ipv4_dhcp"         }     ],     "services": [] } 
 5 总结 最后通过一张工作流图总结: (编辑:我爱故事小小网_铜陵站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |