Esempio n. 1
0
    def post(self, *args, **kwargs):
        """关联标签和服务"""
        tag_key = self.get_argument('tag_key', default=None, strip=True)
        services_name = self.get_argument('services_name', default=None, strip=True)  # 传入一个service_name的列表
        with DBContext('w') as session:
            tag_info = session.query(TagList).filter(TagList.key == tag_key).first()
            tag_id = model_to_dict(tag_info)['id']
            tag_info.service_name = services_name

            for name in services_name.split(','):
                services_info = session.query(ServicesList).filter(ServicesList.services_name == name).first()
                if not services_info:
                    new_service = ServicesList(services_name=name)
                    session.add(new_service)
                    session.commit()

            services_id_list = []
            for name in services_name.split(','):
                services_info = session.query(ServicesList).filter(ServicesList.services_name == name).first()
                dict_data = model_to_dict(services_info)
                services_id = dict_data['id']
                services_id_list.append(services_id)

            for services_id in services_id_list:
                data_info = session.query(ServicesTagMiddle).filter_by(
                    tag_id=tag_id, services_id=services_id
                ).first()
                if not data_info:
                    new_middle = ServicesTagMiddle(tag_id=tag_id, services_id=services_id)
                    session.add(new_middle)
                session.commit()
Esempio n. 2
0
 def get(self, *args, **kwargs):
     """查询出标签服务关联的数据接口"""
     tag_list = []
     with DBContext('r') as session:
         tag_services_info = session.query(ServicesTagMiddle).all()
         for data in tag_services_info:
             data_dict = model_to_dict(data)
             tag_info = session.query(TagList).filter(TagList.id == data_dict["tag_id"]).first()
             tag_name = model_to_dict(tag_info)["key"]
             services_info = session.query(ServicesList).filter(ServicesList.id == data_dict["services_id"]).first()
             services_name = model_to_dict(services_info)["services_name"]
             tag_list.append({tag_name: services_name})
     return tag_list
    def get(self, *args, **kwargs):
        """查询出标签检测结果数据接口"""
        search_key = self.get_argument('search_key', default=None, strip=True)
        tag_list = []
        with DBContext('r') as session:
            if search_key:
                # 模糊查所有
                tag_info = session.query(ResultList).filter(
                    or_(
                        ResultList.services_name.like(
                            '%{}%'.format(search_key)),
                        ResultList.services_resource_id.like(
                            '%{}%'.format(search_key)),
                        ResultList.key.like('%{}%'.format(search_key)),
                        ResultList.value.like('%{}%'.format(search_key)),
                        ResultList.is_valid.like(
                            '%{}%'.format(search_key)))).order_by(
                                ResultList.id).all()
            else:
                tag_info = session.query(ResultList).order_by(
                    ResultList.id).all()

        for data in tag_info:
            data_dict = model_to_dict(data)
            tag_list.append(data_dict)
        return tag_list
Esempio n. 4
0
def change_aws_value():
    """定时任务:修改aws服务上的标签value"""
    with DBContext('w') as session:
        change_value_list = []
        data_info = session.query(ChangeResultList).all()
        if data_info:
            for data in data_info:
                dict_data = model_to_dict(data)
                change_value_list.append(dict_data)

        s = get_aws_session(**settings.get("aws_key"))
        clients = s.client("resourcegroupstaggingapi")
        try:
            for tag_value in change_value_list:
                services_resource_id = tag_value["services_resource_id"]
                key = tag_value["key"]
                value = tag_value["value"]
                # 去除资源标签
                clients.untag_resources(ResourceARNList=[
                    services_resource_id,
                ],
                                        TagKeys=[
                                            key,
                                        ])
                # 添加资源标签
                clients.tag_resources(ResourceARNList=[
                    services_resource_id,
                ],
                                      Tags={key: value})
                session.query(ChangeResultList).filter_by(
                    services_resource_id=services_resource_id,
                    key=key).delete()
                session.commit()
        except Exception as e:
            ins_log.read_log('error', e)
    def get(self, *args, **kwargs):
        """查询出定时开关机的ec2信息数据接口"""
        key = self.get_argument('key', default=None, strip=True)
        ec2_list = []
        with DBContext('r') as session:
            if key:
                # 模糊查所有
                ec2_info = session.query(EC2Instance).filter(
                    or_(EC2Instance.service_name.like('%{}%'.format(key)),
                        EC2Instance.instance_id.like('%{}%'.format(key)),
                        EC2Instance.tag_name.like('%{}%'.format(key)),
                        EC2Instance.private_ip.like('%{}%'.format(key)),
                        EC2Instance.uptime.like('%{}%'.format(key)),
                        EC2Instance.downtime.like('%{}%'.format(key)),
                        EC2Instance.instance_type.like('%{}%'.format(key)))
                ).order_by(
                    EC2Instance.id
                ).all()
            else:
                ec2_info = session.query(EC2Instance).order_by(
                    EC2Instance.id
                ).all()

        for data in ec2_info:
            data_dict = model_to_dict(data)
            ec2_list.append(data_dict)
        return ec2_list
Esempio n. 6
0
 def get(self, *args, **kwargs):
     """可关联的服务名称"""
     with DBContext('w') as session:
         services_name_list = []
         all_services_info = session.query(ServicesList).all()
         for services in all_services_info:
             services_name = model_to_dict(services)["services_name"]
             services_name_list.append(services_name)
     return self.write(dict(code=0, msg='获取成功', total=len(services_name_list), data=services_name_list))
Esempio n. 7
0
def check_tag_services():
    """定时任务:检查检测aws服务的标签是否合规,并将结果入库"""
    tag_list = get_tags()
    tag_key_list = []
    with DBContext('r') as session:
        tag_info = session.query(TagList).all()
        for tag in tag_info:
            data = model_to_dict(tag)
            tag_key_list.append(data["key"])

    # 获取标签所对应的服务名称
    try:
        with DBContext('w') as session:
            session.query(ResultList).delete(
                synchronize_session=False)  # 清空数据库的所有记录
            for tag_key in tag_key_list:
                tag_info = session.query(TagList).filter(
                    TagList.key == tag_key).first()
                tag_id = model_to_dict(tag_info)['id']
                if model_to_dict(tag_info)['value'] is not None:
                    value_list = model_to_dict(tag_info)['value'].split(',')
                else:
                    value_list = None
                data_info = session.query(ServicesTagMiddle).filter(
                    ServicesTagMiddle.tag_id == tag_id).all()

                if data_info is not None:
                    services_list = []
                    for data in data_info:
                        services_id = model_to_dict(data)['services_id']
                        services_info = session.query(ServicesList).filter(
                            ServicesList.id == services_id).first()
                        services_name = model_to_dict(
                            services_info)['services_name']
                        services_list.append(services_name)

                    for services_name in services_list:
                        for tag in tag_list:
                            is_valid = 1
                            if tag["tag_aws_service"] == services_name and tag[
                                    "tag_name"] == tag_key:
                                if value_list is not None and tag[
                                        "tag_value"] not in value_list:
                                    is_valid = 0
                                new_data = ResultList(
                                    services_name=services_name,
                                    services_resource_id=tag[
                                        "tag_description"],
                                    key=tag["tag_name"],
                                    value=tag["tag_value"],
                                    is_valid=is_valid)
                                session.add(new_data)
                                session.commit()

    except Exception as e:
        ins_log.read_log('error', e)