rumm 0.0.24 → 0.1.0

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,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- YmQzNjJhOTY2NWQwYjdlZTg2ZGRlNWRjZDE1MTczMmRhMWE0ZWQyNg==
5
- data.tar.gz: !binary |-
6
- OTQ1MTFmNzRmMzI0NDliYmFjMDYxZmY5YTMwNTllNTAyMDQ5NTZjYg==
7
- !binary "U0hBNTEy":
8
- metadata.gz: !binary |-
9
- ZDEwOTk4MGFiMzQ1N2Y1ZmJlZTExNjU5MzAwNDBkY2VlZDY0MjY2NjBhNzhl
10
- MzEzZDgzYzdiMTBkMDFiMTVhNTNhZjYzMDZhZmY2MzIwN2M3YTllMWYzNzU4
11
- NGI0YjRmNGQyN2ZlY2QyZGEyZmUzYWFhYmJlNjdjMDdkZWYxYmE=
12
- data.tar.gz: !binary |-
13
- ZjQyNWMwYzgxMjU2MmU3MDVkMTcyZWEzMWFlNjM3NGIwYjFiYTY0Mzk0Mzg2
14
- Zjk5MzE5MjUxZDQwMzBkYjAzODkyZjkyZTZjZDU1MTcyZGE4YTJjMDdlZmM5
15
- ODMyZmUxMGZjZWI0NTQxZGM4NDdlYTJlNmMwZmVmZGViYjM5MjE=
2
+ SHA1:
3
+ metadata.gz: a3d7f25fc9b2ef4f7a3d3637423a4f9dfe3e39f2
4
+ data.tar.gz: d9dacf2f9f9e7b73c4315dd791f09ab121cb2be5
5
+ SHA512:
6
+ metadata.gz: 9e3c0965b2a470d8e5d5c6ed71a93f9953a350be841841b6eccabf008503d83a591ef5917ef5ff9292e022c50e8bc5729ed9ae91bcfa92ebb431fd23ac1bfb47
7
+ data.tar.gz: 48e35fa414200ed79dca3b5b2390e495c30a55355cd8f8e25a7618e18cbd5f2030d2fa752ea528a08463ab5035d12ff0e12d3c897057c4823c3d253703b195e0
data/Gemfile CHANGED
@@ -10,3 +10,4 @@ gem "aruba"
10
10
  gem "vcr"
11
11
  gem "popen4"
12
12
  gem "pry"
13
+ gem "erubis"
data/README.md CHANGED
@@ -12,14 +12,14 @@ to easily build and manage infrastructure for great good.
12
12
  ## Usage
13
13
 
14
14
  Authenticate with rackspace using your cloud credentials as follows:
15
-
15
+
16
16
  rumm login
17
17
  username: joe
18
18
  password: ****
19
19
  Default Region (Enter for ord):
20
20
 
21
21
  logged in as joe, credentials written to ~/.rummrc
