rumm 0.0.3

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.
Files changed (88) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/Gemfile +11 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +46 -0
  6. data/Rakefile +6 -0
  7. data/app.rb +7 -0
  8. data/app/controllers/attachments_controller.rb +39 -0
  9. data/app/controllers/authentication_controller.rb +47 -0
  10. data/app/controllers/containers_controller.rb +32 -0
  11. data/app/controllers/databases_controller.rb +43 -0
  12. data/app/controllers/files_controller.rb +41 -0
  13. data/app/controllers/images_controller.rb +7 -0
  14. data/app/controllers/instances_controller.rb +34 -0
  15. data/app/controllers/loadbalancers_controller.rb +32 -0
  16. data/app/controllers/nodes_controller.rb +45 -0
  17. data/app/controllers/servers_controller.rb +52 -0
  18. data/app/controllers/volumes_controller.rb +35 -0
  19. data/app/forms/loadbalancers/create_form.rb +35 -0
  20. data/app/models/loadbalancers/node.rb +10 -0
  21. data/app/models/node.rb +0 -0
  22. data/app/providers/compute_provider.rb +15 -0
  23. data/app/providers/console_provider.rb +5 -0
  24. data/app/providers/containers_provider.rb +15 -0
  25. data/app/providers/credentials_provider.rb +12 -0
  26. data/app/providers/databases_provider.rb +13 -0
  27. data/app/providers/instance_provider.rb +8 -0
  28. data/app/providers/instances_provider.rb +13 -0
  29. data/app/providers/loadbalancers_provider.rb +13 -0
  30. data/app/providers/naming/adj.txt +20574 -0
  31. data/app/providers/naming/nouns.txt +50277 -0
  32. data/app/providers/naming_provider.rb +106 -0
  33. data/app/providers/nodes_provider.rb +13 -0
  34. data/app/providers/user_provider.rb +23 -0
  35. data/app/providers/volumes_provider.rb +14 -0
  36. data/app/routes.rb +59 -0
  37. data/app/views/attachments/attach.txt.erb +3 -0
  38. data/app/views/attachments/detach.txt.erb +3 -0
  39. data/app/views/attachments/index.txt.erb +7 -0
  40. data/app/views/attachments/show.txt.erb +5 -0
  41. data/app/views/authentication/login.txt.erb +2 -0
  42. data/app/views/authentication/logout.txt.erb +1 -0
  43. data/app/views/containers/create.txt.erb +5 -0
  44. data/app/views/containers/destroy.txt.erb +1 -0
  45. data/app/views/containers/index.txt.erb +7 -0
  46. data/app/views/containers/show.txt.erb +5 -0
  47. data/app/views/databases/create.txt.erb +1 -0
  48. data/app/views/databases/destroy.txt.erb +1 -0
  49. data/app/views/databases/index.txt.erb +8 -0
  50. data/app/views/databases/show.txt.erb +1 -0
  51. data/app/views/files/create.txt.erb +5 -0
  52. data/app/views/files/destroy.txt.erb +1 -0
  53. data/app/views/files/download.txt.erb +3 -0
  54. data/app/views/files/index.txt.erb +7 -0
  55. data/app/views/files/show.txt.erb +5 -0
  56. data/app/views/images/index.txt.erb +3 -0
  57. data/app/views/instances/create.txt.erb +2 -0
  58. data/app/views/instances/destroy.txt.erb +1 -0
  59. data/app/views/instances/index.txt.erb +8 -0
  60. data/app/views/instances/show.txt.erb +1 -0
  61. data/app/views/loadbalancers/create.txt.erb +1 -0
  62. data/app/views/loadbalancers/destroy.txt.erb +1 -0
  63. data/app/views/loadbalancers/index.txt.erb +8 -0
  64. data/app/views/loadbalancers/show.txt.erb +4 -0
  65. data/app/views/nodes/create.txt.erb +5 -0
  66. data/app/views/nodes/destroy.txt.erb +1 -0
  67. data/app/views/nodes/index.txt.erb +4 -0
  68. data/app/views/nodes/show.txt.erb +5 -0
  69. data/app/views/servers/create.txt.erb +2 -0
  70. data/app/views/servers/destroy.txt.erb +1 -0
  71. data/app/views/servers/index.txt.erb +8 -0
  72. data/app/views/servers/show.txt.erb +5 -0
  73. data/app/views/volumes/create.txt.erb +5 -0
  74. data/app/views/volumes/destroy.txt.erb +1 -0
  75. data/app/views/volumes/index.txt.erb +7 -0
  76. data/app/views/volumes/show.txt.erb +5 -0
  77. data/bin/rumm +5 -0
  78. data/lib/rumm.rb +5 -0
  79. data/lib/rumm/version.rb +3 -0
  80. data/rumm.gemspec +24 -0
  81. data/spec/features/login_spec.rb +29 -0
  82. data/spec/features/servers_spec.rb +39 -0
  83. data/spec/fixtures/cassettes/create-server.yml +144 -0
  84. data/spec/fixtures/cassettes/destroy-server.yml +159 -0
  85. data/spec/fixtures/cassettes/show-server.yml +214 -0
  86. data/spec/fixtures/cassettes/show-servers.yml +141 -0
  87. data/spec/spec_helper.rb +51 -0
  88. metadata +203 -0
