From 6d869ac7b13aa5d176cbbd208d22f13d153f1e9f Mon Sep 17 00:00:00 2001 From: smjiao Date: Mon, 18 Sep 2023 20:34:35 +0800 Subject: [PATCH] fix bug --- .../ragdoll/config_model/bash_config.py | 1 - .../ragdoll/config_model/hosts_config.py | 3 +- .../ragdoll/config_model/ssh_config.py | 2 + .../ragdoll/controllers/confs_controller.py | 68 ++++++++++++------- .../ragdoll/models/host_sync_result.py | 8 +-- .../ragdoll/models/host_sync_status.py | 8 +-- .../yang_modules/openEuler-sysctl.conf.yang | 2 +- 7 files changed, 56 insertions(+), 36 deletions(-) diff --git a/gala-ragdoll/ragdoll/config_model/bash_config.py b/gala-ragdoll/ragdoll/config_model/bash_config.py index 7b4b87d..608cd58 100644 --- a/gala-ragdoll/ragdoll/config_model/bash_config.py +++ b/gala-ragdoll/ragdoll/config_model/bash_config.py @@ -30,7 +30,6 @@ class BashConfig(BaseHandlerConfig): for line in conf_list: if line is None or line.strip() == '': continue - conf_dict_list.append(line) return conf_dict_list diff --git a/gala-ragdoll/ragdoll/config_model/hosts_config.py b/gala-ragdoll/ragdoll/config_model/hosts_config.py index 72b953e..0bda98d 100644 --- a/gala-ragdoll/ragdoll/config_model/hosts_config.py +++ b/gala-ragdoll/ragdoll/config_model/hosts_config.py @@ -17,6 +17,7 @@ Description: /etc/hosts config handler import re import json +from ragdoll.config_model.base_handler_config import BaseHandlerConfig from ragdoll.log.log import LOGGER from ragdoll.utils.yang_module import YangModule from ragdoll.const.conf_handler_const import NOT_SYNCHRONIZE, SYNCHRONIZED @@ -102,7 +103,7 @@ class HostsConfig(BaseHandlerConfig): def write_conf(self): content = "" - for key, value in self.conf: + for key, value in self.conf.items(): if value is not None: conf_item = " ".join((key, str(value))).replace('\n', '\n\t') content = content + conf_item + "\n" diff --git a/gala-ragdoll/ragdoll/config_model/ssh_config.py b/gala-ragdoll/ragdoll/config_model/ssh_config.py index c0cd0e0..bc46038 100644 --- a/gala-ragdoll/ragdoll/config_model/ssh_config.py +++ b/gala-ragdoll/ragdoll/config_model/ssh_config.py @@ -17,11 +17,13 @@ Description: sshd config analyze import json import re +from ragdoll.config_model.base_handler_config import BaseHandlerConfig from ragdoll.utils.yang_module import YangModule from ragdoll.const.conf_handler_const import NOT_SYNCHRONIZE, SYNCHRONIZED SPACER_LIST = [' ', '\t'] + class SshConfig(BaseHandlerConfig): def parse_conf_to_dict(self, conf_info): diff --git a/gala-ragdoll/ragdoll/controllers/confs_controller.py b/gala-ragdoll/ragdoll/controllers/confs_controller.py index ae766fa..071e8c5 100644 --- a/gala-ragdoll/ragdoll/controllers/confs_controller.py +++ b/gala-ragdoll/ragdoll/controllers/confs_controller.py @@ -11,6 +11,7 @@ from ragdoll.models.domain_name import DomainName # noqa: E501 from ragdoll.models.excepted_conf_info import ExceptedConfInfo # noqa: E501 from ragdoll.models.expected_conf import ExpectedConf # noqa: E501 from ragdoll.models.real_conf_info import RealConfInfo # noqa: E501 +from ragdoll.models.sync_req import SyncReq from ragdoll.models.sync_status import SyncStatus # noqa: E501 from ragdoll.models.conf_base_info import ConfBaseInfo from ragdoll.models.conf_is_synced import ConfIsSynced @@ -28,6 +29,7 @@ from ragdoll.utils.host_tools import HostTools from ragdoll.utils.object_parse import ObjectParse from ragdoll import util from ragdoll.const.conf_files import yang_conf_list +from ragdoll.log.log import LOGGER TARGETDIR = GitTools().target_dir @@ -163,9 +165,11 @@ def get_the_sync_status_of_domain(body=None): # noqa: E501 man_conf_list = [] for d_man_conf in manage_confs: man_conf_list.append(d_man_conf.get("filePath").split(":")[-1]) + LOGGER.info("manage_confs is {}".format(manage_confs)) for d_host in sync_status.host_status: d_sync_status = d_host.sync_status file_list = [] + LOGGER.info("d_sync_status is {}".format(d_sync_status)) for d_file in d_sync_status: file_path = d_file.file_path file_list.append(file_path) @@ -426,10 +430,16 @@ def sync_conf_to_host_from_domain(body=None): # noqa: E501 :rtype: List[HostSyncResult] """ if connexion.request.is_json: - body = ConfHost.from_dict(connexion.request.get_json()) # noqa: E501 + body = SyncReq.from_dict(connexion.request.get_json()) # noqa: E501 domain = body.domain_name - host_list = body.host_ids + sync_list = body.sync_list + LOGGER.info("sync_list is {}".format(sync_list)) + + host_sync_confs = dict() + + for sync in sync_list: + host_sync_confs[sync.host_id] = sync.sync_configs # check the input domain check_res = Format.domainCheck(domain) @@ -458,11 +468,12 @@ def sync_conf_to_host_from_domain(body=None): # noqa: E501 # Check whether the host is in the managed host list exist_host = [] - if len(host_list) > 0: - for host in host_list: + if len(host_sync_confs) > 0: + host_ids = host_sync_confs.keys() + for host_id in host_ids: for d_host in res_host_text: - if host.get("hostId") == d_host.get("hostId"): - exist_host.append(host) + if host_id == d_host.get("hostId"): + exist_host.append(host_id) else: for d_host in res_host_text: temp_host = {} @@ -489,28 +500,35 @@ def sync_conf_to_host_from_domain(body=None): # noqa: E501 # Deserialize and reverse parse the expected configuration sync_res = [] - for d_host in exist_host: - host_sync_result = HostSyncResult(host_id=d_host, + for host_id in exist_host: + host_sync_result = HostSyncResult(host_id=host_id, sync_result=[]) + sync_confs = host_sync_confs.get(host_id) for d_man_conf in manage_confs: file_path = d_man_conf.get("filePath").split(":")[-1] - contents = d_man_conf.get("contents") - object_parse = ObjectParse() - content = object_parse.parse_json_to_conf(file_path, contents) - # Configuration to the host - sync_conf_url = conf_tools.load_url_by_conf().get("sync_url") - headers = {"Content-Type": "application/json"} - data = {"host_id": d_host, "file_path": file_path, "content": content} - sync_response = requests.put(sync_conf_url, data=json.dumps(data), headers=headers) - - resp_status = json.loads(sync_response.text).get("status") - conf_sync_res = ConfSyncedRes(file_path=file_path, - result="") - if resp_status: - conf_sync_res.result = "SUCCESS" - else: - conf_sync_res.result = "FAILED" - host_sync_result.sync_result.append(conf_sync_res) + if file_path in sync_confs: + file_path = d_man_conf.get("filePath").split(":")[-1] + contents = d_man_conf.get("contents") + object_parse = ObjectParse() + content = object_parse.parse_json_to_conf(file_path, contents) + LOGGER.info("content IS {}".format(content)) + # Configuration to the host + sync_conf_url = conf_tools.load_url_by_conf().get("sync_url") + headers = {"Content-Type": "application/json"} + data = {"host_id": host_id, "file_path": file_path, "content": content} + sync_response = requests.put(sync_conf_url, data=json.dumps(data), headers=headers) + + resp_code = json.loads(sync_response.text).get('code') + resp = json.loads(sync_response.text).get('data').get('resp') + LOGGER.info("resp_code IS {}".format(resp_code)) + LOGGER.info("resp IS {}".format(resp)) + conf_sync_res = ConfSyncedRes(file_path=file_path, + result="") + if resp_code == "200" and resp.get('sync_result') is True: + conf_sync_res.result = "SUCCESS" + else: + conf_sync_res.result = "FAILED" + host_sync_result.sync_result.append(conf_sync_res) sync_res.append(host_sync_result) return sync_res diff --git a/gala-ragdoll/ragdoll/models/host_sync_result.py b/gala-ragdoll/ragdoll/models/host_sync_result.py index 3e8d951..8604e31 100644 --- a/gala-ragdoll/ragdoll/models/host_sync_result.py +++ b/gala-ragdoll/ragdoll/models/host_sync_result.py @@ -17,7 +17,7 @@ class HostSyncResult(Model): Do not edit the class manually. """ - def __init__(self, host_id: str=None, sync_result: List[ConfSyncedRes]=None): # noqa: E501 + def __init__(self, host_id: int = None, sync_result: List[ConfSyncedRes] = None): # noqa: E501 """HostSyncResult - a model defined in Swagger :param host_id: The host_id of this HostSyncResult. # noqa: E501 @@ -26,7 +26,7 @@ class HostSyncResult(Model): :type sync_result: List[ConfSyncedRes] """ self.swagger_types = { - 'host_id': str, + 'host_id': int, 'sync_result': List[ConfSyncedRes] } @@ -50,7 +50,7 @@ class HostSyncResult(Model): return util.deserialize_model(dikt, cls) @property - def host_id(self) -> str: + def host_id(self) -> int: """Gets the host_id of this HostSyncResult. the id of host # noqa: E501 @@ -61,7 +61,7 @@ class HostSyncResult(Model): return self._host_id @host_id.setter - def host_id(self, host_id: str): + def host_id(self, host_id: int): """Sets the host_id of this HostSyncResult. the id of host # noqa: E501 diff --git a/gala-ragdoll/ragdoll/models/host_sync_status.py b/gala-ragdoll/ragdoll/models/host_sync_status.py index 5a40397..a785d17 100644 --- a/gala-ragdoll/ragdoll/models/host_sync_status.py +++ b/gala-ragdoll/ragdoll/models/host_sync_status.py @@ -16,7 +16,7 @@ class HostSyncStatus(Model): Do not edit the class manually. """ - def __init__(self, host_id: str=None, sync_status: List[ConfIsSynced]=None): # noqa: E501 + def __init__(self, host_id: int = None, sync_status: List[ConfIsSynced] = None): # noqa: E501 """SyncStatus - a model defined in Swagger :param host_id: The host_id of this HostSyncStatus. # noqa: E501 @@ -25,7 +25,7 @@ class HostSyncStatus(Model): :type host_status: List[object] """ self.swagger_types = { - 'host_id': str, + 'host_id': int, 'sync_status': List[ConfIsSynced] } @@ -49,7 +49,7 @@ class HostSyncStatus(Model): return util.deserialize_model(dikt, cls) @property - def host_id(self) -> str: + def host_id(self) -> int: """Gets the host_id of this HostSyncStatus. domain name # noqa: E501 @@ -60,7 +60,7 @@ class HostSyncStatus(Model): return self._host_id @host_id.setter - def host_id(self, host_id: str): + def host_id(self, host_id: int): """Sets the host_id of this HostSyncStatus. host id # noqa: E501 diff --git a/gala-ragdoll/yang_modules/openEuler-sysctl.conf.yang b/gala-ragdoll/yang_modules/openEuler-sysctl.conf.yang index e013ee2..01025a4 100644 --- a/gala-ragdoll/yang_modules/openEuler-sysctl.conf.yang +++ b/gala-ragdoll/yang_modules/openEuler-sysctl.conf.yang @@ -62,7 +62,7 @@ module openEuler-sysctl.conf { sysctl:path "openEuler:/etc/sysctl.conf"; sysctl:type "kv"; - sysctl:spacer ""; + sysctl:spacer "="; } } } \ No newline at end of file -- 2.38.1.windows.1