22
-
22
+ *(Note: The authentication will fail unless you have generated and bound an API Key to your account: https://mycloud.rackspace.com/account#settings).*
23
23
 
24
24
  Now we can see the list of servers we have available:
25
25
 
@@ -37,11 +37,11 @@ For further help, including a full listing of commands, type:
37
37
 
38
38
  rumm help
39
39
 
40
- To access servers outside of your default region, you can prefix your rumm command with REGION=<region name>.
40
+ To access servers outside of your default region, you can prefix your rumm command with `REGION=<region name>`.
41
41
 
42
42
  For example to list servers in IAD you would execute the following:
43
43
 
44
- REGION=iad rumm show servers
44
+ REGION=iad rumm show servers
45
45
 
46
46
  ## Further Reading
47
47
 
@@ -0,0 +1,7 @@
1
+ class FlavorsController < MVCLI::Controller
2
+ requires :flavors
3
+
4
+ def index
5
+ flavors.all
6
+ end
7
+ end
@@ -0,0 +1,66 @@
1
+ require "tmpdir"
2
+ require "open3"
3
+ require "bundler"
4
+
5
+ class JenkinsController < MVCLI::Controller
6
+ requires :compute
7
+ requires :naming
8
+ requires :command
9
+
10
+ def create
11
+ template = Jenkins::CreateForm
12
+ argv = MVCLI::Argv.new command.argv
13
+ form = template.new argv.options
14
+ command.output.puts "Setting up a chef kitchen in order to install jenkins on your server."
15
+ command.output.puts "This could take a while...."
16
+ sleep(1)
17
+ tmpdir = Pathname(Dir.tmpdir).join 'chef_kitchen'
18
+ FileUtils.mkdir_p tmpdir
19
+ Dir.chdir tmpdir do
20
+ Bundler.with_clean_env do
21
+ File.open('Gemfile', 'w') do |f|
22
+ f.puts 'source "https://rubygems.org"'
23
+ f.puts 'gem "knife-solo", ">= 0.3.0pre3"'
24
+ f.puts 'gem "berkshelf"'
25
+ end
26
+ execute "bundle install --binstubs"
27
+ execute "bin/knife solo init ."
28
+ FileUtils.rm "Berksfile"
29
+ File.open 'Berksfile', 'w' do |f|
30
+ f.puts "site :opscode"
31
+ f.puts ""
32
+ f.puts "cookbook 'runit', '>= 1.1.2'"
33
+ f.puts "cookbook 'jenkinsbox', github: 'hayesmp/jenkins-rackbox-cookbook'"
34
+ end
35
+ execute "bin/berks install --path cookbooks/"
36
+ execute "bin/knife solo prepare root@#{server.ipv4_address}"
37
+ File.open('nodes/host.json', 'w') do |f|
38
+ f.puts("{\"run_list\":[\"recipe[build-essential]\",\"recipe[jenkinsbox::postgresql]\",\"recipe[jenkinsbox]\",\"recipe[jenkinsbox::jenkins]\"],\"jenkinsbox\":{\"build_essential\":{ \"compiletime\":true},\"jenkins\":{\"git_name\":\"#{form.git_name}\",\"git_email\":\"#{form.git_email}\",\"ip_address\":\"#{server.ipv4_address}\", \"host\":\"#{server.name}\"},\"ruby\":{\"versions\":[\"2.0.0-p247\"],\"global_version\":\"2.0.0-p247\"},\"apps\":{\"unicorn\":[{\"appname\":\"app1\",\"hostname\":\"app1\"}]},\"db_root_password\":\"iloverandompasswordsbutthiswilldo\", \"databases\":{\"postgresql\":[{\"database_name\":\"app1_production\",\"username\":\"app1\",\"password\":\"app1_pass\"}]}}}")
39
+ end
40
+
41
+ FileUtils.rm_rf "#{server.ipv4_address}.json"
42
+ FileUtils.mv "nodes/host.json", "nodes/#{server.ipv4_address}.json"
43
+ execute "bin/knife solo cook root@#{server.ipv4_address} -V"
44
+ end
45
+ end
46
+ return server
47
+ end
48
+
49
+ private
50
+
51
+ def execute(cmd)
52
+ Open3.popen3(cmd) do |stdin, stdout, stderr, wait_thr|
53
+ while line = stdout.gets
54
+ command.output.puts " " + line
55
+ end
56
+ exit_status = wait_thr.value
57
+ unless exit_status.success?
58
+ abort "FAILED !!! #{cmd}"
59
+ end
60
+ end
61
+ end
62
+
63
+ def server
64
+ compute.servers.find {|s| s.name == params[:id]} or fail Fog::Errors::NotFound
65
+ end
66
+ end
@@ -0,0 +1,28 @@
1
+ require 'net/ssh'
2
+
3
+ class JobsController < MVCLI::Controller
4
+ requires :compute
5
+ requires :command
6
+ requires :job
7
+
8
+ def create
9
+ template = Jobs::CreateForm
10
+ argv = MVCLI::Argv.new command.argv
11
+ form = template.new argv.options
12
+ command.output.puts "Setting up new jenkins job: #{form.job_name} on server: #{server.name}."
13
+ sleep(1)
14
+ xml = job.job_template(form.job_repo, form.job_command)
15
+ Net::SSH.start("#{server.ipv4_address}", "root") do |ssh|
16
+ # 'ssh' is an instance of Net::SSH::Connection::Session
17
+ ssh.exec! "echo '#{xml}' >> #{form.job_name}-config.xml"
18
+ ssh.exec! "java -jar /home/jenkins/jenkins-cli.jar -s http://0.0.0.0:8080 create-job #{form.job_name} < #{form.job_name}-config.xml"
19
+ end
20
+ return server
21
+ end
22
+
23
+ private
24
+
25
+ def server
26
+ compute.servers.find {|s| s.name == params[:id]} or fail Fog::Errors::NotFound
27
+ end
28
+ end
@@ -17,6 +17,7 @@ class ServersController < MVCLI::Controller
17
17
  form = template.new argv.options
18
18
  form.validate!
19
19
  #Add personalization
20
+
20
21
  options = {
21
22
  name: form.name,
22
23
  flavor_id: form.flavor_id,
@@ -24,11 +25,20 @@ class ServersController < MVCLI::Controller
24
25
  private_key_path: form.ssh_private, #"~/.ssh/id_rsa"
25
26
  public_key_path: form.ssh_public #"~/.ssh/id_rsa.pub"
26
27
  }
28
+
29
+ if form.no_passwd_lock
30
+ options[:no_passwd_lock] = true
31
+ end
32
+
27
33
  command.output.puts "--> bootstrapping server #{options[:name]}"
28
34
  #Progress bar
29
35
  server = compute.servers.bootstrap options
30
36
  command.output.puts " done."
31
- return server
37
+
38
+ OpenStruct.new.tap do |os|
39
+ os.server = server
40
+ os.no_passwd_lock = options[:no_passwd_lock]
41
+ end
32
42
  end
33
43
 
34
44
  def update
@@ -0,0 +1,6 @@
1
+ class Jenkins::CreateForm < MVCLI::Form
2
+
3
+ input :git_name, String, default: 'Jenkins'
4
+ input :git_email, String, default: 'admin@jenkins.com'
5
+
6
+ end
@@ -0,0 +1,8 @@
1
+ class Jobs::CreateForm < MVCLI::Form
2
+ requires :naming
3
+
4
+ input :job_repo, String, default: 'https://github.com/hayesmp/railsgirls-app.git'
5
+ input :job_command, String, default: 'bundle exec rake'
6
+ input :job_name, String, default: 'job1'
7
+
8
+ end
@@ -6,6 +6,7 @@ class Servers::CreateForm < MVCLI::Form
6
6
  input :flavor_id, String, default: 2
7
7
  input :ssh_private, String, default: ->() {File.expand_path "~/.ssh/id_rsa"}, decode: ->(s) {File.expand_path s}
8
8
  input :ssh_public, String, default: ->() {File.expand_path "~/.ssh/id_rsa.pub"}, decode: ->(s) {File.expand_path s}
9
+ input :no_passwd_lock, String
9
10
 
10
11
  validates(:ssh_private, "private ssh key location must lead to a file") {|ssh_private| File.exists? ssh_private}
11
12
  validates(:ssh_private, "private ssh key must be a valid key") do |ssh_private|
@@ -4,7 +4,9 @@ Authentication:
4
4
 
5
5
  Images:
6
6
  rumm show images
7
- rumm show images
7
+
8
+ Flavors:
9
+ rumm show flavors
8
10
 
9
11
  Servers:
10
12
  rumm show servers
@@ -14,6 +16,13 @@ Servers:
14
16
  rumm destroy server :id
15
17
  rumm ssh :id
16
18
 
19
+ Railsify:
20
+ rumm railsify server :id
21
+
22
+ Jenkins:
23
+ rumm install jenkins on server :id
24
+ rumm create job on jenkins server :id
25
+
17
26
  Loadbalancers:
18
27
  rumm show loadbalancers
19
28
  rumm show loadbalancer :id
@@ -0,0 +1,17 @@
1
+ Usage:
2
+ rumm create job on jenkins server id [--job_name STRING] [--job_repo STRING] [--job_command STRING]
3
+
4
+ Options:
5
+ --job_name STRING # Job name, exa: "rails-girls-job"
6
+ --job_repo STRING # Git repository (https), exa: "https://github.com/hayesmp/railsgirls-app.git"
7
+ --job_command STRING # Job command, exa: "rake"
8
+
9
+ Arguments:
10
+ ID: STRING # Name of the jenkins server to create job on
11
+
12
+ Description:
13
+ This command will allow you to create jobs on your rumm created jenkins server.
14
+ A typical setup is with a rails projects, running the rake command to trigger any tests.
15
+
16
+ Examples:
17
+ rumm create job on server sorrel-shantung --job_name rails-girls-job --job_repo https://github.com/hayesmp/railsgirls-app.git --job_command rake
@@ -0,0 +1,18 @@
1
+ Usage:
2
+ rumm install jenkins on server id [--git_name STRING] [--git_email STRING]
3
+
4
+ Options:
5
+ --git_name STRING # Git name, exa: "Grover Cleveland"
6
+ --git_email STRING # Git email, exa: "grover@whitehouse.gov"
7
+
8
+ Arguments:
9
+ ID: STRING # Name of the server to install jenkins on
10
+
11
+ Description:
12
+ The purpose of this rumm command is to easily create a CI (continuous integration)
13
+ server for a given project. The 'install jenkins' command will install and setup
14
+ jenkins on a rumm-prepared server. If the user may specify git credentials to be
15
+ used.
16
+
17
+ Examples:
18
+ rumm install jenkins on server sorrel-shantung --git_name Grover Cleveland --git_email grover@whitehouse.gov
@@ -15,6 +15,8 @@ help('logout')
15
15
 
16
16
  help('show images')
17
17
 
18
+ help('show flavors')
19
+
18
20
  help('show servers')
19
21
  help('show server')
20
22
  help('create server')
@@ -22,6 +24,8 @@ help('update server')
22
24
  help('destroy server')
23
25
 
24
26
  help('railsify server')
27
+ help('install jenkins on server')
28
+ help('create job on jenkins server')
25
29
 
26
30
  help('show loadbalancers')
27
31
  help('show loadbalancer')
@@ -0,0 +1,14 @@
1
+ Usage:
2
+ rumm show flavors
3
+
4
+ Options:
5
+ none
6
+
7
+ Arguments:
8
+ none
9
+
10
+ Description:
11
+ Shows a list of all of the server flavors available on Rackspace.
12
+
13
+ Examples:
14
+ rumm show flavors
@@ -0,0 +1,16 @@
1
+ require 'fog'
2
+ class FlavorsProvider
3
+ requires :credentials
4
+
5
+ def value
6
+ options = {
7
+ :provider => 'Rackspace',
8
+ :rackspace_username => credentials.username,
9
+ :rackspace_api_key => credentials.api_key,
10
+ :version => :v2,
11
+ :rackspace_region => credentials.rackspace_region,
12
+ :connection_options => {:headers => {"User-Agent" => "rumm/#{Rumm::VERSION} fog/#{Fog::VERSION}"}}
13
+ }
14
+ Fog::Compute.new(options).flavors
15
+ end
16
+ end
@@ -0,0 +1,14 @@
1
+ require 'erubis'
2
+
3
+ class JobProvider
4
+ def value
5
+ self
6
+ end
7
+
8
+ def job_template(git_url, build_command)
9
+ template = File.read(File.join(File.dirname(File.expand_path(__FILE__)), "../views/jobs/job_template.xml.erb"))
10
+ template = Erubis::Eruby.new(template, :escape_html => false)
11
+ #fail template.inspect
12
+ template.result(:build_command => build_command, :git_url => git_url)
13
+ end
14
+ end
@@ -9,6 +9,8 @@ match 'logout' => 'authentication#logout'
9
9
 
10
10
  match 'show images' => 'images#index'
11
11
 
12
+ match 'show flavors' => 'flavors#index'
13
+
12
14
  match 'show servers' => 'servers#index'
13
15
  match 'show server :id' => 'servers#show'
14
16
  match 'create server' => 'servers#create'
@@ -16,6 +18,8 @@ match 'update server :id' => 'servers#update'
16
18
  match 'destroy server :id' => 'servers#destroy'
17
19
 
18
20
  match 'railsify server :id' => 'railsifications#create'
21
+ match 'install jenkins on server :id' => 'jenkins#create'
22
+ match 'create job on jenkins server :id' => 'jobs#create'
19
23
 
20
24
  match 'show loadbalancers' => 'loadbalancers#index'
21
25
  match 'show loadbalancer :id' => 'loadbalancers#show'
@@ -0,0 +1,5 @@
1
+ ID Name
2
+ == ====
3
+ <% this.each do |flavor| %>
4
+ <%= '%-17s %-7s' % [flavor.id, flavor.name] %>
5
+ <% end %>
@@ -0,0 +1 @@
1
+ jenkins installed on server <%= this.name %>: <%= this.ipv4_address %>
@@ -0,0 +1 @@
1
+ new jenkins job created on server <%= this.name %>: <%= this.ipv4_address %>
@@ -0,0 +1,79 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project>
3
+ <actions/>
4
+ <description></description>
5
+ <keepDependencies>false</keepDependencies>
6
+ <properties/>
7
+ <scm class="hudson.plugins.git.GitSCM" plugin="git@1.5.0">
8
+ <configVersion>2</configVersion>
9
+ <userRemoteConfigs>
10
+ <hudson.plugins.git.UserRemoteConfig>
11
+ <name></name>
12
+ <refspec></refspec>
13
+ <url><%= git_url %></url>
14
+ </hudson.plugins.git.UserRemoteConfig>
15
+ </userRemoteConfigs>
16
+ <branches>
17
+ <hudson.plugins.git.BranchSpec>
18
+ <name>**</name>
19
+ </hudson.plugins.git.BranchSpec>
20
+ </branches>
21
+ <disableSubmodules>false</disableSubmodules>
22
+ <recursiveSubmodules>false</recursiveSubmodules>
23
+ <doGenerateSubmoduleConfigurations>false</doGenerateSubmoduleConfigurations>
24
+ <authorOrCommitter>false</authorOrCommitter>
25
+ <clean>false</clean>
26
+ <wipeOutWorkspace>false</wipeOutWorkspace>
27
+ <pruneBranches>false</pruneBranches>
28
+ <remotePoll>false</remotePoll>
29
+ <ignoreNotifyCommit>false</ignoreNotifyCommit>
30
+ <useShallowClone>false</useShallowClone>
31
+ <buildChooser class="hudson.plugins.git.util.DefaultBuildChooser"/>
32
+ <gitTool>Default</gitTool>
33
+ <submoduleCfg class="list"/>
34
+ <relativeTargetDir></relativeTargetDir>
35
+ <reference></reference>
36
+ <excludedRegions></excludedRegions>
37
+ <excludedUsers></excludedUsers>
38
+ <gitConfigName></gitConfigName>
39
+ <gitConfigEmail></gitConfigEmail>
40
+ <skipTag>false</skipTag>
41
+ <includedRegions></includedRegions>
42
+ <scmName></scmName>
43
+ </scm>
44
+ <canRoam>true</canRoam>
45
+ <disabled>false</disabled>
46
+ <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
47
+ <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
48
+ <triggers>
49
+ <com.cloudbees.jenkins.GitHubPushTrigger plugin="github@1.8">
50
+ <spec></spec>
51
+ </com.cloudbees.jenkins.GitHubPushTrigger>
52
+ </triggers>
53
+ <concurrentBuild>false</concurrentBuild>
54
+ <builders>
55
+ <hudson.tasks.Shell>
56
+ <command>bundle install
57
+ bundle exec rake db:migrate
58
+ <%= build_command %></command>
59
+ </hudson.tasks.Shell>
60
+ </builders>
61
+ <publishers/>
62
+ <buildWrappers>
63
+ <ruby-proxy-object>
64
+ <ruby-object ruby-class="Jenkins::Tasks::BuildWrapperProxy" pluginid="rbenv">
65
+ <object ruby-class="RbenvWrapper" pluginid="rbenv">
66
+ <ruby__build__repository pluginid="rbenv" ruby-class="String">https://github.com/sstephenson/ruby-build.git</ruby__build__repository>
67
+ <rbenv__root pluginid="rbenv" ruby-class="String">$HOME/.rbenv</rbenv__root>
68
+ <rbenv__revision pluginid="rbenv" ruby-class="String">master</rbenv__revision>
69
+ <rbenv__repository pluginid="rbenv" ruby-class="String">https://github.com/sstephenson/rbenv.git</rbenv__repository>
70
+ <ruby__build__revision pluginid="rbenv" ruby-class="String">master</ruby__build__revision>
71
+ <gem__list pluginid="rbenv" ruby-class="String">bundler,rake</gem__list>
72
+ <version pluginid="rbenv" ruby-class="String">2.0.0-p247</version>
73
+ <ignore__local__version ruby-class="FalseClass" pluginid="rbenv"/>
74
+ </object>
75
+ <pluginid pluginid="rbenv" ruby-class="String">rbenv</pluginid>
76
+ </ruby-object>
77
+ </ruby-proxy-object>
78
+ </buildWrappers>
79
+ </project>
@@ -1,2 +1,6 @@
1
- created server: <%= this.name %>
2
- id: <%= this.id %>, password: <%= this.password %>
1
+ created server: <%= this.server.name %>
2
+ <% if this.no_passwd_lock %>
3
+ id: <%= this.server.id %>, password: <%= this.server.password %>
4
+ <% else %>
5
+ id: <%= this.server.id %>, password locked
6
+ <% end %>
@@ -1,3 +1,3 @@
1
1
  module Rumm
2
- VERSION = "0.0.24"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -21,5 +21,5 @@ Gem::Specification.new do |spec|
21
21
  spec.required_ruby_version = ">= 1.9.3"
22
22
 
23
23
  spec.add_dependency "mvcli", "~> 0.0.16"
24
- spec.add_dependency "fog", "~> 1.16.0"
24
+ spec.add_dependency "fog", "~> 1.16"
25
25
  end
@@ -0,0 +1,17 @@
1
+ require "spec_helper"
2
+
3
+ describe "using the flavors api" do
4
+
5
+ context "to show" do
6
+ include_context "rummrc"
7
+ When { VCR.use_cassette("flavors/show") {run "rumm show flavors"}}
8
+ Then {all_stdout =~ /performance1-1 1 GB Performance/}
9
+ And {last_exit_status.should eql 0}
10
+ end
11
+
12
+ context "to get help" do
13
+ Given { rumm "help show flavors" }
14
+ Then { all_stdout.match "Shows a list of all of the server flavors available on Rackspace" }
15
+ end
16
+
17
+ end
@@ -0,0 +1,173 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://identity.api.rackspacecloud.com/v2.0/tokens
6
+ body:
7
+ encoding: UTF-8
8
+ string: ! '{"auth":{"RAX-KSKEY:apiKeyCredentials":{"username":"<rackspace-username>","apiKey":"<rackspace-api-key>"}}}'
9
+ headers:
10
+ User-Agent:
11
+ - rumm/0.0.24 fog/1.16.0
12
+ Content-Type:
13
+ - application/json
14
+ Accept:
15
+ - application/json
16
+ X-Auth-Token: []
17
+ response:
18
+ status:
19
+ code: 200
20
+ message:
21
+ headers:
22
+ Server:
23
+ - nginx/0.8.55
24
+ Date:
25
+ - Thu, 19 Dec 2013 18:16:06 GMT
26
+ Content-Type:
27
+ - application/json
28
+ Transfer-Encoding:
29
+ - chunked
30
+ Connection:
31
+ - keep-alive
32
+ vary:
33
+ - Accept, Accept-Encoding, X-Auth-Token
34
+ VIA:
35
+ - 1.0 Repose (Repose/2.3.5)
36
+ Front-End-Https:
37
+ - 'on'
38
+ body:
39
+ encoding: US-ASCII
40
+ string: ! '{"access":{"token":{"id":"<rackspace-api-token>","expires":"2013-12-20T15:44:37.831Z","tenant":{"id":"01234","name":"01234"},"RAX-AUTH:authenticatedBy":["APIKEY"]},"serviceCatalog":[{"name":"cloudBackup","endpoints":[{"region":"HKG","tenantId":"01234","publicURL":"https:\/\/hkg.backup.api.rackspacecloud.com\/v1.0\/01234"},{"region":"DFW","tenantId":"01234","publicURL":"https:\/\/dfw.backup.api.rackspacecloud.com\/v1.0\/01234"},{"region":"SYD","tenantId":"01234","publicURL":"https:\/\/syd.backup.api.rackspacecloud.com\/v1.0\/01234"},{"region":"ORD","tenantId":"01234","publicURL":"https:\/\/ord.backup.api.rackspacecloud.com\/v1.0\/01234"},{"region":"IAD","tenantId":"01234","publicURL":"https:\/\/iad.backup.api.rackspacecloud.com\/v1.0\/01234"}],"type":"rax:backup"},{"name":"cloudServersOpenStack","endpoints":[{"region":"IAD","tenantId":"01234","publicURL":"https:\/\/iad.servers.api.rackspacecloud.com\/v2\/01234","versionInfo":"https:\/\/iad.servers.api.rackspacecloud.com\/v2","versionList":"https:\/\/iad.servers.api.rackspacecloud.com\/","versionId":"2"},{"region":"HKG","tenantId":"01234","publicURL":"https:\/\/hkg.servers.api.rackspacecloud.com\/v2\/01234","versionInfo":"https:\/\/hkg.servers.api.rackspacecloud.com\/v2","versionList":"https:\/\/hkg.servers.api.rackspacecloud.com\/","versionId":"2"},{"region":"SYD","tenantId":"01234","publicURL":"https:\/\/syd.servers.api.rackspacecloud.com\/v2\/01234","versionInfo":"https:\/\/syd.servers.api.rackspacecloud.com\/v2","versionList":"https:\/\/syd.servers.api.rackspacecloud.com\/","versionId":"2"},{"region":"ORD","tenantId":"01234","publicURL":"https:\/\/ord.servers.api.rackspacecloud.com\/v2\/01234","versionInfo":"https:\/\/ord.servers.api.rackspacecloud.com\/v2","versionList":"https:\/\/ord.servers.api.rackspacecloud.com\/","versionId":"2"},{"region":"DFW","tenantId":"01234","publicURL":"https:\/\/dfw.servers.api.rackspacecloud.com\/v2\/01234","versionInfo":"https:\/\/dfw.servers.api.rackspacecloud.com\/v2","versionList":"https:\/\/dfw.servers.api.rackspacecloud.com\/","versionId":"2"}],"type":"compute"},{"name":"cloudLoadBalancers","endpoints":[{"region":"HKG","tenantId":"01234","publicURL":"https:\/\/hkg.loadbalancers.api.rackspacecloud.com\/v1.0\/01234"},{"region":"IAD","tenantId":"01234","publicURL":"https:\/\/iad.loadbalancers.api.rackspacecloud.com\/v1.0\/01234"},{"region":"SYD","tenantId":"01234","publicURL":"https:\/\/syd.loadbalancers.api.rackspacecloud.com\/v1.0\/01234"},{"region":"ORD","tenantId":"01234","publicURL":"https:\/\/ord.loadbalancers.api.rackspacecloud.com\/v1.0\/01234"},{"region":"DFW","tenantId":"01234","publicURL":"https:\/\/dfw.loadbalancers.api.rackspacecloud.com\/v1.0\/01234"}],"type":"rax:load-balancer"},{"name":"cloudDatabases","endpoints":[{"region":"HKG","tenantId":"01234","publicURL":"https:\/\/hkg.databases.api.rackspacecloud.com\/v1.0\/01234"},{"region":"IAD","tenantId":"01234","publicURL":"https:\/\/iad.databases.api.rackspacecloud.com\/v1.0\/01234"},{"region":"SYD","tenantId":"01234","publicURL":"https:\/\/syd.databases.api.rackspacecloud.com\/v1.0\/01234"},{"region":"DFW","tenantId":"01234","publicURL":"https:\/\/dfw.databases.api.rackspacecloud.com\/v1.0\/01234"},{"region":"ORD","tenantId":"01234","publicURL":"https:\/\/ord.databases.api.rackspacecloud.com\/v1.0\/01234"}],"type":"rax:database"},{"name":"cloudBlockStorage","endpoints":[{"region":"HKG","tenantId":"01234","publicURL":"https:\/\/hkg.blockstorage.api.rackspacecloud.com\/v1\/01234"},{"region":"IAD","tenantId":"01234","publicURL":"https:\/\/iad.blockstorage.api.rackspacecloud.com\/v1\/01234"},{"region":"SYD","tenantId":"01234","publicURL":"https:\/\/syd.blockstorage.api.rackspacecloud.com\/v1\/01234"},{"region":"ORD","tenantId":"01234","publicURL":"https:\/\/ord.blockstorage.api.rackspacecloud.com\/v1\/01234"},{"region":"DFW","tenantId":"01234","publicURL":"https:\/\/dfw.blockstorage.api.rackspacecloud.com\/v1\/01234"}],"type":"volume"},{"name":"cloudQueues","endpoints":[{"region":"ORD","tenantId":"01234","publicURL":"https:\/\/ord.queues.api.rackspacecloud.com\/v1\/01234","internalURL":"https:\/\/snet-ord.queues.api.rackspacecloud.com\/v1\/01234"},{"region":"SYD","tenantId":"01234","publicURL":"https:\/\/syd.queues.api.rackspacecloud.com\/v1\/01234","internalURL":"https:\/\/snet-syd.queues.api.rackspacecloud.com\/v1\/01234"},{"region":"DFW","tenantId":"01234","publicURL":"https:\/\/dfw.queues.api.rackspacecloud.com\/v1\/01234","internalURL":"https:\/\/snet-dfw.queues.api.rackspacecloud.com\/v1\/01234"},{"region":"IAD","tenantId":"01234","publicURL":"https:\/\/iad.queues.api.rackspacecloud.com\/v1\/01234","internalURL":"https:\/\/snet-iad.queues.api.rackspacecloud.com\/v1\/01234"},{"region":"HKG","tenantId":"01234","publicURL":"https:\/\/hkg.queues.api.rackspacecloud.com\/v1\/01234","internalURL":"https:\/\/snet-hkg.queues.api.rackspacecloud.com\/v1\/01234"}],"type":"rax:queues"},{"name":"autoscale","endpoints":[{"region":"IAD","tenantId":"01234","publicURL":"https:\/\/iad.autoscale.api.rackspacecloud.com\/v1.0\/01234"},{"region":"SYD","tenantId":"01234","publicURL":"https:\/\/syd.autoscale.api.rackspacecloud.com\/v1.0\/01234"},{"region":"ORD","tenantId":"01234","publicURL":"https:\/\/ord.autoscale.api.rackspacecloud.com\/v1.0\/01234"},{"region":"DFW","tenantId":"01234","publicURL":"https:\/\/dfw.autoscale.api.rackspacecloud.com\/v1.0\/01234"},{"region":"HKG","tenantId":"01234","publicURL":"https:\/\/hkg.autoscale.api.rackspacecloud.com\/v1.0\/01234"}],"type":"rax:autoscale"},{"name":"cloudMonitoring","endpoints":[{"tenantId":"01234","publicURL":"https:\/\/monitoring.api.rackspacecloud.com\/v1.0\/01234"}],"type":"rax:monitor"},{"name":"cloudDNS","endpoints":[{"tenantId":"01234","publicURL":"https:\/\/dns.api.rackspacecloud.com\/v1.0\/01234"}],"type":"rax:dns"},{"name":"cloudFiles","endpoints":[{"region":"IAD","tenantId":"TestCloudFS_abcdefg1-2665-4162-b8e4-7e69b8bb0dc9","publicURL":"https:\/\/storage101.iad3.clouddrive.com\/v1\/TestCloudFS_abcdefg1-2665-4162-b8e4-7e69b8bb0dc9","internalURL":"https:\/\/snet-storage101.iad3.clouddrive.com\/v1\/TestCloudFS_abcdefg1-2665-4162-b8e4-7e69b8bb0dc9"},{"region":"HKG","tenantId":"TestCloudFS_abcdefg1-2665-4162-b8e4-7e69b8bb0dc9","publicURL":"https:\/\/storage101.hkg1.clouddrive.com\/v1\/TestCloudFS_abcdefg1-2665-4162-b8e4-7e69b8bb0dc9","internalURL":"https:\/\/snet-storage101.hkg1.clouddrive.com\/v1\/TestCloudFS_abcdefg1-2665-4162-b8e4-7e69b8bb0dc9"},{"region":"SYD","tenantId":"TestCloudFS_abcdefg1-2665-4162-b8e4-7e69b8bb0dc9","publicURL":"https:\/\/storage101.syd2.clouddrive.com\/v1\/TestCloudFS_abcdefg1-2665-4162-b8e4-7e69b8bb0dc9","internalURL":"https:\/\/snet-storage101.syd2.clouddrive.com\/v1\/TestCloudFS_abcdefg1-2665-4162-b8e4-7e69b8bb0dc9"},{"region":"ORD","tenantId":"TestCloudFS_abcdefg1-2665-4162-b8e4-7e69b8bb0dc9","publicURL":"https:\/\/storage101.ord1.clouddrive.com\/v1\/TestCloudFS_abcdefg1-2665-4162-b8e4-7e69b8bb0dc9","internalURL":"https:\/\/snet-storage101.ord1.clouddrive.com\/v1\/TestCloudFS_abcdefg1-2665-4162-b8e4-7e69b8bb0dc9"},{"region":"DFW","tenantId":"TestCloudFS_abcdefg1-2665-4162-b8e4-7e69b8bb0dc9","publicURL":"https:\/\/storage101.dfw1.clouddrive.com\/v1\/TestCloudFS_abcdefg1-2665-4162-b8e4-7e69b8bb0dc9","internalURL":"https:\/\/snet-storage101.dfw1.clouddrive.com\/v1\/TestCloudFS_abcdefg1-2665-4162-b8e4-7e69b8bb0dc9"}],"type":"object-store"},{"name":"cloudFilesCDN","endpoints":[{"region":"IAD","tenantId":"TestCloudFS_abcdefg1-2665-4162-b8e4-7e69b8bb0dc9","publicURL":"https:\/\/cdn5.clouddrive.com\/v1\/TestCloudFS_abcdefg1-2665-4162-b8e4-7e69b8bb0dc9"},{"region":"HKG","tenantId":"TestCloudFS_abcdefg1-2665-4162-b8e4-7e69b8bb0dc9","publicURL":"https:\/\/cdn6.clouddrive.com\/v1\/TestCloudFS_abcdefg1-2665-4162-b8e4-7e69b8bb0dc9"},{"region":"SYD","tenantId":"TestCloudFS_abcdefg1-2665-4162-b8e4-7e69b8bb0dc9","publicURL":"https:\/\/cdn4.clouddrive.com\/v1\/TestCloudFS_abcdefg1-2665-4162-b8e4-7e69b8bb0dc9"},{"region":"ORD","tenantId":"TestCloudFS_abcdefg1-2665-4162-b8e4-7e69b8bb0dc9","publicURL":"https:\/\/cdn2.clouddrive.com\/v1\/TestCloudFS_abcdefg1-2665-4162-b8e4-7e69b8bb0dc9"},{"region":"DFW","tenantId":"TestCloudFS_abcdefg1-2665-4162-b8e4-7e69b8bb0dc9","publicURL":"https:\/\/cdn1.clouddrive.com\/v1\/TestCloudFS_abcdefg1-2665-4162-b8e4-7e69b8bb0dc9"}],"type":"rax:object-cdn"}],"user":{"id":"d8856371def243f6a8356d94cf0bd50c","roles":[{"id":"10000258","description":"Full
41
+ Access Admin Role for Account User","name":"admin"},{"tenantId":"01234","id":"6","description":"A
42
+ Role that allows a user access to keystone Service methods","name":"compute:default"},{"tenantId":"TestCloudFS_abcdefg1-2665-4162-b8e4-7e69b8bb0dc9","id":"5","description":"A
43
+ Role that allows a user access to keystone Service methods","name":"object-store:default"},{"id":"10000150","description":"Checkmate
44
+ Access role","name":"checkmate"},{"id":"2","description":"Default Role.","name":"identity:default"}],"name":"<rackspace-username>","RAX-AUTH:defaultRegion":"IAD"}}}'
45
+ http_version:
46
+ recorded_at: Thu, 19 Dec 2013 18:15:49 GMT
47
+ - request:
48
+ method: get
49
+ uri: https://ord.servers.api.rackspacecloud.com/v2/01234/flavors/detail
50
+ body:
51
+ encoding: US-ASCII
52
+ string: ''
53
+ headers:
54
+ User-Agent:
55
+ - rumm/0.0.24 fog/1.16.0
56
+ Content-Type:
57
+ - application/json
58
+ Accept:
59
+ - application/json
60
+ X-Auth-Token:
61
+ - <rackspace-api-token>
62
+ response:
63
+ status:
64
+ code: 200
65
+ message:
66
+ headers:
67
+ Content-Type:
68
+ - application/json
69
+ Via:
70
+ - 1.1 Repose (Repose/2.12)
71
+ Content-Length:
72
+ - '8117'
73
+ Date:
74
+ - Thu, 19 Dec 2013 18:16:08 GMT
75
+ x-compute-request-id:
76
+ - req-bfe73f85-dc48-4fbd-82ce-0fc65775c6c3
77
+ Server:
78
+ - Jetty(8.0.y.z-SNAPSHOT)
79
+ body:
80
+ encoding: US-ASCII
81
+ string: ! '{"flavors": [{"OS-FLV-WITH-EXT-SPECS:extra_specs": {"class": "standard1",
82
+ "disk_io_index": "2", "number_of_data_disks": "0"}, "name": "512MB Standard
83
+ Instance", "links": [{"href": "https://ord.servers.api.rackspacecloud.com/v2/01234/flavors/2",
84
+ "rel": "self"}, {"href": "https://ord.servers.api.rackspacecloud.com/01234/flavors/2",
85
+ "rel": "bookmark"}], "ram": 512, "vcpus": 1, "swap": 512, "rxtx_factor": 80.0,
86
+ "OS-FLV-EXT-DATA:ephemeral": 0, "disk": 20, "id": "2"}, {"OS-FLV-WITH-EXT-SPECS:extra_specs":
87
+ {"class": "standard1", "disk_io_index": "2", "number_of_data_disks": "0"},
88
+ "name": "1GB Standard Instance", "links": [{"href": "https://ord.servers.api.rackspacecloud.com/v2/01234/flavors/3",
89
+ "rel": "self"}, {"href": "https://ord.servers.api.rackspacecloud.com/01234/flavors/3",
90
+ "rel": "bookmark"}], "ram": 1024, "vcpus": 1, "swap": 1024, "rxtx_factor":
91
+ 120.0, "OS-FLV-EXT-DATA:ephemeral": 0, "disk": 40, "id": "3"}, {"OS-FLV-WITH-EXT-SPECS:extra_specs":
92
+ {"class": "standard1", "disk_io_index": "2", "number_of_data_disks": "0"},
93
+ "name": "2GB Standard Instance", "links": [{"href": "https://ord.servers.api.rackspacecloud.com/v2/01234/flavors/4",
94
+ "rel": "self"}, {"href": "https://ord.servers.api.rackspacecloud.com/01234/flavors/4",
95
+ "rel": "bookmark"}], "ram": 2048, "vcpus": 2, "swap": 2048, "rxtx_factor":
96
+ 240.0, "OS-FLV-EXT-DATA:ephemeral": 0, "disk": 80, "id": "4"}, {"OS-FLV-WITH-EXT-SPECS:extra_specs":
97
+ {"class": "standard1", "disk_io_index": "2", "number_of_data_disks": "0"},
98
+ "name": "4GB Standard Instance", "links": [{"href": "https://ord.servers.api.rackspacecloud.com/v2/01234/flavors/5",
99
+ "rel": "self"}, {"href": "https://ord.servers.api.rackspacecloud.com/01234/flavors/5",
100
+ "rel": "bookmark"}], "ram": 4096, "vcpus": 2, "swap": 2048, "rxtx_factor":
101
+ 400.0, "OS-FLV-EXT-DATA:ephemeral": 0, "disk": 160, "id": "5"}, {"OS-FLV-WITH-EXT-SPECS:extra_specs":
102
+ {"class": "standard1", "disk_io_index": "2", "number_of_data_disks": "0"},
103
+ "name": "8GB Standard Instance", "links": [{"href": "https://ord.servers.api.rackspacecloud.com/v2/01234/flavors/6",
104
+ "rel": "self"}, {"href": "https://ord.servers.api.rackspacecloud.com/01234/flavors/6",
105
+ "rel": "bookmark"}], "ram": 8192, "vcpus": 4, "swap": 2048, "rxtx_factor":
106
+ 600.0, "OS-FLV-EXT-DATA:ephemeral": 0, "disk": 320, "id": "6"}, {"OS-FLV-WITH-EXT-SPECS:extra_specs":
107
+ {"class": "standard1", "disk_io_index": "2", "number_of_data_disks": "0"},
108
+ "name": "15GB Standard Instance", "links": [{"href": "https://ord.servers.api.rackspacecloud.com/v2/01234/flavors/7",
109
+ "rel": "self"}, {"href": "https://ord.servers.api.rackspacecloud.com/01234/flavors/7",
110
+ "rel": "bookmark"}], "ram": 15360, "vcpus": 6, "swap": 2048, "rxtx_factor":
111
+ 800.0, "OS-FLV-EXT-DATA:ephemeral": 0, "disk": 620, "id": "7"}, {"OS-FLV-WITH-EXT-SPECS:extra_specs":
112
+ {"class": "standard1", "disk_io_index": "2", "number_of_data_disks": "0"},
113
+ "name": "30GB Standard Instance", "links": [{"href": "https://ord.servers.api.rackspacecloud.com/v2/01234/flavors/8",
114
+ "rel": "self"}, {"href": "https://ord.servers.api.rackspacecloud.com/01234/flavors/8",
115
+ "rel": "bookmark"}], "ram": 30720, "vcpus": 8, "swap": 2048, "rxtx_factor":
116
+ 1200.0, "OS-FLV-EXT-DATA:ephemeral": 0, "disk": 1200, "id": "8"}, {"OS-FLV-WITH-EXT-SPECS:extra_specs":
117
+ {"resize_policy_class": "performance_flavor", "class": "performance1", "disk_io_index":
118
+ "40", "number_of_data_disks": "0"}, "name": "1 GB Performance", "links": [{"href":
119
+ "https://ord.servers.api.rackspacecloud.com/v2/01234/flavors/performance1-1",
120
+ "rel": "self"}, {"href": "https://ord.servers.api.rackspacecloud.com/01234/flavors/performance1-1",
121
+ "rel": "bookmark"}], "ram": 1024, "vcpus": 1, "swap": "", "rxtx_factor": 200.0,
122
+ "OS-FLV-EXT-DATA:ephemeral": 0, "disk": 20, "id": "performance1-1"}, {"OS-FLV-WITH-EXT-SPECS:extra_specs":
123
+ {"resize_policy_class": "performance_flavor", "class": "performance1", "disk_io_index":
124
+ "40", "number_of_data_disks": "1"}, "name": "2 GB Performance", "links": [{"href":
125
+ "https://ord.servers.api.rackspacecloud.com/v2/01234/flavors/performance1-2",
126
+ "rel": "self"}, {"href": "https://ord.servers.api.rackspacecloud.com/01234/flavors/performance1-2",
127
+ "rel": "bookmark"}], "ram": 2048, "vcpus": 2, "swap": "", "rxtx_factor": 400.0,
128
+ "OS-FLV-EXT-DATA:ephemeral": 20, "disk": 40, "id": "performance1-2"}, {"OS-FLV-WITH-EXT-SPECS:extra_specs":
129
+ {"resize_policy_class": "performance_flavor", "class": "performance1", "disk_io_index":
130
+ "40", "number_of_data_disks": "1"}, "name": "4 GB Performance", "links": [{"href":
131
+ "https://ord.servers.api.rackspacecloud.com/v2/01234/flavors/performance1-4",
132
+ "rel": "self"}, {"href": "https://ord.servers.api.rackspacecloud.com/01234/flavors/performance1-4",
133
+ "rel": "bookmark"}], "ram": 4096, "vcpus": 4, "swap": "", "rxtx_factor": 800.0,
134
+ "OS-FLV-EXT-DATA:ephemeral": 40, "disk": 40, "id": "performance1-4"}, {"OS-FLV-WITH-EXT-SPECS:extra_specs":
135
+ {"resize_policy_class": "performance_flavor", "class": "performance1", "disk_io_index":
136
+ "40", "number_of_data_disks": "1"}, "name": "8 GB Performance", "links": [{"href":
137
+ "https://ord.servers.api.rackspacecloud.com/v2/01234/flavors/performance1-8",
138
+ "rel": "self"}, {"href": "https://ord.servers.api.rackspacecloud.com/01234/flavors/performance1-8",
139
+ "rel": "bookmark"}], "ram": 8192, "vcpus": 8, "swap": "", "rxtx_factor": 1600.0,
140
+ "OS-FLV-EXT-DATA:ephemeral": 80, "disk": 40, "id": "performance1-8"}, {"OS-FLV-WITH-EXT-SPECS:extra_specs":
141
+ {"resize_policy_class": "performance_flavor", "class": "performance2", "disk_io_index":
142
+ "80", "number_of_data_disks": "4"}, "name": "120 GB Performance", "links":
143
+ [{"href": "https://ord.servers.api.rackspacecloud.com/v2/01234/flavors/performance2-120",
144
+ "rel": "self"}, {"href": "https://ord.servers.api.rackspacecloud.com/01234/flavors/performance2-120",
145
+ "rel": "bookmark"}], "ram": 122880, "vcpus": 32, "swap": "", "rxtx_factor":
146
+ 10000.0, "OS-FLV-EXT-DATA:ephemeral": 1200, "disk": 40, "id": "performance2-120"},
147
+ {"OS-FLV-WITH-EXT-SPECS:extra_specs": {"resize_policy_class": "performance_flavor",
148
+ "class": "performance2", "disk_io_index": "40", "number_of_data_disks": "1"},
149
+ "name": "15 GB Performance", "links": [{"href": "https://ord.servers.api.rackspacecloud.com/v2/01234/flavors/performance2-15",
150
+ "rel": "self"}, {"href": "https://ord.servers.api.rackspacecloud.com/01234/flavors/performance2-15",
151
+ "rel": "bookmark"}], "ram": 15360, "vcpus": 4, "swap": "", "rxtx_factor":
152
+ 1250.0, "OS-FLV-EXT-DATA:ephemeral": 150, "disk": 40, "id": "performance2-15"},
153
+ {"OS-FLV-WITH-EXT-SPECS:extra_specs": {"resize_policy_class": "performance_flavor",
154
+ "class": "performance2", "disk_io_index": "40", "number_of_data_disks": "1"},
155
+ "name": "30 GB Performance", "links": [{"href": "https://ord.servers.api.rackspacecloud.com/v2/01234/flavors/performance2-30",
156
+ "rel": "self"}, {"href": "https://ord.servers.api.rackspacecloud.com/01234/flavors/performance2-30",
157
+ "rel": "bookmark"}], "ram": 30720, "vcpus": 8, "swap": "", "rxtx_factor":
158
+ 2500.0, "OS-FLV-EXT-DATA:ephemeral": 300, "disk": 40, "id": "performance2-30"},
159
+ {"OS-FLV-WITH-EXT-SPECS:extra_specs": {"resize_policy_class": "performance_flavor",
160
+ "class": "performance2", "disk_io_index": "60", "number_of_data_disks": "2"},
161
+ "name": "60 GB Performance", "links": [{"href": "https://ord.servers.api.rackspacecloud.com/v2/01234/flavors/performance2-60",
162
+ "rel": "self"}, {"href": "https://ord.servers.api.rackspacecloud.com/01234/flavors/performance2-60",
163
+ "rel": "bookmark"}], "ram": 61440, "vcpus": 16, "swap": "", "rxtx_factor":
164
+ 5000.0, "OS-FLV-EXT-DATA:ephemeral": 600, "disk": 40, "id": "performance2-60"},
165
+ {"OS-FLV-WITH-EXT-SPECS:extra_specs": {"resize_policy_class": "performance_flavor",
166
+ "class": "performance2", "disk_io_index": "70", "number_of_data_disks": "3"},
167
+ "name": "90 GB Performance", "links": [{"href": "https://ord.servers.api.rackspacecloud.com/v2/01234/flavors/performance2-90",
168
+ "rel": "self"}, {"href": "https://ord.servers.api.rackspacecloud.com/01234/flavors/performance2-90",
169
+ "rel": "bookmark"}], "ram": 92160, "vcpus": 24, "swap": "", "rxtx_factor":
170
+ 7500.0, "OS-FLV-EXT-DATA:ephemeral": 900, "disk": 40, "id": "performance2-90"}]}'
171
+ http_version:
172
+ recorded_at: Thu, 19 Dec 2013 18:15:51 GMT
173
+ recorded_with: VCR 2.8.0
@@ -0,0 +1,19 @@
1
+ require "spec_helper"
2
+ require "job_provider"
3
+
4
+ describe "getting a jenkins job config xml" do
5
+ use_natural_assertions
6
+ Given(:job) { JobProvider.new.job_template *arguments }
7
+
8
+ context "with default arguments" do
9
+ Given(:arguments) { ["https://github.com/hayesmp/railsgirls-app.git", "bundle exec rake"] }
10
+ Then { not job.nil? }
11
+ Then { job.class == String }
12
+ end
13
+
14
+ context "with custom arguments" do
15
+ Given(:arguments) { ["https://github.com/hayesmp/rumm.git", "custom command"] }
16
+ Then { job.include?("https://github.com/hayesmp/rumm.git")==true }
17
+ Then { job.include?("custom command")==true }
18
+ end
19
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rumm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.24
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Charles Lowell
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-17 00:00:00.000000000 Z
11
+ date: 2013-12-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mvcli
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - ~>
32
32
  - !ruby/object:Gem::Version
