建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
请选择 进入手机版 | 继续访问电脑版
设置昵称

在此一键设置昵称,即可参与社区互动!

确定
我再想想
选择版块
版块 热门产品云计算服务 华为云ECS服务API使用指南(2) - 根据浮动ip过滤查询虚拟...

hluo

发帖: 9|粉丝: 0

级别 : 新手上路

Rank: 1

+ 关注 发消息

发表于2017-9-14 08:29:43 83262 楼主 阅读模式| 显示全部楼层
[技术分享] 华为云ECS服务API使用指南(2) - 根据浮动ip过滤查询虚拟机列表

本帖最后由 hluo 于 2017-9-14 09:50 编辑

背景

今天收到一个客户求助,需要根据浮动ip(公网ip)列出所有的虚拟机,而OpenStack并没有提供直接的原子接口,所以我用vpc和ecs的接口做了一个实现。

Region & Endpints


实现

  1. #!/bin/bash

  2. # 华为云账号,不是email
  3. HEC_USER_NAME=''
  4. # 华为云密码
  5. HEC_USER_PASSWD=''

  6. # Region&Endpoints,
  7. # 具体定义请参考:http://developer.hwclouds.com/endpoint.html
  8. HEC_REGION='cn-north-1'
  9. HEC_IAM_ENDPOINT='https://iam.cn-north-1.myhwclouds.com'
  10. HEC_ECS_ENDPOINT='https://ecs.cn-north-1.myhwclouds.com'
  11. HEC_VPC_ENDPOINT='https://vpc.cn-north-1.myhwclouds.com'

  12. AUTH_PARAMS='{
  13.   "auth": {
  14.     "identity": {
  15.       "methods": [
  16.         "password"
  17.       ],
  18.       "password": {
  19.         "user": {
  20.           "name": '"\"$HEC_USER_NAME\""',
  21.           "password": '"\"$HEC_USER_PASSWD\""',
  22.           "domain": {
  23.             "name": '"\"$HEC_USER_NAME\""'
  24.           }
  25.         }
  26.       }
  27.     },   "scope": {
  28.       "project": {
  29.         "name": '"\"$HEC_REGION\""'
  30.       }
  31.     }
  32.   }
  33. }'

  34. # Request for token and tanent id
  35. curl -i -X POST ${HEC_IAM_ENDPOINT}/v3/auth/tokens -H 'content-type: application/json' -d "$AUTH_PARAMS" > /tmp/hec_auth_res && {
  36.     # Retrieve token by account username and password      
  37.     TOKEN=`cat /tmp/hec_auth_res | grep "X-Subject-Token"| awk '{print$2}'`

  38.     # Retrieve tanent id(project id)
  39.     PROJECT_ID=`tail -n 1 /tmp/hec_auth_res|python -c 'import json,sys;print json.load(sys.stdin)["token"]["project"]["id"]'`

  40.     # Request for all floating ips
  41.     curl -s -X GET ${HEC_VPC_ENDPOINT}/v2.0/floatingips -H "X-Auth-Token:${TOKEN}" | python -mjson.tool

  42.     # Retrieve mapping between floating(public) ips and fixed(internal) ips
  43.     IPS_MAPPING=`curl -s -X GET ${HEC_VPC_ENDPOINT}/v2.0/floatingips -H "X-Auth-Token:${TOKEN}" | python -c 'import json,sys; print "\n".join([x["fixed_ip_address"]+":"+x["floating_ip_address"] for x in json.load(sys.stdin)["floatingips"]])'`
  44.     for MAPPING in $IPS_MAPPING; do
  45.         # Annotate accessIPv4 attr to vm instance
  46.         FIXED_IP=`echo $MAPPING | awk -F ':' '{print $1}'`
  47.         FLOAT_IP=`echo $MAPPING | awk -F ':' '{print $2}'`
  48.         SERVER_ID=`curl -s -X GET ${HEC_ECS_ENDPOINT}/v2/${PROJECT_ID}/servers/detail?ip=$FIXED_IP -H "X-Auth-Token:${TOKEN}" | python -c 'import json,sys;print json.load(sys.stdin)["servers"][0]["id"]'`
  49.         SERVER_PARAMS='{
  50.             "server": {
  51.                 "accessIPv4": '"\"$FLOAT_IP\""'
  52.             }
  53.         }'
  54.         curl -s -X PUT ${HEC_ECS_ENDPOINT}/v2/${PROJECT_ID}/servers/$SERVER_ID -d "$SERVER_PARAMS" -H "X-Auth-Token:${TOKEN}" | python -mjson.tool
  55.     done   
  56.     echo
  57.     echo
  58.     echo "============================"
  59.     echo
  60.     echo
  61.     # Retrieve all vms, which should have floating ip included.
  62.     curl -s -X GET ${HEC_ECS_ENDPOINT}/v2/${PROJECT_ID}/servers/detail -H "X-Auth-Token:${TOKEN}" | python -mjson.tool
  63. }
复制代码


参考文档


回复 举报
分享

分享文章到朋友圈

分享文章到微博

爱计算的小...

发帖: 5|粉丝: 5

级别 : 新手上路

Rank: 1

+ 关注 发消息

发表于2017-9-14 10:13:24 沙发 显示全部楼层
受教了,又学了些新东西
点赞 回复 举报

蓝书签

发帖: 18|粉丝: 7

级别 : 版主

Rank: 7Rank: 7Rank: 7

+ 关注 发消息

发表于2018-4-26 12:49:08 板凳 显示全部楼层
Mark,学习一下,感谢分享
点赞 回复 举报

游客

您需要登录后才可以回帖 登录 | 立即注册