You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@slider.apache.org by bi...@apache.org on 2014/06/10 19:40:49 UTC

git commit: SLIDER-118 added monitor_protocol parameter for accumulo app package; when set to https, a keystore and truststore are created when configuring an accumulo monitor component

Repository: incubator-slider
Updated Branches:
  refs/heads/develop 09612768e -> 8c3dddb3a


SLIDER-118 added monitor_protocol parameter for accumulo app package; when set to https, a keystore and truststore are created when configuring an accumulo monitor component


Project: http://git-wip-us.apache.org/repos/asf/incubator-slider/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-slider/commit/8c3dddb3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-slider/tree/8c3dddb3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-slider/diff/8c3dddb3

Branch: refs/heads/develop
Commit: 8c3dddb3a95302eca56bd60296e00cad8a235ca5
Parents: 0961276
Author: Billie Rinaldi <bi...@gmail.com>
Authored: Tue Jun 10 10:40:33 2014 -0700
Committer: Billie Rinaldi <bi...@gmail.com>
Committed: Tue Jun 10 10:40:33 2014 -0700

----------------------------------------------------------------------
 app-packages/accumulo-v1_5/appConfig.json       |  1 +
 app-packages/accumulo-v1_5/metainfo.xml         |  4 +-
 .../package/scripts/accumulo_configuration.py   | 14 +++++--
 .../package/scripts/accumulo_script.py          | 44 +++++++++++++++++++-
 .../accumulo-v1_5/package/scripts/params.py     | 10 +++++
 5 files changed, 67 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/8c3dddb3/app-packages/accumulo-v1_5/appConfig.json
----------------------------------------------------------------------
diff --git a/app-packages/accumulo-v1_5/appConfig.json b/app-packages/accumulo-v1_5/appConfig.json
index 52f8624..49ac995 100644
--- a/app-packages/accumulo-v1_5/appConfig.json
+++ b/app-packages/accumulo-v1_5/appConfig.json
@@ -25,6 +25,7 @@
     "site.global.accumulo_root_password": "secret",
     "site.global.user_group": "hadoop",
     "site.global.security_enabled": "false",
+    "site.global.monitor_protocol": "http",
     "site.accumulo-site.instance.dfs.dir": "/apps/accumulo/data",
     "site.accumulo-site.instance.zookeeper.host": "${ZK_HOST}",
     "site.accumulo-site.instance.secret": "DEFAULT",

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/8c3dddb3/app-packages/accumulo-v1_5/metainfo.xml
----------------------------------------------------------------------
diff --git a/app-packages/accumulo-v1_5/metainfo.xml b/app-packages/accumulo-v1_5/metainfo.xml
index 79bef1d..4b697ca 100644
--- a/app-packages/accumulo-v1_5/metainfo.xml
+++ b/app-packages/accumulo-v1_5/metainfo.xml
@@ -36,11 +36,11 @@
           <exports>
             <export>
               <name>org.apache.slider.monitor</name>
-              <value>http://${ACCUMULO_MONITOR_HOST}:${site.accumulo-site.monitor.port.client}</value>
+              <value>${site.global.monitor_protocol}://${ACCUMULO_MONITOR_HOST}:${site.accumulo-site.monitor.port.client}</value>
             </export>
             <export>
               <name>org.apache.slider.jmx</name>
-              <value>http://${ACCUMULO_MONITOR_HOST}:${site.accumulo-site.monitor.port.client}/xml</value>
+              <value>${site.global.monitor_protocol}://${ACCUMULO_MONITOR_HOST}:${site.accumulo-site.monitor.port.client}/xml</value>
             </export>
           </exports>
         </exportGroup>

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/8c3dddb3/app-packages/accumulo-v1_5/package/scripts/accumulo_configuration.py
----------------------------------------------------------------------
diff --git a/app-packages/accumulo-v1_5/package/scripts/accumulo_configuration.py b/app-packages/accumulo-v1_5/package/scripts/accumulo_configuration.py
index 4e6bb5c..5c15503 100644
--- a/app-packages/accumulo-v1_5/package/scripts/accumulo_configuration.py
+++ b/app-packages/accumulo-v1_5/package/scripts/accumulo_configuration.py
@@ -20,8 +20,8 @@ limitations under the License.
 
 from resource_management import *
 
-def setup_conf_dir(name=None # 'master' or 'tserver' or 'monitor' or 'gc' or 'tracer' or 'client'
-              ):
+def setup_conf_dir(name=None, # 'master' or 'tserver' or 'monitor' or 'gc' or 'tracer' or 'client'
+              extra_params=None):
   import params
 
   # create the conf directory
@@ -46,10 +46,18 @@ def setup_conf_dir(name=None # 'master' or 'tserver' or 'monitor' or 'gc' or 'tr
       recursive = True
     )
 