33
- version: 1.16.0
33
+ version: '1.16'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ~>
39
39
  - !ruby/object:Gem::Version
40
- version: 1.16.0
40
+ version: '1.16'
41
41
  description: Lift heavy things inside your Rackspace
42
42
  email:
43
43
  - cowboyd@thefrontside.net
@@ -58,9 +58,12 @@ files:
58
58
  - app/controllers/containers_controller.rb
59
59
  - app/controllers/databases_controller.rb
60
60
  - app/controllers/files_controller.rb
61
+ - app/controllers/flavors_controller.rb
61
62
  - app/controllers/help_controller.rb
62
63
  - app/controllers/images_controller.rb
63
64
  - app/controllers/instances_controller.rb
65
+ - app/controllers/jenkins_controller.rb
66
+ - app/controllers/jobs_controller.rb
64
67
  - app/controllers/loadbalancers_controller.rb
65
68
  - app/controllers/nodes_controller.rb
66
69
  - app/controllers/railsifications_controller.rb
@@ -73,6 +76,8 @@ files:
73
76
  - app/forms/files/create_form.rb
74
77
  - app/forms/files/download_form.rb
75
78
  - app/forms/instances/create_form.rb
79
+ - app/forms/jenkins/create_form.rb
80
+ - app/forms/jobs/create_form.rb
76
81
  - app/forms/loadbalancers/create_form.rb
