Class: VagrantPlugins::Rackspace::Config

Inherits:
Object
  • Object
show all
Defined in:
lib/vagrant-rackspace/config.rb

Constant Summary collapse

SERVICE_NET_ID =

Default Rackspace Cloud Network IDs

'11111111-1111-1111-1111-111111111111'
PUBLIC_NET_ID =
'00000000-0000-0000-0000-000000000000'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConfig

Returns a new instance of Config.



99
100
101
102
103
104
105
106
107
108
109
110
111
112
# File 'lib/vagrant-rackspace/config.rb', line 99

def initialize
  @api_key  = UNSET_VALUE
  @rackspace_region = UNSET_VALUE
  @rackspace_compute_url = UNSET_VALUE
  @rackspace_auth_url = UNSET_VALUE
  @flavor   = UNSET_VALUE
  @image    = UNSET_VALUE
  @public_key_path = UNSET_VALUE
  @rackconnect = UNSET_VALUE
  @server_name = UNSET_VALUE
  @username = UNSET_VALUE
  @disk_config = UNSET_VALUE
  @networks = []
end

Instance Attribute Details

#api_keyString

The API key to access RackSpace.

Returns:

  • (String)


10
11
12
# File 'lib/vagrant-rackspace/config.rb', line 10

def api_key
  @api_key
end

#disk_configObject

The disk configuration value.

* AUTO -   The server is built with a single partition the size of the target flavor disk. The file system is automatically adjusted to fit the entire partition.
           This keeps things simple and automated. AUTO is valid only for images and servers with a single partition that use the EXT3 file system.
           This is the default setting for applicable Rackspace base images.

* MANUAL - The server is built using whatever partition scheme and file system is in the source image. If the target flavor disk is larger,
           the remaining disk space is left unpartitioned. This enables images to have non-EXT3 file systems, multiple partitions,
           and so on, and enables you to manage the disk configuration.

This defaults to MANUAL



88
89
90
# File 'lib/vagrant-rackspace/config.rb', line 88

def disk_config
  @disk_config
end

#flavorObject

The flavor of server to launch, either the ID or name. This can also be a regular expression to partially match a name.



45
46
47
# File 'lib/vagrant-rackspace/config.rb', line 45

def flavor
  @flavor
end

#imageObject

The name or ID of the image to use. This can also be a regular expression to partially match a name.



49
50
51
# File 'lib/vagrant-rackspace/config.rb', line 49

def image
  @image
end

#key_nameString

Alternately, if a keypair were already uploaded to Rackspace, the key name could be provided.

Returns:

  • (String)


61
62
63
# File 'lib/vagrant-rackspace/config.rb', line 61

def key_name
  @key_name
end

#networksArray

Cloud Networks to attach to the server

Returns:

  • (Array)


93
94
95
# File 'lib/vagrant-rackspace/config.rb', line 93

def networks
  @networks
end

#public_key_pathString

The path to the public key to set up on the remote server for SSH. This should match the private key configured with ‘config.ssh.private_key_path`.

Returns:

  • (String)


55
56
57
# File 'lib/vagrant-rackspace/config.rb', line 55

def public_key_path
  @public_key_path
end

#rackconnectBoolean

The option that indicates RackConnect usage or not.

Returns:

  • (Boolean)


66
67
68
# File 'lib/vagrant-rackspace/config.rb', line 66

def rackconnect
  @rackconnect
end

#rackspace_auth_urlObject

Note:

Currently, you must authenticate against the UK authenication endpoint to access the London Data center. Hopefully this method makes the experience more seemless for users of the UK cloud.



134
135
136
137
138
139
140
# File 'lib/vagrant-rackspace/config.rb', line 134

def rackspace_auth_url
  if (@rackspace_auth_url.nil? || @rackspace_auth_url == UNSET_VALUE) && lon_region?
    Fog::Rackspace::UK_AUTH_ENDPOINT
  else
    @rackspace_auth_url
  end
end

#rackspace_compute_urlObject

The compute_url to access RackSpace. If nil, it will default to DFW. (formerly know as ‘endpoint’)

expected to be a string url - ‘dfw.servers.api.rackspacecloud.com/v2’ ‘ord.servers.api.rackspacecloud.com/v2’ ‘lon.servers.api.rackspacecloud.com/v2

alternatively, can use constants if you require ‘fog/rackspace’ in your Vagrantfile Fog::Compute::RackspaceV2::DFW_ENDPOINT Fog::Compute::RackspaceV2::ORD_ENDPOINT Fog::Compute::RackspaceV2::LON_ENDPOINT

Users should preference the rackspace_region setting over rackspace_compute_url



36
37
38
# File 'lib/vagrant-rackspace/config.rb', line 36

def rackspace_compute_url
  @rackspace_compute_url
end

#rackspace_regionObject

The region to access RackSpace. If nil, it will default to DFW. (formerly know as ‘endpoint’)

expected to be a symbol - :dfw (default), :ord, :lon

Users should preference the rackspace_region setting over rackspace_compute_url



19
20
21
# File 'lib/vagrant-rackspace/config.rb', line 19

def rackspace_region
  @rackspace_region
end

#server_nameObject

The name of the server. This defaults to the name of the machine defined by Vagrant (via ‘config.vm.define`), but can be overriden here.



