Ver código fonte

AMBARI-3097. global config update should append configs that exist but not in the script template.

Sumit Mohanty 11 anos atrás
pai
commit
6fc9f12ef0

+ 13 - 2
ambari-server/src/main/python/UpgradeHelper_HDP2.py

@@ -532,19 +532,22 @@ def modify_configs(options):
   update_config(options, MAPRED_SITE, MAPRED_SITE_TAG)
 
   # Update global config, hdfs-site, core-site
-  update_config_using_existing(options, GLOBAL_TAG, GLOBAL)
+  update_config_using_existing(options, GLOBAL_TAG, GLOBAL, True)
   update_config_using_existing(options, HDFS_SITE_TAG, HDFS_SITE)
   update_config_using_existing(options, CORE_SITE_TAG, CORE_SITE)
   pass
 
 
-def update_config_using_existing(options, type, properties_template):
+def update_config_using_existing(options, type, properties_template, append_unprocessed=False):
   site_properties = get_config(options, type)
+  keys_processed = []
   for key in properties_template.keys():
+    keys_processed.append(key)
     if properties_template[key].find(REPLACE_WITH_TAG) == 0:
       name_to_lookup = key
       if len(properties_template[key]) > len(REPLACE_WITH_TAG):
         name_to_lookup = properties_template[key][len(REPLACE_WITH_TAG):]
+        keys_processed.append(name_to_lookup)
       value = ""
       if name_to_lookup in site_properties.keys():
         value = site_properties[name_to_lookup]
@@ -555,6 +558,14 @@ def update_config_using_existing(options, type, properties_template):
       pass
     pass
   pass
+  if append_unprocessed:
+    for key in site_properties.keys():
+      if key not in keys_processed:
+        properties_template[key] = site_properties[key]
+        pass
+      pass
+    pass
+  pass
   update_config(options, properties_template, type)
 
 

+ 37 - 7
ambari-server/src/test/python/TestUpgradeScript_HDP2.py

@@ -24,8 +24,8 @@ import unittest
 import UpgradeHelper_HDP2
 import StringIO
 
-class TestUpgradeHDP2Script(TestCase):
 
+class TestUpgradeHDP2Script(TestCase):
   def setUp(self):
     out = StringIO.StringIO()
     sys.stdout = out
@@ -35,16 +35,46 @@ class TestUpgradeHDP2Script(TestCase):
     sys.stdout = sys.__stdout__
 
 
-  @patch('optparse.Values')
   @patch.object(UpgradeHelper_HDP2, 'backup_single_config_type')
-  def test_backup_configs(self, backup_config_mock, optparse_mock):
+  def test_backup_configs(self, backup_config_mock):
+    UpgradeHelper_HDP2.backup_configs(None)
+    self.assertTrue(backup_config_mock.called)
 
-    opm =  optparse_mock.return_value
+  @patch.object(UpgradeHelper_HDP2, 'update_config')
+  @patch.object(UpgradeHelper_HDP2, 'get_config')
+  @patch('optparse.Values')
+  def test_update_with_append(self, optparse_mock, get_config_mock, update_config_mock):
+    opm = optparse_mock.return_value
+    update_config_mock.return_value = None
     options = MagicMock()
-    args = ["backup-configs"]
+    args = ["save-configs"]
     opm.parse_args.return_value = (options, args)
-    UpgradeHelper_HDP2.backup_configs(None)
-    self.assertTrue(backup_config_mock.called)
+    get_config_mock.return_value = {"a1": "va1", "a2": "va2", "b1": "vb1", "b2": "vb2", "c1": "vc1"}
+    site_template = {"y1": "vy1", "a1": "REPLACE_WITH_", "a2": "REPLACE_WITH_", "nb1": "REPLACE_WITH_b1",
+                     "nb2": "REPLACE_WITH_b2"}
+    expected_site = {"y1": "vy1", "a1": "va1", "a2": "va2", "nb1": "vb1", "nb2": "vb2", "c1": "vc1"}
+    UpgradeHelper_HDP2.update_config_using_existing(opm, "global", site_template, True)
+    get_config_mock.assert_called_once_with(opm, "global")
+    update_config_mock.assert_called_once_with(opm, expected_site, "global")
+
+
+  @patch.object(UpgradeHelper_HDP2, 'update_config')
+  @patch.object(UpgradeHelper_HDP2, 'get_config')
+  @patch('optparse.Values')
+  def test_update_without_append(self, optparse_mock, get_config_mock, update_config_mock):
+    opm = optparse_mock.return_value
+    update_config_mock.return_value = None
+    options = MagicMock()
+    args = ["save-configs"]
+    opm.parse_args.return_value = (options, args)
+    get_config_mock.return_value = {"a1": "va1", "a2": "va2", "b1": "vb1", "b2": "vb2", "c1": "vc1"}
+    site_template = {"y1": "vy1", "a1": "REPLACE_WITH_", "a2": "REPLACE_WITH_", "nb1": "REPLACE_WITH_b1",
+                     "nb2": "REPLACE_WITH_b2"}
+    expected_site = {"y1": "vy1", "a1": "va1", "a2": "va2", "nb1": "vb1", "nb2": "vb2"}
+    UpgradeHelper_HDP2.update_config_using_existing(opm, "global", site_template)
+    get_config_mock.assert_called_once_with(opm, "global")
+    update_config_mock.assert_called_once_with(opm, expected_site, "global")
+
 
 if __name__ == "__main__":
   unittest.main()