77
82
  - app/forms/nodes/create_form.rb
78
83
  - app/forms/servers/create_form.rb
@@ -85,6 +90,7 @@ files:
85
90
  - app/help/create_database_on_dbinstance.txt
86
91
  - app/help/create_dbinstance.txt
87
92
  - app/help/create_file_in_container.txt
93
+ - app/help/create_job_on_jenkins_server.txt
88
94
  - app/help/create_loadbalancer.txt
89
95
  - app/help/create_node_on_loadbalancer.txt
90
96
  - app/help/create_server.txt
@@ -101,6 +107,7 @@ files:
101
107
  - app/help/destroy_user_on_dbinstance.txt
102
108
  - app/help/destroy_volume.txt
103
109
  - app/help/download_file_in_container.txt
110
+ - app/help/install_jenkins_on_server.txt
104
111
  - app/help/login.txt
105
112
  - app/help/logout.txt
106
113
  - app/help/railsify_server.txt
@@ -115,6 +122,7 @@ files:
115
122
  - app/help/show_dbinstances.txt
116
123
  - app/help/show_file_in_container.txt
117
124
  - app/help/show_files_in_container.txt
125
+ - app/help/show_flavors.txt
118
126
  - app/help/show_images.txt
119
127
  - app/help/show_loadbalancer.txt
