Blame view

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

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


"""
root authored
18
  作用:通过制定ip销毁,退还按需/按量付费类型实例,同时注销zabbix host
root authored
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 56 57
  依赖: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.mailman = mailman()
        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
58
        result = self.client.do_query(params,"cvm.ap-beijing.tencentcloudapi.com",api_version=3)
root authored
59 60 61 62 63 64 65 66 67 68 69
        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
70 71 72 73 74 75 76 77 78 79
                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
80 81 82 83 84 85 86 87 88
            else:
                print '任务取消'
                return 0
        else:
            return 0
    
if __name__ == '__main__':
    demo = consoleRobot()
    demo.ReturnInstanceByIp(sys.argv[1])