Selaa lähdekoodia

AMBARI-20525. Unlimited Key JCE policy is enabled or not on each host (Attila Magyar via adoroszlai)

Attila Magyar 8 vuotta sitten
vanhempi
commit
688d000d30

+ 13 - 1
ambari-agent/src/main/python/ambari_agent/HostInfo.py

@@ -33,7 +33,8 @@ from ambari_commons.os_family_impl import OsFamilyImpl
 from resource_management.core import shell
 
 from ambari_agent.HostCheckReportFileHandler import HostCheckReportFileHandler
-
+from AmbariConfig import AmbariConfig
+from resource_management.core.resources.jcepolicyinfo import JcePolicyInfo
 
 logger = logging.getLogger()
 
@@ -285,6 +286,16 @@ class HostInfoLinux(HostInfo):
         result['target'] = realConf
         etcResults.append(result)
 
+  def checkUnlimitedJce(self):
+    if not self.config or not self.config.has_option(AmbariConfig.AMBARI_PROPERTIES_CATEGORY, 'java.home'):
+      return None
+    try:
+      jcePolicyInfo = JcePolicyInfo(self.config.get(AmbariConfig.AMBARI_PROPERTIES_CATEGORY, 'java.home'))
+      return jcePolicyInfo.is_unlimited_key_jce_policy()
+    except:
+      logger.exception('Unable to get information about JCE')
+      return None
+
   def register(self, dict, componentsMapped=True, commandsInProgress=True):
     """ Return various details about the host
     componentsMapped: indicates if any components are mapped to this host
@@ -307,6 +318,7 @@ class HostInfoLinux(HostInfo):
     dict['firewallRunning'] = self.checkFirewall()
     dict['firewallName'] = self.getFirewallName()
     dict['reverseLookup'] = self.checkReverseLookup()
+    dict['hasUnlimitedJcePolicy'] = self.checkUnlimitedJce()
     # If commands are in progress or components are already mapped to this host
     # Then do not perform certain expensive host checks
     if componentsMapped or commandsInProgress:

+ 3 - 1
ambari-agent/src/test/python/ambari_agent/TestHostInfo.py

@@ -198,7 +198,8 @@ class TestHostInfo(TestCase):
   @patch.object(HostInfoLinux, 'hadoopVarRunCount')
   @patch.object(HostInfoLinux, 'hadoopVarLogCount')
   @patch.object(HostInfoLinux, 'checkFirewall')
-  def test_hostinfo_register_suse(self, cit_mock, hvlc_mock, hvrc_mock, eac_mock, cf_mock, jp_mock,
+  @patch.object(HostInfoLinux, 'checkUnlimitedJce')
+  def test_hostinfo_register_suse(self, jce_mock, cit_mock, hvlc_mock, hvrc_mock, eac_mock, cf_mock, jp_mock,
                              cls_mock, cu_mock, gir_mock, gipbr_mock, gipbn_mock,
                              gpd_mock, aip_mock, aap_mock, whcf_mock, os_umask_mock, get_os_type_mock):
     cit_mock.return_value = True
@@ -215,6 +216,7 @@ class TestHostInfo(TestCase):
     self.assertTrue(cit_mock.called)
     self.assertTrue(os_umask_mock.called)
     self.assertTrue(whcf_mock.called)
+    self.assertTrue(jce_mock.called)
 
     self.assertTrue('agentTimeStampAtReporting' in dict['hostHealth'])
 

+ 10 - 15
ambari-common/src/main/python/resource_management/core/resources/jcepolicyinfo.py

@@ -20,28 +20,23 @@ Ambari Agent
 
 """
 
-from resource_management.core.resources.system import Execute
 from resource_management.core.logger import Logger
-
+from resource_management.core import shell
+import subprocess
 
 class JcePolicyInfo:
-  def __init__(self, java_exec, java_home):
-    self.java_exec = java_exec
+  def __init__(self, java_home):
     self.java_home = java_home
     self.jar = "/var/lib/ambari-agent/tools/jcepolicyinfo.jar"
 
   def is_unlimited_key_jce_policy(self):
     Logger.info("Testing the JVM's JCE policy to see it if supports an unlimited key length.")