+    configs = {}
+    if extra_params == None:
+      configs = params.config['configurations']['accumulo-site']
+    else:
+      configs.update(params.config['configurations']['accumulo-site'])
+      for k in extra_params:
+        configs[k] = extra_params[k]
+
     # create a site file for server processes
     XmlConfig( "accumulo-site.xml",
             conf_dir = params.conf_dir,
-            configurations = params.config['configurations']['accumulo-site'],
+            configurations = configs,
             owner = params.accumulo_user,
             group = params.user_group,
             mode=0600

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/8c3dddb3/app-packages/accumulo-v1_5/package/scripts/accumulo_script.py
----------------------------------------------------------------------
diff --git a/app-packages/accumulo-v1_5/package/scripts/accumulo_script.py b/app-packages/accumulo-v1_5/package/scripts/accumulo_script.py
index 2af7a1a..5e2ceba 100644
--- a/app-packages/accumulo-v1_5/package/scripts/accumulo_script.py
+++ b/app-packages/accumulo-v1_5/package/scripts/accumulo_script.py
@@ -19,8 +19,10 @@ limitations under the License.
 """
 
 from resource_management import *
+from resource_management.core.environment import Environment
 
 from accumulo_configuration import setup_conf_dir
+from accumulo_configuration import accumulo_StaticFile
 from accumulo_service import accumulo_service
 
 
@@ -32,7 +34,47 @@ class AccumuloScript(Script):
     self.install_packages(env)
 
   def configure(self, env):
-    setup_conf_dir(name=self.component)
+    import params
+    env.set_params(params)
+
+    if params.monitor_security_enabled and self.component == 'monitor':
+      import os
+      import random
+      import string
+
+      basedir = Environment.get_instance().config.basedir
+      keystore_file = os.path.join(basedir, "files", "keystore.jks")
+      truststore_file = os.path.join(basedir, "files", "cacerts.jks")
+      cert_file = os.path.join(basedir, "files", "server.cer")
+
+      if os.path.exists(keystore_file) or os.path.exists(truststore_file) or os.path.exists(cert_file):
+        self.fail_with_error("trying to create monitor certs but they already existed")
+
+      goodchars = string.lowercase + string.uppercase + string.digits + '#%+,-./:=?@^_'
+      keypass = ''.join(random.choice(goodchars) for x in range(20))
+      storepass = ''.join(random.choice(goodchars) for x in range(20))
+
+      https_params = {}
+      https_params[params.keystore_property] = params.keystore_path
+      https_params[params.truststore_property] = params.truststore_path
+      https_params[params.keystore_password_property] = keypass
+      https_params[params.truststore_password_property] = storepass
+
+      setup_conf_dir(name=self.component, extra_params=https_params)
+
+      Execute( format("{java64_home}/bin/keytool -genkey -alias \"default\" -keyalg RSA -keypass {keypass} -storepass {storepass} -keystore {keystore_file} -dname \"CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown\""),
+               user=params.accumulo_user)
+      Execute( format("{java64_home}/bin/keytool -export -alias \"default\" -storepass {storepass} -file {cert_file} -keystore {keystore_file}"),
+               user=params.accumulo_user)
+      Execute( format("echo \"yes\" | {java64_home}/bin/keytool -import -v -trustcacerts -alias \"default\" -file {cert_file} -keystore {truststore_file} -keypass {keypass} -storepass {storepass}"),
+               user=params.accumulo_user)
+
+      accumulo_StaticFile("keystore.jks")
+      accumulo_StaticFile("cacerts.jks")
+
+    else:
+      setup_conf_dir(name=self.component)
+
 
   def start(self, env):
     import params

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/8c3dddb3/app-packages/accumulo-v1_5/package/scripts/params.py
----------------------------------------------------------------------
diff --git a/app-packages/accumulo-v1_5/package/scripts/params.py b/app-packages/accumulo-v1_5/package/scripts/params.py
index 556c8d2..7bd1a51 100644
--- a/app-packages/accumulo-v1_5/package/scripts/params.py
+++ b/app-packages/accumulo-v1_5/package/scripts/params.py
@@ -50,6 +50,16 @@ else:
 log_dir = config['configurations']['global']['app_log_dir']
 daemon_script = format("{accumulo_root}/bin/accumulo")
 
+# accumulo monitor certificate properties
+monitor_security_enabled = config['configurations']['global']['monitor_protocol'] == "https"
+keystore_path = format("{accumulo_root}/conf/keystore.jks")
+truststore_path = format("{accumulo_root}/conf/cacerts.jks")
+cert_path = format("{accumulo_root}/conf/server.cer")
+keystore_property = "monitor.ssl.keyStore"
+keystore_password_property = "monitor.ssl.keyStorePassword"
+truststore_property = "monitor.ssl.trustStore"
+truststore_password_property = "monitor.ssl.trustStorePassword"
+
 # accumulo initialization parameters
 accumulo_instance_name = config['configurations']['global']['accumulo_instance_name']
 accumulo_root_password = config['configurations']['global']['accumulo_root_password']