class VagrantPlugins::SecuredCloud::Action::Reboot
This can be used with “Call” built-in to check if the machine is created and branch in the middleware.
Public Class Methods
new(app, env)
click to toggle source
# File lib/secured-cloud-vagrant/actions/reboot.rb, line 10 def initialize(app, env) @app = app @machine = env[:machine] @logger = Log4r::Logger.new('vagrant::secured_cloud::action::reboot_vm') end
Public Instance Methods
call(env)
click to toggle source
# File lib/secured-cloud-vagrant/actions/reboot.rb, line 16 def call(env) @logger.debug("Rebooting the VM ...") env[:ui].info(I18n.t("secured_cloud_vagrant.info.reloading")) vm_resource_url = @machine.id if !vm_resource_url.nil? && !vm_resource_url.empty? begin # Create a Secured Cloud Connection instance to connect tot he SecuredCloud API authInfo = @machine.provider_config.auth sc_connection = SecuredCloudConnection.new(authInfo.url, authInfo.applicationKey, authInfo.sharedSecret) # Send request to reboot VM response = SecuredCloudRestClient.rebootVM(sc_connection, vm_resource_url) # Monitor the transaction. if (response[0] == "202") #Task successful. taskResource = response[1] taskStatus = SecuredCloudRestClient::getTaskStatus(sc_connection, taskResource) @logger.info("Task Status:\n#{taskStatus.get_details()}") while ((taskStatus.instance_variable_get(:@requestStateEnum) == nil) || (taskStatus.instance_variable_get(:@requestStateEnum) == "OPEN")) do sleep(20) taskStatus = SecuredCloudRestClient.getTaskStatus(sc_connection, taskResource) env[:ui].info(I18n.t('secured_cloud_vagrant.info.task_status', :percentage => taskStatus.get_percentage_completed, :task_desc => taskStatus.get_latest_task_description)) @logger.info("Task Status:\n#{taskStatus.get_details()}") end if(taskStatus.get_result. nil?) #Task unsuccessful. @logger.debug("VM Reboot failed with the following error:\n#{taskStatus.get_error_code}: #{taskStatus.get_error_message}") error_code = (taskStatus.get_error_code.nil?) ? "" : "#{taskStatus.get_error_code} " error_message = (taskStatus.get_error_message.nil?) ? I18n.t('secured_cloud_vagrant.errors.internal_server_error') : error_code + taskStatus.get_error_message env[:ui].error(I18n.t("secured_cloud_vagrant.errors.rebooting_vm", :vm_name => env[:vm_name], :error_message => error_message)) else # Task successful @logger.debug("VM '#{env[:machine].id}' has been rebooted") env[:ui].info(I18n.t("secured_cloud_vagrant.info.success.reboot_vm", :vm_name => env[:vm_name])) end else #Task unsuccessful. @logger.debug("VM Reboot failed with the following error:\n#{response}") error_message = (response[2].nil?) ? I18n.t('secured_cloud_vagrant.errors.internal_server_error') : response[2] env[:ui].error(I18n.t("secured_cloud_vagrant.errors.rebooting_vm", :vm_name => env[:vm_name], :error_message => error_message)) end rescue Errno::ETIMEDOUT env[:ui].error(I18n.t("secured_cloud_vagrant.errors.request_timed_out", :request => "reboot VM '#{env[:vm_name]}'")) rescue Exception => e env[:ui].error(I18n.t("secured_cloud_vagrant.errors.generic_error", :error_message => e.message)) end else @logger.debug("No VM found to be rebooted") end @app.call(env) end