예제 #1
0
파일: model.py 프로젝트: mattie-feng/Orion
def update_dg():
    global DISKGROUP_RESULT
    js = iscsi_json.JsonOperation()
    js.json_data = js.read_json()
    DISKGROUP_RESULT = js.json_data['DiskGroup']
    print(DISKGROUP_RESULT)
    return True
예제 #2
0
파일: model.py 프로젝트: mattie-feng/Orion
    def get(self):
        dict_data = get_request_data()
        dg = dict_data['dg_name']
        list_disk = dict_data['disk'].split(',') if dict_data['disk'] else []

        js = iscsi_json.JsonOperation()
        js.json_data = js.read_json()
        json_data_before = copy.deepcopy(js.json_data)
        if not list_disk:
            js.delete_data('DiskGroup', dg)
            js.arrange_data('DiskGroup', dg)
        else:
            js.update_data('DiskGroup', dg, list_disk)
        obj_iscsi = iscsi.IscsiConfig(json_data_before, js.json_data)
        # 确认JSON文件在途中未被修改
        json_data_now = js.read_json()
        if json_data_before == json_data_now:
            obj_iscsi.create_iscsilogicalunit()
            obj_iscsi.delete_iscsilogicalunit()
            obj_iscsi.modify_iscsilogicalunit()
            js.commit_data()
            message = '操作完成'
        else:
            message = '配置文件已被修改,请重新操作'
        return cors_data(message)
예제 #3
0
파일: model.py 프로젝트: mattie-feng/Orion
def update_disk():
    global DISK_RESULT
    disk = iscsi.Disk()
    disk.update_disk()
    js = iscsi_json.JsonOperation()
    DISK_RESULT = js.read_json()['Disk']
    return True
예제 #4
0
파일: model.py 프로젝트: mattie-feng/Orion
def update_host():
    global HOST_RESULT
    js = iscsi_json.JsonOperation()
    js.json_data = js.read_json()
    HOST_RESULT = js.json_data['Host']

    return True
예제 #5
0
파일: model.py 프로젝트: mattie-feng/Orion
    def get(self):
        dict_data = get_request_data()
        iscsi_type = dict_data['iscsi_type']
        iscsi_name = dict_data['iscsi_name']

        print(iscsi_type, iscsi_name)

        js = iscsi_json.JsonOperation()
        js.json_data = js.read_json()
        json_data_before = copy.deepcopy(js.json_data)
        try:
            js.delete_data(iscsi_type, iscsi_name)
        except KeyError:
            message = '配置文件已被修改,请重新操作'
            return cors_data(message)

        if iscsi_type != 'Map':
            js.arrange_data(iscsi_type, iscsi_name)
        obj_iscsi = iscsi.IscsiConfig(json_data_before, js.json_data)
        # 确认JSON文件在途中未被修改
        json_data_now = js.read_json()
        if json_data_before == json_data_now:
            obj_iscsi.create_iscsilogicalunit()
            obj_iscsi.delete_iscsilogicalunit()
            obj_iscsi.modify_iscsilogicalunit()
            js.commit_data()
            message = '操作完成'
        else:
            message = '配置文件已被修改,请重新操作'
        return cors_data(message)
예제 #6
0
파일: model.py 프로젝트: mattie-feng/Orion
    def get(self):

        dict_data = get_request_data()
        map = dict_data['map_name']
        list_hg = dict_data['hg'].split(',') if dict_data['hg'] else []
        list_dg = dict_data['dg'].split(',') if dict_data['dg'] else []
        js = iscsi_json.JsonOperation()
        js.json_data = js.read_json()
        json_data_before = copy.deepcopy(js.json_data)
        if not list_hg or not list_dg:
            js.delete_data('Map', map)
        else:
            js.update_data('Map', map, {
                'HostGroup': list_hg,
                'DiskGroup': list_dg
            })

        obj_iscsi = iscsi.IscsiConfig(json_data_before, js.json_data)
        # 确认JSON文件在途中未被修改
        json_data_now = js.read_json()
        if json_data_before == json_data_now:
            try:
                obj_iscsi.create_iscsilogicalunit()
                obj_iscsi.delete_iscsilogicalunit()
                obj_iscsi.modify_iscsilogicalunit()
            except Exception:
                message = '执行失败'
            else:
                js.commit_data()
                message = '操作完成'
        else:
            message = '配置文件已被修改,请重新操作'
        return cors_data(message)
