华为云的API调用实践(python版本)
一、结论:
1、华为云是符合openstack 社区的API,所以,以社区的API为准。社区API见下面的链接。
https://developer.openstack.org/api-ref/network/v2/index.html
二、调用前准备
1、python的API调用前,需要准备好python的运行环境,以及在华为云上已经注册用户。
python的运行环境具体是指(1)python安装包(2)openstack社区的API库,下面有介绍。
华为云注册用户,正常在官网上注册即可。
2、python的安装包
略(到python官网下载 python2.7版本,安装即可)
3、openstack社区的API库(python版本)
(1)下载openstack 客户端开发包,地址如下,下载其中的.gz压缩包
https://pypi.python.org/pypi/python-openstackclient
(2)安装客户端开发包
在windows系统中,解压缩上述压缩包,然后进入到解压缩后的文件夹中,输入 python setup.py install
4、获取username,project_name, project_domain_id, user_domain_id
方法:
第一步,在华为云登录后,在页面右上角点击 “我的凭证”

第二步、在我的凭证中,分别获得 username, project_name, project_domain_id, user_domain_id


5、获得所在区域的IAM认证的地址
方法:
第一步:华为云首页,“支持与服务” ,选择"OpenAPI"

第二步:点击“地区和终端节点”

第三步:在搜索栏中输入“IAM”,得到所在区域的IAM认证地址。

上面得到的终端节点,就是 auth_url 的内容主体。
三、API调用思路:
1、调用思路:
认证 ---> 建会话 ---> 建客户端实例 ---> API调用。
2、程序示例:
说明,下面代码中的 username, project_name, project_domain_id, user_domain_id, auth_url 的内容获取方法,见“二、调用前准备”中的对应内容。

四、调用步骤
根据API文档,以及 client.Client的代码,可以看到有哪些API可以调用。
1、示例代码
import json
import time
from keystoneauth1 import identity
from keystoneauth1 import session
from neutronclient.v2_0 import client username='xxx'
password='xxx'
project_name='xxx'
project_domain_id='xxx'
user_domain_id='xxx'
auth_url='https://iam.cn-north-1.myhuaweicloud.com/v3'
auth = identity.Password(auth_url=auth_url,
username=username,
password=password,
project_name=project_name,
project_domain_id=project_domain_id,
user_domain_id=user_domain_id)
sess = session.Session(auth=auth)
neutron = client.Client(session=sess) def createvpn(vpcid, local_cidr, peer_ip, peer_cidr):
print "######## create vpn ######"
print "################### step 1 vpn service ############" vpnservice = {
"vpnservice": {
"router_id": vpcid,
"name": "myservice",
"admin_state_up": "true"
}
} ret = neutron.create_vpnservice(vpnservice) vpnserviceid = ret['vpnservice']['id']
print "vpnserviceid = "+vpnserviceid print "public_ip = "+ret['vpnservice']['external_v4_ip'] print "################### step 2 ike policy ############" ikepolicy = {
"ikepolicy": {
"phase1_negotiation_mode": "main",
"auth_algorithm": "sha1",
"encryption_algorithm": "aes-128",
"pfs": "group5",
"lifetime": {
"units": "seconds",
"value": 86400
},
"ike_version": "v1",
"name": "ikepolicy1"
}
} ret = neutron.create_ikepolicy(ikepolicy) ikepolicyid = ret['ikepolicy']['id']
print "ikepolicyid = "+ikepolicyid print "################### step 3 ipsec policy ############" ipsecpolicy = {
"ipsecpolicy": {
"name": "ipsecpolicy1",
"transform_protocol": "esp",
"auth_algorithm": "sha1",
"encapsulation_mode": "tunnel",
"encryption_algorithm": "aes-128",
"pfs": "group5",
"lifetime": {
"units": "seconds",
"value": 3600
}
}
} ret = neutron.create_ipsecpolicy(ipsecpolicy) ipsecpolicyid = ret['ipsecpolicy']['id']
print "ipsecpolicyid = "+ipsecpolicyid print "################### step 4 local and remote endpoints ############" localendpointgroup = {
"endpoint_group": {
"endpoints": local_cidr,
"type": "cidr",
"name": "my-localendpoints"
}
} ret = neutron.create_endpoint_group(localendpointgroup) localepgroupid = ret['endpoint_group']['id']
print "localepgroupid = "+localepgroupid #### remote endpoint group
remoteendpointgroup = {
"endpoint_group": {
"endpoints": peer_cidr,
"type": "cidr",
"name": "remote-localendpoints"
}
} ret = neutron.create_endpoint_group(remoteendpointgroup) remoteepgroupid = ret['endpoint_group']['id']
print "remoteepgroupid = "+remoteepgroupid print "################### step 5 ipsec connection ############" ipsecconnection = {
"ipsec_site_connection": {
"psk": "secret",
"initiator": "bi-directional",
"ipsecpolicy_id": ipsecpolicyid,
"admin_state_up": "true",
"mtu": "",
"peer_ep_group_id": remoteepgroupid,
"ikepolicy_id": ikepolicyid,
"vpnservice_id": vpnserviceid,
"local_ep_group_id": localepgroupid,
"peer_address": peer_ip,
"peer_id": peer_ip,
"name": "vpnconnection1"
}
} ret = neutron.create_ipsec_site_connection(ipsecconnection) ipsec_connection_id = ret['ipsec_site_connection']['id']
print "ipsec_connection_id = "+ipsec_connection_id def update_peer_ip(masterip, backupip):
print "######## update peer ip ######"
newcontent = {
"ipsec_site_connection": {
"peer_address": backupip,
"peer_id":backupip
}
} connections = neutron.list_ipsec_site_connections() entrys = connections['ipsec_site_connections']
for entry in entrys:
if (masterip == entry["peer_address"]):
id = entry["id"]
neutron.update_ipsec_site_connection(id, newcontent)
time.sleep(3) def show_all_connections():
print "######## show all ipsec connections "
connections = neutron.list_ipsec_site_connections()
entrys = connections['ipsec_site_connections']
for entry in entrys:
print entry def main(): createvpn(vpcid="xxx",
local_cidr=["10.2.0.0/24","10.3.0.0/24"],
peer_ip="172.24.4.233",
peer_cidr=["20.2.0.0/24"]) show_all_connections()
#update_peer_ip(masterip="172.24.4.233", backupip="101.0.0.1") if __name__ == '__main__':
main()
2、查看有哪些函数可以调用。

