• 【Azure Developer】使用Python代码获取VM的IP地址 (Public IP + Private IP)【未解决问题标签】


    记录使用以下的代码获取Azure VM中的IP地址

    """Create and manage virtual machines.
     
    This script expects that the following environment vars are set:
     
    AZURE_TENANT_ID: your Azure Active Directory tenant id or domain
    AZURE_CLIENT_ID: your Azure Active Directory Application Client ID
    AZURE_CLIENT_SECRET: your Azure Active Directory Application Secret
    AZURE_SUBSCRIPTION_ID: your Azure Subscription Id
    """
    import os
    import traceback
     
    from azure.common.credentials import ServicePrincipalCredentials
    from azure.mgmt.resource import ResourceManagementClient
    from azure.mgmt.network import NetworkManagementClient
    from azure.mgmt.compute import ComputeManagementClient
    from azure.mgmt.compute.models import DiskCreateOption
     
    from msrestazure.azure_exceptions import CloudError
    from msrestazure.azure_cloud import AZURE_CHINA_CLOUD
    
    # from azure.identity import DefaultAzureCredential
    # from azure.identity import ClientSecretCredential
    # credentials = ClientSecretCredential(client_id='xxxxxxxx-xxxx-xxxx-xxxx-76f50363af33', client_secret='.~V9ij1.5Y_F8rL_k8DNpj~RSLFf~H56nH', tenant_id='xxxxxxxx-xxxx-xxxx-xxxx-1316152d9587',authority=AzureAuthorityHosts.AZURE_CHINA)
    # token =credentials.get_token("https://microsoftgraph.chinacloudapi.cn/.default")
    # print(token)
    
    def get_credentials():
        subscription_id = os.environ['AZURE_SUBSCRIPTION_ID']
        print(subscription_id)
        credentials = ServicePrincipalCredentials(
            client_id=os.environ['AZURE_CLIENT_ID'],
            secret=os.environ['AZURE_CLIENT_SECRET'],
            tenant=os.environ['AZURE_TENANT_ID'],
            resource="https://management.chinacloudapi.cn/",
            authority=AZURE_CHINA_CLOUD.endpoints.active_directory,
            scopes="https://management.chinacloudapi.cn/.default",
            china=True
        )
    
    
        # credentials = ClientSecretCredential(
        #     client_id=os.environ['AZURE_CLIENT_ID'],
        #     client_secret=os.environ['AZURE_CLIENT_SECRET'],
        #     tenant_id=os.environ['AZURE_TENANT_ID'],
        #     resource="https://management.chinacloudapi.cn/",
        #     authority=AZURE_CHINA_CLOUD.endpoints.active_directory,
        #     scopes="https://management.chinacloudapi.cn/.default",
        #     china=True
        # )
    
        return credentials, subscription_id
     
    def run_example():
        """Virtual Machine management example."""
        #
        # Create all clients with an Application (service principal) token provider
        #
        credentials, subscription_id = get_credentials()
        #access_token = credentials.token['access_token']
        #print(access_token)
    
        # client2 = MonitorManagementClient(
        #     credential,
        #     subscription_id,
        #     base_url=CLOUD.endpoints.resource_manager,
        #     credential_scopes=[CLOUD.endpoints.resource_manager + "/.default"]
        # )
    
        resource_client = ResourceManagementClient(credentials, subscription_id,base_url="https://management.chinacloudapi.cn/",scopes="https://management.chinacloudapi.cn/.default")
        compute_client = ComputeManagementClient(credentials, subscription_id,base_url="https://management.chinacloudapi.cn/",scopes="https://management.chinacloudapi.cn/.default")
        network_client = NetworkManagementClient(credentials, subscription_id,base_url="https://management.chinacloudapi.cn/",scopes="https://management.chinacloudapi.cn/.default")
        print(AZURE_CHINA_CLOUD.endpoints.active_directory_resource_id)
    
        for public_ip in network_client.public_ip_addresses.list_all():
                print("Public IP: {}:{}".format(public_ip.id, public_ip.ip_address))
    
        for network_interface in network_client.network_interfaces.list_all():
            if (network_interface.virtual_machine != None):
                print("VM ID: " + network_interface.virtual_machine.id)
                for ip_configuration in network_interface.ip_configurations:
                    if (ip_configuration.primary):
                        print("VM Used Public IP: " + ip_configuration.public_ip_address.id)
    
        try:
            # List VMs in subscription
            print('\nList VMs in subscription')
            for vm in compute_client.virtual_machines.list_all():
                print("\tVM: {}".format(vm))
     
        except CloudError:
            print('A VM operation failed:\n{}'.format(traceback.format_exc()))
        else:
            print('All example operations completed successfully!')
     
    if __name__ == "__main__":
        run_example()
    
     

    但是,结果却没有能成功。

    遇见问题:

    https://management.chinacloudapi.cn/.default
    Traceback (most recent call last):
      File "C:\Users\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 196, in _run_module_as_main
        return _run_code(code, main_globals, None,
      File "C:\Users\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 86, in _run_code
        exec(code, run_globals)
      File "c:\Users\.vscode\extensions\ms-python.python-2022.14.0\pythonFiles\lib\python\debugpy\__main__.py", line 39, in <module>
        cli.main()
      File "c:\Users\.vscode\extensions\ms-python.python-2022.14.0\pythonFiles\lib\python\debugpy/..\debugpy\server\cli.py", line 430, in main
        run()
      File "c:\Users\.vscode\extensions\ms-python.python-2022.14.0\pythonFiles\lib\python\debugpy/..\debugpy\server\cli.py", line 284, in run_file
        runpy.run_path(target, run_name="__main__")
      File "c:\Users\.vscode\extensions\ms-python.python-2022.14.0\pythonFiles\lib\python\debugpy\_vendored\pydevd\_pydevd_bundle\pydevd_runpy.py", line 321, in run_path
        return _run_module_code(code, init_globals, run_name,
      File "c:\Users\.vscode\extensions\ms-python.python-2022.14.0\pythonFiles\lib\python\debugpy\_vendored\pydevd\_pydevd_bundle\pydevd_runpy.py", line 135, in _run_module_code
        _run_code(code, mod_globals, init_globals,
      File "c:\Users\.vscode\extensions\ms-python.python-2022.14.0\pythonFiles\lib\python\debugpy\_vendored\pydevd\_pydevd_bundle\pydevd_runpy.py", line 124, in _run_code
        exec(code, run_globals)
      File "c:\LBWorkSpace\MyCode\61-VM-Python\getIPaddress\getip.py", line 97, in <module>
        run_example()
      File "c:\LBWorkSpace\MyCode\61-VM-Python\getIPaddress\getip.py", line 75, in run_example
        for public_ip in network_client.public_ip_addresses.list_all():
      File "C:\Users\AppData\Local\Programs\Python\Python310\lib\site-packages\azure\core\paging.py", line 128, in __next__
        return next(self._page_iterator)
      File "C:\Users\AppData\Local\Programs\Python\Python310\lib\site-packages\azure\core\paging.py", line 76, in __next__
        self._response = self._get_next(self.continuation_token)
      File "C:\Users\AppData\Local\Programs\Python\Python310\lib\site-packages\azure\mgmt\network\v2022_01_01\operations\_operations.py", line 32711, in get_next
        pipeline_response = self._client._pipeline.run(  # pylint: disable=protected-access
      File "C:\Users\AppData\Local\Programs\Python\Python310\lib\site-packages\azure\core\pipeline\_base.py", line 211, in run
        return first_node.send(pipeline_request)  # type: ignore
      File "C:\Users\AppData\Local\Programs\Python\Python310\lib\site-packages\azure\core\pipeline\_base.py", line 71, in send
        response = self.next.send(request)
      File "C:\Users\AppData\Local\Programs\Python\Python310\lib\site-packages\azure\core\pipeline\_base.py", line 71, in send
        response = self.next.send(request)
      File "C:\Users\AppData\Local\Programs\Python\Python310\lib\site-packages\azure\core\pipeline\_base.py", line 71, in send
        response = self.next.send(request)
      [Previous line repeated 2 more times]
      File "C:\Users\AppData\Local\Programs\Python\Python310\lib\site-packages\azure\mgmt\core\policies\_base.py", line 47, in send
        response = self.next.send(request)
      File "C:\Users\AppData\Local\Programs\Python\Python310\lib\site-packages\azure\core\pipeline\policies\_redirect.py", line 158, in send
        response = self.next.send(request)
      File "C:\Users\AppData\Local\Programs\Python\Python310\lib\site-packages\azure\core\pipeline\policies\_retry.py", line 446, in send
        response = self.next.send(request)
      File "C:\Users\AppData\Local\Programs\Python\Python310\lib\site-packages\azure\core\pipeline\policies\_authentication.py", line 119, in send
        self.on_request(request)
      File "C:\Users\AppData\Local\Programs\Python\Python310\lib\site-packages\azure\core\pipeline\policies\_authentication.py", line 96, in on_request
        self._token = self._credential.get_token(*self._scopes)
    AttributeError: 'ServicePrincipalCredentials' object has no attribute 'get_token'. Did you mean: 'set_token'?

    通过Bing搜索查找,怀疑是packages中版本冲突引起。参考链接:

    https://github.com/Azure/azure-sdk-for-python/issues/16908

    https://github.com/Azure/azure-sdk-for-python/issues/14059

    @2022-10-01, 还没有解决它。

  • 相关阅读:
    十五行Python代码实现批量下载好看的视频,嘎嘎好看
    利用PYTHON实现科学占卜
    如何开发一个分布式内存数据库(一)
    AE中的线符号渲染
    AE中的面符号(填充符号)渲染
    Excel批量转Word
    AE中的点符号渲染
    搭建nuget服务器(三):使用nuget下载制作的package
    搭建nuget服务器(二):制作package
    搭建nuget服务器(一):搭建nuget应用服务
  • 原文地址:https://www.cnblogs.com/lulight/p/16747387.html
Copyright © 2020-2023  润新知