예제 #7
0
    def sycn_data(self, args):
        # 添加前置检查
        obj_crm = CRMData()
        js = iscsi_json.JsonOperation()

        # 获取数据
        vip = obj_crm.get_vip()
        portblock = obj_crm.get_portblock()
        order = obj_crm.get_order()
        colocation = obj_crm.get_colocation()
        target = obj_crm.get_target()
        iscsilogicalunit = obj_crm.get_iscsi_logical_unit()

        # 检查
        obj_crm.check_portal_component(vip, portblock, order, colocation)

        portal = obj_crm.get_conf_portal(vip,portblock,target)
        js.cover_data('Portal',portal)

        target = obj_crm.get_conf_target(vip,target,iscsilogicalunit)
        js.cover_data('Target',target)

        logical = obj_crm.get_conf_lun(target,iscsilogicalunit)
        js.cover_data('LogicalUnit',logical)

        js.commit_data()
        sd.prt_log('Configuration file data update completed', 1)
예제 #8
0
파일: model.py 프로젝트: mattie-feng/Orion
def update_hg():
    global HOSTGROUP_RESULT

    js = iscsi_json.JsonOperation()
    host_group = iscsi.HostGroup()
    js.json_data = js.read_json()
    HOSTGROUP_RESULT = js.json_data['HostGroup']
    return True
예제 #9
0
파일: model.py 프로젝트: mattie-feng/Orion
 def get(self):
     dict_data = get_request_data()
     dg = dict_data['dg_name']
     list_disk = dict_data['disk'].split(',') if dict_data['disk'] else []
     js = iscsi_json.JsonOperation()
     js.json_data = js.read_json()
     json_data_before = copy.deepcopy(js.json_data)
     js.update_data('DiskGroup', dg, list_disk)
     obj_iscsi = iscsi.IscsiConfig(json_data_before, js.json_data)
     message = '\n'.join(obj_iscsi.show_info())
     dict = {'iscsi_data': True, 'info': message}
     return cors_data(dict)
예제 #10
0
 def setup_class(self):
     # path = '../vplx/map_config.json'
     # os.remove(path)
     subprocess.run('python3 vtel.py iscsi d s', shell=True)
     self.js = iscsi_json.JsonOperation()
     self.js.json_data = {
         "Host": {},
         "Disk": {},
         "HostGroup": {},
         "DiskGroup": {},
         "Map": {},
         "Portal": {},
         "Target": {}
     }
예제 #11
0
파일: crm.py 프로젝트: FeixiDev/Orion
    def update(self):
        js = iscsi_json.JsonOperation()

        # 获取数据
        vip = self.get_vip()
        portblock = self.get_portblock()
        target = self.get_target()
        iscsilogicalunit = self.get_iscsi_logical_unit()

        portal = self.get_conf_portal(vip, portblock, target)
        js.cover_data('Portal', portal)
        target = self.get_conf_target(vip, target, iscsilogicalunit)
        js.cover_data('Target', target)
        logical = self.get_conf_lun(target, iscsilogicalunit)
        js.cover_data('LogicalUnit', logical)
        js.commit_data()
예제 #12
0
파일: model.py 프로젝트: mattie-feng/Orion
    def get(self):
        dict_data = get_request_data()
        iscsi_type = dict_data['iscsi_type']
        iscsi_name = dict_data['iscsi_name']

        print(iscsi_type, iscsi_name)

        js = iscsi_json.JsonOperation()
        js.json_data = js.read_json()
        json_data_before = copy.deepcopy(js.json_data)
        js.delete_data(iscsi_type, iscsi_name)
        if iscsi_type != 'Map':
            js.arrange_data(iscsi_type, iscsi_name)
        obj_iscsi = iscsi.IscsiConfig(json_data_before, js.json_data)
        message = '\n'.join(obj_iscsi.show_info())
        dict = {'iscsi_data': True, 'info': message}
        return cors_data(dict)