71
72
73
# File 'lib/vagrant-rackspace/config.rb', line 71

def server_name
  @server_name
end

#usernameString

The username to access RackSpace.

Returns:

  • (String)


76
77
78
# File 'lib/vagrant-rackspace/config.rb', line 76

def username
  @username
end

Instance Method Details

#finalize!Object



114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/vagrant-rackspace/config.rb', line 114

def finalize!
  @api_key  = nil if @api_key == UNSET_VALUE
  @rackspace_region = nil if @rackspace_region == UNSET_VALUE
  @rackspace_compute_url = nil if @rackspace_compute_url == UNSET_VALUE
  @rackspace_auth_url = nil if @rackspace_auth_url == UNSET_VALUE
  @flavor   = /512MB/ if @flavor == UNSET_VALUE
  @image    = /Ubuntu/ if @image == UNSET_VALUE
  @rackconnect = nil if @rackconnect == UNSET_VALUE
  @server_name = nil if @server_name == UNSET_VALUE
  @username = nil if @username == UNSET_VALUE
  @disk_config = nil if @disk_config == UNSET_VALUE
  @networks = nil if @networks.empty?

  if @public_key_path == UNSET_VALUE
    @public_key_path = Vagrant.source_root.join("keys/vagrant.pub")
  end
end

#network(net_id, options = {}) ⇒ Object



142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
# File 'lib/vagrant-rackspace/config.rb', line 142

def network(net_id, options={})
  # Eventually, this should accept options for network configuration,
  # primarily the IP address, but at the time of writing these
  # options are unsupported by Cloud Networks.
  options = {:attached => true}.merge(options)

  # Add the default Public and ServiceNet networks
  if @networks.empty?
    @networks = [PUBLIC_NET_ID, SERVICE_NET_ID]
  end

  net_id = SERVICE_NET_ID if net_id == :service_net

  if options[:attached]
    @networks << net_id unless @networks.include? net_id
  else
    @networks.delete net_id
  end
end

#validate(machine) ⇒ Object



162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
# File 'lib/vagrant-rackspace/config.rb', line 162

def validate(machine)
  errors = _detected_errors

  errors << I18n.t("vagrant_rackspace.config.api_key_required") if !@api_key
  errors << I18n.t("vagrant_rackspace.config.username_required") if !@username
  errors << I18n.t("one of vagrant.rackspace.config.key_name or vagrant.rackspace.config.public_key_path required") if !@key_name && !@public_key_path

  {
    :rackspace_compute_url => @rackspace_compute_url,
    :rackspace_auth_url => @rackspace_auth_url
  }.each_pair do |key, value|
    errors << I18n.t("vagrant_rackspace.config.invalid_uri", :key => key, :uri => value) unless value.nil? || valid_uri?(value)
  end

  if !@key_name
    public_key_path = File.expand_path(@public_key_path, machine.env.root_path)
    if !File.file?(public_key_path)
      errors << I18n.t("vagrant_rackspace.config.public_key_not_found")
    end
  end

  { "RackSpace Provider" => errors }
end