Bläddra i källkod

AMBARI-6596. Flume: add support for 'run-as' user (ncole)

Nate Cole 11 år sedan
förälder
incheckning
0fc60a40b4

+ 5 - 0
ambari-server/src/main/resources/stacks/HDP/2.0.6/services/FLUME/configuration/flume-env.xml

@@ -31,4 +31,9 @@
     <value>/var/log/flume</value>
     <description>Location to save log files</description>
   </property>
+  <property>
+    <name>flume_user</name>
+    <value>flume</value>
+    <description>Flume User</description>
+  </property>
 </configuration>

+ 4 - 8
ambari-server/src/main/resources/stacks/HDP/2.0.6/services/FLUME/package/scripts/flume.py

@@ -58,11 +58,8 @@ def flume(action = None):
         mode = 0644)
 
   elif action == 'start':
-    flume_base = format('env JAVA_HOME={java_home} /usr/bin/flume-ng agent '
-      '--name {{0}} '
-      '--conf {{1}} '
-      '--conf-file {{2}} '
-      '{{3}}')
+    flume_base = format('su -s /bin/bash {flume_user} -c "export JAVA_HOME={java_home}; '
+      '/usr/bin/flume-ng agent --name {{0}} --conf {{1}} --conf-file {{2}} {{3}}"')
 
     for agent in cmd_target_names():
       flume_agent_conf_dir = params.flume_conf_dir + os.sep + agent
@@ -85,9 +82,8 @@ def flume(action = None):
         Execute(flume_cmd, wait_for_finish=False)
 
         # sometimes startup spawns a couple of threads - so only the first line may count
-        pid_cmd = format('pgrep -o -f {flume_agent_conf_file} > {flume_agent_pid_file}')
-
-        Execute(pid_cmd, logoutput=True, tries=5, try_sleep=10)
+        pid_cmd = format('pgrep -o -u {flume_user} -f ^{java_home} > {flume_agent_pid_file}')
+        Execute(pid_cmd, logoutput=True, tries=10, try_sleep=1)
 
     pass
   elif action == 'stop':

+ 3 - 0
ambari-server/src/main/resources/stacks/HDP/2.0.6/services/FLUME/package/scripts/params.py

@@ -34,6 +34,9 @@ flume_run_dir = '/var/run/flume'
 flume_user = 'flume'
 flume_group = 'flume'
 
+if 'flume-env' in config['configurations'] and 'flume_user' in config['configurations']['flume-env']:
+  flume_user = config['configurations']['flume-env']['flume_user']
+
 if (('flume-conf' in config['configurations']) and('content' in config['configurations']['flume-conf'])):
   flume_conf_content = config['configurations']['flume-conf']['content']
 else:

+ 15 - 15
ambari-server/src/test/python/stacks/2.0.6/FLUME/test_flume.py

@@ -49,18 +49,18 @@ class TestFlumeHandler(RMFTestCase):
 
     self.assert_configure_default()
 
-    self.assertResourceCalled('Execute', format('env JAVA_HOME=/usr/jdk64/jdk1.7.0_45 /usr/bin/flume-ng agent '
+    self.assertResourceCalled('Execute', format('su -s /bin/bash flume -c "export JAVA_HOME=/usr/jdk64/jdk1.7.0_45; /usr/bin/flume-ng agent '
       '--name a1 '
       '--conf /etc/flume/conf/a1 '
       '--conf-file /etc/flume/conf/a1/flume.conf '
       '-Dflume.monitoring.type=ganglia '
-      '-Dflume.monitoring.hosts=c6401.ambari.apache.org:8655'),
+      '-Dflume.monitoring.hosts=c6401.ambari.apache.org:8655"'),
       wait_for_finish = False)
 
-    self.assertResourceCalled('Execute', 'pgrep -o -f /etc/flume/conf/a1/flume.conf > /var/run/flume/a1.pid',
+    self.assertResourceCalled('Execute', 'pgrep -o -u flume -f ^/usr/jdk64/jdk1.7.0_45 > /var/run/flume/a1.pid',
       logoutput = True,
-      tries = 5,
-      try_sleep = 10)
+      tries = 10,
+      try_sleep = 1)
 
     self.assertNoMoreResources()
 
@@ -197,18 +197,18 @@ class TestFlumeHandler(RMFTestCase):
 
     self.assert_configure_many()
 
-    self.assertResourceCalled('Execute', format('env JAVA_HOME=/usr/jdk64/jdk1.7.0_45 /usr/bin/flume-ng agent '
+    self.assertResourceCalled('Execute', format('su -s /bin/bash flume -c "export JAVA_HOME=/usr/jdk64/jdk1.7.0_45; /usr/bin/flume-ng agent '
       '--name b1 '
       '--conf /etc/flume/conf/b1 '
       '--conf-file /etc/flume/conf/b1/flume.conf '
       '-Dflume.monitoring.type=ganglia '
-      '-Dflume.monitoring.hosts=c6401.ambari.apache.org:8655'),
+      '-Dflume.monitoring.hosts=c6401.ambari.apache.org:8655"'),
       wait_for_finish = False)
 
-    self.assertResourceCalled('Execute', 'pgrep -o -f /etc/flume/conf/b1/flume.conf > /var/run/flume/b1.pid',
+    self.assertResourceCalled('Execute', 'pgrep -o -u flume -f ^/usr/jdk64/jdk1.7.0_45 > /var/run/flume/b1.pid',
       logoutput = True,
-      tries = 5,
-      try_sleep = 10)
+      tries = 10,
+      try_sleep = 1)
 
     self.assertNoMoreResources()
 
@@ -225,18 +225,18 @@ class TestFlumeHandler(RMFTestCase):
 
     self.assert_configure_many()
 
-    self.assertResourceCalled('Execute', format('env JAVA_HOME=/usr/jdk64/jdk1.7.0_45 /usr/bin/flume-ng agent '
+    self.assertResourceCalled('Execute', format('su -s /bin/bash flume -c "export JAVA_HOME=/usr/jdk64/jdk1.7.0_45; /usr/bin/flume-ng agent '
       '--name b1 '
       '--conf /etc/flume/conf/b1 '
       '--conf-file /etc/flume/conf/b1/flume.conf '
       '-Dflume.monitoring.type=ganglia '
-      '-Dflume.monitoring.hosts=c6401.ambari.apache.org:8655'),
+      '-Dflume.monitoring.hosts=c6401.ambari.apache.org:8655"'),
       wait_for_finish = False)
 
-    self.assertResourceCalled('Execute', 'pgrep -o -f /etc/flume/conf/b1/flume.conf > /var/run/flume/b1.pid',
+    self.assertResourceCalled('Execute', 'pgrep -o -u flume -f ^/usr/jdk64/jdk1.7.0_45 > /var/run/flume/b1.pid',
       logoutput = True,
-      tries = 5,
-      try_sleep = 10)
+      tries = 10,
+      try_sleep = 1)
 
     self.assertNoMoreResources()