]> git.donarmstrong.com Git - dsa-puppet.git/blobdiff - 3rdparty/modules/elasticsearch/lib/puppet/provider/es_instance_conn_validator/tcp_port.rb
Add new module elasticsearch for listsearch
[dsa-puppet.git] / 3rdparty / modules / elasticsearch / lib / puppet / provider / es_instance_conn_validator / tcp_port.rb
diff --git a/3rdparty/modules/elasticsearch/lib/puppet/provider/es_instance_conn_validator/tcp_port.rb b/3rdparty/modules/elasticsearch/lib/puppet/provider/es_instance_conn_validator/tcp_port.rb
new file mode 100644 (file)
index 0000000..3cd1ef6
--- /dev/null
@@ -0,0 +1,51 @@
+$LOAD_PATH.unshift(File.join(File.dirname(__FILE__),"..","..",".."))
+require 'puppet/util/es_instance_validator'
+
+# This file contains a provider for the resource type `es_instance_conn_validator`,
+# which validates the Elasticsearch instance connection by attempting an https connection.
+
+Puppet::Type.type(:es_instance_conn_validator).provide(:tcp_port) do
+  desc "A provider for the resource type `es_instance_conn_validator`,
+        which validates the  connection by attempting an https
+        connection to the Elasticsearch instance." 
+
+  def exists?
+    start_time = Time.now
+    timeout = resource[:timeout]
+
+    success = validator.attempt_connection
+
+    while success == false && ((Time.now - start_time) < timeout)
+      # It can take several seconds for the Elasticsearch instance to start up;
+      # especially on the first install.  Therefore, our first connection attempt
+      # may fail.  Here we have somewhat arbitrarily chosen to retry every 2
+      # seconds until the configurable timeout has expired.
+      Puppet.debug("Failed to connect to the Elasticsearch instance; sleeping 2 seconds before retry")
+      sleep 2
+      success = validator.attempt_connection
+    end
+
+    if success
+      Puppet.debug("Connected to the ES instance in #{Time.now - start_time} seconds.")
+    else
+      Puppet.notice("Failed to connect to the ES instance within timeout window of #{timeout} seconds; giving up.")
+    end
+
+    success
+  end
+
+  def create
+    # If `#create` is called, that means that `#exists?` returned false, which
+    # means that the connection could not be established... so we need to
+    # cause a failure here.
+    raise Puppet::Error, "Unable to connect to ES instance ! (#{@validator.instance_server}:#{@validator.instance_port})"
+  end
+
+  private
+
+  # @api private
+  def validator
+    @validator ||= Puppet::Util::EsInstanceValidator.new(resource[:server], resource[:port])
+  end
+
+end