From f51d97420529f79b9cf643d546dd42f379435f35 Mon Sep 17 00:00:00 2001
From: Clark Boylan <clark.boylan@gmail.com>
Date: Mon, 17 Jun 2013 10:12:54 -0700
Subject: [PATCH] Reverse proxy subset of elasticsearch API.

It has been requested that we provide programmatic access to the
elasticsearch API in addition to the Kibana web UI. Do this by reverse
proxying http://logstash.openstack.org/elasticearch/$API_REQUEST to
http://elasticsearch.openstack.org:9200/$API_REQUEST.

The only values for $API_REQUEST that will be passed through are
_aliases, _status, and _search.

Change-Id: Ib41f6d91e2e59d493218074a67155af450ec8c93
Reviewed-on: https://review.openstack.org/33316
Reviewed-by: James E. Blair <corvus@inaugust.com>
Reviewed-by: Jeremy Stanley <fungi@yuggoth.org>
Approved: Clark Boylan <clark.boylan@gmail.com>
Reviewed-by: Clark Boylan <clark.boylan@gmail.com>
Tested-by: Jenkins
---
 modules/logstash/manifests/web.pp               | 1 +
 modules/logstash/templates/kibana.vhost.erb     | 8 ++++++++
 modules/openstack_project/manifests/logstash.pp | 5 +++--
 3 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/modules/logstash/manifests/web.pp b/modules/logstash/manifests/web.pp
index 23fa18597f..1e3172e094 100644
--- a/modules/logstash/manifests/web.pp
+++ b/modules/logstash/manifests/web.pp
@@ -19,6 +19,7 @@ class logstash::web (
   $serveradmin = "webmaster@${::fqdn}",
   $frontend = 'internal',
   $elasticsearch_host = 'localhost',
+  $proxy_elasticsearch = false
 ) {
   include apache
   a2mod { 'rewrite':
diff --git a/modules/logstash/templates/kibana.vhost.erb b/modules/logstash/templates/kibana.vhost.erb
index eb4093285e..63c5e2629d 100644
--- a/modules/logstash/templates/kibana.vhost.erb
+++ b/modules/logstash/templates/kibana.vhost.erb
@@ -8,6 +8,14 @@
 
              CustomLog ${APACHE_LOG_DIR}/<%= scope.lookupvar("::logstash::web::vhost_name") %>-access.log combined
 
+             <% if proxy_elasticsearch == true %>
+             # Proxy for elasticsearch _aliases, .*/_status, and .*/_search.
+             <LocationMatch "^/elasticsearch/(_aliases|.*/_status|.*/_search)$">
+               ProxyPassMatch http://<%= scope.lookupvar("::logstash::web::elasticsearch_host") %>:9200/$1
+             </LocationMatch>
+             ProxyPassReverse /elasticsearch/ http://<%= scope.lookupvar("::logstash::web::elasticsearch_host") %>:9200/
+             <% end %>
+
              ProxyPass / http://127.0.0.1:5601/ retry=0
              ProxyPassReverse / http://127.0.0.1:5601/
 </VirtualHost>
diff --git a/modules/openstack_project/manifests/logstash.pp b/modules/openstack_project/manifests/logstash.pp
index e60161766e..d19b629e0b 100644
--- a/modules/openstack_project/manifests/logstash.pp
+++ b/modules/openstack_project/manifests/logstash.pp
@@ -30,8 +30,9 @@ class openstack_project::logstash (
   }
 
   class { 'logstash::web':
-    frontend           => 'kibana',
-    elasticsearch_host => 'elasticsearch.openstack.org',
+    frontend            => 'kibana',
+    elasticsearch_host  => 'elasticsearch.openstack.org',
+    proxy_elasticsearch => true,
   }
 
   package { 'python-daemon':