首页 > 解决方案 > 如何获取 GCP 中所有项目的所有 VM 信息

问题描述

如何获取 GCP 中所有项目的所有 VM 信息。

我的 GCP 帐户中有多个项目,我需要 GCP 中所有项目的所有 VM 的操作系统、操作系统版本和操作系统的构建版本。

标签: google-cloud-platformterraform-provider-gcp

解决方案


我没有找到一个工具,所以我编写了一些你可以使用的代码。此代码必须改进,但在这里您可以找到一种方法来扫描所有项目并获取有关操作系统的信息。

让我知道它是否对您有帮助。

点安装:

!pip install google-cloud
!pip install google-api-python-client
!pip install oauth2client

代码:

import subprocess
import sys
import logging
import threading
import pprint

logger = logging.Logger('catch_all')

def execute_bash(parameters):
    try:
        return subprocess.check_output(parameters)
    except Exception as e: 
       logger.error(e) 
       logger.error('ERROR: Looking in jupyter console for more information')

def scan_gce(project, results_scan):
    print('Scanning project: "{}"'.format(project))
    ex = execute_bash(['gcloud','compute', 'instances', 'list', '--project', project, '--format=value(name,zone, status)'])
    list_result_vms = []
    if ex:
        list_vms = ex.decode("utf-8").split('\n')
        for vm in list_vms:
            if vm:
                vm_info = vm.split('\t')
                print('Scanning Instance: "{}" in project "{}"'.format(vm_info[0], project))
                results_bytes = execute_bash(['gcloud', 'compute', '--project',project, 
                                        'ssh', '--zone', vm_info[1],  vm_info[0], 
                                        '--command', 'cat /etc/*-release'  ])
                if results_bytes:
                    results = results_bytes.decode("utf-8").split('\n')
                    list_result_vms.append({'instance_name': vm_info[0],'result':results})


    results_scan.append({'project':project, 'vms':list_result_vms})


list_projects = execute_bash(['gcloud','projects', 'list', '--format=value(projectId)']).decode("utf-8").split('\n')
threads_project = []
results_scan = []
for project in list_projects :
    t = threading.Thread(target=scan_gce, args=(project, results_scan))
    threads_project.append(t)
    t.start()

for t in threads_project:
    t.join()

for result in results_scan:
    pprint.pprint(result)

你可以在这里找到完整的代码:


推荐阅读