120
128
  - app/help/show_loadbalancers.txt
@@ -137,8 +145,10 @@ files:
137
145
  - app/providers/containers_provider.rb
138
146
  - app/providers/credentials_provider.rb
139
147
  - app/providers/databases_provider.rb
148
+ - app/providers/flavors_provider.rb
140
149
  - app/providers/instance_provider.rb
141
150
  - app/providers/instances_provider.rb
151
+ - app/providers/job_provider.rb
142
152
  - app/providers/loadbalancers_provider.rb
143
153
  - app/providers/login_information_provider.rb
144
154
  - app/providers/naming/adj.txt
@@ -168,12 +178,16 @@ files:
168
178
  - app/views/files/download.txt.erb
169
179
  - app/views/files/index.txt.erb
170
180
  - app/views/files/show.txt.erb
181
+ - app/views/flavors/index.txt.erb
171
182
  - app/views/help/show.txt.erb
172
183
  - app/views/images/index.txt.erb
173
184
  - app/views/instances/create.txt.erb
174
185
  - app/views/instances/destroy.txt.erb
175
186
  - app/views/instances/index.txt.erb
176
187
  - app/views/instances/show.txt.erb
188
+ - app/views/jenkins/create.txt.erb
189
+ - app/views/jobs/create.txt.erb
190
+ - app/views/jobs/job_template.xml.erb
177
191
  - app/views/loadbalancers/create.txt.erb
