فهرست منبع

AMBARI-3654. Directory: allow to ignore_failures, check exceptional cases, support recursive deleting (Andrew Onischuk via dlysnichenko)

Lisnichenko Dmitro 11 سال پیش
والد
کامیت
a02af69f9b

+ 7 - 1
ambari-agent/src/main/python/resource_management/environment.py

@@ -118,7 +118,13 @@ class Environment(object):
           continue
 
         for action in resource.action:
-          self.run_action(resource, action)
+          if not resource.ignore_failures:
+            self.run_action(resource, action)
+          else:
+            try:
+              self.run_action(resource, action)
+            except Exception:
+                pass
 
       # Run delayed actions
       while self.delayed_actions:

+ 9 - 3
ambari-agent/src/main/python/resource_management/providers/system.py

@@ -4,6 +4,7 @@ import grp
 import os
 import pwd
 import time
+import shutil
 from resource_management import shell
 from resource_management.base import Fail
 from resource_management.providers import Provider
@@ -132,6 +133,9 @@ class DirectoryProvider(Provider):
       else:
         os.mkdir(path, self.resource.mode or 0755)
       self.resource.updated()
+      
+    if not os.path.isdir(path):
+      raise Fail("Applying %s failed, file %s already exists" % (self.resource, path))
 
     if _ensure_metadata(path, self.resource.owner, self.resource.group,
                         mode=self.resource.mode, log=self.log):
@@ -140,9 +144,11 @@ class DirectoryProvider(Provider):
   def action_delete(self):
     path = self.resource.path
     if os.path.exists(path):
-      self.log.info("Removing directory %s" % self.resource)
-      os.rmdir(path)
-      # TODO: recursive
+      if not os.path.isdir(path):
+        raise Fail("Applying %s failed, %s is not a directory" % (self.resource, path))
+      
+      self.log.info("Removing directory %s and all its content" % self.resource)
+      shutil.rmtree(path)
       self.resource.updated()
 
 

+ 1 - 1
ambari-agent/src/main/python/resource_management/resources/system.py

@@ -23,7 +23,7 @@ class Directory(Resource):
   mode = ResourceArgument()
   owner = ResourceArgument()
   group = ResourceArgument()
-  recursive = BooleanArgument(default=False)
+  recursive = BooleanArgument(default=False) # this work for 'create', 'delete' is anyway recursive
 
   actions = Resource.actions + ["create", "delete"]