class Opensearch < Formula desc "Open source distributed and RESTful search engine" homepage "https://github.com/opensearch-project/OpenSearch" url "https://github.com/opensearch-project/OpenSearch/archive/1.1.0.tar.gz" sha256 "6e664cb5d14f73f5678b218f1f4e9dd393f760789b9d11f4b97c5683e156cf39" license "Apache-2.0" bottle do sha256 cellar: :any_skip_relocation, big_sur: "83484e775335c5c8a2a4c3d791dfd609dbc6e832bf2ae74a0efee22828745fe5" sha256 cellar: :any_skip_relocation, catalina: "7f01418a6721f2b542e3bde40447c1f6b41ba51f370930f2c51544abcd859c8c" sha256 cellar: :any_skip_relocation, mojave: "6add29af38af0405cdff40dd7fd6fbf656f6d45f502bc32d39f5d538b4d23040" end depends_on "gradle@6" => :build depends_on "openjdk" def install system "gradle", ":distribution:archives:no-jdk-darwin-tar:assemble" mkdir "tar" do # Extract the package to the tar directory system "tar", "--strip-components=1", "-xf", Dir["../distribution/archives/no-jdk-darwin-tar/build/distributions/opensearch-*.tar.gz"].first # Install into package directory libexec.install "bin", "lib", "modules" # Set up Opensearch for local development: inreplace "config/opensearch.yml" do |s| # 1. Give the cluster a unique name s.gsub!(/#\s*cluster\.name: .*/, "cluster.name: opensearch_homebrew") # 2. Configure paths s.sub!(%r{#\s*path\.data: /path/to.+$}, "path.data: #{var}/lib/opensearch/") s.sub!(%r{#\s*path\.logs: /path/to.+$}, "path.logs: #{var}/log/opensearch/") end inreplace "config/jvm.options", %r{logs/gc.log}, "#{var}/log/opensearch/gc.log" # add placeholder to avoid removal of empty directory touch "config/jvm.options.d/.keepme" # Move config files into etc (etc/"opensearch").install Dir["config/*"] end inreplace libexec/"bin/opensearch-env", "if [ -z \"$OPENSEARCH_PATH_CONF\" ]; then OPENSEARCH_PATH_CONF=\"$OPENSEARCH_HOME\"/config; fi", "if [ -z \"$OPENSEARCH_PATH_CONF\" ]; then OPENSEARCH_PATH_CONF=\"#{etc}/opensearch\"; fi" bin.install libexec/"bin/opensearch", libexec/"bin/opensearch-keystore", libexec/"bin/opensearch-plugin", libexec/"bin/opensearch-shard" bin.env_script_all_files(libexec/"bin", JAVA_HOME: Formula["openjdk"].opt_prefix) end def post_install # Make sure runtime directories exist (var/"lib/opensearch").mkpath (var/"log/opensearch").mkpath ln_s etc/"opensearch", libexec/"config" unless (libexec/"config").exist? (var/"opensearch/plugins").mkpath ln_s var/"opensearch/plugins", libexec/"plugins" unless (libexec/"plugins").exist? # fix test not being able to create keystore because of sandbox permissions system bin/"opensearch-keystore", "create" unless (etc/"opensearch/opensearch.keystore").exist? end def caveats <<~EOS Data: #{var}/lib/opensearch/ Logs: #{var}/log/opensearch/opensearch_homebrew.log Plugins: #{var}/opensearch/plugins/ Config: #{etc}/opensearch/ EOS end plist_options manual: "opensearch" service do run opt_bin/"opensearch" working_dir var log_path var/"log/opensearch.log" error_log_path var/"log/opensearch.log" end test do port = free_port (testpath/"data").mkdir (testpath/"logs").mkdir fork do exec bin/"opensearch", "-Ehttp.port=#{port}", "-Epath.data=#{testpath}/data", "-Epath.logs=#{testpath}/logs" end sleep 20 output = shell_output("curl -s -XGET localhost:#{port}/") assert_equal "opensearch", JSON.parse(output)["version"]["distribution"] system "#{bin}/opensearch-plugin", "list" end end