178
192
  - app/views/loadbalancers/destroy.txt.erb
179
193
  - app/views/loadbalancers/index.txt.erb
@@ -207,6 +221,7 @@ files:
207
221
  - spec/features/databases_spec.rb
208
222
  - spec/features/dbinstances_spec.rb
209
223
  - spec/features/files_spec.rb
224
+ - spec/features/flavors_spec.rb
210
225
  - spec/features/help_spec.rb
211
226
  - spec/features/loadbalancers_spec.rb
212
227
  - spec/features/login_spec.rb
@@ -233,6 +248,7 @@ files:
233
248
  - spec/fixtures/cassettes/files/download.yml
234
249
  - spec/fixtures/cassettes/files/show-all.yml
235
250
  - spec/fixtures/cassettes/files/show.yml
251
+ - spec/fixtures/cassettes/flavors/show.yml
236
252
  - spec/fixtures/cassettes/instances/create.yml
237
253
  - spec/fixtures/cassettes/instances/destroy.yml
238
254
  - spec/fixtures/cassettes/instances/show-all.yml
@@ -257,6 +273,7 @@ files:
257
273
  - spec/fixtures/cassettes/volumes/destroy.yml
258
274
  - spec/fixtures/cassettes/volumes/show-all.yml
259
275
  - spec/fixtures/cassettes/volumes/show.yml
