vagrant-rackspace 0.1.6 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +6 -14
- data/CHANGELOG.md +13 -0
- data/Gemfile +2 -1
- data/README.md +51 -4
- data/RELEASE.md +18 -0
- data/Vagrantfile +5 -0
- data/Vagrantfile.multi +19 -0
- data/features/vagrant-rackspace.feature +1 -1
- data/lib/vagrant-rackspace/action/create_image.rb +53 -0
- data/lib/vagrant-rackspace/action/create_server.rb +2 -1
- data/lib/vagrant-rackspace/action/list_flavors.rb +20 -0
- data/lib/vagrant-rackspace/action/list_images.rb +20 -0
- data/lib/vagrant-rackspace/action/sync_folders.rb +11 -0
- data/lib/vagrant-rackspace/action.rb +38 -0
- data/lib/vagrant-rackspace/command/create_image.rb +21 -0
- data/lib/vagrant-rackspace/command/flavors.rb +21 -0
- data/lib/vagrant-rackspace/command/images.rb +59 -0
- data/lib/vagrant-rackspace/command/list_images.rb +21 -0
- data/lib/vagrant-rackspace/command/root.rb +65 -0
- data/lib/vagrant-rackspace/config.rb +17 -0
- data/lib/vagrant-rackspace/plugin.rb +5 -0
- data/lib/vagrant-rackspace/version.rb +1 -1
- data/locales/en.yml +6 -0
- data/spec/spec_helper.rb +20 -0
- data/spec/vagrant-rackspace/actions/list_flavors_spec.rb +49 -0
- data/spec/vagrant-rackspace/actions/list_images_spec.rb +49 -0
- data/spec/vagrant-rackspace/config_spec.rb +9 -11
- data/vagrant-rackspace.gemspec +2 -2
- metadata +35 -19
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
ZWEzZDlmNGNjOTMzOGQ0ZDJkN2E0M2E0MzEzZWM1YmUyNjBkZjIwZGRmMGVj
|
10
|
-
NjQzYTQ5YWEzNmZjNjEwYTNiNWUyZWMzZmM3NmJlY2RkZmI1MmI4MDIxN2U0
|
11
|
-
ODgxZjlhNWFiZDEwMzcyYjdjYjYzZjYyYzdjNmUzOGQ2Y2E1YzE=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
ZjdiYjcwYjQ0OGE0Mjg4YjYyYTk3M2JkNGY4MGY4NGIxMzNiY2JkNzE3MWVi
|
14
|
-
NGM5OTM2MzYzZDRmMzcyNzYzMWU3YTdhMjIyNmM4ZmI0ODA4ZDZjOTY4ZTUy
|
15
|
-
MzRjODhmMTE5YTVhNjhkMDM1MmE3ZjJlMDJiM2QzZDI3ZThlZjU=
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 7fe21c6407d830b5385525127b4a603868d1633e
|
4
|
+
data.tar.gz: 844c3ce48da303288e07f98908f139d15883c98b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 01154897155ab913685c7521b06dd44019e35cb0437ab267089e611ef36376dab5fccb94c96bcc61b5c498e1c3d990228f51913fdaed13f7bba8c738122db9c3
|
7
|
+
data.tar.gz: 094f97a4d92ade0439411eb3d8e944f1401c2fee5925dc355066e9b71807cfda563e41df2b8ee10be058a126ffe453665d094019951260b03a12a29cc2f17620
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
+
# 0.1.7 (March 13, 2014)
|
2
|
+
|
3
|
+
FEATURES:
|
4
|
+
|
5
|
+
- Adds commands to list available images and flavors [GH-73]
|
6
|
+
- Adds support for creating images from running VMs [GH-74]
|
7
|
+
|
8
|
+
IMPROVEMENTS:
|
9
|
+
|
10
|
+
- Adds support for rsync --include directives [GH-56]
|
11
|
+
- Adds ability to add server metadata [GH-72]
|
12
|
+
- Cleans up chef node and client from chef server [GH-67]
|
13
|
+
|
1
14
|
# 0.1.6 (January 8, 2014)
|
2
15
|
|
3
16
|
BUG FIXES:
|
data/Gemfile
CHANGED
@@ -3,12 +3,13 @@ source 'https://rubygems.org'
|
|
3
3
|
gemspec
|
4
4
|
|
5
5
|
gem "appraisal", "1.0.0.beta2"
|
6
|
-
gem "vagrant", :git => "git://github.com/mitchellh/vagrant.git"
|
6
|
+
gem "vagrant", :git => "git://github.com/mitchellh/vagrant.git", :tag => "v1.4.3"
|
7
7
|
|
8
8
|
group :development do
|
9
9
|
# We depend on Vagrant for development, but we don't add it as a
|
10
10
|
# gem dependency because we expect to be installed within the
|
11
11
|
# Vagrant environment itself using `vagrant plugin`.
|
12
12
|
gem 'coveralls', require: false
|
13
|
+
gem 'pry'
|
13
14
|
end
|
14
15
|
|
data/README.md
CHANGED
@@ -36,7 +36,7 @@ The default configuration of the RHEL family of Linux distributions requires a t
|
|
36
36
|
> sudo: sorry, you must have a tty to run sudo
|
37
37
|
|
38
38
|
The best way to take deal with this error is to upgrade to Vagrant 1.4 or later, and enable:
|
39
|
-
```
|
39
|
+
```ruby
|
40
40
|
config.ssh.pty = true
|
41
41
|
```
|
42
42
|
|
@@ -55,15 +55,16 @@ $ vagrant box add dummy https://github.com/mitchellh/vagrant-rackspace/raw/maste
|
|
55
55
|
And then make a Vagrantfile that looks like the following, filling in
|
56
56
|
your information where necessary.
|
57
57
|
|
58
|
-
```
|
58
|
+
```ruby
|
59
59
|
Vagrant.configure("2") do |config|
|
60
60
|
config.vm.box = "dummy"
|
61
61
|
|
62
62
|
config.vm.provider :rackspace do |rs|
|
63
63
|
rs.username = "YOUR USERNAME"
|
64
64
|
rs.api_key = "YOUR API KEY"
|
65
|
-
rs.flavor = /
|
65
|
+
rs.flavor = /1 GB Performance/
|
66
66
|
rs.image = /Ubuntu/
|
67
|
+
rs.metadata = {"key" => "value"} # optional
|
67
68
|
end
|
68
69
|
end
|
69
70
|
```
|
@@ -78,6 +79,27 @@ Note that normally a lot of this boilerplate is encoded within the box
|
|
78
79
|
file, but the box file used for the quick start, the "dummy" box, has
|
79
80
|
no preconfigured defaults.
|
80
81
|
|
82
|
+
## Custom Commands
|
83
|
+
|
84
|
+
The plugin includes several Rackspace-specific vagrant commands. You can get the
|
85
|
+
list of available commands with `vagrant rackspace -h`.
|
86
|
+
|
87
|
+
If you want to know what images or flavors are available for a machine, you can use:
|
88
|
+
|
89
|
+
```
|
90
|
+
$ vagrant rackspace images
|
91
|
+
$ vagrant rackspace flavors
|
92
|
+
```
|
93
|
+
|
94
|
+
In a multi-machine Vagrantfile you can also query for a single machine:
|
95
|
+
```
|
96
|
+
$ vagrant rackspace images <name>
|
97
|
+
$ vagrant rackspace flavors <name>
|
98
|
+
```
|
99
|
+
|
100
|
+
These command will connect to Rackspace using the settings associated with the machine,
|
101
|
+
and query the region to get the list of available images or flavors.
|
102
|
+
|
81
103
|
## Box Format
|
82
104
|
|
83
105
|
Every provider in Vagrant must introduce a custom box format. This
|
@@ -96,7 +118,7 @@ This provider exposes quite a few provider-specific configuration options:
|
|
96
118
|
* `api_key` - The API key for accessing Rackspace.
|
97
119
|
* `flavor` - The server flavor to boot. This can be a string matching
|
98
120
|
the exact ID or name of the server, or this can be a regular expression
|
99
|
-
to partially match some server flavor.
|
121
|
+
to partially match some server flavor. Flavors are listed [here](#flavors).
|
100
122
|
* `image` - The server image to boot. This can be a string matching the
|
101
123
|
exact ID or name of the image, or this can be a regular expression to
|
102
124
|
partially match some image.
|
@@ -116,6 +138,8 @@ vagrant will authenticate against the UK authentication endpoint.
|
|
116
138
|
can be overridden with this.
|
117
139
|
* `username` - The username with which to access Rackspace.
|
118
140
|
* `disk_config` - Disk Configuration 'AUTO' or 'MANUAL'
|
141
|
+
* `metadata` - A set of key pair values that will be passed to the instance
|
142
|
+
for configuration.
|
119
143
|
|
120
144
|
These can be set like typical provider-specific configuration:
|
121
145
|
|
@@ -130,6 +154,29 @@ Vagrant.configure("2") do |config|
|
|
130
154
|
end
|
131
155
|
```
|
132
156
|
|
157
|
+
### Flavors
|
158
|
+
|
159
|
+
As of February 2, 2014, the available flavor names are:
|
160
|
+
|
161
|
+
* 512MB Standard Instance
|
162
|
+
* 1GB Standard Instance
|
163
|
+
* 2GB Standard Instance
|
164
|
+
* 4GB Standard Instance
|
165
|
+
* 8GB Standard Instance
|
166
|
+
* 15GB Standard Instance
|
167
|
+
* 30GB Standard Instance
|
168
|
+
* 1 GB Performance
|
169
|
+
* 2 GB Performance
|
170
|
+
* 4 GB Performance
|
171
|
+
* 8 GB Performance
|
172
|
+
* 120 GB Performance
|
173
|
+
* 15 GB Performance
|
174
|
+
* 30 GB Performance
|
175
|
+
* 60 GB Performance
|
176
|
+
* 90 GB Performance
|
177
|
+
|
178
|
+
Please note that the standard instances are deprecated in favor of our performance flavors.
|
179
|
+
|
133
180
|
## Networks
|
134
181
|
|
135
182
|
Networking features in the form of `config.vm.network` are not
|
data/RELEASE.md
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
# Release process
|
2
|
+
|
3
|
+
This is vagrant-rackspace's current release process, documented so people know what is
|
4
|
+
currently done.
|
5
|
+
|
6
|
+
## Prepare the release
|
7
|
+
|
8
|
+
* Update the version in "lib/vagrant-rackspace/version.rb"
|
9
|
+
* Update the version in CHANGELOG.md
|
10
|
+
* Use "rake release". This will make sure to tag that commit and push it RubyGems.
|
11
|
+
* Create new [github release](https://github.com/mitchellh/vagrant-rackspace/releases)
|
12
|
+
* Update the version again in both files to a dev version for working again.
|
13
|
+
|
14
|
+
The CHANGELOG.md should be maintained in a similar format to Vagrant:
|
15
|
+
|
16
|
+
https://github.com/mitchellh/vagrant/blob/master/CHANGELOG.md
|
17
|
+
|
18
|
+
|
data/Vagrantfile
CHANGED
@@ -15,6 +15,11 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
|
|
15
15
|
config.vm.provider :rackspace do |rs|
|
16
16
|
rs.username = ENV['RAX_USERNAME']
|
17
17
|
rs.api_key = ENV['RAX_API_KEY']
|
18
|
+
rs.flavor = /1 GB Performance/
|
19
|
+
rs.image = /Ubuntu/
|
20
|
+
rs.rackspace_region = :iad
|
21
|
+
|
22
|
+
# rs.rsync_include 'PATTERN' # per man page for rsync
|
18
23
|
end
|
19
24
|
# The url from where the 'config.vm.box' box will be fetched if it
|
20
25
|
# doesn't already exist on the user's system.
|
data/Vagrantfile.multi
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# -*- mode: ruby -*-
|
2
|
+
# vi: set ft=ruby :
|
3
|
+
|
4
|
+
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
|
5
|
+
VAGRANTFILE_API_VERSION = "2"
|
6
|
+
|
7
|
+
REGIONS = [:dfw, :ord, :syd]
|
8
|
+
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
|
9
|
+
Vagrant.require_plugin "vagrant-rackspace"
|
10
|
+
|
11
|
+
REGIONS.each do |region|
|
12
|
+
config.vm.define region do |machine|
|
13
|
+
machine.vm.provider :rackspace do |rs|
|
14
|
+
rs.username = ENV['RAX_USERNAME']
|
15
|
+
rs.api_key = ENV['RAX_API_KEY']
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -57,7 +57,7 @@ Scenario: Create a single server (rackspace_compute_url)
|
|
57
57
|
rs.server_name = 'vagrant-single-server'
|
58
58
|
rs.username = ENV['RAX_USERNAME']
|
59
59
|
rs.api_key = ENV['RAX_API_KEY']
|
60
|
-
rs.rackspace_compute_url = "https://#{ENV['RAX_REGION'].downcase}.servers.api.rackspacecloud.com/v2"
|
60
|
+
rs.rackspace_compute_url = "https://#{ENV['RAX_REGION'].downcase}.servers.api.rackspacecloud.com/v2/#{ENV['RAX_TENANT_ID']}"
|
61
61
|
rs.flavor = /1 GB Performance/
|
62
62
|
rs.image = /Ubuntu/
|
63
63
|
rs.public_key_path = "~/.ssh/id_rsa.pub" unless Fog.mock?
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require "fog/rackspace"
|
2
|
+
require "log4r"
|
3
|
+
|
4
|
+
require 'vagrant/util/retryable'
|
5
|
+
|
6
|
+
module VagrantPlugins
|
7
|
+
module Rackspace
|
8
|
+
module Action
|
9
|
+
# Creates an Image
|
10
|
+
class CreateImage
|
11
|
+
include Vagrant::Util::Retryable
|
12
|
+
|
13
|
+
attr_reader :env
|
14
|
+
|
15
|
+
def initialize(app, env)
|
16
|
+
@app, @env = app, env
|
17
|
+
end
|
18
|
+
|
19
|
+
def call(env)
|
20
|
+
env[:ui].info(I18n.t("vagrant_rackspace.creating_image"))
|
21
|
+
|
22
|
+
server = env[:rackspace_compute].servers.get(env[:machine].id)
|
23
|
+
|
24
|
+
config = env[:machine].provider_config
|
25
|
+
image_name = config.server_name || env[:machine].name
|
26
|
+
|
27
|
+
image = server.create_image(image_name)
|
28
|
+
|
29
|
+
retryable(:on => Fog::Errors::TimeoutError, :tries => 200) do
|
30
|
+
# If we're interrupted don't worry about waiting
|
31
|
+
next if env[:interrupted]
|
32
|
+
|
33
|
+
env[:ui].clear_line
|
34
|
+
env[:ui].report_progress(image.progress, 100, false)
|
35
|
+
|
36
|
+
begin
|
37
|
+
image.wait_for(5) { ready? }
|
38
|
+
rescue RuntimeError => e
|
39
|
+
# If we don't have an error about a state transition, then
|
40
|
+
# we just move on.
|
41
|
+
raise if e.message !~ /should have transitioned/
|
42
|
+
raise Errors::CreateBadState, :state => server.state
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
env[:ui].info(I18n.t("vagrant_rackspace.image_ready"))
|
47
|
+
|
48
|
+
@app.call(env)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module Rackspace
|
3
|
+
module Action
|
4
|
+
class ListFlavors
|
5
|
+
def initialize(app, env)
|
6
|
+
@app = app
|
7
|
+
end
|
8
|
+
|
9
|
+
def call(env)
|
10
|
+
compute_service = env[:rackspace_compute]
|
11
|
+
env[:ui].info ('%-36s %s' % ['Flavor ID', 'Flavor Name'])
|
12
|
+
compute_service.flavors.sort_by(&:id).each do |flavor|
|
13
|
+
env[:ui].info ('%-36s %s' % [flavor.id, flavor.name])
|
14
|
+
end
|
15
|
+
@app.call(env)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module Rackspace
|
3
|
+
module Action
|
4
|
+
class ListImages
|
5
|
+
def initialize(app, env)
|
6
|
+
@app = app
|
7
|
+
end
|
8
|
+
|
9
|
+
def call(env)
|
10
|
+
compute_service = env[:rackspace_compute]
|
11
|
+
env[:ui].info ('%-36s %s' % ['Image ID', 'Image Name'])
|
12
|
+
compute_service.images.sort_by(&:name).each do |image|
|
13
|
+
env[:ui].info ('%-36s %s' % [image.id.to_s, image.name])
|
14
|
+
end
|
15
|
+
@app.call(env)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -19,6 +19,9 @@ module VagrantPlugins
|
|
19
19
|
|
20
20
|
ssh_info = env[:machine].ssh_info
|
21
21
|
|
22
|
+
config = env[:machine].provider_config
|
23
|
+
rsync_includes = config.rsync_includes.to_a
|
24
|
+
|
22
25
|
env[:machine].config.vm.synced_folders.each do |id, data|
|
23
26
|
hostpath = File.expand_path(data[:hostpath], env[:root_path])
|
24
27
|
guestpath = data[:guestpath]
|
@@ -41,6 +44,12 @@ module VagrantPlugins
|
|
41
44
|
env[:machine].communicate.sudo(
|
42
45
|
"chown -R #{ssh_info[:username]} '#{guestpath}'")
|
43
46
|
|
47
|
+
# Generate rsync include commands
|
48
|
+
includes = rsync_includes.each_with_object([]) { |incl, incls|
|
49
|
+
incls << "--include"
|
50
|
+
incls << incl
|
51
|
+
}
|
52
|
+
|
44
53
|
# Rsync over to the guest path using the SSH info. add
|
45
54
|
# .hg/ to exclude list as that isn't covered in
|
46
55
|
# --cvs-exclude
|
@@ -48,9 +57,11 @@ module VagrantPlugins
|
|
48
57
|
"rsync", "--verbose", "--archive", "-z",
|
49
58
|
"--cvs-exclude",
|
50
59
|
"--exclude", ".hg/",
|
60
|
+
*includes,
|
51
61
|
"-e", "ssh -p #{ssh_info[:port]} -o StrictHostKeyChecking=no #{ssh_key_options(ssh_info)}",
|
52
62
|
hostpath,
|
53
63
|
"#{ssh_info[:username]}@#{ssh_info[:host]}:#{guestpath}"]
|
64
|
+
command.compact!
|
54
65
|
|
55
66
|
# during rsync, ignore files specified in .hgignore and
|
56
67
|
# .gitignore traditional .gitignore or .hgignore files
|
@@ -20,6 +20,7 @@ module VagrantPlugins
|
|
20
20
|
|
21
21
|
b2.use ConnectRackspace
|
22
22
|
b2.use DeleteServer
|
23
|
+
b2.use ProvisionerCleanup if defined?(ProvisionerCleanup)
|
23
24
|
end
|
24
25
|
end
|
25
26
|
end
|
@@ -107,6 +108,40 @@ module VagrantPlugins
|
|
107
108
|
end
|
108
109
|
end
|
109
110
|
|
111
|
+
def self.action_create_image
|
112
|
+
Vagrant::Action::Builder.new.tap do |b|
|
113
|
+
b.use ConfigValidate
|
114
|
+
b.use Call, IsCreated do |env, b2|
|
115
|
+
created = env[:result]
|
116
|
+
|
117
|
+
if !created
|
118
|
+
b2.use MessageNotCreated
|
119
|
+
next
|
120
|
+
end
|
121
|
+
|
122
|
+
b2.use ConnectRackspace
|
123
|
+
b2.use CreateImage
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
# Extended actions
|
129
|
+
def self.action_list_images
|
130
|
+
Vagrant::Action::Builder.new.tap do |b|
|
131
|
+
# b.use ConfigValidate # is this per machine?
|
132
|
+
b.use ConnectRackspace
|
133
|
+
b.use ListImages
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
def self.action_list_flavors
|
138
|
+
Vagrant::Action::Builder.new.tap do |b|
|
139
|
+
# b.use ConfigValidate # is this per machine?
|
140
|
+
b.use ConnectRackspace
|
141
|
+
b.use ListFlavors
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
110
145
|
# The autoload farm
|
111
146
|
action_root = Pathname.new(File.expand_path("../action", __FILE__))
|
112
147
|
autoload :ConnectRackspace, action_root.join("connect_rackspace")
|
@@ -118,6 +153,9 @@ module VagrantPlugins
|
|
118
153
|
autoload :ReadSSHInfo, action_root.join("read_ssh_info")
|
119
154
|
autoload :ReadState, action_root.join("read_state")
|
120
155
|
autoload :SyncFolders, action_root.join("sync_folders")
|
156
|
+
autoload :CreateImage, action_root.join("create_image")
|
157
|
+
autoload :ListImages, action_root.join("list_images")
|
158
|
+
autoload :ListFlavors, action_root.join("list_flavors")
|
121
159
|
end
|
122
160
|
end
|
123
161
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module Rackspace
|
3
|
+
module Command
|
4
|
+
class CreateImage < Vagrant.plugin("2", :command)
|
5
|
+
def execute
|
6
|
+
options = {}
|
7
|
+
opts = OptionParser.new do |o|
|
8
|
+
o.banner = "Usage: vagrant rackspace images create [options]"
|
9
|
+
end
|
10
|
+
|
11
|
+
argv = parse_options(opts)
|
12
|
+
return if !argv
|
13
|
+
|
14
|
+
with_target_vms(argv, :provider => :rackspace) do |machine|
|
15
|
+
machine.action('create_image')
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module Rackspace
|
3
|
+
module Command
|
4
|
+
class Flavors < Vagrant.plugin("2", :command)
|
5
|
+
def execute
|
6
|
+
options = {}
|
7
|
+
opts = OptionParser.new do |o|
|
8
|
+
o.banner = "Usage: vagrant rackspace flavors [options]"
|
9
|
+
end
|
10
|
+
|
11
|
+
argv = parse_options(opts)
|
12
|
+
return if !argv
|
13
|
+
|
14
|
+
with_target_vms(argv, :provider => :rackspace) do |machine|
|
15
|
+
machine.action('list_flavors')
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module Rackspace
|
3
|
+
module Command
|
4
|
+
class Images < Vagrant.plugin("2", :command)
|
5
|
+
def initialize(argv, env)
|
6
|
+
@main_args, @sub_command, @sub_args = split_main_and_subcommand(argv)
|
7
|
+
|
8
|
+
@subcommands = Vagrant::Registry.new
|
9
|
+
@subcommands.register(:list) do
|
10
|
+
require File.expand_path("../list_images", __FILE__)
|
11
|
+
ListImages
|
12
|
+
end
|
13
|
+
@subcommands.register(:create) do
|
14
|
+
require File.expand_path("../create_image", __FILE__)
|
15
|
+
CreateImage
|
16
|
+
end
|
17
|
+
|
18
|
+
super(argv, env)
|
19
|
+
end
|
20
|
+
|
21
|
+
def execute
|
22
|
+
if @main_args.include?("-h") || @main_args.include?("--help")
|
23
|
+
# Print the help for all the rackspace commands.
|
24
|
+
return help
|
25
|
+
end
|
26
|
+
|
27
|
+
command_class = @subcommands.get(@sub_command.to_sym) if @sub_command
|
28
|
+
return help if !command_class || !@sub_command
|
29
|
+
@logger.debug("Invoking command class: #{command_class} #{@sub_args.inspect}")
|
30
|
+
|
31
|
+
# Initialize and execute the command class
|
32
|
+
command_class.new(@sub_args, @env).execute
|
33
|
+
end
|
34
|
+
|
35
|
+
def help
|
36
|
+
opts = OptionParser.new do |opts|
|
37
|
+
opts.banner = "Usage: vagrant rackspace images <subcommand> [<args>]"
|
38
|
+
opts.separator ""
|
39
|
+
opts.separator "Available subcommands:"
|
40
|
+
|
41
|
+
# Add the available subcommands as separators in order to print them
|
42
|
+
# out as well.
|
43
|
+
keys = []
|
44
|
+
@subcommands.each { |key, value| keys << key.to_s }
|
45
|
+
|
46
|
+
keys.sort.each do |key|
|
47
|
+
opts.separator " #{key}"
|
48
|
+
end
|
49
|
+
|
50
|
+
opts.separator ""
|
51
|
+
opts.separator "For help on any individual subcommand run `vagrant rackspace images <subcommand> -h`"
|
52
|
+
end
|
53
|
+
|
54
|
+
@env.ui.info(opts.help, :prefix => false)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module Rackspace
|
3
|
+
module Command
|
4
|
+
class ListImages < Vagrant.plugin("2", :command)
|
5
|
+
def execute
|
6
|
+
options = {}
|
7
|
+
opts = OptionParser.new do |o|
|
8
|
+
o.banner = "Usage: vagrant rackspace images list [options]"
|
9
|
+
end
|
10
|
+
|
11
|
+
argv = parse_options(opts)
|
12
|
+
return if !argv
|
13
|
+
|
14
|
+
with_target_vms(argv, :provider => :rackspace) do |machine|
|
15
|
+
machine.action('list_images')
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'vagrant-rackspace/action'
|
2
|
+
|
3
|
+
module VagrantPlugins
|
4
|
+
module Rackspace
|
5
|
+
module Command
|
6
|
+
class Root < Vagrant.plugin("2", :command)
|
7
|
+
def self.synopsis
|
8
|
+
"query Rackspace for available images or flavors"
|
9
|
+
end
|
10
|
+
|
11
|
+
def initialize(argv, env)
|
12
|
+
@main_args, @sub_command, @sub_args = split_main_and_subcommand(argv)
|
13
|
+
|
14
|
+
@subcommands = Vagrant::Registry.new
|
15
|
+
@subcommands.register(:images) do
|
16
|
+
require File.expand_path("../images", __FILE__)
|
17
|
+
Images
|
18
|
+
end
|
19
|
+
@subcommands.register(:flavors) do
|
20
|
+
require File.expand_path("../flavors", __FILE__)
|
21
|
+
Flavors
|
22
|
+
end
|
23
|
+
|
24
|
+
super(argv, env)
|
25
|
+
end
|
26
|
+
|
27
|
+
def execute
|
28
|
+
if @main_args.include?("-h") || @main_args.include?("--help")
|
29
|
+
# Print the help for all the rackspace commands.
|
30
|
+
return help
|
31
|
+
end
|
32
|
+
|
33
|
+
command_class = @subcommands.get(@sub_command.to_sym) if @sub_command
|
34
|
+
return help if !command_class || !@sub_command
|
35
|
+
@logger.debug("Invoking command class: #{command_class} #{@sub_args.inspect}")
|
36
|
+
|
37
|
+
# Initialize and execute the command class
|
38
|
+
command_class.new(@sub_args, @env).execute
|
39
|
+
end
|
40
|
+
|
41
|
+
def help
|
42
|
+
opts = OptionParser.new do |opts|
|
43
|
+
opts.banner = "Usage: vagrant rackspace <subcommand> [<args>]"
|
44
|
+
opts.separator ""
|
45
|
+
opts.separator "Available subcommands:"
|
46
|
+
|
47
|
+
# Add the available subcommands as separators in order to print them
|
48
|
+
# out as well.
|
49
|
+
keys = []
|
50
|
+
@subcommands.each { |key, value| keys << key.to_s }
|
51
|
+
|
52
|
+
keys.sort.each do |key|
|
53
|
+
opts.separator " #{key}"
|
54
|
+
end
|
55
|
+
|
56
|
+
opts.separator ""
|
57
|
+
opts.separator "For help on any individual subcommand run `vagrant rackspace <subcommand> -h`"
|
58
|
+
end
|
59
|
+
|
60
|
+
@env.ui.info(opts.help, :prefix => false)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -60,6 +60,11 @@ module VagrantPlugins
|
|
60
60
|
# @return [String]
|
61
61
|
attr_accessor :key_name
|
62
62
|
|
63
|
+
# A Hash of metadata that will be sent to the instance for configuration
|
64
|
+
#
|
65
|
+
# @return [Hash]
|
66
|
+
attr_accessor :metadata
|
67
|
+
|
63
68
|
# The option that indicates RackConnect usage or not.
|
64
69
|
#
|
65
70
|
# @return [Boolean]
|
@@ -92,6 +97,11 @@ module VagrantPlugins
|
|
92
97
|
# @return [Array]
|
93
98
|
attr_accessor :networks
|
94
99
|
|
100
|
+
# Opt files/directories in to the rsync operation performed by this provider
|
101
|
+
#
|
102
|
+
# @return [Array]
|
103
|
+
attr_accessor :rsync_includes
|
104
|
+
|
95
105
|
# Default Rackspace Cloud Network IDs
|
96
106
|
SERVICE_NET_ID = '11111111-1111-1111-1111-111111111111'
|
97
107
|
PUBLIC_NET_ID = '00000000-0000-0000-0000-000000000000'
|
@@ -109,6 +119,7 @@ module VagrantPlugins
|
|
109
119
|
@username = UNSET_VALUE
|
110
120
|
@disk_config = UNSET_VALUE
|
111
121
|
@networks = []
|
122
|
+
@rsync_includes = []
|
112
123
|
end
|
113
124
|
|
114
125
|
def finalize!
|
@@ -120,9 +131,11 @@ module VagrantPlugins
|
|
120
131
|
@image = /Ubuntu/ if @image == UNSET_VALUE
|
121
132
|
@rackconnect = nil if @rackconnect == UNSET_VALUE
|
122
133
|
@server_name = nil if @server_name == UNSET_VALUE
|
134
|
+
@metadata = nil if @metadata == UNSET_VALUE
|
123
135
|
@username = nil if @username == UNSET_VALUE
|
124
136
|
@disk_config = nil if @disk_config == UNSET_VALUE
|
125
137
|
@networks = nil if @networks.empty?
|
138
|
+
@rsync_includes = nil if @rsync_includes.empty?
|
126
139
|
|
127
140
|
if @public_key_path == UNSET_VALUE
|
128
141
|
@public_key_path = Vagrant.source_root.join("keys/vagrant.pub")
|
@@ -159,6 +172,10 @@ module VagrantPlugins
|
|
159
172
|
end
|
160
173
|
end
|
161
174
|
|
175
|
+
def rsync_include(inc)
|
176
|
+
@rsync_includes << inc
|
177
|
+
end
|
178
|
+
|
162
179
|
def validate(machine)
|
163
180
|
errors = _detected_errors
|
164
181
|
|
data/locales/en.yml
CHANGED
@@ -2,12 +2,16 @@ en:
|
|
2
2
|
vagrant_rackspace:
|
3
3
|
already_created: |-
|
4
4
|
The server is already created.
|
5
|
+
creating_image: |-
|
6
|
+
Creating image...
|
5
7
|
deleting_server: |-
|
6
8
|
Deleting server...
|
7
9
|
finding_flavor: |-
|
8
10
|
Finding flavor for server...
|
9
11
|
finding_image: |-
|
10
12
|
Finding image for server...
|
13
|
+
image_ready: |-
|
14
|
+
Image created
|
11
15
|
launching_server: |-
|
12
16
|
Launching a server with the following settings...
|
13
17
|
not_created: |-
|
@@ -43,6 +47,8 @@ en:
|
|
43
47
|
A username is required.
|
44
48
|
invalid_uri: |-
|
45
49
|
The value for %{key} is not a valid URI: %{uri}
|
50
|
+
metadata_must_be_hash: |-
|
51
|
+
Metadata must be a hash.
|
46
52
|
|
47
53
|
errors:
|
48
54
|
create_bad_state: |-
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
if ENV['COVERAGE'] != 'false'
|
2
|
+
require 'simplecov'
|
3
|
+
require 'coveralls'
|
4
|
+
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
|
5
|
+
SimpleCov::Formatter::HTMLFormatter,
|
6
|
+
Coveralls::SimpleCov::Formatter
|
7
|
+
]
|
8
|
+
SimpleCov.start
|
9
|
+
|
10
|
+
# Normally classes are lazily loaded, so any class without a test
|
11
|
+
# is missing from the report. This ensures they show up so we can
|
12
|
+
# see uncovered methods.
|
13
|
+
require 'vagrant'
|
14
|
+
Dir["lib/**/*.rb"].each do|file|
|
15
|
+
require_string = file.match(/lib\/(.*)\.rb/)[1]
|
16
|
+
require require_string
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
require 'fog'
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require "vagrant-rackspace/action/list_flavors"
|
3
|
+
|
4
|
+
describe VagrantPlugins::Rackspace::Action::ListFlavors do
|
5
|
+
let(:app) { lambda { |env| } }
|
6
|
+
let(:ui) { Vagrant::UI::Silent.new }
|
7
|
+
let(:flavors) {
|
8
|
+
Fog.mock!
|
9
|
+
Fog::Compute.new({
|
10
|
+
:provider => :rackspace,
|
11
|
+
:rackspace_region => :dfw,
|
12
|
+
:rackspace_api_key => 'anything',
|
13
|
+
:rackspace_username => 'anything',
|
14
|
+
}).flavors
|
15
|
+
}
|
16
|
+
let(:compute_connection) { double('fog connection') }
|
17
|
+
let(:env) do
|
18
|
+
{
|
19
|
+
:rackspace_compute => compute_connection,
|
20
|
+
:ui => ui
|
21
|
+
}
|
22
|
+
end
|
23
|
+
|
24
|
+
subject(:action) { described_class.new(app, env) }
|
25
|
+
|
26
|
+
before do
|
27
|
+
allow(compute_connection).to receive(:flavors).and_return flavors
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'get flavors from Fog' do
|
31
|
+
expect(compute_connection).to receive(:flavors).and_return flavors
|
32
|
+
action.call(env)
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'writes a sorted, formatted flavor table to Vagrant::UI' do
|
36
|
+
header_line = '%-36s %s' % ['Flavor ID', 'Flavor Name']
|
37
|
+
expect(ui).to receive(:info).with(header_line)
|
38
|
+
flavors.sort_by(&:id).each do |flavor|
|
39
|
+
formatted_line = '%-36s %s' % [flavor.id, flavor.name]
|
40
|
+
expect(ui).to receive(:info).with formatted_line
|
41
|
+
end
|
42
|
+
action.call(env)
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'continues the middleware chain' do
|
46
|
+
expect(app).to receive(:call).with(env)
|
47
|
+
action.call(env)
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require "vagrant-rackspace/action/list_images"
|
3
|
+
|
4
|
+
describe VagrantPlugins::Rackspace::Action::ListImages do
|
5
|
+
let(:app) { lambda { |env| } }
|
6
|
+
let(:ui) { Vagrant::UI::Silent.new }
|
7
|
+
let(:images) {
|
8
|
+
Fog.mock!
|
9
|
+
Fog::Compute.new({
|
10
|
+
:provider => :rackspace,
|
11
|
+
:rackspace_region => :dfw,
|
12
|
+
:rackspace_api_key => 'anything',
|
13
|
+
:rackspace_username => 'anything',
|
14
|
+
}).images
|
15
|
+
}
|
16
|
+
let(:compute_connection) { double('fog connection') }
|
17
|
+
let(:env) do
|
18
|
+
{
|
19
|
+
:rackspace_compute => compute_connection,
|
20
|
+
:ui => ui
|
21
|
+
}
|
22
|
+
end
|
23
|
+
|
24
|
+
subject(:action) { described_class.new(app, env) }
|
25
|
+
|
26
|
+
before do
|
27
|
+
allow(compute_connection).to receive(:images).and_return images
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'get images from Fog' do
|
31
|
+
expect(compute_connection).to receive(:images).and_return images
|
32
|
+
action.call(env)
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'writes a sorted, formatted image table to Vagrant::UI' do
|
36
|
+
header_line = '%-36s %s' % ['Image ID', 'Image Name']
|
37
|
+
expect(ui).to receive(:info).with(header_line)
|
38
|
+
images.sort_by(&:name).each do |image|
|
39
|
+
formatted_line = '%-36s %s' % [image.id.to_s, image.name]
|
40
|
+
expect(ui).to receive(:info).with formatted_line
|
41
|
+
end
|
42
|
+
action.call(env)
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'continues the middleware chain' do
|
46
|
+
expect(app).to receive(:call).with(env)
|
47
|
+
action.call(env)
|
48
|
+
end
|
49
|
+
end
|
@@ -1,15 +1,5 @@
|
|
1
|
-
|
2
|
-
require 'simplecov'
|
3
|
-
require 'coveralls'
|
4
|
-
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
|
5
|
-
SimpleCov::Formatter::HTMLFormatter,
|
6
|
-
Coveralls::SimpleCov::Formatter
|
7
|
-
]
|
8
|
-
SimpleCov.start
|
9
|
-
end
|
10
|
-
|
1
|
+
require 'spec_helper'
|
11
2
|
require "vagrant-rackspace/config"
|
12
|
-
require 'fog'
|
13
3
|
|
14
4
|
describe VagrantPlugins::Rackspace::Config do
|
15
5
|
describe "defaults" do
|
@@ -33,6 +23,7 @@ describe VagrantPlugins::Rackspace::Config do
|
|
33
23
|
its(:username) { should be_nil }
|
34
24
|
its(:disk_config) { should be_nil }
|
35
25
|
its(:networks) { should be_nil }
|
26
|
+
its(:rsync_includes) { should be_nil }
|
36
27
|
end
|
37
28
|
|
38
29
|
describe "overriding defaults" do
|
@@ -62,6 +53,13 @@ describe VagrantPlugins::Rackspace::Config do
|
|
62
53
|
subject.send(:networks).should include(VagrantPlugins::Rackspace::Config::PUBLIC_NET_ID)
|
63
54
|
subject.send(:networks).should include(VagrantPlugins::Rackspace::Config::SERVICE_NET_ID)
|
64
55
|
end
|
56
|
+
|
57
|
+
it "should not default rsync_includes if overridden" do
|
58
|
+
inc = "core"
|
59
|
+
subject.send(:rsync_include, inc)
|
60
|
+
subject.finalize!
|
61
|
+
subject.send(:rsync_includes).should include(inc)
|
62
|
+
end
|
65
63
|
end
|
66
64
|
|
67
65
|
describe "validation" do
|
data/vagrant-rackspace.gemspec
CHANGED
@@ -15,8 +15,8 @@ Gem::Specification.new do |gem|
|
|
15
15
|
gem.add_runtime_dependency "fog", "~> 1.18"
|
16
16
|
|
17
17
|
gem.add_development_dependency "rake"
|
18
|
-
gem.add_development_dependency "rspec", "~> 2.
|
19
|
-
gem.add_development_dependency "aruba"
|
18
|
+
gem.add_development_dependency "rspec", "~> 2.14.0"
|
19
|
+
gem.add_development_dependency "aruba", "~> 0.5.4"
|
20
20
|
|
21
21
|
gem.files = `git ls-files`.split($/)
|
22
22
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
metadata
CHANGED
@@ -1,71 +1,71 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant-rackspace
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mitchell Hashimoto
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-03-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fog
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.18'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.18'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - ~>
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 2.
|
47
|
+
version: 2.14.0
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - ~>
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 2.
|
54
|
+
version: 2.14.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: aruba
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 0.5.4
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
68
|
+
version: 0.5.4
|
69
69
|
description: Enables Vagrant to manage machines in RackSpace Cloud.
|
70
70
|
email:
|
71
71
|
- mitchell@hashicorp.com
|
@@ -73,15 +73,17 @@ executables: []
|
|
73
73
|
extensions: []
|
74
74
|
extra_rdoc_files: []
|
75
75
|
files:
|
76
|
-
- .gitignore
|
77
|
-
- .travis.yml
|
76
|
+
- ".gitignore"
|
77
|
+
- ".travis.yml"
|
78
78
|
- Appraisals
|
79
79
|
- CHANGELOG.md
|
80
80
|
- Gemfile
|
81
81
|
- LICENSE.txt
|
82
82
|
- README.md
|
83
|
+
- RELEASE.md
|
83
84
|
- Rakefile
|
84
85
|
- Vagrantfile
|
86
|
+
- Vagrantfile.multi
|
85
87
|
- dummy.box
|
86
88
|
- example_box/README.md
|
87
89
|
- example_box/metadata.json
|
@@ -97,20 +99,31 @@ files:
|
|
97
99
|
- lib/vagrant-rackspace.rb
|
98
100
|
- lib/vagrant-rackspace/action.rb
|
99
101
|
- lib/vagrant-rackspace/action/connect_rackspace.rb
|
102
|
+
- lib/vagrant-rackspace/action/create_image.rb
|
100
103
|
- lib/vagrant-rackspace/action/create_server.rb
|
101
104
|
- lib/vagrant-rackspace/action/delete_server.rb
|
102
105
|
- lib/vagrant-rackspace/action/is_created.rb
|
106
|
+
- lib/vagrant-rackspace/action/list_flavors.rb
|
107
|
+
- lib/vagrant-rackspace/action/list_images.rb
|
103
108
|
- lib/vagrant-rackspace/action/message_already_created.rb
|
104
109
|
- lib/vagrant-rackspace/action/message_not_created.rb
|
105
110
|
- lib/vagrant-rackspace/action/read_ssh_info.rb
|
106
111
|
- lib/vagrant-rackspace/action/read_state.rb
|
107
112
|
- lib/vagrant-rackspace/action/sync_folders.rb
|
113
|
+
- lib/vagrant-rackspace/command/create_image.rb
|
114
|
+
- lib/vagrant-rackspace/command/flavors.rb
|
115
|
+
- lib/vagrant-rackspace/command/images.rb
|
116
|
+
- lib/vagrant-rackspace/command/list_images.rb
|
117
|
+
- lib/vagrant-rackspace/command/root.rb
|
108
118
|
- lib/vagrant-rackspace/config.rb
|
109
119
|
- lib/vagrant-rackspace/errors.rb
|
110
120
|
- lib/vagrant-rackspace/plugin.rb
|
111
121
|
- lib/vagrant-rackspace/provider.rb
|
112
122
|
- lib/vagrant-rackspace/version.rb
|
113
123
|
- locales/en.yml
|
124
|
+
- spec/spec_helper.rb
|
125
|
+
- spec/vagrant-rackspace/actions/list_flavors_spec.rb
|
126
|
+
- spec/vagrant-rackspace/actions/list_images_spec.rb
|
114
127
|
- spec/vagrant-rackspace/config_spec.rb
|
115
128
|
- vagrant-rackspace.gemspec
|
116
129
|
homepage: http://www.vagrantup.com
|
@@ -122,17 +135,17 @@ require_paths:
|
|
122
135
|
- lib
|
123
136
|
required_ruby_version: !ruby/object:Gem::Requirement
|
124
137
|
requirements:
|
125
|
-
- -
|
138
|
+
- - ">="
|
126
139
|
- !ruby/object:Gem::Version
|
127
140
|
version: '0'
|
128
141
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
129
142
|
requirements:
|
130
|
-
- -
|
143
|
+
- - ">="
|
131
144
|
- !ruby/object:Gem::Version
|
132
145
|
version: '0'
|
133
146
|
requirements: []
|
134
147
|
rubyforge_project:
|
135
|
-
rubygems_version: 2.0
|
148
|
+
rubygems_version: 2.2.0
|
136
149
|
signing_key:
|
137
150
|
specification_version: 4
|
138
151
|
summary: Enables Vagrant to manage machines in RackSpace Cloud.
|
@@ -143,4 +156,7 @@ test_files:
|
|
143
156
|
- features/support/env.rb
|
144
157
|
- features/support/fog_mock.rb
|
145
158
|
- features/vagrant-rackspace.feature
|
159
|
+
- spec/spec_helper.rb
|
160
|
+
- spec/vagrant-rackspace/actions/list_flavors_spec.rb
|
161
|
+
- spec/vagrant-rackspace/actions/list_images_spec.rb
|
146
162
|
- spec/vagrant-rackspace/config_spec.rb
|