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
  • 相关阅读:
    使用ANY、Some或All关键字
    Exists 和 Not Exists
    in和not in
    斐波那契数列 迭代与递归效率对比
    欧几里得算法
    递归
    字符长串破解密码
    对return函数的认识
    global与nonlocal关键字总结
    闭包
  • 原文地址:https://www.cnblogs.com/zangdalei/p/7515573.html
Copyright © 2011-2022 走看看