Example #1
0
 def post(self):
     '''
     save vip instance edit
     '''
     id = self.get_argument("id", None)
     data = tornado.escape.json_decode(self.request.body)
     data['mailto'] = data['mailto'].split(',')
     vip_group = data['vip_group'].split(',')
     vip_group_list = []
     for vip in vip_group:
         viplist = vip.split(':')
         vip_group_list.append({"vip": viplist[0], "port": viplist[1]})
     data['vip_group'] = vip_group_list
     for rs in data['rs']:
         rs['port'] = rs['port'].split(',')
     handler = Model('LvsManagerConfig')
     handler.UpdateLvsManagerConfigVipInstance(id, data)
     self.write('ok')
Example #2
0
    def editLvsManagerConfig(self, result):
        config = yaml.load(open(options.config))
        cluster_list = config['cluster']

        #{'vip': ['127.0.0.1:80'], 'room': 'wx', 'business': 'flyme', 'rs': ['127.0.0.1:80'], 'line': 'ct', 'persistence_timeout': 60, 'module': 'flyme-80', 'id': '584e4fefc720b28dc4c1d14f','special':'0'}
        rs_tpl = '''
        {
                    "manager_ip": "%s",
                    "monitor": {
                        "type": "TCP_CHECK",
                        "connect_timeout": "3"
                    },
                    "weight": "100",
                    "index": 0,
                    "server_ip": "%s",
                    "port": [
                        "%s"
                    ]
        }
       '''

        vip_tpl = '''
        {
            "vip": "%s",
            "port": "%s"
        }
        '''

        insert_tpl = '''
        {
            "mailto": [
                "*****@*****.**"
            ],
            "owners": "韦浩",
            "protocol": "TCP",
            "quorum": "1",
            "rs": [

                {rss}
            ],
            "vip_instance": "{module}",
            "descript": "{business}",
            "persistence_timeout": "{persistence_timeout}",
            "hysteresis": "0",
            "delay_loop": "6",
            "vip_group": [
                {vips}
            ],
            "alpha": true,
            "lb_kind": "FNAT",
            "cluster_id": "{cluster_id}",
            "omega": true,
            "sync_proxy": true,
            "lb_algo": "wrr"
        }'''

        data = json.loads(self.get_argument('data', '{}'))
        if len(data) == 0:
            result['message'] = 'invalid data'
            return
        id = ''
        all_lines = {'ct': '电信', 'cu': '联通', 'cm': '移动'}
        all_rooms = {'ns': '南沙', 'bj': '北京', 'wx': '无锡', 'hk': '香港'}
        rs = data.get('rs', [])
        room = data.get('room', '')
        line = data.get('line', '')
        vip = data.get('vip', [])
        business = data.get('business', [])
        module = data.get('module', '')
        special = int(data.get('special', '0'))
        if special:
            cluster_id = '%s_%s_lvs_cluster_%s' % (room, line, business)
        else:
            cluster_id = '%s_%s_lvs_cluster' % (room, line)
        cluster_flag = False
        for cluster in cluster_list:
            if str(cluster['id']) == str(cluster_id):
                cluster_flag = True
                break
        if not cluster_flag:
            result[
                'message'] = 'cluster %s not found,please contact manager!' % (
                    cluster_id)
            return

        persistence_timeout = data.get('persistence_timeout', '600')
        if not room in all_rooms:
            result['message'] = 'room must be in [%s]' % ','.join(
                all_rooms.keys())
            return
        if not line in all_lines:
            result['message'] = 'line must be in [%s]' % ','.join(
                all_lines.keys())
            return
        rs_list = []
        vip_list = []
        for r in rs:
            tmp = str(r).split(':')
            rs_list.append(rs_tpl % (tmp[0], tmp[0], tmp[1]))
        for v in vip:
            tmp = str(v).split(':')
            vip_list.append(vip_tpl % (tmp[0], tmp[1]))

        dict_data = {
            'rss': ','.join(rs_list),
            'vips': ','.join(vip_list),
            'cluster_id': cluster_id,
            'business': business,
            'module': module,
            'persistence_timeout': persistence_timeout
        }
        if 'id' in data:
            id = str(data['id'])
        data = json.loads(self._replace(insert_tpl, dict_data))

        lvs = Model('LvsManagerConfig')
        if id == '':
            id = lvs.insertLvsManagerConfigVipInstance2(data)
        else:
            try:
                info = lvs.getLvsManagerConfigVipInstanceInfo(id)
                if len(info) == 0:
                    result['message'] = 'cluster %s not found ' % cluster_id
                    return
                id = lvs.UpdateLvsManagerConfigVipInstance(id, data)
            except Exception as er:
                id = False
                result['message'] = str(er)
        result['data'] = str(id)