浏览代码

AMBARI-3662. Resource Management. Add HadoopExecute resource. (Andrew Onischuk via dlysnichenko)

Lisnichenko Dmitro 11 年之前
父节点
当前提交
fa817f6446

+ 1 - 0
ambari-agent/src/main/python/resource_management/libraries/providers/__init__.py

@@ -10,5 +10,6 @@ PROVIDERS = dict(
   amazon=dict(
   ),
   default=dict(
+    ExecuteHadoop="resource_management.libraries.providers.execute_hadoop.ExecuteHadoopProvider",
   ),
 )

+ 24 - 0
ambari-agent/src/main/python/resource_management/libraries/providers/execute_hadoop.py

@@ -0,0 +1,24 @@
+from resource_management import *
+
+class ExecuteHadoopProvider(Provider):
+  def action_run(self):
+    if self.resource.security_enabled and not self.resource.kinit_override:
+      kinit_if_needed = "su - {user} -c '{kinit_path_local} -kt {keytab} {principal}'".format(
+            user=self.resource.user, kinit_path_local=self.resource.kinit_path_local, 
+            keytab=self.resource.keytab, principal=self.resource.principal)
+    else:
+      kinit_if_needed = ""
+
+    cmd = "hadoop --config {conf_dir} {command}".format(conf_dir=self.resource.conf_dir, command=self.resource.command)
+    
+    if kinit_if_needed != "":
+      Execute ( kinit_if_needed,
+        path = ['/bin']
+      )
+  
+    Execute ( cmd,
+      user        = self.resource.user,
+      tries       = self.resource.tries,
+      try_sleep   = self.resource.try_sleep,
+      logoutput   = self.resource.logoutput,
+    )

+ 1 - 0
ambari-agent/src/main/python/resource_management/libraries/resources/__init__.py

@@ -0,0 +1 @@
+from resource_management.libraries.resources.execute_hadoop import *

+ 23 - 0
ambari-agent/src/main/python/resource_management/libraries/resources/execute_hadoop.py

@@ -0,0 +1,23 @@
+_all__ = ["ExecuteHadoop"]
+from resource_management.core.base import Resource, ForcedListArgument, ResourceArgument, BooleanArgument
+
+class ExecuteHadoop(Resource):
+  action = ForcedListArgument(default="run")
+  command = ResourceArgument(default=lambda obj: obj.name)
+  kinit_override = BooleanArgument(default=False)
+  tries = ResourceArgument(default=1)
+  try_sleep = ResourceArgument(default=0) # seconds
+  user = ResourceArgument()
+  logoutput = BooleanArgument(default=False)
+  
+  conf_dir = ResourceArgument()
+  
+  security_enabled = BooleanArgument(default=False)
+  keytab = ResourceArgument()
+  principal = ResourceArgument()
+  kinit_path_local = ResourceArgument()
+  
+
+  
+  actions = Resource.actions + ["run"]
+