Class: VagrantPlugins::Rightscale::Provisioner

Inherits:
Object
  • Object
show all
Defined in:
lib/vagrant-rightscale/provisioner.rb

Instance Method Summary collapse

Instance Method Details

#cleanupObject



79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/vagrant-rightscale/provisioner.rb', line 79

def cleanup
  # TODO: clean up server in RightScale dashboard
  #         begin
  #           if @server
  #             # server terminate
  #             @rightscale.terminate_server(@server)
  #             # server delete
  #             @rightscale.destroy_server(@server)
  #           end
  #         rescue Exception => e
  #           @machine.env.ui.warn "WARNING: unable to cleanup server."
  #           @machine.env.ui.warn "Message: #{e.message}"
  #         end
end

#configure(root_config) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/vagrant-rightscale/provisioner.rb', line 5

def configure(root_config)

  require "right_api_provision"

  if config.operational_scripts
    raise RightScaleError, "ERROR: operational_scripts must be an array of strings" unless config.operational_scripts.kind_of?(Array)
  end

  # initialize rightscale provisioner
  @rightscale =
    RightApiProvision::Provisioner.new(config.email,
                                       config.password,
                                       config.,
                                       config.api_url)

  # provision a RightScale managed server from a ServerTemplate
  @rightscale.provision(config.server_name,
                        config.servertemplate,
                        config.cloud_name,
                        config.deployment_name,
                        config.server_inputs,
                        config.multi_cloud_image_name,
                        nil, # ssh_key_id not yet supported
                        nil) # secgroup_id not yet supported

end

#provisionObject



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/vagrant-rightscale/provisioner.rb', line 32

def provision
  if config.cloud_name.nil? || config.cloud_name == Config::VAGRANT_CLOUD_NAME

    # check for rightimage
    begin
      @machine.communicate.sudo("which rs_connect") # TODO: figure out how to test for failure
    rescue Exception => e
      rightimage = @machine.communicate.sudo("ls /root/.rightscale")
      if rightimage == 0
        @machine.env.ui.info "RightScale RightImage detected. Waiting for rightlink package to install..."
        sleep(10)
        retry
      end
      msg = "ERROR: This vagrant box does not have RightLink properly installed. Cannot continue."
      raise RightScaleError, msg
    end

    # run rs_connect
    enroll_cmd = "sudo rs_connect --attach #{@rightscale.connection_url} --force"
    @machine.env.ui.info "Running #{enroll_cmd}"
    @machine.env.ui.info @machine.communicate.sudo(enroll_cmd)

    if config.operational_scripts
      # wait for operational
      begin
        @rightscale.wait_for_state("operational", 30)
      rescue Exception => e
        raise RightScaleError, "#{e.message}"
      end

      # run operational scripts
      @machine.env.ui.info "Running operational recipes..." if config.operational_scripts && ! config.operational_scripts.empty?
      config.operational_scripts.each do |script_name|

        # run recipe or rightscript
        exec = script_name.include?("::") ? "rs_run_recipe" : "rs_run_rightscript"
        cmd = "sudo #{exec} --name #{script_name}"
        @machine.env.ui.info "  #{cmd}"
        @machine.env.ui.info @machine.communicate.sudo(cmd)
      end
    end

  else
    @machine.env.ui.info "RightScale provisioning server on config.cloud_name cloud..."
  end
end