2

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

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

4

3 回答 3

3

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

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

点安装:

!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)

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

于 2019-02-24T07:02:37.793 回答
0

您可以在 Cloud Shell 中使用以下命令来获取所有项目,然后显示每个项目的实例:

for i in $(gcloud projects list |  sed 1d | cut -f1 -d$' '); do 
gcloud compute instances list --project $i;done;

注意:确保您拥有所有项目的 compute.instances.list 权限

于 2021-08-12T12:33:29.863 回答
0

Wuick 和肮脏的:

gcloud projects list --format 'value(PROJECT_ID)' >> proj_list

cat proj_list | while read pj; do gcloud compute instances list --project $pj; done
于 2021-01-08T13:14:02.667 回答