#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
команды?