mirror of
https://github.com/elastic/logstash.git
synced 2025-04-22 05:37:21 -04:00
This PR enables the upgrade of bundler to the latest version. Prior to this PR, the ability to do so was blocked by bundler.setup in versions of bundler > `2.23` making runtime changes to `Gemfile.lock` (unless the lock file was `frozen`) based on the specific platform the application was being run on, overriding any platforms (including generic `java` platform) set during build time. This was in conflict with changes made in #12782, which prevented the logstash user writing to files in `/usr/share/logstash`. This PR will freeze the lockfile when logstash is run, and unfreeze it when manipulating plugins (install, update, remove, install from offline pack) to allow new plugins to be added. While unfrozen, changes are also made to ensure that the platform list remains as the generic `java` platform, and not changed to the specific platform for the runtime JVM. This PR also introduces a new runtime flag, `--enable-local-plugin-development`. This flag is intended for use by Logstash developers only, and enables a mode of operation where a Gemfile can be manipulated, eg ``` gem "logstash-integration-kafka", :path => '/users/developer/code/plugins/logstash-integration-kafka' ``` to facilitate quick and simple plugin testing. This PR also sets the `silence_root_warning` flag to avoid bundler printing out alarming looking warning messages when `sudo` is used. This warning message was concerning for users - it would be printed out during normal operation of `bin/logstash-plugin install/update/remove` when run under `sudo`, which is the expected mode of operation when logstash is installed to run as a service via rpm/deb packages. This PR also updates the vagrant based integration tests to ensure that Logstash still runs after plugin update/install/remove operations, fixes up some regular expressions that would cause test failures, and removes some dead code from tests. ## Release notes * Updated Bundler to latest version * Ensured that `Gemfile.lock` are appropriately frozen * Added new developer-only flag to facilitate local plugin development to allow unfrozen lockfile in a development environment
62 lines
2.8 KiB
Ruby
62 lines
2.8 KiB
Ruby
# Licensed to Elasticsearch B.V. under one or more contributor
|
|
# license agreements. See the NOTICE file distributed with
|
|
# this work for additional information regarding copyright
|
|
# ownership. Elasticsearch B.V. licenses this file to you under
|
|
# the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing,
|
|
# software distributed under the License is distributed on an
|
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
# KIND, either express or implied. See the License for the
|
|
# specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
require "pluginmanager/bundler/logstash_uninstall"
|
|
require "pluginmanager/x_pack_interceptor.rb"
|
|
require "pluginmanager/command"
|
|
|
|
class LogStash::PluginManager::Remove < LogStash::PluginManager::Command
|
|
parameter "PLUGIN", "plugin name"
|
|
|
|
def execute
|
|
signal_error("File #{LogStash::Environment::GEMFILE_PATH} does not exist or is not writable, aborting") unless File.writable?(LogStash::Environment::GEMFILE_PATH)
|
|
|
|
##
|
|
# Need to setup the bundler status to enable uninstall of plugins
|
|
# installed as local_gems, otherwise gem:specification is not
|
|
# finding the plugins
|
|
##
|
|
LogStash::Bundler.setup!({:without => [:build, :development]})
|
|
|
|
if LogStash::PluginManager::ALIASES.has_key?(plugin)
|
|
unless LogStash::PluginManager.installed_plugin?(plugin, gemfile)
|
|
aliased_plugin = LogStash::PluginManager::ALIASES[plugin]
|
|
puts "Cannot remove the alias #{plugin}, which is an alias for #{aliased_plugin}; if you wish to remove it, you must remove the aliased plugin instead."
|
|
return
|
|
end
|
|
end
|
|
|
|
# If a user is attempting to uninstall X-Pack, present helpful output to guide
|
|
# them toward the OSS-only distribution of Logstash
|
|
LogStash::PluginManager::XPackInterceptor::Remove.intercept!(plugin)
|
|
|
|
# if the plugin is provided by an integration plugin. abort.
|
|
if integration_plugin = LogStash::PluginManager.which_integration_plugin_provides(plugin, gemfile)
|
|
signal_error("This plugin is already provided by '#{integration_plugin.name}' so it can't be removed individually")
|
|
end
|
|
|
|
# make sure this is an installed plugin and present in Gemfile.
|
|
# it is not possible to uninstall a dependency not listed in the Gemfile, for example a dependent codec
|
|
signal_error("This plugin has not been previously installed") unless LogStash::PluginManager.installed_plugin?(plugin, gemfile)
|
|
|
|
exit(1) unless ::Bundler::LogstashUninstall.uninstall!(plugin)
|
|
LogStash::Bundler.genericize_platform
|
|
remove_unused_locally_installed_gems!
|
|
rescue => exception
|
|
report_exception("Operation aborted, cannot remove plugin", exception)
|
|
end
|
|
end
|