rumm 0.0.7 → 0.0.8

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d4c541a5485a1fc48e6b6f9a2efec275f377224f
4
- data.tar.gz: cd6249b3b7ce104d8e698b470c87d27bf7224c3c
3
+ metadata.gz: 12cfc97168e61a161d41b9a84ba34d62ad0836f4
4
+ data.tar.gz: f7189d9d10836a91da7c756cdcc5f3e6ef852e12
5
5
  SHA512:
6
- metadata.gz: 7c0640eefd94a7de4f88eb1e78185f02b85dfdd9bb029ec5ea0a3e11cef123cf4d9584a92cb1405580f5e4578f36dc6ffd3c28b214771716a156cfc4adc7423e
7
- data.tar.gz: 72ac3a12543615cfa36717ebd538c8b4f0d9106794f1e891de5358ea1e6d73bce6cb84beefe122fd16d52b622d48ba3195758faeaac3a94b5c90babe4609ecb9
6
+ metadata.gz: 8ea79b0bfbdb737fe5874eb9f99f9b4d86ef407924b61d9064e4a4c0153731e004ba7ce026ad92f73d5e59c17e1842e7bdd06bc23a1413889936cc230e695478
7
+ data.tar.gz: 8bf6ca13962f82508a0f21b3a92086571fb5d49ffec7fe7ee3aaa646006fa957ee984c4e39b375a0c3cc1f47a1430d1b0edc9fdc1ba9633fd88b2b02f56566e3
data/Gemfile CHANGED
@@ -9,3 +9,4 @@ gem "rspec-given"
9
9
  gem "aruba"
10
10
  gem "vcr"
11
11
  gem "popen4"
12
+ gem "pry"
@@ -27,6 +27,6 @@ class LoadbalancersController < MVCLI::Controller
27
27
  private
28
28
 
29
29
  def balancer
30
- index.find {|s| s.name == params[:id]} or fail Fog::Erors::NotFound
30
+ index.find {|s| s.name == params[:id]} or fail Fog::Errors::NotFound, "no load balancer named #{params[:id]}"
31
31
  end
32
32
  end
@@ -9,10 +9,10 @@ class Loadbalancers::CreateForm < MVCLI::Form
9
9
 
10
10
  input :protocol, String, default: 'HTTP', decode: :upcase
11
11
 
12
- input :virtual_ips, [String], default: ['PUBLIC']
12
+ input :virtual_ips, [String], default: [Map(type: 'PUBLIC')], decode: ->(s) {Map(type: s.upcase)}
13
13
 
14
14
  input :nodes, [Node], required: true do
15
- input :address, IPAddr, required: true, decode: ->(s) {IPAddr.new s}
15
+ input :address, String, required: true, decode: ->(s) { URI('').hostname = s }
16
16
  input :port, Integer, default: 80, decode: ->(s) {Integer s}
17
17
  input :type, String, default: 'PRIMARY', decode: :upcase
18
18
  input :condition, String, default: 'ENABLED', decode: :upcase
@@ -24,14 +24,7 @@ class Loadbalancers::CreateForm < MVCLI::Form
24
24
 
25
25
  validates(:port, "port must be between 0 and 65,535") {|port| port >=0 && port < 65535}
26
26
 
