diff --git a/manifests/site.pp b/manifests/site.pp
index f88dc5d0a0..a0d90d9a2f 100644
--- a/manifests/site.pp
+++ b/manifests/site.pp
@@ -380,7 +380,7 @@ node /^logstash-worker\d+\.openstack\.org$/ {
   }
 }
 
-node /^elasticsearch\d*\.openstack\.org$/ {
+node /^elasticsearch\d?\.openstack\.org$/ {
   class { 'openstack_project::elasticsearch_node':
     sysadmins             => hiera('sysadmins'),
     elasticsearch_nodes   => $elasticsearch_nodes,
@@ -404,6 +404,14 @@ node /^elasticsearch\d*\.openstack\.org$/ {
       'logstash-worker16.openstack.org',
     ],
     discover_nodes        => $elasticsearch_nodes,
+    heap_size             => '16g',
+  }
+}
+
+node /^elasticsearch\d\d\.openstack\.org$/ {
+  class { 'openstack_project::server':
+    iptables_public_tcp_ports => [22],
+    sysadmins                 => hiera('sysadmins'),
   }
 }
 
diff --git a/modules/openstack_project/manifests/elasticsearch_node.pp b/modules/openstack_project/manifests/elasticsearch_node.pp
index fd1efff87c..5e56fa4d84 100644
--- a/modules/openstack_project/manifests/elasticsearch_node.pp
+++ b/modules/openstack_project/manifests/elasticsearch_node.pp
@@ -18,6 +18,7 @@ class openstack_project::elasticsearch_node (
   $elasticsearch_nodes = [],
   $elasticsearch_clients = [],
   $discover_nodes = ['localhost'],
+  $heap_size = '30g',
   $sysadmins = []
 ) {
   $iptables_nodes_rule = regsubst ($elasticsearch_nodes, '^(.*)$', '-m state --state NEW -m tcp -p tcp --dport 9200:9400 -s \1 -j ACCEPT')
@@ -45,6 +46,7 @@ class openstack_project::elasticsearch_node (
       'discovery.zen.ping.multicast.enabled' => false,
       'discovery.zen.ping.unicast.hosts'     => $discover_nodes,
     },
+    heap_size          => $heap_size,
     version            => '0.90.9',
   }