ad-joining/register-computer/gcp/project.py (52 lines of code) (raw):
#
# Copyright 2019 Google LLC
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
import google.auth
import google_auth_httplib2
import googleapiclient.discovery
from googleapiclient.errors import HttpError
import googleapiclient.http
USER_AGENT = "cloud-solutions/gce-automated-ad-join-v2"
class Project(object):
def __init__(self, project_id):
credentials, _ = google.auth.default()
auth_http = google_auth_httplib2.AuthorizedHttp(credentials)
googleapiclient .http.set_user_agent(auth_http, USER_AGENT)
self.__project_id = project_id
self.__gce_client = googleapiclient.discovery.build('compute', 'v1', http=auth_http)
def get_zones(self):
page_token = None
zones = []
while True:
result = self.__gce_client.zones().list(
project=self.__project_id,
pageToken=page_token).execute()
zones += [item["name"] for item in result["items"]]
if not page_token:
break
return zones
def get_instance(self, name, zone):
try:
computer = self.__gce_client.instances().get(
project=self.__project_id,
zone=zone,
instance=name).execute()
return computer
except HttpError as e:
# Ignore 404 (Not Found) and return without result. Report all other errors
if e.resp.status == 404:
return
raise
def get_managed_instance_group(self, group_name, zone, region):
try:
if zone:
result = self.__gce_client.instanceGroupManagers().get(
project=self.__project_id,
zone=zone,
instanceGroupManager=group_name).execute()
else:
result = self.__gce_client.regionInstanceGroupManagers().get(
project=self.__project_id,
region=region,
instanceGroupManager=group_name).execute()
return result
except HttpError as e:
# Ignore 404 (Not Found) and return without result. Report all other errors
if e.resp.status == 404:
return
raise