import googleapiclient import json import time import requests import os from googleapiclient import discovery from oauth2client.client import GoogleCredentials credentials = GoogleCredentials.get_application_default() containerClient = discovery.build('container', 'v1', credentials=credentials) computeClient = discovery.build('compute', 'v1', credentials=credentials) BOT_WEBHOOK = 'https://open.feishu.cn/open-apis/bot/v2/hook/0e2e4541-bb50-4261-aace-b8c100802ef3' def post_to_feishu(): headers = { 'Content-Type': 'application/json' } payload_message = { "timestamp": str(int(time.time())), "msg_type": "interactive", "card": { "i18n_elements": { "en_us": [ { "tag": "div", "text": { "tag": "lark_md", "content": "**GCP Seed Robot**" }, "fields": [ { "is_short": False, "text": { "tag": "lark_md", "content": "" } }, { "is_short": True, "text": { "tag": "lark_md", "content": "自动关闭GCP Us-Central VM 异常" } } ] }, ] } } } response = requests.request( "POST", BOT_WEBHOOK, headers=headers, data=json.dumps(payload_message)) print(response.text) def delete_all_shoot_vms(): zones = [ "us-central1-a", "us-central1-b", "us-central1-c"] for zone in zones: request = computeClient.instances().list(project="pingcap-gardener", zone=zone) while request is not None: response = request.execute() time.sleep(100) if 'items' not in response: continue for instance in response['items']: try: if "shoot" in instance['name'] and 'master' in instance['name']: print("delete vm ", instance['name']) deleteResponse = computeClient.instances().delete(project="pingcap-gardener", zone=zone, instance=instance['name']) deleteResponse.execute() except: pass request = computeClient.instances().list_next(previous_request=request, previous_response=response) time.sleep(10) def scaledown(data, context): try: delete_all_shoot_vms() except: post_to_feishu() return "ok"