-
-    try:
-      Execute(self._command("-tu"),
-              environment={'JAVA_HOME': self.java_home},
-              logoutput=True
-              )
-      return True
-    except Exception:
-      return False
-
+    return shell.call(
+      self._command('-tu'),
+      stdout = subprocess.PIPE,
+      stderr = subprocess.PIPE,
+      timeout = 5,
+      quiet = True)[0] == 0
 
   def _command(self, options):
-    return "{0} -jar {1} {2}".format(self.java_exec, self.jar, options)
+    return '{0}/bin/java -jar /var/lib/ambari-agent/tools/jcepolicyinfo.jar {1}'.format(self.java_home, options)

+ 6 - 0
ambari-server/src/main/java/org/apache/ambari/server/agent/AgentEnv.java

@@ -64,6 +64,8 @@ public class AgentEnv {
 
   private String firewallName;
 
+  private Boolean hasUnlimitedJcePolicy;
+
   private Boolean reverseLookup;
 
   public Boolean getReverseLookup() {
@@ -154,6 +156,10 @@ public class AgentEnv {
     this.firewallName = firewallName;
   }
 
+  public Boolean getHasUnlimitedJcePolicy() {
+    return hasUnlimitedJcePolicy;
+  }
+
   public static class HostHealth {
     /**
      * Java processes running on the system.  Default empty array.

+ 1 - 0
ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java

@@ -2926,6 +2926,7 @@ public class Configuration {
     agentConfigsMap.put(CHECK_REMOTE_MOUNTS.getKey(), getProperty(CHECK_REMOTE_MOUNTS));
     agentConfigsMap.put(CHECK_MOUNTS_TIMEOUT.getKey(), getProperty(CHECK_MOUNTS_TIMEOUT));
     agentConfigsMap.put(ENABLE_AUTO_AGENT_CACHE_UPDATE.getKey(), getProperty(ENABLE_AUTO_AGENT_CACHE_UPDATE));
+    agentConfigsMap.put(JAVA_HOME.getKey(), getProperty(JAVA_HOME));
 
     configsMap = new HashMap<>();
     configsMap.putAll(agentConfigsMap);

+ 1 - 1
ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-START/scripts/shared_initialization.py

@@ -230,7 +230,7 @@ def setup_unlimited_key_jce_policy():
     Logger.debug("Skipping unlimited key JCE policy check and setup since it is not required")
 
   else:
-    jcePolicyInfo = JcePolicyInfo(java_exec=params.java_exec, java_home=params.java_home)
+    jcePolicyInfo = JcePolicyInfo(params.java_home)
 
     if jcePolicyInfo.is_unlimited_key_jce_policy():
       Logger.info("The unlimited key JCE policy is required, and appears to have been installed.")

+ 2 - 1
ambari-server/src/test/java/org/apache/ambari/server/agent/AgentResourceTest.java

@@ -215,7 +215,7 @@ public class AgentResourceTest extends RandomPortJerseyTest {
             ", \"existingUsers\": "+ ExistingUserJSON +
             ", \"umask\": \"18\", \"installedPackages\": "+
             PackageDetailJSON +", \"stackFoldersAndFiles\": "+ DirectoryJSON +
-            ", \"firewallRunning\": \"true\", \"firewallName\": \"iptables\", \"transparentHugePage\": \"never\"}";
+            ", \"firewallRunning\": \"true\", \"firewallName\": \"iptables\", \"transparentHugePage\": \"never\", \"hasUnlimitedJcePolicy\" : true}";
     AgentEnv.Directory[] dirs = getJsonFormString(
             DirectoryJSON, AgentEnv.Directory[].class);
     Assert.assertEquals("/var/lib", dirs[0].getName());
@@ -251,6 +251,7 @@ public class AgentResourceTest extends RandomPortJerseyTest {
             AgentEnvJSON, AgentEnv.class);
     Assert.assertTrue(18 == agentEnv.getUmask());
     Assert.assertEquals("never", agentEnv.getTransparentHugePage());
+    Assert.assertTrue(agentEnv.getHasUnlimitedJcePolicy());
     Assert.assertTrue(Boolean.TRUE == agentEnv.getFirewallRunning());
     Assert.assertEquals("iptables", agentEnv.getFirewallName());
     Assert.assertEquals("/etc/alternatives/hdfs-conf", agentEnv.getAlternatives()[0].getName());

+ 1 - 1
ambari-web/app/controllers/global/update_controller.js

@@ -216,7 +216,7 @@ App.UpdateController = Em.Controller.extend({
     var testUrl = this.get('HOSTS_TEST_URL'),
         self = this,
         hostDetailsFilter = '',
-        realUrl = '/hosts?fields=Hosts/rack_info,Hosts/host_name,Hosts/maintenance_state,Hosts/public_host_name,Hosts/cpu_count,Hosts/ph_cpu_count,' +
+        realUrl = '/hosts?fields=Hosts/rack_info,Hosts/host_name,Hosts/maintenance_state,Hosts/public_host_name,Hosts/cpu_count,Hosts/ph_cpu_count,Hosts/last_agent_env,' +
             'alerts_summary,Hosts/host_status,Hosts/last_heartbeat_time,Hosts/ip,host_components/HostRoles/state,host_components/HostRoles/maintenance_state,' +
             'host_components/HostRoles/stale_configs,host_components/HostRoles/service_name,host_components/HostRoles/display_name,host_components/HostRoles/desired_admin_state,' +
             '<metrics>Hosts/total_mem<hostDetailsParams><stackVersions>&minimal_response=true',

+ 1 - 0
ambari-web/app/mappers/hosts_mapper.js

@@ -38,6 +38,7 @@ App.hostsMapper = App.QuickDataMapper.create({
     cpu: 'Hosts.cpu_count',
     cpu_physical: 'Hosts.ph_cpu_count',
     memory: 'Hosts.total_mem',
+    has_jce_policy: "Hosts.last_agent_env.hasUnlimitedJcePolicy",
     disk_info: 'Hosts.disk_info',
     disk_total: 'metrics.disk.disk_total',
     disk_free: 'metrics.disk.disk_free',

+ 1 - 0
ambari-web/app/messages.js

@@ -2620,6 +2620,7 @@ Em.I18n.translations = {
   'hosts.host.summary.header':'Summary',
   'hosts.host.summary.hostname':'Hostname',
   'hosts.host.summary.agentHeartbeat':'Heartbeat',
+  'hosts.host.summary.agentHasJce':'Unlimited JCE installed',
   'hosts.host.summary.hostMetrics':'Host Metrics',
   'hosts.host.summary.hostLogMetrics':'Host Log Metrics',
   'hosts.host.summary.addComponent':'Add Component',

+ 1 - 0
ambari-web/app/models/host.js

@@ -39,6 +39,7 @@ App.Host = DS.Model.extend({
   healthStatus: DS.attr('string'),
   lastHeartBeatTime: DS.attr('number'),
   rawLastHeartBeatTime: DS.attr('number'),
+  hasJcePolicy: DS.attr('string'),
   osType: DS.attr("string"),
   diskInfo: DS.attr('object'),
   loadOne:DS.attr('number'),

+ 3 - 0
ambari-web/app/templates/main/host/summary.hbs

@@ -168,6 +168,9 @@
 
                         <dt class="summary-cur-ver-label">{{t hosts.host.summary.currentVersion}}:</dt>
                           <dd class="summary-cur-ver-value">&nbsp;{{view.content.currentVersion}}</dd>
+
+                        <dt class="summary-agent-jce-label">{{t hosts.host.summary.agentHasJce}}:</dt>
+                          <dd class="summary-agent-jce-value">&nbsp;{{view.content.hasJcePolicy}}</dd>
                     </dl>
                 </div>
             </div>