Azure雲 VM遠程開關機腳本
阿新 • • 發佈:2018-07-30
ont python實現 服務 script 成本 ret all 部署 rgs 背景:
在Azure雲上準備的測試環境,考慮到運行的成本,需要通過計劃任務設置定時開關機。
此操作可以通過多種方法實現,例如Azure提供的runbook,或者調用Azure SDK來實現,本文使用Azure sdk for python實現。
支持判斷中國法定節假日、周六日,按Resource Group為單位進行開關機。
Code:
credentials.py
#!/usr/bin/python from msrestazure.azure_cloud import AZURE_CHINA_CLOUD from azure.common.credentials import ServicePrincipalCredentials from azure.mgmt.compute import ComputeManagementClient # Credentials SUBSCRIPTION_ID = '1f6xxx46-167a-433c-bxxx-ff18f5xxxdd3' CLIENT_SECRET = 'A123456' CLIENT_ID = 'e8xx-5dxxf-47x3-99xxd-22xxxa0a' TENANT = 'xxfxx14-8x47-4x8-x4c-386xd2d' def get_credentials(): credentials = ServicePrincipalCredentials( client_id = CLIENT_ID, secret = CLIENT_SECRET, tenant = TENANT, china = True ) return credentials def auth(): credentials = get_credentials() compute_client = ComputeManagementClient( credentials, SUBSCRIPTION_ID, base_url=AZURE_CHINA_CLOUD.endpoints.resource_manager ) return compute_client
vm_power.py
#!/usr/bin/python # -*- coding: utf-8 -*- from datetime import datetime from chinese_calendar import is_holiday from credentials import auth import sys import logging RESOURCE_GROUPS = ['clusters', 'website'] compute_client = auth() def vm_start(group_name): for vm in compute_client.virtual_machines.list(group_name): async_vm = compute_client.virtual_machines.start(group_name, vm.name) async_vm.wait() def vm_deallocate(group_name): for vm in compute_client.virtual_machines.list(group_name): async_vm = compute_client.virtual_machines.deallocate(group_name, vm.name) async_vm.wait() def check_args(): args = ['start', 'deallocate'] if len(sys.argv) == 2: if sys.argv[1] not in args: logging.error("Input must be %s" % args) sys.exit(1) return sys.argv[1] if __name__ == '__main__': today = datetime.date(datetime.now()) cmd = check_args() action = {'start': vm_start, 'deallocate' : vm_deallocate} if is_holiday(today) and cmd != 'deallocate': logging.error("Can't exec %s in holiday" % cmd) sys.exit(1) else: for group in RESOURCE_GROUPS: action[cmd](group)
使用方法:
使用此腳本需要先安裝Azure SDK和 chinese_calendar,chinese_calendar用於判斷中國的法定節假日。
此腳本可以部署在能訪問Azure的主機上或是Azure的一個服務上,通過計劃任務的方式進行調度執行,來達到節省成本的目的。
END:
由於筆者的水平有限,文中難免會出現一些錯誤或者不準確的地方,不妥之處懇請讀者批評指正。
我也會繼續分享我的一些工作經驗和心得,喜歡筆者的文章,右上角點一波關註,謝謝!
Azure雲 VM遠程開關機腳本