zoukankan      html  css  js  c++  java
  • Python 基于固定 IP 来命名 ARM 虚拟机的实现

    问题描述

    希望通过 Python 批量创建 ARM 虚拟机,并且在虚拟机命名时加入固定 IP 信息,方便管理维护。

    vm

    问题分析

    在创建 ARM 虚拟机之前,先创建固定 IP,然后获取固定 IP 地址,创建虚拟机时通过该 IP 地址格式化虚拟机名称。然后将固定 IP 配置到网络接口,基于该网络接口配置创建 ARM 虚拟机。

    解决方法

    模块安装

    本文在 Windows Python 环境下进行测试,环境及模块依赖如下:

    • 官网下载 msi 安装包,管理员命令行执行以下安装脚本

       
      msiexec /package python-xxx.msi
      
    • 使用 PIP 安装 Azure(需要 pip 9+ 支持,Python 2.7 环境已内置 pip 9+ 版本,不需更新)

       
      pip install azure
      
    • 安装程序依赖的模块

       
      pip install azure-mgmt-network==0.30.0rc6
      pip install azure-mgmt-compute==0.30.0rc6
      pip install azure-mgmt-resource==0.30.2
      
    • 如何查看模块的版本

       
      pip install azure-mgmt-network==
      Collecting azure-mgmt-network==
      Could not find a version that satisfies the requirement azure-mgmt-network==
      from versions: 0.20.0rc1, 0.20.0rc2, 0.20.0, 0.20.1, 0.30.0a1, 0.30.0rc1, 0.30.
      rc2, 0.30.0rc3, 0.30.0rc4, 0.30.0rc5, 0.30.0rc6, 0.30.0)
      No matching distribution found for azure-mgmt-network==
      

    代码实现

     
    from azure import *
    from azure.mgmt.compute import ComputeManagementClient
    from azure.mgmt.network import NetworkManagementClient
    from azure.mgmt.resource import ResourceManagementClient
    from azure.common.credentials import UserPassCredentials
    from azure.mgmt.compute.models import *
    from msrest.serialization import *
    
    credentials = UserPassCredentials(
        "订阅账户",
        "账户密码",
        china=True
    )
    
    resource_client = ResourceManagementClient(
    credentials,
    '订阅 ID',
    base_url = 'https://management.chinacloudapi.cn'
    )
    
    resource_client.providers.register('Microsoft.Compute')
    resource_client.providers.register('Microsoft.Network')
    
    compute_client = ComputeManagementClient(
    credentials,
    '订阅 ID',
    base_url = 'https://management.chinacloudapi.cn'
    )
    
    network_client = NetworkManagementClient(
    credentials,
        '订阅 ID',
    base_url = 'https://management.chinacloudapi.cn'
    )
    
    # Create Public IP
    # result = network_client.public_ip_addresses.create_or_update(
    #     'geogroup',     #group_name
    #     'geo-ip-01',        #ip_name
    #     PublicIPAddress(
    #         location='China North',
    #         public_ip_allocation_method=IPAllocationMethod.static,
    #         idle_timeout_in_minutes=4,
    #         ),
    #     )
    # result.wait()
    
    public_ip_addresses = 'public_ip_name'
    group_name = ''public_ip_group'
    
    result = network_client.public_ip_addresses.get(group_name,public_ip_addresses)
    print result.__dict__.items()
    print result.ip_address
    print result.ip_address.replace(".","-")
    
    storageName = "storage account name"
    vmName = "geovm-"+result.ip_address.replace(".","-")
    print vmName
    
    location = "chinanorth"
    print location
    
    os_profile = OSProfile(
        computer_name= vmName,
        admin_username='username',
        admin_password='password,
    )
    print os_profile
    
    hardware_profile = HardwareProfile(
        vm_size=VirtualMachineSizeTypes.standard_a0
    )
    print hardware_profile
    
    storage_profile = StorageProfile(
        os_disk=OSDisk(
            caching=CachingTypes.none,
            create_option=DiskCreateOptionTypes.from_image,
            name=vmName,
            vhd=VirtualHardDisk(
    uri='https://'+storageName+'.blob.core.chinacloudapi.cn/vhds/'+vmName+'.vhd',
            ),
        ),
    )
    
    storage_profile.image_reference = ImageReference(
        publisher='Canonical',
        offer='UbuntuServer',
        sku='16.04.0-LTS',
        version='latest'
    )
    print storage_profile
    
    network_profile = NetworkProfile(
        network_interfaces=[
            NetworkInterfaceReference(
                id="在新门户,网络接口-属性中获取资源 ID,该网络接口需要配置固定 IP",
            ),
        ],
    )
    print network_profile
    
    params_create = VirtualMachine(
        location=location,
        os_profile=os_profile,
        hardware_profile=hardware_profile,
        network_profile=network_profile,
        storage_profile=storage_profile,
    )
    print params_create
    
    result_create = compute_client.virtual_machines.create_or_update(
        group_name,
        vmName,
        params_create
    )
    
    result_create.wait()
    print 'ok'                               立即访问http://market.azure.cn
  • 相关阅读:
    centos7 mongodb3.4 安装
    centos7 开放端口号
    Junit4测试Spring
    selenium浏览器内核监测处理
    mitmproxy(TLS错误)
    爬虫计算两张验证图片的距离(情况一)
    git的git bash使用
    算法
    RBAC权限管理设计
    beego框架返回json数据
  • 原文地址:https://www.cnblogs.com/zangdalei/p/7515573.html
Copyright © 2011-2022 走看看