예제 #13
0
파일: model.py 프로젝트: mattie-feng/Orion
 def get(self):
     dict_data = get_request_data()
     map = dict_data['map_name']
     print(dict_data)
     list_hg = dict_data['hg'].split(',') if dict_data['hg'] else []
     list_dg = dict_data['dg'].split(',') if dict_data['dg'] else []
     js = iscsi_json.JsonOperation()
     json_data_before = copy.deepcopy(js.json_data)
     if not list_hg or not list_dg:
         js.delete_data('Map', map)
     else:
         js.update_data('Map', map, {
             'HostGroup': list_hg,
             'DiskGroup': list_dg
         })
     obj_iscsi = iscsi.IscsiConfig(json_data_before, js.json_data)
     message = '\n'.join(obj_iscsi.show_info())
     dict = {'iscsi_data': True, 'info': message}
     return cors_data(dict)
예제 #14
0
파일: model.py 프로젝트: mattie-feng/Orion
 def get(self):
     dict_data = get_request_data()
     host_name = dict_data['host_name']
     host_iqn = dict_data['host_iqn']
     js = iscsi_json.JsonOperation()
     js.json_data = js.read_json()
     json_data_before = copy.deepcopy(js.json_data)
     js.update_data('Host', host_name, host_iqn)
     obj_iscsi = iscsi.IscsiConfig(json_data_before, js.json_data)
     # 确认JSON文件在途中未被修改
     json_data_now = js.read_json()
     if json_data_before == json_data_now:
         obj_iscsi.create_iscsilogicalunit()
         obj_iscsi.delete_iscsilogicalunit()
         obj_iscsi.modify_iscsilogicalunit()
         js.commit_data()
         message = '操作完成'
     else:
         message = '配置文件已被修改,请重新操作'
     return cors_data(message)
예제 #15
0
파일: model.py 프로젝트: mattie-feng/Orion
 def get(self):
     print("0000000")
     dict_data = get_request_data()
     print("1111111")
     host_name = dict_data['host_name']
     print("0022200")
     host_iqn = dict_data['host_iqn']
     print("111111")
     js = iscsi_json.JsonOperation()
     print("2222")
     js.json_data = js.read_json()
     print("13333331")
     json_data_before = copy.deepcopy(js.json_data)
     print("13444444331")
     js.update_data('Host', host_name, host_iqn)
     print("6555555533331")
     obj_iscsi = iscsi.IscsiConfig(json_data_before, js.json_data)
     print("65566666663331")
     message = '\n'.join(obj_iscsi.show_info())
     print("--------------")
     print("message", message)
     dict = {'iscsi_data': True, 'info': message}
     return cors_data(dict)
예제 #16
0
파일: crm.py 프로젝트: FeixiDev/Orion
    def check_env_sync(self, vip, portblock, target, lun):
        """
        检查CRM环境与JSON配置文件所记录的Portal、Target、LogicalUnit的数据是否一致,不一致提示后退出
        :param vip_all:目前CRM环境的vip数据
        :param target_all:目前CRM环境的target数据
        :return:
        """
        js = iscsi_json.JsonOperation()
        all_key = js.json_data.keys()
        if not 'Portal' in all_key:
            s.prt_log('"Portal" do not exist in the JSON configuration file',
                      2)
            return
        if not 'Target' in all_key:
            s.prt_log('"Target" do not exist in the JSON configuration file',
                      2)
            return
        if not 'LogicalUnit' in all_key:
            s.prt_log(
                '"LogicalUnit" do not exist in the JSON configuration file', 2)
            return

        crm_portal = self.get_conf_portal(vip, portblock, target)
        json_portal = copy.deepcopy(
            js.json_data['Portal'])  # 防止对json对象的数据修改,进行深拷贝,之后修改数据结构再修改

        crm_target = self.get_conf_target(vip, target, lun)
        json_target = copy.deepcopy(js.json_data['Target'])

        crm_lun = self.get_conf_lun(target, lun)
        json_lun = copy.deepcopy(js.json_data['LogicalUnit'])

        # 处理列表的顺序问题
        try:
            for portal_name, portal_data in crm_portal.items():
                portal_data['target'] = set(portal_data['target'])

            for portal_name, portal_data in json_portal.items():
                portal_data['target'] = set(portal_data['target'])

            for target_name, target_data in crm_target.items():
                target_data['lun'] = set(target_data['lun'])

            for target_name, target_data in json_target.items():
                target_data['lun'] = set(target_data['lun'])

            for lun_name, lun_data in crm_target.items():
                lun_data['lun'] = set(lun_data['lun'])

            for lun_name, lun_data in json_target.items():
                lun_data['lun'] = set(lun_data['lun'])

            if not crm_portal == json_portal:
                s.prt_log(
                    'The data Portal of the JSON configuration file is inconsistent, please check and try again',
                    2)
                return
            if not crm_target == json_target:
                s.prt_log(
                    'The data Target of the JSON configuration file is inconsistent, please check and try again',
                    2)
                return
            if not crm_lun == json_lun:
                s.prt_log(
                    'The data LogicalUnit of the JSON configuration file is inconsistent, please check and try again',
                    2)
                return

        except KeyError as key:
            s.prt_log(f'The configuration file is missing a key: {key}', 2)
예제 #17
0
 def test_check_env_sync(self):
     #mat:modify
     """检查CRM环境与JSON配置文件所记录的Portal、Target的数据是否一致,测试用例包括:json文件不包含Portal/json文件不包括Target/json文件的portal与crm不一致/json文件的target与crm的不一致"""
     assert self.crmdata.check_env_sync(self.crmdata.get_vip(), self.crmdata.get_portblock(),
                                        self.crmdata.get_target()) is None
     js = iscsi_json.JsonOperation()
     js.json_data = {
         "Host": {},
         "Disk": {},
         "HostGroup": {},
         "DiskGroup": {},
         "Map": {}
     }
     with pytest.raises(SystemExit) as exsinfo:
         self.crmdata.check_env_sync(self.crmdata.get_vip(), self.crmdata.get_portblock(),
                                     self.crmdata.get_target())
     assert exsinfo.type == SystemExit
     js.json_data = {
         "Host": {},
         "Disk": {},
         "HostGroup": {},
         "DiskGroup": {},
         "Map": {},
         "Portal": {}
     }
     with pytest.raises(SystemExit) as exsinfo:
         self.crmdata.check_env_sync(self.crmdata.get_vip(), self.crmdata.get_portblock(),
                                     self.crmdata.get_target())
     assert exsinfo.type == SystemExit
     js.json_data = {
         "Host": {},
         "Disk": {},
         "HostGroup": {},
         "DiskGroup": {},
         "Map": {},
         "Portal": {
             "portal_test_6": {
                 "ip": "10.203.1.201",
                 "port": "3260",
                 "netmask": "24",
                 "target": []
             }
         },
         "Target": {}
     }
     with pytest.raises(SystemExit) as exsinfo:
         self.crmdata.check_env_sync(self.crmdata.get_vip(), self.crmdata.get_portblock(),
                                     self.crmdata.get_target())
     assert exsinfo.type == SystemExit
     js.json_data = {
         "Host": {},
         "Disk": {},
         "HostGroup": {},
         "DiskGroup": {},
         "Map": {},
         "Portal": {
             "portal_test_4": {
                 "ip": "10.203.1.201",
                 "port": "3260",
                 "netmask": "24",
                 "target": []
             },
             "vip": {
                 "ip": "10.203.1.75",
                 "port": "3260",
                 "netmask": "24",
                 "target": [
                     "t_test"
                 ]
             },
             "vip_test2": {
                 "ip": "10.203.1.206",
                 "port": "3260",
                 "netmask": "24",
                 "target": [
                     "target_test"
                 ]
             }
         },
         "Target": {
             "t_test": {
                 "target_iqn": "iqn.2020-04.feixitek.com:versaplx00",
                 "ip": "10.203.1.75",
                 "port": "3260"
             }
         }
     }
     with pytest.raises(SystemExit) as exsinfo:
         self.crmdata.check_env_sync(self.crmdata.get_vip(), self.crmdata.get_portblock(),
                                     self.crmdata.get_target())
     assert exsinfo.type == SystemExit
     target = self.crmdata.get_target()
     vip = self.crmdata.get_vip()
     portblock = self.crmdata.get_portblock()
     #mat:get_portal_data-->get_conf_portal
     portal = self.crmdata.get_portal_data(vip, portblock, target)
     js.cover_data('Portal', portal)
     js.cover_data('Target', target)
     js.commit_data()
     # print(js.json_data)
     subprocess.run('python3 vtel.py iscsi sync', shell=True)
예제 #18
0
파일: crm.py 프로젝트: FeixiDev/Orion
 def __init__(self):
     self.js = iscsi_json.JsonOperation()
     self.list_res_created = []
예제 #19
0
파일: model.py 프로젝트: mattie-feng/Orion
def update_map():
    global MAP_RESULT
    js = iscsi_json.JsonOperation()
    js.json_data = js.read_json()
    MAP_RESULT = js.json_data['Map']
    return True