polytrix 0.0.1

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 (171) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +13 -0
  3. data/.groc.json +7 -0
  4. data/.rspec +11 -0
  5. data/.rspec_parallel +10 -0
  6. data/Gemfile +23 -0
  7. data/README.md +48 -0
  8. data/Rakefile +143 -0
  9. data/Vagrantfile +41 -0
  10. data/features/0_identity_spec.rb +40 -0
  11. data/features/1_cloud_files_spec.rb +48 -0
  12. data/features/2_servers_spec.rb +19 -0
  13. data/features/features_helper.rb +46 -0
  14. data/features/helpers/cloudfiles_helper.rb +31 -0
  15. data/features/helpers/pacto_helper.rb +33 -0
  16. data/features/helpers/teardown_helper.rb +49 -0
  17. data/features/pacto/extensions/loaders/api_blueprint_loader.rb +63 -0
  18. data/features/pacto/extensions/loaders/simple_loader.rb +55 -0
  19. data/features/pacto/extensions/loaders/yaml_or_json_loader.rb +17 -0
  20. data/features/pacto/extensions/matchers.rb +38 -0
  21. data/features/phase2/feature_coverage_report.rb +109 -0
  22. data/features/phase2/run_all_features.rb +14 -0
  23. data/features/static_site/fixtures/index.html +6 -0
  24. data/lib/polytrix/challenge.rb +27 -0
  25. data/lib/polytrix/challenge_builder.rb +16 -0
  26. data/lib/polytrix/challenge_runner.rb +87 -0
  27. data/lib/polytrix/configuration.rb +31 -0
  28. data/lib/polytrix/core/file_finder.rb +43 -0
  29. data/lib/polytrix/core/implementor.rb +17 -0
  30. data/lib/polytrix/core/result_tracker.rb +25 -0
  31. data/lib/polytrix/documentation_generator.rb +18 -0
  32. data/lib/polytrix/manifest.rb +46 -0
  33. data/lib/polytrix/result.rb +9 -0
  34. data/lib/polytrix/rspec/documentation_formatter.rb +41 -0
  35. data/lib/polytrix/rspec.rb +75 -0
  36. data/lib/polytrix/runners/linux_challenge_runner.rb +22 -0
  37. data/lib/polytrix/runners/middleware/change_directory.rb +20 -0
  38. data/lib/polytrix/runners/middleware/feature_executor.rb +23 -0
  39. data/lib/polytrix/runners/middleware/pacto.rb +59 -0
  40. data/lib/polytrix/runners/middleware/setup_env_vars.rb +38 -0
  41. data/lib/polytrix/runners/windows_challenge_runner.rb +25 -0
  42. data/lib/polytrix/version.rb +3 -0
  43. data/lib/polytrix.rb +56 -0
  44. data/packer/.gitignore +3 -0
  45. data/packer/Berksfile +15 -0
  46. data/packer/Gemfile +5 -0
  47. data/packer/Vagrantfile +128 -0
  48. data/packer/cookbooks/drg/metadata.rb +27 -0
  49. data/packer/cookbooks/drg/recipes/admins.rb +22 -0
  50. data/packer/cookbooks/drg/recipes/default.rb +9 -0
  51. data/packer/cookbooks/drg/recipes/dotnet.rb +4 -0
  52. data/packer/cookbooks/drg/recipes/golang.rb +4 -0
  53. data/packer/cookbooks/drg/recipes/java.rb +5 -0
  54. data/packer/cookbooks/drg/recipes/php.rb +10 -0
  55. data/packer/cookbooks/drg/recipes/ruby.rb +29 -0
  56. data/packer/cookbooks/drg/recipes/system.rb +13 -0
  57. data/packer/create_box.sh +10 -0
  58. data/packer/http/preseed.cfg +87 -0
  59. data/packer/packer.json +91 -0
  60. data/packer/scripts/root_setup.sh +37 -0
  61. data/packer/scripts/setup.sh +32 -0
  62. data/pacto/config/pacto_server.rb +40 -0
  63. data/pacto/contracts/dfw.servers.api.rackspacecloud.com/v2/account_id/extensions.json +64 -0
  64. data/pacto/contracts/dfw.servers.api.rackspacecloud.com/v2/account_id/flavors/id.json +100 -0
  65. data/pacto/contracts/dfw.servers.api.rackspacecloud.com/v2/account_id/images/id.json +176 -0
  66. data/pacto/contracts/dfw.servers.api.rackspacecloud.com/v2/account_id/servers/id.json +189 -0
  67. data/pacto/contracts/dfw.servers.api.rackspacecloud.com/v2/account_id/servers.json +63 -0
  68. data/pacto/contracts/dns.api.rackspacecloud.com/v1.0/_tenant_id/domains.json +62 -0
  69. data/pacto/contracts/identity.api.rackspacecloud.com/v2.0/tokens.json +192 -0
  70. data/pacto/contracts/monitoring.api.rackspacecloud.com/v1.0/_tenant_id/account.json +39 -0
  71. data/pacto/contracts/ord.autoscale.api.rackspacecloud.com/v1.0/_tenant_id/groups.json +38 -0
  72. data/pacto/contracts/ord.blockstorage.api.rackspacecloud.com/v1/_tenant_id/volumes.json +30 -0
  73. data/pacto/contracts/ord.databases.api.rackspacecloud.com/v1.0/_tenant_id/instances.json +30 -0
  74. data/pacto/contracts/ord.loadbalancers.api.rackspacecloud.com/v1.0/_tenant_id/loadbalancers.json +114 -0
  75. data/pacto/contracts/ord.queues.api.rackspacecloud.com/v1/_tenant_id/queues.json +13 -0
  76. data/pacto/contracts/ord.servers.api.rackspacecloud.com/v2/_tenant_id/os-networksv2.json +46 -0
  77. data/pacto/contracts/ord.servers.api.rackspacecloud.com/v2/_tenant_id/servers/detail.json +230 -0
  78. data/pacto/contracts/storage101.dfw1.clouddrive.com/v1/mosso_account/container/object.json +15 -0
  79. data/pacto/contracts/storage101.dfw1.clouddrive.com/v1/mosso_account.json +43 -0
  80. data/pacto/contracts/storage101.ord1.clouddrive.com/v1/_mosso_id.json +44 -0
  81. data/pacto/pacto_server.rb +100 -0
  82. data/pacto/rackspace_uri_map.yaml +229 -0
  83. data/polytrix.gemspec +27 -0
  84. data/scripts/bootstrap +10 -0
  85. data/scripts/cibuild +4 -0
  86. data/sdks/fog/.gitignore +1 -0
  87. data/sdks/fog/Gemfile +5 -0
  88. data/sdks/fog/challenges/all_connections.rb +45 -0
  89. data/sdks/fog/challenges/authenticate_token.rb +15 -0
  90. data/sdks/fog/challenges/cdn_enable_container.rb +20 -0
  91. data/sdks/fog/challenges/create_a_container.rb +17 -0
  92. data/sdks/fog/challenges/create_server.rb +36 -0
  93. data/sdks/fog/challenges/get_object_metadata.rb +13 -0
  94. data/sdks/fog/challenges/list_containers.rb +10 -0
  95. data/sdks/fog/challenges/provision_scalable_webapp.rb +30 -0
  96. data/sdks/fog/challenges/upload_folder.rb +25 -0
  97. data/sdks/fog/scripts/bootstrap +4 -0
  98. data/sdks/fog/scripts/bootstrap.ps1 +1 -0
  99. data/sdks/fog/scripts/wrapper +2 -0
  100. data/sdks/fog/scripts/wrapper.ps1 +1 -0
  101. data/sdks/gophercloud/.gitignore +2 -0
  102. data/sdks/gophercloud/challenges/authenticate_token.go +23 -0
  103. data/sdks/gophercloud/scripts/bootstrap +6 -0
  104. data/sdks/gophercloud/scripts/wrapper +10 -0
  105. data/sdks/jclouds/.gitignore +1 -0
  106. data/sdks/jclouds/challenges/AuthenticateToken.java +115 -0
  107. data/sdks/jclouds/pom.xml +34 -0
  108. data/sdks/jclouds/scripts/bootstrap +3 -0
  109. data/sdks/jclouds/scripts/wrapper +7 -0
  110. data/sdks/openstack.net/.gitignore +4 -0
  111. data/sdks/openstack.net/.nuget/Microsoft.Build.dll +0 -0
  112. data/sdks/openstack.net/.nuget/NuGet.Config +6 -0
  113. data/sdks/openstack.net/.nuget/NuGet.exe +0 -0
  114. data/sdks/openstack.net/.nuget/NuGet.targets +136 -0
  115. data/sdks/openstack.net/Challenge.cs +10 -0
  116. data/sdks/openstack.net/RunChallenge.cs +19 -0
  117. data/sdks/openstack.net/challenges/AuthenticateToken.cs +24 -0
  118. data/sdks/openstack.net/challenges/Weird.cs +133 -0
  119. data/sdks/openstack.net/openstack.net.csproj +58 -0
  120. data/sdks/openstack.net/openstack.net.sln +27 -0
  121. data/sdks/openstack.net/openstack.net.userprefs +8 -0
  122. data/sdks/openstack.net/packages.config +6 -0
  123. data/sdks/openstack.net/scripts/bootstrap +2 -0
  124. data/sdks/openstack.net/scripts/bootstrap.ps1 +2 -0
  125. data/sdks/openstack.net/scripts/wrapper +7 -0
  126. data/sdks/openstack.net/scripts/wrapper.ps1 +1 -0
  127. data/sdks/php-opencloud/.gitignore +4 -0
  128. data/sdks/php-opencloud/challenges/all_connections.php +64 -0
  129. data/sdks/php-opencloud/challenges/authenticate_token.php +14 -0
  130. data/sdks/php-opencloud/challenges/create_server.php +39 -0
  131. data/sdks/php-opencloud/challenges/get_object_metadata.php +19 -0
  132. data/sdks/php-opencloud/composer.json +5 -0
  133. data/sdks/php-opencloud/scripts/bootstrap +4 -0
  134. data/sdks/php-opencloud/scripts/bootstrap.ps1 +2 -0
  135. data/sdks/php-opencloud/scripts/wrapper +2 -0
  136. data/sdks/php-opencloud/scripts/wrapper.ps1 +1 -0
  137. data/sdks/pkgcloud/.gitignore +1 -0
  138. data/sdks/pkgcloud/challenges/authenticate_token.js +17 -0
  139. data/sdks/pkgcloud/challenges/get_object_metadata.js +18 -0
  140. data/sdks/pkgcloud/scripts/bootstrap +2 -0
  141. data/sdks/pkgcloud/scripts/bootstrap.ps1 +1 -0
  142. data/sdks/pkgcloud/scripts/wrapper +2 -0
  143. data/sdks/pkgcloud/scripts/wrapper.ps1 +1 -0
  144. data/sdks/pyrax/.gitignore +2 -0
  145. data/sdks/pyrax/challenges/all_connections.py +61 -0
  146. data/sdks/pyrax/challenges/authenticate_token.py +17 -0
  147. data/sdks/pyrax/challenges/cdn_enable_container.py +22 -0
  148. data/sdks/pyrax/challenges/create_a_container.py +21 -0
  149. data/sdks/pyrax/challenges/create_server.py +35 -0
  150. data/sdks/pyrax/challenges/get_object_metadata.py +17 -0
  151. data/sdks/pyrax/challenges/upload_folder.py +32 -0
  152. data/sdks/pyrax/requirements.txt +21 -0
  153. data/sdks/pyrax/scripts/bootstrap +9 -0
  154. data/sdks/pyrax/scripts/bootstrap.ps1 +7 -0
  155. data/sdks/pyrax/scripts/wrapper +3 -0
  156. data/sdks/pyrax/scripts/wrapper.ps1 +2 -0
  157. data/spec/fixtures/factorial.py +18 -0
  158. data/spec/fixtures/polytrix.yml +16 -0
  159. data/spec/fixtures/src-doc/quine.md.erb +20 -0
  160. data/spec/polytrix/challenge_builder_spec.rb +16 -0
  161. data/spec/polytrix/challenge_runner_spec.rb +14 -0
  162. data/spec/polytrix/challenge_spec.rb +20 -0
  163. data/spec/polytrix/configuration_spec.rb +10 -0
  164. data/spec/polytrix/documentation_generator_spec.rb +36 -0
  165. data/spec/polytrix/file_finder_spec.rb +24 -0
  166. data/spec/polytrix/manifest_spec.rb +26 -0
  167. data/spec/polytrix/middleware/feature_executor_spec.rb +48 -0
  168. data/spec/polytrix_spec.rb +13 -0
  169. data/spec/rspec_spec.rb +17 -0
  170. data/spec/spec_helper.rb +7 -0
  171. metadata +325 -0
