class VagrantPlugins::Registration::Action::Register
This registers the guest if the guest plugin supports it
Constants
- MAX_REGISTRATION_ATTEMPTS
Public Class Methods
new(app, _)
click to toggle source
# File lib/vagrant-registration/action/register.rb, line 10 def initialize(app, _) @app = app @logger = Log4r::Logger.new('vagrant_registration::action::register') end
Public Instance Methods
call(env)
click to toggle source
# File lib/vagrant-registration/action/register.rb, line 15 def call(env) ui = env[:ui] # Configuration from Vagrantfile config = env[:machine].config.registration machine = env[:machine] guest = env[:machine].guest if should_register?(machine, ui) ui.info I18n.t('registration.action.register.registration_info') check_configuration_options(machine, ui) if credentials_provided? machine guest.capability(:registration_register, ui) else @logger.debug I18n.t('registration.action.register.no_credentials') # Offer to register ATM or skip register_now = ui.ask I18n.t('registration.action.register.prompt') process_registration(guest, machine, ui, config) if register_now == 'y' || register_now.empty? end end @logger.debug(I18n.t('registration.action.register.skip_due_config')) if config.skip # Call next middleware in chain @app.call(env) end
Private Instance Methods
capabilities_provided?(guest)
click to toggle source
Check if registration capabilities are available
# File lib/vagrant-registration/action/register.rb, line 80 def capabilities_provided?(guest) if guest.capability?(:registration_register) && guest.capability?(:registration_manager_installed) && guest.capability?(:registration_registered?) true else @logger.debug I18n.t('registration.action.register.skip_missing_guest_capability') false end end
check_configuration_options(machine, ui)
click to toggle source
Issues warning if an unsupported option is used and displays a list of supported options
# File lib/vagrant-registration/action/register.rb, line 55 def check_configuration_options(machine, ui) manager = machine.guest.capability(:registration_manager).to_s available_options = machine.guest.capability(:registration_options) options = machine.config.registration.conf.each_pair.map { |pair| pair[0] } if unsupported_options_provided?(manager, available_options, options, ui) ui.warn(I18n.t('registration.action.register.options_support_warning', manager: manager, options: available_options.join(', '))) end end
credentials_provided?(machine)
click to toggle source
Check if required credentials has been provided in Vagrantfile
Checks if at least one of the registration options is able to register.
# File lib/vagrant-registration/action/register.rb, line 123 def credentials_provided?(machine) provided = true credentials_required(machine).each do |registration_option| provided = true registration_option.each do |value| provided = false unless machine.config.registration.send value end break if provided end provided ? true : false end
credentials_required(machine)
click to toggle source
Fetch required credentials for selected manager
# File lib/vagrant-registration/action/register.rb, line 102 def credentials_required(machine) if machine.guest.capability?(:registration_credentials) machine.guest.capability(:registration_credentials) else [] end end
manager_installed?(guest, ui)
click to toggle source
Check if selected registration manager is installed
# File lib/vagrant-registration/action/register.rb, line 92 def manager_installed?(guest, ui) if guest.capability(:registration_manager_installed, ui) true else @logger.debug I18n.t('registration.action.manager_not_found') false end end
process_registration(guest, machine, ui, config)
click to toggle source
# File lib/vagrant-registration/action/register.rb, line 148 def process_registration(guest, machine, ui, config) attempt_count = 1 MAX_REGISTRATION_ATTEMPTS.times do config = register_on_screen(machine, ui) begin guest.capability(:registration_register, ui) ui.info I18n.t('registration.action.register.registration_success') # break out of loop on successful registration break rescue StandardError => e if attempt_count == MAX_REGISTRATION_ATTEMPTS ui.error e.message exit 126 else # reset registration config reset_registration_config(machine) attempt_count += 1 ui.info I18n.t('registration.action.register.registration_retry', attempt_count: attempt_count, max_attempt: MAX_REGISTRATION_ATTEMPTS) end end end config end
register_on_screen(machine, ui)
click to toggle source
Ask user on required credentials and return them, skip options that are provided by Vagrantfile
# File lib/vagrant-registration/action/register.rb, line 137 def register_on_screen(machine, ui) credentials_required(machine)[0].each do |option| unless machine.config.registration.send(option) echo = !(secrets(machine).include? option) response = ui.ask("#{option}: ", echo: echo) machine.config.registration.send("#{option}=".to_sym, response) end end machine.config.registration end
reset_registration_config(machine)
click to toggle source
# File lib/vagrant-registration/action/register.rb, line 176 def reset_registration_config(machine) credentials_required(machine)[0].each do |option| machine.config.registration.send("#{option}=".to_sym, nil) end end
secrets(machine)
click to toggle source
Secret options for selected manager
# File lib/vagrant-registration/action/register.rb, line 111 def secrets(machine) if machine.guest.capability?(:registration_secrets) machine.guest.capability(:registration_secrets) else [] end end
should_register?(machine, ui)
click to toggle source
Shall we register the box?
# File lib/vagrant-registration/action/register.rb, line 46 def should_register?(machine, ui) !machine.config.registration.skip && capabilities_provided?(machine.guest) && manager_installed?(machine.guest, ui) && !machine.guest.capability(:registration_registered?) end
unsupported_options_provided?(manager, available_options, options, ui)
click to toggle source
Return true if there are any unsupported options
# File lib/vagrant-registration/action/register.rb, line 67 def unsupported_options_provided?(manager, available_options, options, ui) warned = false options.each do |option| unless available_options.include? option ui.warn(I18n.t('registration.action.register.unsupported_option', manager: manager, option: option)) warned = true end end warned end