Pārlūkot izejas kodu

AMBARI-5264. Ganglia Server goes to "installed" state after double "Ganglia rrdcached base directory" config changing.(vbrodetskyi)

Vitaly Brodetskyi 11 gadi atpakaļ
vecāks
revīzija
bdddb9bb0d

+ 17 - 7
ambari-server/src/main/resources/stacks/HDP/1.3.2/services/GANGLIA/package/scripts/ganglia_server.py

@@ -164,19 +164,29 @@ def server_files():
        mode=0755
   )
   rrd_file_owner = params.gmetad_user
-  if params.rrdcached_default_base_dir != params.rrdcached_base_dir:
+
+  if not os.path.exists(params.rrdcached_base_dir) or (os.path.islink(params.rrdcached_default_base_dir)
+                                                    and params.rrdcached_default_base_dir == params.rrdcached_base_dir):
+    if os.path.islink(params.rrdcached_default_base_dir):
+      Link(params.rrdcached_default_base_dir,
+           action = "delete"
+      )
+    else:
+      Directory(params.rrdcached_default_base_dir,
+                action = "delete"
+      )
+
     Directory(params.rrdcached_base_dir,
               owner=rrd_file_owner,
               group=rrd_file_owner,
               mode=0755,
               recursive=True
     )
-    Directory(params.rrdcached_default_base_dir,
-              action = "delete"
-    )
-    Link(params.rrdcached_default_base_dir,
-         to=params.rrdcached_base_dir
-    )
+
+    if params.rrdcached_default_base_dir != params.rrdcached_base_dir:
+      Link(params.rrdcached_default_base_dir,
+           to=params.rrdcached_base_dir
+      )
   elif rrd_file_owner != 'nobody':
     Directory(params.rrdcached_default_base_dir,
               owner=rrd_file_owner,

+ 17 - 7
ambari-server/src/main/resources/stacks/HDP/2.0.6/services/GANGLIA/package/scripts/ganglia_server.py

@@ -200,19 +200,29 @@ def server_files():
        mode=0755
   )
   rrd_file_owner = params.gmetad_user
-  if params.rrdcached_default_base_dir != params.rrdcached_base_dir:
+
+  if not os.path.exists(params.rrdcached_base_dir) or (os.path.islink(params.rrdcached_default_base_dir)
+                                                    and params.rrdcached_default_base_dir == params.rrdcached_base_dir):
+    if os.path.islink(params.rrdcached_default_base_dir):
+      Link(params.rrdcached_default_base_dir,
+           action = "delete"
+      )
+    else:
+      Directory(params.rrdcached_default_base_dir,
+                action = "delete"
+      )
+
     Directory(params.rrdcached_base_dir,
               owner=rrd_file_owner,
               group=rrd_file_owner,
               mode=0755,
               recursive=True
     )
-    Directory(params.rrdcached_default_base_dir,
-              action = "delete"
-    )
-    Link(params.rrdcached_default_base_dir,
-         to=params.rrdcached_base_dir
-    )
+
+    if params.rrdcached_default_base_dir != params.rrdcached_base_dir:
+      Link(params.rrdcached_default_base_dir,
+           to=params.rrdcached_base_dir
+      )
   elif rrd_file_owner != 'nobody':
     Directory(params.rrdcached_default_base_dir,
               owner=rrd_file_owner,

+ 21 - 1
ambari-server/src/test/python/stacks/1.3.2/GANGLIA/test_ganglia_server.py

@@ -19,8 +19,10 @@ limitations under the License.
 '''
 
 from stacks.utils.RMFTestCase import *
+from mock.mock import MagicMock, call, patch
 
-
+@patch("os.path.exists", new = MagicMock(return_value=False))
+@patch("os.path.islink", new = MagicMock(return_value=False))
 class TestGangliaServer(RMFTestCase):
 
   def test_configure_default(self):
@@ -236,6 +238,15 @@ class TestGangliaServer(RMFTestCase):
                           content = StaticFile('rrd.py'),
                           mode = 0755,)
 
+    self.assertResourceCalled('Directory', '/var/lib/ganglia/rrds',
+                              action = ['delete'],
+                              )
+    self.assertResourceCalled('Directory', '/var/lib/ganglia/rrds',
+                              owner = 'nobody',
+                              group = 'nobody',
+                              recursive = True,
+                              mode = 0755,
+                              )
     self.assertResourceCalled('File', '/etc/ganglia/gmetad.conf',
                           owner = 'root',
                           group = 'hadoop',)
@@ -415,6 +426,15 @@ class TestGangliaServer(RMFTestCase):
                               content = StaticFile('rrd.py'),
                               mode = 0755,
                               )
+    self.assertResourceCalled('Directory', '/var/lib/ganglia/rrds',
+                              action = ['delete'],
+                              )
+    self.assertResourceCalled('Directory', '/var/lib/ganglia/rrds',
+                              owner = 'nobody',
+                              group = 'nobody',
+                              recursive = True,
+                              mode = 0755,
+                              )
     self.assertResourceCalled('File', '/etc/ganglia/gmetad.conf',
                               owner = 'root',
                               group = 'hadoop',

+ 21 - 1
ambari-server/src/test/python/stacks/2.0.6/GANGLIA/test_ganglia_server.py

@@ -19,8 +19,10 @@ limitations under the License.
 '''
 
 from stacks.utils.RMFTestCase import *
+from mock.mock import MagicMock, call, patch
 
-
+@patch("os.path.exists", new = MagicMock(return_value=False))
+@patch("os.path.islink", new = MagicMock(return_value=False))
 class TestGangliaServer(RMFTestCase):
 
   def test_configure_default(self):
@@ -223,6 +225,15 @@ class TestGangliaServer(RMFTestCase):
                           content = StaticFile('rrd.py'),
                           mode = 0755,)
 
+    self.assertResourceCalled('Directory', '/var/lib/ganglia/rrds',
+                              action = ['delete'],
+                              )
+    self.assertResourceCalled('Directory', '/var/lib/ganglia/rrds',
+                              owner = 'nobody',
+                              group = 'nobody',
+                              recursive = True,
+                              mode = 0755,
+                              )
     self.assertResourceCalled('File', '/etc/ganglia/gmetad.conf',
                           owner = 'root',
                           group = 'hadoop',)
@@ -390,6 +401,15 @@ class TestGangliaServer(RMFTestCase):
                               content = StaticFile('rrd.py'),
                               mode = 0755,
                               )
+    self.assertResourceCalled('Directory', '/var/lib/ganglia/rrds',
+                              action = ['delete'],
+                              )
+    self.assertResourceCalled('Directory', '/var/lib/ganglia/rrds',
+                              owner = 'nobody',
+                              group = 'nobody',
+                              recursive = True,
+                              mode = 0755,
+                              )
     self.assertResourceCalled('File', '/etc/ganglia/gmetad.conf',
                               owner = 'root',
                               group = 'hadoop',