276
+ - spec/providers/job_provider_spec.rb
260
277
  - spec/providers/naming_provider_spec.rb
261
278
  - spec/spec_helper.rb
262
279
  - tmp/aruba/.gitkeep
@@ -270,12 +287,12 @@ require_paths:
270
287
  - lib
271
288
  required_ruby_version: !ruby/object:Gem::Requirement
272
289
  requirements:
273
- - - ! '>='
290
+ - - '>='
274
291
  - !ruby/object:Gem::Version
275
292
  version: 1.9.3
276
293
  required_rubygems_version: !ruby/object:Gem::Requirement
277
294
  requirements:
278
- - - ! '>='
295
+ - - '>='
279
296
  - !ruby/object:Gem::Version
280
297
  version: '0'
281
298
  requirements: []
@@ -291,6 +308,7 @@ test_files:
291
308
  - spec/features/databases_spec.rb
292
309
  - spec/features/dbinstances_spec.rb
293
310
  - spec/features/files_spec.rb
311
+ - spec/features/flavors_spec.rb
294
312
  - spec/features/help_spec.rb
295
313
  - spec/features/loadbalancers_spec.rb
296
314
  - spec/features/login_spec.rb
@@ -317,6 +335,7 @@ test_files:
317
335
  - spec/fixtures/cassettes/files/download.yml
318
336
  - spec/fixtures/cassettes/files/show-all.yml
319
337
  - spec/fixtures/cassettes/files/show.yml
338
+ - spec/fixtures/cassettes/flavors/show.yml
320
339
  - spec/fixtures/cassettes/instances/create.yml
321
340
  - spec/fixtures/cassettes/instances/destroy.yml
322
341
  - spec/fixtures/cassettes/instances/show-all.yml
@@ -341,5 +360,7 @@ test_files:
341
360
  - spec/fixtures/cassettes/volumes/destroy.yml
342
361
  - spec/fixtures/cassettes/volumes/show-all.yml
343
362
  - spec/fixtures/cassettes/volumes/show.yml
363
+ - spec/providers/job_provider_spec.rb
344
364
  - spec/providers/naming_provider_spec.rb
345
365
  - spec/spec_helper.rb
366
+ has_rdoc: