From 0e6f8d8f1bb7dba15a206b7a02c9dc70ad9b1aba Mon Sep 17 00:00:00 2001 From: xuezhixin Date: Mon, 13 Nov 2023 16:39:51 +0800 Subject: [PATCH] =?UTF-8?q?agent=E6=A3=80=E6=B5=8Brepo=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sysmig_agent/check.py | 93 ------------------------ sysmig_agent/short_task.py | 144 +++++++++++++++++++++++++++++++++++++ 2 files changed, 144 insertions(+), 93 deletions(-) diff --git a/sysmig_agent/check.py b/sysmig_agent/check.py index 141a734..1a21c52 100644 --- a/sysmig_agent/check.py +++ b/sysmig_agent/check.py @@ -178,99 +178,6 @@ def check_user(data): return re_data -def init_remove_oldrepo(): - backup_comment = '#This is a yum repository file that was disabled . \ - \n' - path = '/etc/yum.repos.d/' - repos = os.listdir(path) - for repo in repos: - path_file = path+'/'+repo - if not os.path.isfile(path_file): - continue - if not re.search('repo$',repo): - continue - with open(path_file, 'r') as fsrc: - content = fsrc.read() - with open(path_file+'.disabled','w') as fdst: - fdst.write(repo+'\n'+backup_comment+content) - fdst.close() - fsrc.close() - os.remove(path_file) - - -#初始化repo文件 -def initRepoFile(baseurl): - os_version_ret = platform.dist() - version = os_version_ret[1].split('.',-1) - reposdir = '/etc/yum.repos.d/' - h = 0 - if re.match('file:',baseurl): - str0, path = baseurl.split('://',1) - path = '/' + path.strip('/') + '/' - else: - h = 1 - if re.fullmatch('8',version[0]): - path_appstream = baseurl+'/AppStream' - path_baseos = baseurl+'/BaseOS' - path_310 = baseurl+'/kernel-3.10' - path_419 = baseurl+'/kernel419' - path_510 = baseurl+'/kernel510' - - repostr_uos = '''[UniontechOS-AppStream]\nname = UniontechOS AppStream\nbaseurl = '''+path_appstream.strip('\n')+'''\nenabled = 1\ngpgcheck = 0\n\n[UniontechOS-BaseOS]\nname = UniontechOS BaseOS\nbaseurl = '''+path_baseos.strip('\n')+'''\nenabled = 1\ngpgcheck = 0\n\n[UniontechOS-kernel-4.19.0]\nname = UniontechOS Kernel-4.19.0\nbaseurl = '''+path_419.strip('\n')+'''\nenabled = 0\ngpgcheck = 0\nskip_if_unavailable = 1\n\n[UniontechOS-kernel-5.10.0]\nname = UniontechOS Kernel-5.10.0\nbaseurl = '''+path_510.strip('\n')+'''\nenabled = 0\ngpgcheck = 0\nskip_if_unavailable = 1\n\n -''' - else: - path_310 = baseurl+'/kernel-3.10' - repostr_uos = '''[UniontechOS-AppStream]\nname = UniontechOS AppStream\nbaseurl = '''+baseurl.strip('\n')+'''\nenabled = 1\ngpgcheck = 0\n\n[UniontechOS-kernel-3.10.0]\nname = UniontechOS Kernel-3.10.0\nbaseurl = '''+path_310.strip('\n')+'''\nenabled = 0\ngpgcheck = 0\nskip_if_unavailable = 1\n - ''' - repofile = os.path.join(reposdir, 'switch-to-uos.repo') - with open(repofile,'w') as f_repo: - f_repo.write(repostr_uos) - f_repo.close() - - -#检测repo文件创建缓存 -def checkRepoMakeCache(): - os.system('yum clean all') - os.system('yum makecache') - os_version_ret = platform.dist() - os_arch = platform.machine() - version = os_version_ret[1].split('.',-1) - ret = os.path.exists('/var/cache/dnf/UniontechOS-AppStream.solv') - if ret: - ret = os.path.exists('/var/cache/dnf/UniontechOS-BaseOS.solv') - if ret or re.fullmatch('7',version[0]): - return 0 - else: - return 1 - else: - if re.fullmatch('7',version[0]): - ret = os.path.exists('/var/cache/yum/%s/7/UniontechOS-AppStream/repomd.xml' % os_arch) - if ret: - return 0 - return 1 - - -#检测repo -def check_repo(data_j): - uos_sysmig_conf = json.loads(getSysMigConf()) - AGENT_IP = json.loads(uos_sysmig_conf).get('agentip').strip()[1:-1] - baseurl = json.loads(data_j).get('repo_pwd') - keylist = None - valuelist = None - data = None - init_remove_oldrepo() - initRepoFile(baseurl) - state = checkRepoMakeCache() - - if state == 0: - keylist = ['ip','res','data'] - valuelist = [AGENT_IP,state,'连接成功'] - else: - data = '下载失败,请检查您的软件源' - keylist = ['ip','res','error'] - valuelist = [AGENT_IP,state,data] - return list_to_json(keylist,valuelist) - def check_os_kernel(data): uos_sysmig_conf = json.loads(getSysMigConf()) diff --git a/sysmig_agent/short_task.py b/sysmig_agent/short_task.py index 11dd9ef..4e4dae3 100644 --- a/sysmig_agent/short_task.py +++ b/sysmig_agent/short_task.py @@ -138,3 +138,147 @@ def get_agent_os(): AGENT_OS = os_version_ret[0] + version[0] return AGENT_OS + + +def init_remove_oldrepo(): + backup_comment = '#This is a yum repository file that was disabled . \ + \n' + path = '/etc/yum.repos.d/' + repos = os.listdir(path) + for repo in repos: + path_file = path+'/'+repo + if not os.path.isfile(path_file): + continue + if not re.search('repo$',repo): + continue + with open(path_file, 'r') as fsrc: + content = fsrc.read() + with open(path_file+'.disabled','w') as fdst: + fdst.write(repo+'\n'+backup_comment+content) + fdst.close() + fsrc.close() + os.remove(path_file) + + +#初始化repo文件 +def initRepoFile(baseurl): + os_version_ret = platform.dist() + version = os_version_ret[1].split('.',-1) + reposdir = '/etc/yum.repos.d/' + h = 0 + if re.match('file:',baseurl): + str0, path = baseurl.split('://',1) + path = '/' + path.strip('/') + '/' + else: + h = 1 + if re.fullmatch('8',version[0]): + path_appstream = baseurl+'/AppStream' + path_baseos = baseurl+'/BaseOS' + path_310 = baseurl+'/kernel-3.10' + path_419 = baseurl+'/kernel419' + path_510 = baseurl+'/kernel510' + + repostr_uos = '''[UniontechOS-AppStream]\nname = UniontechOS AppStream\nbaseurl = '''+path_appstream.strip('\n')+'''\nenabled = 1\ngpgcheck = 0\n\n[UniontechOS-BaseOS]\nname = UniontechOS BaseOS\nbaseurl = '''+path_baseos.strip('\n')+'''\nenabled = 1\ngpgcheck = 0\n\n[UniontechOS-kernel-4.19.0]\nname = UniontechOS Kernel-4.19.0\nbaseurl = '''+path_419.strip('\n')+'''\nenabled = 0\ngpgcheck = 0\nskip_if_unavailable = 1\n\n[UniontechOS-kernel-5.10.0]\nname = UniontechOS Kernel-5.10.0\nbaseurl = '''+path_510.strip('\n')+'''\nenabled = 0\ngpgcheck = 0\nskip_if_unavailable = 1\n\n +''' + else: + path_310 = baseurl+'/kernel-3.10' + repostr_uos = '''[UniontechOS-AppStream]\nname = UniontechOS AppStream\nbaseurl = '''+baseurl.strip('\n')+'''\nenabled = 1\ngpgcheck = 0\n\n[UniontechOS-kernel-3.10.0]\nname = UniontechOS Kernel-3.10.0\nbaseurl = '''+path_310.strip('\n')+'''\nenabled = 0\ngpgcheck = 0\nskip_if_unavailable = 1\n + ''' + repofile = os.path.join(reposdir, 'switch-to-uos.repo') + with open(repofile,'w') as f_repo: + f_repo.write(repostr_uos) + f_repo.close() + + +#检测repo文件创建缓存 +def checkRepoMakeCache(): + os.system('yum clean all') + os.system('yum makecache') + os_version_ret = platform.dist() + os_arch = platform.machine() + version = os_version_ret[1].split('.',-1) + ret = os.path.exists('/var/cache/dnf/UniontechOS-AppStream.solv') + if ret: + ret = os.path.exists('/var/cache/dnf/UniontechOS-BaseOS.solv') + if ret or re.fullmatch('7',version[0]): + return 0 + else: + return 1 + else: + if re.fullmatch('7',version[0]): + ret = os.path.exists('/var/cache/yum/%s/7/UniontechOS-AppStream/repomd.xml' % os_arch) + if ret: + return 0 + return 1 + + +# 检测centos 8 系统上的 repo文件联通 +def checkRepoFileHttp(baseurl): + try: + with request.urlopen(baseurl) as file: + # print(file.status) + # print(file.reason) + if re.match('OK', file.reason): + return 0 + except Exception as e: + if re.match('HTTP Error 404|[Errno 2]', str(e)): + return 1 + elif re.match('[Errno 21]', str(e)): + return 0 + else: + return 1 + + +def repoFileCheck(baseurl): + if re.match('file\:\/\/', baseurl): + path = re.sub('file://', '', baseurl) + if os.path.exists(path): + return 0 + else: + return 1 + try: + dst_status = urllib.request.urlopen(baseurl, timeout=5).code + return 0 + except Exception as err: + return 1 + pass + +def check_repo(data): + agent_os = get_agent_os() + if '7' in agent_os: + agent_os = 'centos7' + elif '8' in agent_os: + agent_os = 'centos8' + os_type = agent_os + '_' + platform.machine().strip('') + baseurl = json.loads(data).get(os_type) + if not baseurl: + baseurl = '1' + task_id = json.loads(data).get('task_id') + # 更新SQL任务状态 + statue = 1 + sql_task_statue(statue, task_id) + # 发送消息给Server更新任务流状态 + post_server('task_start', task_id) + # 初始化去除旧的repo文件 + init_remove_oldrepo() + # 传递baseurl,配置repo文件 + initRepoFile(baseurl) + # 建立软件源缓存,判断软件源是否可用 + state = checkRepoMakeCache() + sql = '' + repo_state = -1 + if state == 0: + repo_state = repoFileCheck(baseurl) + else: + repo_state = 1 + + sql = "UPDATE agent_info SET repo_status = {} WHERE agent_ip = '{}';".format(repo_state, get_local_ip()) + try: + ret = DBHelper().execute(sql) + statue = 2 + except: + statue = 2 + sql_task_statue(statue, task_id) + sql_task_statue(statue, task_id) + post_server('task_close', task_id) + return 'success' -- 2.20.1