Бродяга запускает плагин раньше всего остального

#ruby #plugins #vagrant

#рубин #Плагины #бродяга

Вопрос:

Мы создаем плагин для аутентификации для нашего внутреннего использования. Мы хотим использовать плагин для аутентификации. Плагин устанавливает флажки в среде, и если флажков там нет, он будет аутентифицироваться в artifactory. В противном случае он пропустит аутентификацию. Нам нужно запустить плагин до того, как vagrant начнет загружать коробки. Однако я перепробовал все крючки один за другим. Мне нужно позвонить по этому номеру, прежде чем vagrant загрузит базовые изображения.

Плагин:

  • В конфигурации я получаю список ящиков для загрузки, чтобы я мог сравнить их с коробками, уже находящимися в среде
  • В плагине я сначала вызываю настройку с помощью крючков действий. (Я перепробовал все крючки )
  • В действии настройки я вызываю envset и вызываю действие аутентификации.

Однако я не могу запустить действие аутентификации до того, как vagrant начнет загружать файлы, и оно завершится неудачей, так как маркер аутентификации не извлекается. Я знаю, что вызывается набор ENV (я прокомментировал, что строка вызывается ниже) Но строка, в которой я вызываю действие аутентификации, не вызывается.

плагин.rb

 module VagrantPlugins  module Authenticate  class Plugin lt; Vagrant.plugin("2")  # Require a particular version of Vagrant  Vagrant.require_version("gt;= 1.5")   name "authenticate"  description lt;lt;-DESC  Automatically pops up authentication prompt for artifactory access  DESC    [:environment_plugins_loaded, :environment_load, :environment_unload, :machine_action_boot, :machine_action_config_validate, :machine_action_destroy, :machine_action_halt, :machine_action_package, :machine_action_provision, :machine_action_read_state, :machine_action_reload, :machine_action_resume, :machine_action_run_command, :machine_action_ssh, :machine_action_suspend, :machine_action_sync_folders, :machine_action_up].each do |action|  action_hook(:authenticate_provision, action) do |hook|  hook.after(Vagrant::Action::Builtin::ConfigValidate, Action::Base.setup)  end  end     config(:authenticate) do  require_relative "config"  Config  end  end  end end  

настройка.rb

 module VagrantPlugins  module Authenticate  module Action  class Base  # Cleanup any shared folders before destroying the VM.   # loading the datafile from disk.  def self.setup  Vagrant::Action::Builder.new.tap do |b| #This line of code gets called  b.use Vagrant::Action::Builtin::EnvSet, authenticate: Env.new #This line does not get called  b.use Action::Authenticate   end  end  

аутентификация.rb

 module VagrantPlugins  module Authenticate  module Action  class Authenticate lt; Base  def call(env) #Never reaches this point  puts env[:machine].config.authenticate.to_hash[:enabled]   unless env[:machine].config.authenticate.to_hash[:enabled]  @logger.info "Authenticate disabled, skipping"  return @app.call(env)  end ...  

В файле vagrant Файл VagrantFile :

 $vagrant_server_base_url = lt;Internal_addressgt; Vagrant.configure("2") do |config|   config.vagrant.plugins = ["vagrant-none-communicator", "vagrant-proxyconf", "vagrant-host-shell", "vagrant-authenticate"]   config.proxy.http = lt;proxy_addressgt;  config.proxy.https = lt;proxy_addressgt;  config.authenticate.enabled=true   config.vm.define "client" do |client|  client.vm.box = $client  client.vm.box_url = $vagrant_repo_url   $client   ".box"  client.vm.box_check_update = $box_check_update  client.vm.hostname = "client"  

Комментарии:

1. У вас уже есть триггер after в вашем плагине, так почему бы не добавить .before метод триггера authenticate для :up команды?