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']