使用Ptyhon SDK 创建Azure 经典模式下的虚拟网络

作者:Rui 发布时间:October 20, 2016 分类:Azure,CLOUD 浏览:2,540

前言

目前Azure Python SDK中,关于经典模式下虚拟网络的一些API操作,还没有实现,所以如果想要创建经典模式下的虚拟网路,就需要借助直接调用REST API。

另外关于经典模式和资源模式的区别,可以参考此文档:
https://azure.microsoft.com/en-us/documentation/articles/resource-manager-deployment-model/

实现逻辑

要实现新增或者删除经典模式下虚拟网络,需要先获取账户所有的网络配置信息,我们会获取一个xml的配置文件里面配置了该账户下网络的所有配置,包括dns server ,vnet等,如果要新增和删除,就需要修改该xml文件,然后将更新后的配置文件更新到服务器。之后该账户下的网络配置就会做出相应的改变。

关于虚拟网络的xml的定义,请参考此文档:
https://msdn.microsoft.com/en-us/library/azure/jj157100.aspx

此文档实现方式,借助于Azure Python SDK,请先安装Azure Python SDK

新增虚拟网络示例

引入所需的包

from azure import *
from azure.servicemanagement import (                                  
    get_certificate_from_publish_settings,
    ServiceManagementService
)

from xml.dom import minidom
import xml.dom.minidom

账户认证,本示例采用publishingsetting的证书认证方式,也可以换成其他方式

subscription_id = 'your sub id'
certificate_path = 'mycert.pem'

get_certificate_from_publish_settings('D:\\Users\\chen.rui\\Documents\\CIETest03.publishsettings', certificate_path, subscription_id)
sms = ServiceManagementService(subscription_id, certificate_path, 'management.core.chinacloudapi.cn')

首先,要获取账号下的所有网络配置下载下来

#获取该账户下网络配置
path = sms._get_path('services/networking', 'media');
sms.content_type='text/plain';
response = sms._perform_get(path, None ,'2012-03-01');
doc = minidom.parseString(response.body)

其次,向现有的配置中添加新的虚拟网路设置,并将新的xml配置写入到文件中,以便下次使用。

#向现有的配置中添加新的虚拟网路设置
impl = xml.dom.minidom.getDOMImplementation()
VirtualNetworkSites =  doc.getElementsByTagName("VirtualNetworkSites")[0];
VirtualNetworkSite = doc.createElement('VirtualNetworkSite'); 
VirtualNetworkSite.setAttribute('name', 'test222');  #虚拟网络名称 
VirtualNetworkSite.setAttribute('Location', 'China East'); #虚拟网络所在地区

AddressSpace = doc.createElement('AddressSpace'); #虚拟网络网段设置
AddressPrefix = doc.createElement('AddressPrefix');
AddressPrefixTxt = doc.createTextNode('10.0.0.0/8')
AddressPrefix.appendChild(AddressPrefixTxt);
AddressSpace.appendChild(AddressPrefix);
VirtualNetworkSite.appendChild(AddressSpace);

Subnets = doc.createElement('Subnets');  #虚拟网络子网设置
Subnet = doc.createElement('Subnet');
Subnet.setAttribute('name', 'default');
SubnetAddressPrefix = doc.createElement('AddressPrefix');
SubnetAddressPrefixTxt = doc.createTextNode('10.0.0.0/11');
SubnetAddressPrefix.appendChild(SubnetAddressPrefixTxt);
Subnet.appendChild(SubnetAddressPrefix);
Subnets.appendChild(Subnet);
VirtualNetworkSite.appendChild(Subnets);
VirtualNetworkSites.appendChild(VirtualNetworkSite);

#将新生成的网络配置写入文件中
f= open('netcfg.xml', 'w')
doc.writexml(f, addindent='  ', newl='\n',encoding='utf-8')

最后,将最新的配置信息提交给Azure 服务

#将新生成的网络配置更新到该账户下
f = open("netcfg.xml");
netconf=f.read();
print netconf;

path = sms._get_path('services/networking', 'media');
sms._perform_put(path, netconf, False, '2012-03-01');

#重置sms content_type 配置
sms.content_type = 'application/atom+xml;type=entry;charset=utf-8'

这样就可以借助Azure REST API新增虚拟网络,同样删除,修改配置均可以使用该方式实现。

其他资料

虚拟网络REST API文档
https://msdn.microsoft.com/en-us/library/azure/jj157196.aspx
https://msdn.microsoft.com/en-us/library/azure/jj157181.aspx

标签: python

添加新评论 »