27
- validates(:nodes, "at least one node must be enabled") { |nodes|
27
+ validates(:nodes, "at least one node must be enabled", each: false) { |nodes|
28
28
  nodes.any? {|n| n.condition == 'ENABLED'}
29
29
  }
30
-
31
- output do |form|
32
- form.attributes.merge attrs = {
33
- virtual_ips: form.virtual_ips.map {|t| Map(type: t)},
34
- nodes: form.nodes.map(&:attributes)
35
- }
36
- end
37
30
  end
@@ -1,3 +1,3 @@
1
1
  module Rumm
2
- VERSION = "0.0.7"
2
+ VERSION = "0.0.8"
3
3
  end
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.required_ruby_version = ">= 1.9.3"
22
22
 
23
- spec.add_dependency "mvcli", "~> 0.0.8"
23
+ spec.add_dependency "mvcli", "~> 0.0.10"
24
24
  spec.add_dependency "fog", "~> 1.12.0"
25
25
  spec.add_dependency "netrc"
26
26
  end
@@ -0,0 +1,186 @@
1
+ require "spec_helper"
2
+
3
+ describe "interactive learning" do
4
+ Given { pending }
5
+
6
+ describe "the basic help system" do
7
+ Given {rumm "help"}
8
+ # Rumm: A tasty tool for hackers and pirates
9
+ # Rumm provides a command line interface for hacking with Rackspace. The
10
+ # only thing you'll need to get started is a username and password from
11
+ # your Rackspace hosting account. e.g.
12
+ #
13
+ # rumm login
14
+ # Username: rsteveson
15
+ # Password: ******
16
+ # logged in as rstevenson, credentials written to ~/.netrc
17
+ #
18
+ # And you're good to go! The following commands are available in your Rumm
19
+ # environment:
20
+ #
21
+ # Authentication:
22
+ # rumm login
23
+ # rumm logout
24
+ #
25
+ # Images:
26
+ # show images
27
+ # rum show images
28
+ #
29
+ # Servers:
30
+ # rumm show servers
31
+ # rumm show server :id
32
+ # rumm create server
33
+ # rumm update server :id
34
+ # rumm destroy server :id
35
+ # rumm ssh :id
36
+
37
+ # Loadbalancers:
38
+ # rumm show loadbalancers
39
+ # rumm show loadbalancer :id
40
+ # rumm create loadbalancer
41
+ # rumm update loadbalancer :id
42
+ # rumm destroy loadbalancer :id
43
+ #
44
+ # Nodes:
45
+ # rumm show nodes on loadbalancer :loadbalancer_id
46
+ # rumm show node :id on loadbalancer :loadbalancer_id
47
+ # rumm create node on loadbalancer :loadbalancer_id
48
+ # rumm update node :id on loadbalancer :loadbalancer_id
49
+ # rumm destroy node :id on loadbalancer :loadbalancer_id
50
+ #
51
+ # Dbinstances:
52
+ # rumm show dbinstances
53
+ # rumm show dbinstance :id
54
+ # rumm create dbinstance
55
+ # rumm update dbinstance :id
56
+ # rumm destroy dbinstance :id
57
+ #
58
+ # Databases:
59
+ # rumm show databases on dbinstance :instance_id
60
+ # rumm show database :id on dbinstance :instance_id
61
+ # rumm create database on dbinstance :instance_id
62
+ # rumm update database :id on dbinstance :instance_id
63
+ # rumm destroy database :id on dbinstance :instance_id
64
+ #
65
+ # Users:
66
+ # rumm show users on dbinstance :dbinstance_id
67
+ # rumm show user :id on dbinstance :dbinstance_id
68
+ # rumm create user on dbinstance :dbinstance_id
69
+ #
70
+ # Containers:
71
+ # rumm show containers
72
+ # rumm show container :id
73
+ # rumm create container
74
+ # rumm update container :id
75
+ # rumm destroy container :id
76
+ #
77
+ # Files:
78
+ # rumm show files in container :container_id
79
+ # rumm show file :id on container :container_id
80
+ # rumm create file :id on container :container_id
81
+ # rumm update file :id on container :container_id
82
+ # rumm destroy file :id on container :container_id
83
+ # rumm download file :id on container :container_id
84
+ #
85
+ # Volumes:
86
+ # rumm show volumes
87
+ # rumm show volume :id
88
+ # rumm create volume
89
+ # rumm update volume :id
90
+ # rumm destroy volume :id
91
+ #
92
+ # Attachments:
93
+ # rumm show attachments on server :server_id
94
+ # rumm attach volume :id to server :server_id
95
+ # rumm detach volume :id from server :server_id
96
+
97
+ #
98
+ #> With aggretate help topic per controller e.g. one listing for all server commands
99
+
100
+ Given {rumm "help servers"}
101
+ # Description:
102
+ # Rumm allows you to manipulate all of your cloud servers from the command line
103
+ # including creating, listing, updating and destroying them.
104
+ # Commands:
105
+ # rumm show servers
106
+ # rumm create server
107
+ # rumm show server ID
108
+ # rumm destroy server ID
109
+
110
+ end
111
+
112
+ describe "the error message when the input is invalid" do
113
+ #> What does error look like when you're missing a required argument?
114
+ #
115
+ # rumm destroy server
116
+ # missing required argument(s) :id
117
+ # run `rumm help destroy server` for a complete listing of options.
118
+ #
119
+ #> What is the error when a server doesn't exist?
120
+ # rumm destroy server does-not-exist
121
+ # no such server named 'does-not-exist'
122
+
123
+ #> what is error when you're missing an option or the option is invalid?
124
+ # e.g.
125
+ # rumm create loadbalancer --node 10.0.0.1:-100 --node xxx:80 --port -1
126
+ # input:
127
+ # --port: `-1` is not a valid port number (port >= 0 && port <= 65535)
128
+ # --nodes[0][port] `-100` is not a valid port number (port >= 0 && port <= 65535)
129
+ # errors:
130
+ # --nodes[1][address]: 'xxx' -> IPAddr::InvalidAddressError: invalid address
131
+
132
+ Given {rumm "create loadbalancer --node 10.0.0.1:999999 --node xxx:80 --port -1"}
133
+ Then {output.contains "--port: '-1' is not a valid port number (port >= 0 && port <= 65535)"}
134
+ Then {output.contains "--node[0][port] '999999' is not a valid port number (port >= 0 && port <= 65535)" }
135
+ Then {output =~ /--node\[1\]\[address\]: 'xxx' -> .+Error: .+/}
136
+ end
137
+
138
+ #> Show all commands
139
+
140
+
141
+ #> there is a partial match but no command
142
+
143
+ # rumm show
144
+ # no command found for 'rum show'. Possible matches are
145
+ # rumm show servers
146
+ # rumm show server :id
147
+ # rumm show dbinstances
148
+ # ...
149
+
150
+ #> show a single action / command>
151
+ describe "help for a specific command" do
152
+ Given {rumm "help create server"}
153
+
154
+ # Usage:
155
+ # rumm create server [--name STRING] [--image-id STRING] [--flavor-id STRING]
156
+ #
157
+ # Options:
158
+ # -n, --name STRING # Name to give the new server
159
+ # -i, --image-id STRING # use this VM image
160
+ # -f, --flavor-id STRING # create with the specified flavor
161
+ #
162
+ # Description:
163
+ # creates a new next-generation rackspace cloud server. If you do not
164
+ # specify a name, then one will be provided for you. The name can be
165
+ # to identify this server for other commands.
166
+ #
167
+ # Examples:
168
+ # rumm create server
169
+ # rumm create server --name rumm-example-server
170
+ # rumm create server --image-id 9922a7c7-5a42-4a56-bc6a-93f857ae2346 --flavor-id 3
171
+
172
+ Given { rumm "help show server" }
173
+
174
+ # Usage:
175
+ # rumm show server ID
176
+ #
177
+ # Arguments:
178
+ # ID: STRING # Name of the server to show
179
+ #
180
+ # Description:
181
+ # Looks up the server named ID and returns its details including ipaddress
182
+ # etc.
183
+ #
184
+
185
+ end
186
+ end
@@ -3,10 +3,15 @@ require "vcr"
3
3
  require "aruba/api"
4
4
  require "rspec-given"
5
5
 
6
- module Rumm::WillType
6
+ module Rumm::SpecHelper
7
7
  def will_type(string)
8
8
  Aruba::InProcess.main_class.input << _ensure_newline(string)
9
9
  end
10
+
11
+ def rumm(command)
12
+ run_interactive "rumm #{command}"
13
+ stop_process @interactive
14
+ end
10
15
  end
11
16
 
12
17
  RSpec.configure do |config|
@@ -14,7 +19,7 @@ RSpec.configure do |config|
14
19
  config.include Aruba::Api, :example_group => {
15
20
  :file_path => /spec\/features/
16
21
  }
17
- config.include Rumm::WillType
22
+ config.include Rumm::SpecHelper
18
23
 
19
24
  config.before(:each) do
20
25
  @__aruba_original_paths = (ENV['PATH'] || '').split(File::PATH_SEPARATOR)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rumm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Charles Lowell
@@ -29,7 +29,7 @@ cert_chain:
29
29
  UgImJlChAzCoDP9zi9tdm6jAr7ttF25R9PPYr11ILb7dYe3qUzlNlM6zJx/nb31b
30
30
  IhdyRVup4qLcqYSTPsm6u7VA
31
31
  -----END CERTIFICATE-----
32
- date: 2013-07-01 00:00:00.000000000 Z
32
+ date: 2013-07-10 00:00:00.000000000 Z
33
33
  dependencies:
34
34
  - !ruby/object:Gem::Dependency
35
35
  name: mvcli
@@ -37,14 +37,14 @@ dependencies:
37
37
  requirements:
38
38
  - - ~>
39
39
  - !ruby/object:Gem::Version
40
- version: 0.0.8
40
+ version: 0.0.10
41
41
  type: :runtime
42
42
  prerelease: false
43
43
  version_requirements: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ~>
46
46
  - !ruby/object:Gem::Version
47
- version: 0.0.8
47
+ version: 0.0.10
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: fog
50
50
  requirement: !ruby/object:Gem::Requirement
@@ -166,6 +166,7 @@ files:
166
166
  - lib/rumm.rb
167
167
  - lib/rumm/version.rb
168
168
  - rumm.gemspec
169
+ - spec/features/help_spec.rb
169
170
  - spec/features/login_spec.rb
170
171
  - spec/features/servers_spec.rb
171
172
  - spec/fixtures/cassettes/create-server.yml
@@ -200,6 +201,7 @@ signing_key:
200
201
  specification_version: 4
201
202
  summary: CLI and API for managing Rackspace infrastructure
202
203
  test_files:
204
+ - spec/features/help_spec.rb
203
205
  - spec/features/login_spec.rb
204
206
  - spec/features/servers_spec.rb
205
207
  - spec/fixtures/cassettes/create-server.yml