@@ -0,0 +1,229 @@
1
+ ---
2
+ # Provides a simple map of request patterns to service names,
3
+ # so Pacto can do basic validation that services are called
4
+ # and testing of services before a complete contract is available.
5
+ services:
6
+ Identity:
7
+ servers:
8
+ - identity.api.rackspacecloud.com
9
+ services:
10
+ # contract is available
11
+ Authenticate:
12
+ method: post
13
+ uriTemplate: /v2.0/tokens
14
+ requestSchema:
15
+ $schema: "http://json-schema.org/draft-03/schema#"
16
+ description: "Generated from pacto with shasum b5ec82bb381eac4a445c35bbfbfcc324135a742c"
17
+ type: "object"
18
+ required: true
19
+ properties:
20
+ auth:
21
+ type: "object"
22
+ required: true
23
+ properties:
24
+ RAX-KSKEY:apiKeyCredentials:
25
+ type: "object"
26
+ required: true
27
+ properties:
28
+ username:
29
+ type: "string"
30
+ required: true
31
+ apiKey:
32
+ type: "string"
33
+ required: true
34
+ Cloud Servers:
35
+ servers:
36
+ - syd.servers.api.rackspacecloud.com
37
+ - iad.servers.api.rackspacecloud.com
38
+ - ord.servers.api.rackspacecloud.com
39
+ - dfw.servers.api.rackspacecloud.com
40
+ - hkg.servers.api.rackspacecloud.com
41
+ services:
42
+ List Servers:
43
+ method: get
44
+ uriTemplate: /v2/{tenant_id}/servers/detail{?limit}
45
+ Create Server:
46
+ method: post
47
+ uriTemplate: /v2/{tenant_id}/servers{?limit}
48
+ responseStatusCode: 202
49
+ Get Server Details:
50
+ method: get
51
+ uriTemplate: /v2/{tenant_id}/servers/{id}
52
+ Attach Volume:
53
+ method: post
54
+ uriTemplate: /v2/{tenant_id}/servers/{server_id}/os-volume_attachments{?limit}
55
+ # Documented code is 202, but I'm receiving 200
56
+ responseStatusCode: 200
57
+ List Extensions:
58
+ method: get
59
+ uriTemplate: /v2/{tenant_id}/extensions{?limit}
60
+ Get Image Details:
61
+ method: get
62
+ uriTemplate: /v2/{tenant_id}/images/{image_id}
63
+ Get Flavor Details:
64
+ method: get
65
+ uriTemplate: /v2/{tenant_id}/flavors/{flavor_id}
66
+ Cloud Files:
67
+ servers:
68
+ - snet-storage101.dfw1.clouddrive.com
69
+ - storage101.dfw1.clouddrive.com
70
+ - snet-storage101.iad3.clouddrive.com
71
+ - storage101.iad3.clouddrive.com
72
+ - storage101.ord1.clouddrive.com
73
+ - snet-storage101.ord1.clouddrive.com
74
+ - snet-storage101.syd2.clouddrive.com
75
+ - storage101.syd2.clouddrive.com
76
+ - snet-storage101.hkg1.clouddrive.com
77
+ - storage101.hkg1.clouddrive.com
78
+ services:
79
+ List Containers:
80
+ method: get
81
+ # uriTemplate only supports RFC 6570 level 0
82
+ # uriTemplate: v1/{account}{?limit,marker,end_marker,format}
83
+ # Fog and php-opencloud require a trailing '/' before '?', which works
84
+ # but is inconsistent with documentation
85
+ uriTemplate: /v1/{account}{?format,limit}
86
+ Get Object Metadata:
87
+ method: head
88
+ uriTemplate: /v1/{account}/{container}/{object}{?format}
89
+ CDN:
90
+ servers:
91
+ - cdn1.clouddrive.com
92
+ - cdn4.clouddrive.com
93
+ - cdn2.clouddrive.com
94
+ - cdn5.clouddrive.com
95
+ - cdn6.clouddrive.com
96
+ services:
97
+ Load Balancers:
98
+ servers:
99
+ - syd.loadbalancers.api.rackspacecloud.com
100
+ - iad.loadbalancers.api.rackspacecloud.com
101
+ - ord.loadbalancers.api.rackspacecloud.com
102
+ - dfw.loadbalancers.api.rackspacecloud.com
103
+ - hkg.loadbalancers.api.rackspacecloud.com
104
+ services:
105
+ Create:
106
+ method: post
107
+ uriTemplate: /loadbalancers
108
+ Add Node:
109
+ method: post
110
+ uriTemplate: /loadbalancers/{loadBalancerId}/nodes
111
+ List Load Balancers:
112
+ method: get
113
+ uriTemplate: /v1.0/{token_id}/loadbalancers{.format}{?limit}
114
+ Block Storage:
115
+ # Note that OpenStack docs currently have v2, Rackspace is v1
116
+ servers:
117
+ - syd.blockstorage.api.rackspacecloud.com
118
+ - iad.blockstorage.api.rackspacecloud.com
119
+ - ord.blockstorage.api.rackspacecloud.com
120
+ - dfw.blockstorage.api.rackspacecloud.com
121
+ - hkg.blockstorage.api.rackspacecloud.com
122
+ services:
123
+ Create Volume:
124
+ method: post
125
+ uriTemplate: /v1/{tenant_id}/volumes
126
+ List Volumes:
127
+ method: get
128
+ uriTemplate: /v1/{token_id}/volumes{?limit}
129
+ Cloud Database:
130
+ servers:
131
+ - syd.databases.api.rackspacecloud.com
132
+ - iad.databases.api.rackspacecloud.com
133
+ - ord.databases.api.rackspacecloud.com
134
+ - dfw.databases.api.rackspacecloud.com
135
+ - hkg.databases.api.rackspacecloud.com
136
+ services:
137
+ Create Instance:
138
+ method: post
139
+ uriTemplate: /instances
140
+ Create Database:
141
+ method: post
142
+ uriTemplate: /instances/{instanceId}/databases
143
+ List Instances:
144
+ method: get
145
+ uriTemplate: /v1.0/{token_id}/instances{?limit}
146
+ DNS:
147
+ servers:
148
+ - dns.api.rackspacecloud.com
149
+ services:
150
+ Create Domain:
151
+ method: post
152
+ uriTemplate: /domains
153
+ Add Records:
154
+ method: post
155
+ uriTemplate: /domains/{domainId}/records
156
+ List Domains:
157
+ method: get
158
+ uriTemplate: /v1.0/{token_id}/domains{?limit}
159
+ Monitoring:
160
+ servers:
161
+ - monitoring.api.rackspacecloud.com
162
+ services:
163
+ Backups:
164
+ servers:
165
+ - backup.api.rackspacecloud.com
166
+ - syd.backup.api.rackspacecloud.com
167
+ - iad.backup.api.rackspacecloud.com
168
+ - ord.backup.api.rackspacecloud.com
169
+ - dfw.backup.api.rackspacecloud.com
170
+ - hkg.backup.api.rackspacecloud.com
171
+ services:
172
+ Create Backup Configuration:
173
+ method: post
174
+ uriTemplate: /backup-configuration
175
+ Start or Stop a Backup Manually:
176
+ method: post
177
+ uriTemplate: /backup/action-requested
178
+ Autoscale:
179
+ servers:
180
+ - syd.autoscale.api.rackspacecloud.com
181
+ - iad.autoscale.api.rackspacecloud.com
182
+ - ord.autoscale.api.rackspacecloud.com
183
+ - dfw.autoscale.api.rackspacecloud.com
184
+ - hkg.autoscale.api.rackspacecloud.com
185
+ services:
186
+ List Groups:
187
+ method: get
188
+ uriTemplate: /v1.0/{token_id}/groups{?limit}
189
+ Cloud Queues:
190
+ servers:
191
+ - snet-hkg.queues.api.rackspacecloud.com
192
+ - hkg.queues.api.rackspacecloud.com
193
+ - snet-iad.queues.api.rackspacecloud.com
194
+ - iad.queues.api.rackspacecloud.com
195
+ - snet-dfw.queues.api.rackspacecloud.com
196
+ - dfw.queues.api.rackspacecloud.com
197
+ - snet-syd.queues.api.rackspacecloud.com
198
+ - syd.queues.api.rackspacecloud.com
199
+ - snet-ord.queues.api.rackspacecloud.com
200
+ - ord.queues.api.rackspacecloud.com
201
+ services:
202
+ List Queues:
203
+ method: get
204
+ uriTemplate: /v1/{token_id}/queues{?limit}
205
+ responseStatusCode: 204
206
+ Cloud Networks:
207
+ servers:
208
+ - syd.servers.api.rackspacecloud.com
209
+ - iad.servers.api.rackspacecloud.com
210
+ - ord.servers.api.rackspacecloud.com
211
+ - dfw.servers.api.rackspacecloud.com
212
+ - hkg.servers.api.rackspacecloud.com
213
+ services:
214
+ List Networks:
215
+ method: get
216
+ uriTemplate: /v2/{token_id}/os-networksv2{?limit}
217
+ Cloud Monitoring:
218
+ servers:
219
+ - monitoring.api.rackspacecloud.com
220
+ services:
221
+ Get Account:
222
+ method: get
223
+ uriTemplate: /v1.0/{token_id}/account
224
+ # Need
225
+ # Cloud Networks / List Networks
226
+ # Load Balancers / List Load Balancers
227
+
228
+ # Did not List Containers
229
+
data/polytrix.gemspec ADDED
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'polytrix/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "polytrix"
8
+ spec.version = Polytrix::VERSION
9
+ spec.authors = ["Max Lincoln"]
10
+ spec.email = ["max@devopsy.com"]
11
+ spec.summary = %q{A polyglot test runner for sample code}
12
+ spec.description = %q{A polyglot test runner for sample code}
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency "mixlib-shellout", "~> 1.3"
22
+ spec.add_dependency "middleware", "~> 0.1"
23
+ spec.add_dependency "rspec", "~> 2.14"
24
+ spec.add_dependency "hashie", "~> 2.0"
25
+ spec.add_development_dependency "bundler", "~> 1.5"
26
+ spec.add_development_dependency "rake"
27
+ end
data/scripts/bootstrap ADDED
@@ -0,0 +1,10 @@
1
+ #!/bin/bash
2
+ gem install bundler --no-ri --no-rdoc
3
+ rbenv rehash
4
+ bundle update
5
+ virtualenv polytrix
6
+ source polytrix/bin/activate
7
+ pip install pygments
8
+ npm install groc
9
+ export PATH="$PATH:`pwd`/node_modules/.bin"
10
+ bundle exec rake bootstrap
data/scripts/cibuild ADDED
@@ -0,0 +1,4 @@
1
+ #!/bin/bash
2
+ set -e
3
+ bundle exec rake clean bootstrap parallel_spec documentation:dashboard
4
+ bundle exec rspec spec/phase2/feature_coverage_report.rb --format MatrixFormatter::Formatters::HTML5Formatter --out docs/api_coverage.html
@@ -0,0 +1 @@
1
+ Gemfile.lock
data/sdks/fog/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ # A sample Gemfile
2
+ source "https://rubygems.org"
3
+
4
+ gem "fog"
5
+ gem "pry"
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'fog'
4
+
5
+ connection_opts = {
6
+ :rackspace_username => ENV['RAX_USERNAME'],
7
+ :rackspace_api_key => ENV['RAX_API_KEY'],
8
+ :rackspace_region => ENV['RAX_REGION'].downcase.to_sym,
9
+ :rackspace_auth_url => "#{ENV['RAX_AUTH_URL']}/v2.0"
10
+ }
11
+
12
+ # Compute services:
13
+ compute = Fog::Compute.new(connection_opts.merge({:provider => 'rackspace'}))
14
+ puts "Servers: #{compute.servers.all}"
15
+ puts "Networks: #{compute.networks.all}"
16
+
17
+ load_balancers = Fog::Rackspace::LoadBalancers.new(connection_opts)
18
+ puts "Cloud Load Balancers: #{load_balancers.load_balancers.all}"
19
+
20
+ storage = Fog::Storage.new(connection_opts.merge({:provider => 'rackspace'}))
21
+ puts "Cloud Files Containers: #{storage.directories.all}"
22
+
23
+ databases = Fog::Rackspace::Databases.new(connection_opts)
24
+ puts "Cloud Databases: #{databases.instances.all}"
25
+
26
+ dns = Fog::DNS::Rackspace.new(connection_opts)
27
+ puts "Cloud DNS: #{dns.zones.all}"
28
+
29
+ identity = Fog::Rackspace::Identity.new(connection_opts)
30
+ puts "Cloud Identity Users: #{identity.users.all}"
31
+
32
+ monitoring = Fog::Rackspace::Monitoring.new(connection_opts)
33
+ puts "Cloud Monitoring Account: #{monitoring.list_entities}"
34
+
35
+ block_storage = Fog::Rackspace::BlockStorage.new(connection_opts)
36
+ puts "Cloud Block Storage Volumes: #{block_storage.volumes.all}"
37
+
38
+ # Cloud Backup?
39
+
40
+ autoscale = Fog::Rackspace::AutoScale.new(connection_opts)
41
+ puts "Autoscale Scaling Groups: #{autoscale.groups.all}"
42
+
43
+ # Cloud Queues
44
+ queues = Fog::Rackspace::Queues.new(connection_opts)
45
+ puts "Cloud Queues: #{queues.queues.all}"
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # This example demonstrates creating a server with the Rackpace Open Cloud
4
+
5
+ require 'fog'
6
+
7
+ service = Fog::Compute.new({
8
+ :provider => 'rackspace',
9
+ :rackspace_username => ENV['RAX_USERNAME'],
10
+ :rackspace_api_key => ENV['RAX_API_KEY'],
11
+ :rackspace_region => ENV['RAX_REGION'].downcase.to_sym,
12
+ :rackspace_auth_url => "#{ENV['RAX_AUTH_URL']}/v2.0"
13
+ })
14
+
15
+ puts "Authenticated"
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'fog'
4
+ connection_opts = {
5
+ :rackspace_username => ENV['RAX_USERNAME'],
6
+ :rackspace_api_key => ENV['RAX_API_KEY'],
7
+ :rackspace_region => ENV['RAX_REGION'].downcase.to_sym,
8
+ :rackspace_auth_url => "#{ENV['RAX_AUTH_URL']}/v2.0"
9
+ }
10
+ storage = Fog::Storage.new(connection_opts.merge({:provider => 'rackspace'}))
11
+
12
+ container_name = 'my-site'
13
+ folder_to_upload = ENV['TEST_DIRECTORY']
14
+ username = ENV['RAX_USERNAME']
15
+ api_key = ENV['RAX_API_KEY']
16
+ auth_endpoint = ENV['RAX_AUTH_URL']
17
+
18
+ directory = storage.directories.get container_name
19
+ directory.public = true
20
+ directory.save
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'fog'
4
+ connection_opts = {
5
+ :rackspace_username => ENV['RAX_USERNAME'],
6
+ :rackspace_api_key => ENV['RAX_API_KEY'],
7
+ :rackspace_region => ENV['RAX_REGION'].downcase.to_sym,
8
+ :rackspace_auth_url => "#{ENV['RAX_AUTH_URL']}/v2.0"
9
+ }
10
+ storage = Fog::Storage.new(connection_opts.merge({:provider => 'rackspace'}))
11
+
12
+ container_name = ENV['CONTAINER_NAME']
13
+ username = ENV['RAX_USERNAME']
14
+ api_key = ENV['RAX_API_KEY']
15
+ auth_endpoint = ENV['RAX_AUTH_URL']
16
+
17
+ storage.directories.create :key => 'my-site'
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'fog'
4
+ Excon.defaults[:ssl_verify_peer] = false
5
+
6
+ service = Fog::Compute.new({
7
+ :provider => 'rackspace',
8
+ :rackspace_username => ENV['RAX_USERNAME'],
9
+ :rackspace_api_key => ENV['RAX_API_KEY'],
10
+ :rackspace_region => ENV['RAX_REGION'].downcase.to_sym,
11
+ :rackspace_auth_url => "#{ENV['RAX_AUTH_URL']}/v2.0"
12
+ })
13
+
14
+ server = service.servers.create :name => 'Fog Server',
15
+ :flavor_id => ENV['SERVER1_FLAVOR'],
16
+ :image_id => ENV['SERVER1_IMAGE']
17
+
18
+ puts "\n"
19
+
20
+ begin
21
+ # Check every 5 seconds to see if server is in the active state (ready?).
22
+ # If the server has not been built in 5 minutes (600 seconds) an exception will be raised.
23
+ server.wait_for(600, 5) do
24
+ print "."
25
+ STDOUT.flush
26
+ ready?
27
+ end
28
+
29
+ puts "[DONE]\n\n"
30
+
31
+ rescue Fog::Errors::TimeoutError
32
+ puts "[TIMEOUT]\n\n"
33
+
34
+ puts "This server is currently #{server.progress}% into the build process and is taking longer to complete than expected."
35
+ puts "You can continute to monitor the build process through the web console at https://mycloud.rackspace.com/\n\n"
36
+ end
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env ruby
2
+ require 'fog'
3
+
4
+ service = Fog::Storage.new({
5
+ :provider => 'rackspace',
6
+ :rackspace_username => ENV['RAX_USERNAME'],
7
+ :rackspace_api_key => ENV['RAX_API_KEY'],
8
+ :rackspace_region => ENV['RAX_REGION'],
9
+ :rackspace_auth_url => "#{ENV['RAX_AUTH_URL']}/v2.0"
10
+ })
11
+ # directory = service.directories.get ENV['TEST_DIRECTORY']
12
+ # directory.files.head_object ENV['TEST_FILE']
13
+ service.head_object ENV['TEST_DIRECTORY'], ENV['TEST_FILE']
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ require 'fog'
3
+
4
+ service = Fog::Storage.new({
5
+ :provider => 'rackspace',
6
+ :rackspace_username => ENV['RAX_USERNAME'],
7
+ :rackspace_api_key => ENV['RAX_API_KEY'],
8
+ :rackspace_auth_url => "#{ENV['RAX_AUTH_URL']}/v2.0"
9
+ })
10
+ containers = service.get_containers
@@ -0,0 +1,30 @@
1
+ require 'fog'
2
+
3
+ volume_name = 'my_volume'
4
+ connection_opts = {
5
+ :rackspace_username => ENV['RAX_USERNAME'],
6
+ :rackspace_api_key => ENV['RAX_API_KEY'],
7
+ :rackspace_region => ENV['RAX_REGION'].downcase.to_sym,
8
+ :rackspace_auth_url => "#{ENV['RAX_AUTH_URL']}/v2.0"
9
+ }
10
+
11
+ compute = Fog::Compute.new(connection_opts.merge(:provider => 'rackspace'))
12
+
13
+ server = compute.servers.create :name => 'Fog Server',
14
+ :flavor_id => ENV['SERVER1_FLAVOR'],
15
+ :image_id => ENV['SERVER1_IMAGE']
16
+
17
+ server.wait_for(600, 5) do
18
+ print "."
19
+ STDOUT.flush
20
+ ready?
21
+ end
22
+
23
+ server = server.reload
24
+
25
+ cbs_service = Fog::Rackspace::BlockStorage.new(connection_opts)
26
+
27
+ puts "\nCreating Volume\n"
28
+ volume = cbs_service.volumes.create(:size => 100, :display_name => volume_name)
29
+ puts "\nAttaching volume\n"
30
+ attachment = server.attach_volume volume
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'fog'
4
+ connection_opts = {
5
+ :rackspace_username => ENV['RAX_USERNAME'],
6
+ :rackspace_api_key => ENV['RAX_API_KEY'],
7
+ :rackspace_region => ENV['RAX_REGION'].downcase.to_sym,
8
+ :rackspace_auth_url => "#{ENV['RAX_AUTH_URL']}/v2.0"
9
+ }
10
+ storage = Fog::Storage.new(connection_opts.merge({:provider => 'rackspace'}))
11
+
12
+ container_name = 'my-site'
13
+ folder_to_upload = ENV['TEST_DIRECTORY']
14
+ username = ENV['RAX_USERNAME']
15
+ api_key = ENV['RAX_API_KEY']
16
+ auth_endpoint = ENV['RAX_AUTH_URL']
17
+
18
+ puts 'Uploading folder'
19
+ local_directory = Pathname.new folder_to_upload
20
+ remote_directory = storage.directories.create :key => container_name
21
+ Dir["#{folder_to_upload}/**.*"].each do |file|
22
+ file_key = Pathname.new(file).relative_path_from local_directory
23
+ remote_directory.files.create :key => file_key.to_s, :body => File.open(file)
24
+ end
25
+ puts 'Done uploading'
@@ -0,0 +1,4 @@
1
+ #!/bin/bash
2
+
3
+ bundle install
4
+
@@ -0,0 +1 @@
1
+ bundle install
@@ -0,0 +1,2 @@
1
+ #!/bin/bash
2
+ bundle exec ruby "$@"
@@ -0,0 +1 @@
1
+ bundle exec ruby "$args"
@@ -0,0 +1,2 @@
1
+ go/
2
+
@@ -0,0 +1,23 @@
1
+ package main
2
+
3
+ import (
4
+ "github.com/rackspace/gophercloud"
5
+ "os"
6
+ )
7
+
8
+ func main() {
9
+ var provider = os.Getenv("RAX_AUTH_URL") + "/v2.0/tokens"
10
+ var username = os.Getenv("RAX_USERNAME")
11
+ var api_key = os.Getenv("RAX_API_KEY")
12
+ _, err := gophercloud.Authenticate(
13
+ provider,
14
+ gophercloud.AuthOptions{
15
+ Username: username,
16
+ ApiKey: api_key,
17
+ },
18
+ )
19
+ if err != nil {
20
+ panic(err)
21
+ }
22
+ println("Authenticated")
23
+ }
@@ -0,0 +1,6 @@
1
+ #!/bin/bash
2
+ export GOPATH=`pwd`/go
3
+ mkdir -p $GOPATH
4
+
5
+ go get -u github.com/rackspace/gophercloud
6
+ export GOPHERCLOUD=$GOPATH/src/github.com/rackspace/gophercloud
@@ -0,0 +1,10 @@
1
+ #!/bin/bash
2
+ export GOPATH=`pwd`/go
3
+ CHALLENGES_DIR=$(dirname $1)
4
+ export SDK_PROVIDER=${RAX_AUTH_URL}/v2.0/tokens
5
+ # export SDK_PROVIDER=rackspace-us
6
+ export SDK_USERNAME=$RAX_USERNAME
7
+ export SDK_API_KEY=$RAX_API_KEY
8
+ export SDK_PASSWORD=none
9
+ # go run $1 $CHALLENGES_DIR/libargs.go
10
+ go run $1
@@ -0,0 +1 @@
1
+ target/