@@ -0,0 +1,106 @@
1
+ class NamingProvider
2
+
3
+ def value
4
+ self
5
+ end
6
+
7
+ def generate_name adj, noun
8
+ if adj == nil and noun == nil
9
+ get_adj + "-" + get_noun
10
+ else
11
+ get_adj_bound(adj) + "-" + get_noun_bound(noun)
12
+ end
13
+ end
14
+
15
+ private
16
+
17
+ def get_adj
18
+ a = rand(20748)
19
+ counter = 0
20
+ dict = File.new(File.expand_path "../naming/adj.txt", __FILE__)
21
+ dict.each_line do |line|
22
+ if counter == a
23
+ return line.delete("\n")
24
+ end
25
+ counter+=1
26
+ end
27
+ end
28
+
29
+ def get_noun
30
+ a = rand(50432)
31
+ counter = 0
32
+ dict = File.new(File.expand_path "../naming/nouns.txt", __FILE__)
33
+ dict.each_line do |line|
34
+ if counter == a
35
+ return line.delete("\n")
36
+ end
37
+ counter+=1
38
+ end
39
+ end
40
+
41
+ def get_adj_bound letter
42
+ higher = true
43
+ upper = 20748
44
+ lower = 0
45
+ a = 0
46
+ word = ""
47
+ done = false
48
+ until done
49
+ if higher
50
+ lower = a
51
+ else
52
+ upper = a
53
+ end
54
+ a = rand lower..upper
55
+ counter = 0
56
+ dict = File.new(File.expand_path "../naming/adj.txt", __FILE__)
57
+ dict.each_line do |line|
58
+ if counter == a
59
+ word = line.delete("\n")
60
+ break
61
+ end
62
+ counter+=1
63
+ end
64
+ if word[0] == letter
65
+ return word
66
+ elsif word[0] <= letter
67
+ higher = true
68
+ else
69
+ higher = false
70
+ end
71
+ end
72
+ end
73
+
74
+ def get_noun_bound letter
75
+ higher = true
76
+ upper = 50432
77
+ lower = 0
78
+ a = 0
79
+ word = ""
80
+ done = false
81
+ until done
82
+ if higher
83
+ lower = a
84
+ else
85
+ upper = a
86
+ end
87
+ a = rand lower..upper
88
+ counter = 0
89
+ dict = File.new(File.expand_path "../naming/nouns.txt", __FILE__)
90
+ dict.each_line do |line|
91
+ if counter == a
92
+ word = line.delete("\n")
93
+ break
94
+ end
95
+ counter+=1
96
+ end
97
+ if word[0] == letter
98
+ return word
99
+ elsif word[0] <= letter
100
+ higher = true
101
+ else
102
+ higher = false
103
+ end
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,13 @@
1
+ require 'fog'
2
+ class NodesProvider
3
+ requires :credentials
4
+
5
+ def value
6
+ options = {
7
+ :rackspace_username => credentials.username,
8
+ :rackspace_api_key => credentials.api_key,
9
+ :rackspace_region => credentials.rackspace_region
10
+ }
11
+ Fog::Rackspace::LoadBalancers.new(options).nodes
12
+ end
13
+ end
@@ -0,0 +1,23 @@
1
+ require 'io/console'
2
+
3
+ class UserProvider
4
+ requires :command
5
+
6
+ def value
7
+ name = get_name
8
+ password = get_password
9
+ Map(name: name, password: password)
10
+ end
11
+
12
+ private
13
+
14
+ def get_name
15
+ command.output.print "Username: "
16
+ command.input.gets.chomp
17
+ end
18
+
19
+ def get_password
20
+ command.output.print "Password: "
21
+ command.input.noecho(&:gets).chomp
22
+ end
23
+ end
@@ -0,0 +1,14 @@
1
+ require 'fog'
2
+
3
+ class VolumesProvider
4
+ requires :credentials
5
+
6
+ def value
7
+ options = {
8
+ :rackspace_username => credentials.username,
9
+ :rackspace_api_key => credentials.api_key,
10
+ :rackspace_region => credentials.rackspace_region
11
+ }
12
+ Fog::Rackspace::BlockStorage.new(options).volumes
13
+ end
14
+ end
data/app/routes.rb ADDED
@@ -0,0 +1,59 @@
1
+ match 'login' => 'authentication#login'
2
+ match 'logout' => 'authentication#logout'
3
+
4
+ match 'show images' => 'images#index'
5
+
6
+ match 'show servers' => 'servers#index'
7
+ match 'show server :id' => 'servers#show'
8
+ match 'create server' => 'servers#create'
9
+ match 'update server :id' => 'servers#update'
10
+ match 'destroy server :id' => 'servers#destroy'
11
+
12
+ match 'show loadbalancers' => 'loadbalancers#index'
13
+ match 'show loadbalancer :id' => 'loadbalancers#show'
14
+ match 'create loadbalancer' => 'loadbalancers#create'
15
+ match 'update loadbalancer :id' => 'loadbalancers#update'
16
+ match 'destroy loadbalancer :id' => 'loadbalancers#destroy'
17
+
18
+ match 'show nodes on loadbalancer :loadbalancer_id' => 'nodes#index'
19
+ match 'show node :id on loadbalancer :loadbalancer_id' => 'nodes#show'
20
+ match 'create node on loadbalancer :loadbalancer_id' => 'nodes#create'
21
+ match 'update node :id on loadbalancer :loadbalancer_id' => 'nodes#update'
22
+ match 'destroy node :id on loadbalancer :loadbalancer_id' => 'nodes#destroy'
23
+
24
+ match 'show dbinstances' => 'instances#index'
25
+ match 'show dbinstance :id' => 'instances#show'
26
+ match 'create dbinstance' => 'instances#create'
27
+ match 'update dbinstance :id' => 'instances#update'
28
+ match 'destroy dbinstance :id' => 'instances#destroy'
29
+
30
+ match 'show databases on dbinstance :instance_id' => 'databases#index'
31
+ match 'show database :id on dbinstance :instance_id' => 'databases#show'
32
+ match 'create database on dbinstance :instance_id' => 'databases#create'
33
+ match 'update database :id on dbinstance :instance_id' => 'databases#update'
34
+ match 'destroy database :id on dbinstance :instance_id' => 'databases#destroy'
35
+
36
+ match 'ssh :id' => 'servers#ssh'
37
+
38
+ match 'show containers' => 'containers#index'
39
+ match 'show container :id' => 'containers#show'
40
+ match 'create container' => 'containers#create'
41
+ match 'update container :id' => 'containers#update'
42
+ match 'destroy container :id' => 'containers#destroy'
43
+
44
+ match 'show files in container :container_id' => 'files#index'
45
+ match 'show file :id in container :container_id' => 'files#show'
46
+ match 'create file :id in container :container_id' => 'files#create'
47
+ match 'update file :id in container :container_id' => 'files#update'
48
+ match 'destroy file :id in container :container_id' => 'files#destroy'
49
+ match 'download file :id in container :container_id' => 'files#download'
50
+
51
+ match 'show volumes' => 'volumes#index'
52
+ match 'show volume :id' => 'volumes#show'
53
+ match 'create volume' => 'volumes#create'
54
+ match 'update volume :id' => 'volumes#update'
55
+ match 'destroy volume :id' => 'volumes#destroy'
56
+
57
+ match 'show attachments on server :server_id' => 'attachments#index'
58
+ match 'attach volume :id to server :server_id' => 'attachments#attach'
59
+ match 'detach volume :id from server :server_id' => 'attachments#detach'
@@ -0,0 +1,3 @@
1
+ dump
2
+
3
+ <%= self.inspect %>
@@ -0,0 +1,3 @@
1
+ dump
2
+
3
+ <%= self.inspect %>
@@ -0,0 +1,7 @@
1
+ <% each do |attachment| %>
2
+ id: <%= attachment.volume_id %>
3
+ <% end %>
4
+
5
+ dump
6
+
7
+ <%= self.inspect %>
@@ -0,0 +1,5 @@
1
+ <%= display_name %>
2
+
3
+ dump
4
+
5
+ <%= self.inspect %>
@@ -0,0 +1,2 @@
1
+
2
+ logged in as <%= self.access.user.name %>, credentials written to ~/.netrc
@@ -0,0 +1 @@
1
+ logged out.
@@ -0,0 +1,5 @@
1
+ created container: <%= key %>
2
+
3
+ dump
4
+
5
+ <%= self.inspect %>
@@ -0,0 +1 @@
1
+ requested destruction of container <%= self %>
@@ -0,0 +1,7 @@
1
+ <% each do |container| %>
2
+ id: <%= container.name %>
3
+ <% end %>
4
+
5
+ dump
6
+
7
+ <%= self.inspect %>
@@ -0,0 +1,5 @@
1
+ <%= key %>
2
+
3
+ dump
4
+
5
+ <%= self.inspect %>
@@ -0,0 +1 @@
1
+ created database: <%= name %>
@@ -0,0 +1 @@
1
+ database instance <%= name %> queued for destruction
@@ -0,0 +1,8 @@
1
+ <% if empty? %>
2
+ you don't have any databases on this instance, but you can create one by running:
3
+ rumm create database on dbinstance <instance_name>
4
+ <% else %>
5
+ <% each do |database| %>
6
+ name: <%= database.name %>
7
+ <% end %>
8
+ <% end %>
@@ -0,0 +1 @@
1
+ name: <%= name %>
@@ -0,0 +1,5 @@
1
+ created container: <%= key %>
2
+
3
+ dump
4
+
5
+ <%= self.inspect %>
@@ -0,0 +1 @@
1
+ requested destruction of container <%= self %>
@@ -0,0 +1,3 @@
1
+ dump
2
+
3
+ <%= self.inspect %>
@@ -0,0 +1,7 @@
1
+ <% each do |file| %>
2
+ id: <%= file.key %>
3
+ <% end %>
4
+
5
+ dump
6
+
7
+ <%= self.inspect %>
@@ -0,0 +1,5 @@
1
+ <%= key %>
2
+
3
+ dump
4
+
5
+ <%= self.inspect %>
@@ -0,0 +1,3 @@
1
+ <% each do |image| %>
2
+ <%= "#{image.id} #{image.name}" %>
3
+ <% end %>
@@ -0,0 +1,2 @@
1
+ created database instance: <%= name %>
2
+ id: <%= id %>
@@ -0,0 +1 @@
1
+ requested destruction of instance <%= name %>
@@ -0,0 +1,8 @@
1
+ <% if empty? %>
2
+ you don't have any database instances, but you can create one by running:
3
+ rumm create dbinstance
4
+ <% else %>
5
+ <% each do |instance| %>
6
+ <%= instance.name %> -> id: <%= instance.id %>, status: <%= instance.state %>
7
+ <% end %>
8
+ <% end %>
@@ -0,0 +1 @@
1
+ <%= name %> -> id: <%= id %>, status: <%= state %>
@@ -0,0 +1 @@
1
+ created load balancer: <%= name %>
@@ -0,0 +1 @@
1
+ requested destruction of load balancer <%= name %>
@@ -0,0 +1,8 @@
1
+ <% if empty? %>
2
+ you don't have any loadbalancers, but you can create one by running:
3
+ rumm create loadbalancer
4
+ <% else %>
5
+ <% each do |loadbalancer| %>
6
+ <%= loadbalancer.name %> -> id: <%= loadbalancer.id %>,
7
+ <% end %>
8
+ <% end %>
@@ -0,0 +1,4 @@
1
+ <%= name %>: <%= id %> (<%= state %>)
2
+ <%= algorithm %>
3
+ created: <%= created %>
4
+ protocol: <%= protocol %>
@@ -0,0 +1,5 @@
1
+ created node: <%= id %>
2
+
3
+ dump
4
+
5
+ <%= self.inspect %>
@@ -0,0 +1 @@
1
+ requested destruction of node <%= self %>
@@ -0,0 +1,4 @@
1
+ <% each do |node| %>
2
+ id: <%= node.id %>
3
+ <% end %>
4
+
@@ -0,0 +1,5 @@
1
+ <%= id %>
2
+
3
+ dump
4
+
5
+ <%= self.inspect %>
@@ -0,0 +1,2 @@
1
+ created server: <%= name %>
2
+ id: <%= id %>, password: <%= password %>
@@ -0,0 +1 @@
1
+ requested destruction of server <%= name %>
@@ -0,0 +1,8 @@
1
+ <% if empty? %>
2
+ you don't have any servers, but you can create one by running:
3
+ rumm create server
4
+ <% else %>
5
+ <% each do |server| %>
6
+ <%= server.name %> -> id: <%= server.id %>, status: <%= server.state %><%= "(#{server.progress}%)" unless server.state == 'ACTIVE' %>, ipv4: <%= server.ipv4_address == '' ? 'not available' : server.ipv4_address %>
7
+ <% end %>
8
+ <% end %>
@@ -0,0 +1,5 @@
1
+ <%= name %>: <%= id %> (<%= state %>)
2
+ <%= image.name %> <%= flavor.name %>
3
+ created: <%= created %>
4
+ ipv4: <%= ipv4_address %>
5
+ ipv6: <%= ipv6_address %>
@@ -0,0 +1,5 @@
1
+ created container: <%= display_name %>
2
+
3
+ dump
4
+
5
+ <%= self.inspect %>
@@ -0,0 +1 @@
1
+ requested destruction of container <%= self %>