一、结论:

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版本)的更多相关文章

  1. 阿里云 API调用实践(python语言)

    1.结论:阿里云的SDK开发,其实就是远程调用API,python的代码就是一个外壳,核心是封装成一个http报文,利用json格式,进行RPC调用. 2.SDK调用API的套路如下: # -*- c ...

  2. 如何用Baas快速在腾讯云上开发小程序-系列3 :实现腾讯云COS API调用

    版权声明:本文由贺嘉 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/640268001487425627 来源:腾云阁 h ...

  3. 【转+修改】容联云通讯api调用短信发送调用

    转自   https://my.oschina.net/u/1995134/blog/814540 需要荣联云通讯 的 相对应SDKjar包. CCP_REST_SMS_SDK_JAVA_v2.6.3 ...

  4. 用Python调用华为云API接口发短信

    [摘要] 用Python调用华为云API接口实现发短信,当然能给调用发短信接口前提条件是通过企业实名认证,而且有一个通过审核的短信签名,话不多说,showcode #!/usr/bin/python3 ...

  5. 微信公众平台开发(免费云BAE+高效优雅的Python+网站开放的API)

    虽然校园App是个我认为的绝对的好主意,但最近有个也不错的营销+开发的模式出现:微信平台+固定域名服务器. 微信公众平台的运行模式不外两个: 一.机器人模式或称转发模式,将说话内容转发到服务器上完成, ...

  6. MarkDown添加图片的三种方式【华为云技术分享】

    Markdown插图片有三种方法,各种Markdown编辑器的插图方式也都包含在这三种方法之内. 插图最基础的格式就是: ![Alt text](图片链接 "optional title&q ...

  7. 大海航行靠舵手 华为云靠什么征服K8S?

    Kubernetes 是Google开源的容器集群管理系统或者称为分布式操作系统.它构建在Docker技术之上,为容器化的应用提供资源调度.部署运行.服务发现.扩容缩容等整一套功能,本质上可看作是基于 ...

  8. 华为云发布桌面IDE-CodeArts

    摘要:华为伙伴暨开发者大会2022,发布华为云桌面IDE-CodeArts. 本文分享自华为云社区<华为云发布桌面IDE-CodeArts,让连接更简单.编码更智能>,作者: Huawei ...

  9. DevOps on DevCloud|如何采用流水线践行CI/CD理念【华为云技术分享】

    [摘要] 持续集成/持续交付(CI/CD,Continuous Integration/Continuous Deployment)在DevOps CMALS理念中具有支柱性地位,因而CI/CD流水线 ...

随机推荐

  1. VSCode调试Flutter的问题解决

    错误:Target of URI doesn't exist: package:fultter/material.dart 原因:flutter版本不匹配.flutter升级到了最新版本,而项目引用的 ...

  2. MySQL数据备份方法

    MySQL的备份和还原 备份:副本    RAID1,RAID10:保证硬件损坏而不会业务中止:        DROP TABLE mydb.tb1; 备份类型:        热备份.温备份和冷备 ...

  3. MapReduce计算模型的优化

    MapReduce 计算模型的优化涉及了方方面面的内容,但是主要集中在两个方面:一是计算性能方面的优化:二是I/O操作方面的优化.这其中,又包含六个方面的内容. 1.任务调度 任务调度是Hadoop中 ...

  4. [Swift]LeetCode128. 最长连续序列 | Longest Consecutive Sequence

    Given an unsorted array of integers, find the length of the longest consecutive elements sequence. Y ...

  5. JVM基础系列第4讲:从源代码到机器码,发生了什么?

    在上篇文章我们聊到,无论什么语言写的代码,其到最后都是通过机器码运行的,无一例外.那么对于 Java 语言来说,其从源代码到机器码,这中间到底发生了什么呢?这就是今天我们要聊的. 如下图所示,编译器可 ...

  6. ActionMQ集群部署

    ActiveMQ集群部署 一.应用场景 消息中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题.实现高性能,高可用,可伸缩和最终一致性架构.是大型分布式系统不可缺少的中间件.目 ...

  7. 『最长等差数列 线性DP』

    最长等差数列(51nod 1055) Description N个不同的正整数,找出由这些数组成的最长的等差数列. 例如:1 3 5 6 8 9 10 12 13 14 等差子数列包括(仅包括两项的不 ...

  8. 带着萌新看springboot源码11(springboot启动原理 源码上)

    通过前面这么多讲解,springboot原理应该也大概有个轮廓了,一些基本的配置,从客户端url到controller(配置一些要用的组件,servlet三大组件,处理器映射器,拦截器,视图解析器这些 ...

  9. linux下的powerline安装教程

    powerline是一款比较炫酷的状态栏工具,多用于vim和终端命令行.先上两张效果图,然后介绍一下具体的安装教程. 图 1 powerline在shell下的效果图 图 2 powerline在vi ...

  10. 你以为的MongoDB副本集的高可用是真的高可用了吗?

    很久没来更新博客,自感是一个只会搬砖的劳工,总搞些MySQL相关的数据库实在无聊,且时不时遇到些不讲道理的Dev吧,真的是心累至极,有种想回头我也去干开发的冲动,当个需求者有话语权要风得风,要雨得雨多 ...