华为云的API调用实践(python版本)的更多相关文章
- 阿里云 API调用实践(python语言)
1.结论:阿里云的SDK开发,其实就是远程调用API,python的代码就是一个外壳,核心是封装成一个http报文,利用json格式,进行RPC调用. 2.SDK调用API的套路如下: # -*- c ...
- 如何用Baas快速在腾讯云上开发小程序-系列3 :实现腾讯云COS API调用
版权声明:本文由贺嘉 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/640268001487425627 来源:腾云阁 h ...
- 【转+修改】容联云通讯api调用短信发送调用
转自 https://my.oschina.net/u/1995134/blog/814540 需要荣联云通讯 的 相对应SDKjar包. CCP_REST_SMS_SDK_JAVA_v2.6.3 ...
- 用Python调用华为云API接口发短信
[摘要] 用Python调用华为云API接口实现发短信,当然能给调用发短信接口前提条件是通过企业实名认证,而且有一个通过审核的短信签名,话不多说,showcode #!/usr/bin/python3 ...
- 微信公众平台开发(免费云BAE+高效优雅的Python+网站开放的API)
虽然校园App是个我认为的绝对的好主意,但最近有个也不错的营销+开发的模式出现:微信平台+固定域名服务器. 微信公众平台的运行模式不外两个: 一.机器人模式或称转发模式,将说话内容转发到服务器上完成, ...
- MarkDown添加图片的三种方式【华为云技术分享】
Markdown插图片有三种方法,各种Markdown编辑器的插图方式也都包含在这三种方法之内. 插图最基础的格式就是: 在DevOps CMALS理念中具有支柱性地位,因而CI/CD流水线 ...
随机推荐
- [Swift]LeetCode59. 螺旋矩阵 II | Spiral Matrix II
Given a positive integer n, generate a square matrix filled with elements from 1 to n2 in spiral ord ...
- java中this和super关键字的使用
这几天看到类在继承时会用到this和super,这里就做了一点总结,与各位共同交流,有错误请各位指正~ this this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针. this ...
- DMA的基本概念
DMA允许外围设备和主内存之间直接传输 I/O 数据, DMA 依赖于系统.每一种体系结构DMA传输不同,编程接口也不同. 数据传输可以以两种方式触发:一种软件请求数据,另一种由硬件异步传输. 在第一 ...
- Swagger2 添加HTTP head参数
大家使用swagger往往会和JWT一起使用,而一般使用jwt会将token放在head里,这样我们在使用swagger测试的时候并不方便,因为跨域问题它默认不能自定义head参数.然后自己去网上找, ...
- 【机器学习】--Kmeans从初识到应用
一.前述 Kmeans算法一般在数据分析前期使用,选取适当的k,将数据分类后,然后分类研究不同聚类下数据的特点. Kmeans算法是一种无监督的算法. 常用于分组,比如用户偏好. 二.概念及原理 Km ...
- 微信小程序实战--集阅读与电影于一体的小程序项目(一)
1.首页欢迎界面 项目目录结构 新建项目ReaderMovie,然后新建文件,结构如下 welcome.wxml <view class='container'> <image cl ...
- 3.django Model
django ORM基本配置 django中遵循 Code Frist 的原则,即:根据代码中定义的类来自动生成数据库表 1.修改project数据库配置 (1)settigs.py里面 默认 DAT ...
- 并发编程(十二)—— Java 线程池 实现原理与源码深度解析 之 submit 方法 (二)
在上一篇<并发编程(十一)—— Java 线程池 实现原理与源码深度解析(一)>中提到了线程池ThreadPoolExecutor的原理以及它的execute方法.这篇文章是接着上一篇文章 ...
- 如何判断DataSet里有多少个DataTable
dataset.table.count sda.fill(ds,"table"); //这里是在ds里新建了一个表,叫table,注意是新建,多次执行会报错,实际使用时,可以用co ...
- Chapter 5 Blood Type——3
Disappointment flooded through me as my eyes unerringly focused on his table. 当我的眼睛完全集中在他的桌上时,失望如洪水般 ...