Blame view

scripts/tools/server_decomission.py 2.97 KB
root authored
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# author tiexin.yang@yoho.cn

from qcloud.qcloud_api import QcloudApi
from zabbix import delete_host_by_ip
import datetime
import argparse
import os,shutil
import sys
import time
import json
import re


"""
root authored
17
  作用:通过制定ip销毁,退还按需/按量付费类型实例,同时注销zabbix host
root authored
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
  依赖:zabbix.py(注销zabbix host)
  Demo:
        python server_decomission.py 1.2.3.4
"""


class consoleRobot(object):
    def __init__(self,secretId='',secretKey=''):
        if not secretId or not secretKey:
            self.secretId,self.secretKey = open('/home/ansible/.qcloud_config').read().strip('\n').split('\n')
        else:
            self.secretId,self.secretKey = secretId,secretKey

        self.receivers = ['tiexin.yang@yoho.cn','chunhua.zhang@yoho.cn']
        self.client = QcloudApi(self.secretId,self.secretKey)


    def LocateInstanceByIp(self,privateIp):
        params = {
            "Action": "DescribeInstances",
            "Filters.0.Name": "private-ip-address",
            "Filters.0.Values.0": privateIp
        }
        result = self.client.do_query(params,"cvm.ap-beijing.tencentcloudapi.com/",api_version=3)
        instances = result["Response"]["InstanceSet"]
        if len(instances) == 0:
            print "查询结果为空,请确认输入IP无误后再试"
            return False
        else:
            instance = instances[0]
            instanceId,instanceName = instance["InstanceId"],instance["InstanceName"]
            return instanceId,instanceName

    def ReturnInstanceById(self,instanceId):
        params = {
            "Action":"TerminateInstances",
            "InstanceIds.0":instanceId
            }
root authored
56
        result = self.client.do_query(params,"cvm.ap-beijing.tencentcloudapi.com",api_version=3)
root authored
57 58 59 60 61 62 63 64 65 66 67
        return result

    def ReturnInstanceByIp(self,privateIp):
        print '查询IP对应的实例ID'
        result = self.LocateInstanceByIp(privateIp)
        if result:
            instanceId,instanceName = result
            print u'即将退还实例...请确认如下信息无误:\n\t实例ID:{0}\n\t实例IP:{1}\n\t实例名称:{2}'.format(instanceId,privateIp,instanceName)
            feedBack = str(raw_input('确认?(Y/N): ')).upper()
            if feedBack == 'Y':
                print '开始退还实例...{0}'.format(instanceId)
root authored
68 69 70 71 72 73 74 75 76 77
                rsp = self.ReturnInstanceById(instanceId)['Response']
                if rsp.has_key('Error'):
                    print json.dumps(rsp['Error'],indent=4)
                    print '实例退还失败'
                    return 1
                else:
                    print '实例退还成功!'
                    print '开始注销zabbix host...'
                    delete_host_by_ip(privateIp)
                    return 0
root authored
78 79 80 81 82 83 84 85 86
            else:
                print '任务取消'
                return 0
        else:
            return 0
    
if __name__ == '__main__':
    demo = consoleRobot()
    demo.ReturnInstanceByIp(sys.argv[1])