Есть ли способ перечислить имена проектов Google через .NET Google Cloud SDK? - PullRequest
0 голосов
/ 12 января 2019

Я хочу сделать уборку во всех наших проектах Google, и для этого мне нужно иметь возможность перечислить все доступные проекты. Я не могу найти это нигде в API, я что-то упустил? Я думал, что это может быть в IAM SDK, но не нашел его там. Любые идеи о том, где это может быть, или мне нужно реализовать что-то самостоятельно поверх API?

Ответы [ 3 ]

0 голосов
/ 14 января 2019

Мне понравился Томас Янссон Вопрос / Ответ об использовании Google Cloud Resource Manager для перечисления проектов.

Разрешения и доступ к ним:

Вы можете перечислять только те проекты, к которым у вас есть права доступа. Это означает, что вы не можете видеть все проекты, если у вас нет прав доступа к ним. В моих примерах ниже я показываю, какие области необходимы. Это также означает, что вы можете перечислять проекты в разных аккаунтах. Это позволяет вам видеть, к каким проектам у вас есть доступ, используя учетные данные, указанные в примерах. Я показываю, как использовать учетные данные приложения по умолчанию (ADC) и учетные данные службы (формат файла Json).

Этот ответ включает в себя два примера на Python, в которых используются две разные библиотеки Google Cloud Python. Эти примеры выдают тот же результат, что и команда Google CLI gcloud projects list.

Пример 1 с использованием клиентской библиотеки Python (метод обнаружения служб):

from googleapiclient import discovery
from oauth2client.client import GoogleCredentials
from google.oauth2 import service_account

# Example using the Python Client Library

# Documentation
# https://github.com/googleapis/google-api-python-client
# https://developers.google.com/resources/api-libraries/documentation/cloudresourcemanager/v2/python/latest/

# Library Installation
# pip install -U google-api-python-client
# pip install -U oauth2client

# Requires one of the following scopes
# https://www.googleapis.com/auth/cloud-platform
# https://www.googleapis.com/auth/cloud-platform.read-only
# https://www.googleapis.com/auth/cloudplatformprojects
# https://www.googleapis.com/auth/cloudplatformprojects.readonly

print('{:<20} {:<22} {:<21}'.format('PROJECT_ID', 'NAME', 'PROJECT_NUMBER'))

# Uncomment to use Application Default Credentials (ADC)
credentials = GoogleCredentials.get_application_default()

# Uncomment to use Service Account Credentials in Json format
# credentials = service_account.Credentials.from_service_account_file('service-account.json')

service = discovery.build('cloudresourcemanager', 'v1', credentials=credentials)

request = service.projects().list()

while request is not None:
        response = request.execute()

        for project in response.get('projects', []):
                print('{:<20} {:<22} {:<21}'.format(project['projectId'], project['name'], project['projectNumber']))

        request = service.projects().list_next(previous_request=request, previous_response=response)

Пример 2 с использованием клиентской библиотеки API Google Cloud Resource Manager Python:

from google.cloud import resource_manager

# Example using the Python Google Cloud Resource Manager API Client Library

# Documentation
# https://pypi.org/project/google-cloud-resource-manager/
# https://github.com/googleapis/google-cloud-python
# https://googleapis.github.io/google-cloud-python/latest/resource-manager/index.html
# https://googleapis.github.io/google-cloud-python/latest/resource-manager/client.html
# https://googleapis.github.io/google-cloud-python/latest/resource-manager/project.html

# Library Installation
# pip install -U google-cloud-resource-manager

# Requires one of the following scopes
# https://www.googleapis.com/auth/cloud-platform
# https://www.googleapis.com/auth/cloud-platform.read-only
# https://www.googleapis.com/auth/cloudplatformprojects
# https://www.googleapis.com/auth/cloudplatformprojects.readonly

print('{:<20} {:<22} {:<21}'.format('PROJECT_ID', 'NAME', 'PROJECT_NUMBER'))

# Uncomment to use Application Default Credentials (ADC)
client = resource_manager.Client()

# Uncomment to use Service Account Credentials in Json format
# client = resource_manager.Client.from_service_account_json('service-account.json')

for project in client.list_projects():
        print('{:<20} {:<22} {:<21}'.format(project.project_id, project.name, project.number))
0 голосов
/ 17 января 2019

Код C # выглядит следующим образом. Предполагается, что вы установили переменную среды GOOGLE_APPLICATION_CREDENTIALS для загруженного вами json-файла ключа учетной записи службы.

using Google.Apis.Auth.OAuth2;
using Google.Apis.CloudResourceManager.v1;
using Google.Apis.Services;
using System;

namespace ListProjects
{
    class Program
    {
        static void Main(string[] args)
        {

             GoogleCredential credential =
                GoogleCredential.GetApplicationDefault();
            if (credential.IsCreateScopedRequired)
            {
                credential = credential.CreateScoped(new[]
                {
                    CloudResourceManagerService.Scope.CloudPlatformReadOnly
                });
            }
            var crmService = new CloudResourceManagerService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
            });
            var request = new ProjectsResource.ListRequest(crmService);
            while (true)
            {
                var result = request.Execute();
                foreach (var project in result.Projects)
                {
                    Console.WriteLine(project.ProjectId);
                }
                if (string.IsNullOrEmpty(result.NextPageToken))
                {
                    break;
                }
                request.PageToken = result.NextPageToken;
            }
        }
    }
}
0 голосов
/ 13 января 2019

Чтобы иметь возможность сделать это, вы должны использовать сырые API-клиенты. API для использования это Google.Apis.CloudResourceManager.v1.CloudResourceManagerService.

Код должен выглядеть примерно так (F #), учитывая, что вы хотите использовать учетные данные приложения по умолчанию

let getCredentials() = GoogleCredential.GetApplicationDefaultAsync() |> Async.AwaitTask
async {
    let! credentials = getCredentials()
    initializer.HttpClientInitializer <- credentials
    let crmService = new Google.Apis.CloudResourceManager.v1.CloudResourceManagerService(initializer)
    let projectsResource = crmService.Projects
    let projects = projectsResource.List().Execute().Projects
    .
    .
    .
}
``´
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...