From 6d869ac7b13aa5d176cbbd208d22f13d153f1e9f Mon Sep 17 00:00:00 2001
From: smjiao <smjiao@isoftstone.com>
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

