nucleus 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (224) hide show
  1. checksums.yaml +7 -0
  2. data/.gitattributes +1 -0
  3. data/.gitignore +19 -0
  4. data/.rspec +3 -0
  5. data/.rubocop.yml +44 -0
  6. data/.travis.yml +21 -0
  7. data/CHANGELOG.md +19 -0
  8. data/CONTRIBUTING.md +13 -0
  9. data/Gemfile +16 -0
  10. data/Guardfile +22 -0
  11. data/LICENSE +21 -0
  12. data/README.md +675 -0
  13. data/Rakefile +137 -0
  14. data/bin/nucleus +91 -0
  15. data/bin/nucleus.bat +1 -0
  16. data/config.ru +18 -0
  17. data/config/adapters/cloud_control.yml +32 -0
  18. data/config/adapters/cloud_foundry_v2.yml +61 -0
  19. data/config/adapters/heroku.yml +13 -0
  20. data/config/adapters/openshift_v2.yml +20 -0
  21. data/config/nucleus_config.rb +47 -0
  22. data/lib/nucleus.rb +13 -0
  23. data/lib/nucleus/adapter_resolver.rb +115 -0
  24. data/lib/nucleus/adapters/base_adapter.rb +109 -0
  25. data/lib/nucleus/adapters/buildpack_translator.rb +79 -0
  26. data/lib/nucleus/adapters/v1/cloud_control/application.rb +108 -0
  27. data/lib/nucleus/adapters/v1/cloud_control/authentication.rb +27 -0
  28. data/lib/nucleus/adapters/v1/cloud_control/buildpacks.rb +23 -0
  29. data/lib/nucleus/adapters/v1/cloud_control/cloud_control.rb +153 -0
  30. data/lib/nucleus/adapters/v1/cloud_control/data.rb +76 -0
  31. data/lib/nucleus/adapters/v1/cloud_control/domains.rb +68 -0
  32. data/lib/nucleus/adapters/v1/cloud_control/lifecycle.rb +27 -0
  33. data/lib/nucleus/adapters/v1/cloud_control/log_poller.rb +71 -0
  34. data/lib/nucleus/adapters/v1/cloud_control/logs.rb +103 -0
  35. data/lib/nucleus/adapters/v1/cloud_control/regions.rb +32 -0
  36. data/lib/nucleus/adapters/v1/cloud_control/scaling.rb +17 -0
  37. data/lib/nucleus/adapters/v1/cloud_control/semantic_errors.rb +31 -0
  38. data/lib/nucleus/adapters/v1/cloud_control/services.rb +162 -0
  39. data/lib/nucleus/adapters/v1/cloud_control/token.rb +17 -0
  40. data/lib/nucleus/adapters/v1/cloud_control/vars.rb +88 -0
  41. data/lib/nucleus/adapters/v1/cloud_foundry_v2/app_states.rb +28 -0
  42. data/lib/nucleus/adapters/v1/cloud_foundry_v2/application.rb +111 -0
  43. data/lib/nucleus/adapters/v1/cloud_foundry_v2/authentication.rb +17 -0
  44. data/lib/nucleus/adapters/v1/cloud_foundry_v2/buildpacks.rb +23 -0
  45. data/lib/nucleus/adapters/v1/cloud_foundry_v2/cloud_foundry_v2.rb +141 -0
  46. data/lib/nucleus/adapters/v1/cloud_foundry_v2/data.rb +97 -0
  47. data/lib/nucleus/adapters/v1/cloud_foundry_v2/domains.rb +149 -0
  48. data/lib/nucleus/adapters/v1/cloud_foundry_v2/lifecycle.rb +41 -0
  49. data/lib/nucleus/adapters/v1/cloud_foundry_v2/logs.rb +303 -0
  50. data/lib/nucleus/adapters/v1/cloud_foundry_v2/regions.rb +33 -0
  51. data/lib/nucleus/adapters/v1/cloud_foundry_v2/scaling.rb +15 -0
  52. data/lib/nucleus/adapters/v1/cloud_foundry_v2/semantic_errors.rb +27 -0
  53. data/lib/nucleus/adapters/v1/cloud_foundry_v2/services.rb +286 -0
  54. data/lib/nucleus/adapters/v1/cloud_foundry_v2/vars.rb +80 -0
  55. data/lib/nucleus/adapters/v1/heroku/app_states.rb +57 -0
  56. data/lib/nucleus/adapters/v1/heroku/application.rb +93 -0
  57. data/lib/nucleus/adapters/v1/heroku/authentication.rb +27 -0
  58. data/lib/nucleus/adapters/v1/heroku/buildpacks.rb +27 -0
  59. data/lib/nucleus/adapters/v1/heroku/data.rb +78 -0
  60. data/lib/nucleus/adapters/v1/heroku/domains.rb +43 -0
  61. data/lib/nucleus/adapters/v1/heroku/heroku.rb +146 -0
  62. data/lib/nucleus/adapters/v1/heroku/lifecycle.rb +51 -0
  63. data/lib/nucleus/adapters/v1/heroku/logs.rb +108 -0
  64. data/lib/nucleus/adapters/v1/heroku/regions.rb +42 -0
  65. data/lib/nucleus/adapters/v1/heroku/scaling.rb +28 -0
  66. data/lib/nucleus/adapters/v1/heroku/semantic_errors.rb +23 -0
  67. data/lib/nucleus/adapters/v1/heroku/services.rb +168 -0
  68. data/lib/nucleus/adapters/v1/heroku/vars.rb +65 -0
  69. data/lib/nucleus/adapters/v1/openshift_v2/app_states.rb +68 -0
  70. data/lib/nucleus/adapters/v1/openshift_v2/application.rb +108 -0
  71. data/lib/nucleus/adapters/v1/openshift_v2/authentication.rb +21 -0
  72. data/lib/nucleus/adapters/v1/openshift_v2/data.rb +96 -0
  73. data/lib/nucleus/adapters/v1/openshift_v2/domains.rb +37 -0
  74. data/lib/nucleus/adapters/v1/openshift_v2/lifecycle.rb +60 -0
  75. data/lib/nucleus/adapters/v1/openshift_v2/logs.rb +106 -0
  76. data/lib/nucleus/adapters/v1/openshift_v2/openshift_v2.rb +125 -0
  77. data/lib/nucleus/adapters/v1/openshift_v2/regions.rb +58 -0
  78. data/lib/nucleus/adapters/v1/openshift_v2/scaling.rb +39 -0
  79. data/lib/nucleus/adapters/v1/openshift_v2/semantic_errors.rb +40 -0
  80. data/lib/nucleus/adapters/v1/openshift_v2/services.rb +173 -0
  81. data/lib/nucleus/adapters/v1/openshift_v2/vars.rb +49 -0
  82. data/lib/nucleus/adapters/v1/stub_adapter.rb +464 -0
  83. data/lib/nucleus/core/adapter_authentication_inductor.rb +62 -0
  84. data/lib/nucleus/core/adapter_extensions/auth/auth_client.rb +44 -0
  85. data/lib/nucleus/core/adapter_extensions/auth/authentication_retry_wrapper.rb +79 -0
  86. data/lib/nucleus/core/adapter_extensions/auth/expiring_token_auth_client.rb +53 -0
  87. data/lib/nucleus/core/adapter_extensions/auth/http_basic_auth_client.rb +37 -0
  88. data/lib/nucleus/core/adapter_extensions/auth/o_auth2_auth_client.rb +95 -0
  89. data/lib/nucleus/core/adapter_extensions/auth/token_auth_client.rb +36 -0
  90. data/lib/nucleus/core/adapter_extensions/http_client.rb +177 -0
  91. data/lib/nucleus/core/adapter_extensions/http_tail_client.rb +26 -0
  92. data/lib/nucleus/core/adapter_extensions/tail_stopper.rb +25 -0
  93. data/lib/nucleus/core/common/errors/ambiguous_adapter_error.rb +7 -0
  94. data/lib/nucleus/core/common/errors/file_existence_error.rb +7 -0
  95. data/lib/nucleus/core/common/errors/startup_error.rb +12 -0
  96. data/lib/nucleus/core/common/exit_codes.rb +25 -0
  97. data/lib/nucleus/core/common/files/application_repo_sanitizer.rb +52 -0
  98. data/lib/nucleus/core/common/files/archive_extractor.rb +112 -0
  99. data/lib/nucleus/core/common/files/archiver.rb +91 -0
  100. data/lib/nucleus/core/common/link_generator.rb +46 -0
  101. data/lib/nucleus/core/common/logging/logging.rb +52 -0
  102. data/lib/nucleus/core/common/logging/multi_logger.rb +59 -0
  103. data/lib/nucleus/core/common/logging/request_log_formatter.rb +48 -0
  104. data/lib/nucleus/core/common/ssh_handler.rb +108 -0
  105. data/lib/nucleus/core/common/stream_callback.rb +27 -0
  106. data/lib/nucleus/core/common/thread_config_accessor.rb +85 -0
  107. data/lib/nucleus/core/common/url_converter.rb +28 -0
  108. data/lib/nucleus/core/enums/application_states.rb +26 -0
  109. data/lib/nucleus/core/enums/logfile_types.rb +28 -0
  110. data/lib/nucleus/core/error_messages.rb +127 -0
  111. data/lib/nucleus/core/errors/adapter_error.rb +13 -0
  112. data/lib/nucleus/core/errors/adapter_missing_implementation_error.rb +12 -0
  113. data/lib/nucleus/core/errors/adapter_request_error.rb +10 -0
  114. data/lib/nucleus/core/errors/adapter_resource_not_found_error.rb +10 -0
  115. data/lib/nucleus/core/errors/endpoint_authentication_error.rb +10 -0
  116. data/lib/nucleus/core/errors/platform_specific_semantic_error.rb +12 -0
  117. data/lib/nucleus/core/errors/platform_timeout_error.rb +10 -0
  118. data/lib/nucleus/core/errors/platform_unavailable_error.rb +10 -0
  119. data/lib/nucleus/core/errors/semantic_adapter_request_error.rb +19 -0
  120. data/lib/nucleus/core/errors/unknown_adapter_call_error.rb +10 -0
  121. data/lib/nucleus/core/file_handling/archive_converter.rb +29 -0
  122. data/lib/nucleus/core/file_handling/file_manager.rb +64 -0
  123. data/lib/nucleus/core/file_handling/git_deployer.rb +133 -0
  124. data/lib/nucleus/core/file_handling/git_repo_analyzer.rb +23 -0
  125. data/lib/nucleus/core/import/adapter_configuration.rb +53 -0
  126. data/lib/nucleus/core/import/vendor_parser.rb +28 -0
  127. data/lib/nucleus/core/import/version_detector.rb +18 -0
  128. data/lib/nucleus/core/models/abstract_model.rb +29 -0
  129. data/lib/nucleus/core/models/endpoint.rb +30 -0
  130. data/lib/nucleus/core/models/provider.rb +26 -0
  131. data/lib/nucleus/core/models/vendor.rb +22 -0
  132. data/lib/nucleus/ext/kernel.rb +5 -0
  133. data/lib/nucleus/ext/regexp.rb +49 -0
  134. data/lib/nucleus/os.rb +15 -0
  135. data/lib/nucleus/root_dir.rb +13 -0
  136. data/lib/nucleus/scripts/finalize.rb +8 -0
  137. data/lib/nucleus/scripts/initialize.rb +9 -0
  138. data/lib/nucleus/scripts/initialize_config_defaults.rb +26 -0
  139. data/lib/nucleus/scripts/load.rb +17 -0
  140. data/lib/nucleus/scripts/load_dependencies.rb +43 -0
  141. data/lib/nucleus/scripts/setup_config.rb +28 -0
  142. data/lib/nucleus/scripts/shutdown.rb +11 -0
  143. data/lib/nucleus/version.rb +3 -0
  144. data/nucleus.gemspec +88 -0
  145. data/public/robots.txt +2 -0
  146. data/public/swagger-ui/css/reset.css +125 -0
  147. data/public/swagger-ui/css/screen.css +1224 -0
  148. data/public/swagger-ui/images/apple-touch-icon-114x114.png +0 -0
  149. data/public/swagger-ui/images/apple-touch-icon-120x120.png +0 -0
  150. data/public/swagger-ui/images/apple-touch-icon-144x144.png +0 -0
  151. data/public/swagger-ui/images/apple-touch-icon-152x152.png +0 -0
  152. data/public/swagger-ui/images/apple-touch-icon-57x57.png +0 -0
  153. data/public/swagger-ui/images/apple-touch-icon-60x60.png +0 -0
  154. data/public/swagger-ui/images/apple-touch-icon-72x72.png +0 -0
  155. data/public/swagger-ui/images/apple-touch-icon-76x76.png +0 -0
  156. data/public/swagger-ui/images/explorer_icons.png +0 -0
  157. data/public/swagger-ui/images/favicon-128.png +0 -0
  158. data/public/swagger-ui/images/favicon-16x16.png +0 -0
  159. data/public/swagger-ui/images/favicon-196x196.png +0 -0
  160. data/public/swagger-ui/images/favicon-32x32.png +0 -0
  161. data/public/swagger-ui/images/favicon-96x96.png +0 -0
  162. data/public/swagger-ui/images/favicon.ico +0 -0
  163. data/public/swagger-ui/images/logo_small.png +0 -0
  164. data/public/swagger-ui/images/mstile-144x144.png +0 -0
  165. data/public/swagger-ui/images/mstile-150x150.png +0 -0
  166. data/public/swagger-ui/images/mstile-310x150.png +0 -0
  167. data/public/swagger-ui/images/mstile-310x310.png +0 -0
  168. data/public/swagger-ui/images/mstile-70x70.png +0 -0
  169. data/public/swagger-ui/images/pet_store_api.png +0 -0
  170. data/public/swagger-ui/images/throbber.gif +0 -0
  171. data/public/swagger-ui/images/wordnik_api.png +0 -0
  172. data/public/swagger-ui/index.html +107 -0
  173. data/public/swagger-ui/lib/backbone-min.js +38 -0
  174. data/public/swagger-ui/lib/handlebars-1.0.0.js +2278 -0
  175. data/public/swagger-ui/lib/highlight.7.3.pack.js +1 -0
  176. data/public/swagger-ui/lib/jquery-1.8.0.min.js +2 -0
  177. data/public/swagger-ui/lib/jquery.ba-bbq.min.js +18 -0
  178. data/public/swagger-ui/lib/jquery.slideto.min.js +1 -0
  179. data/public/swagger-ui/lib/jquery.wiggle.min.js +8 -0
  180. data/public/swagger-ui/lib/shred.bundle.js +2765 -0
  181. data/public/swagger-ui/lib/shred/content.js +193 -0
  182. data/public/swagger-ui/lib/swagger-oauth.js +211 -0
  183. data/public/swagger-ui/lib/swagger.js +1653 -0
  184. data/public/swagger-ui/lib/underscore-min.js +32 -0
  185. data/public/swagger-ui/o2c.html +15 -0
  186. data/public/swagger-ui/redirect.html +14 -0
  187. data/public/swagger-ui/swagger-ui.js +2324 -0
  188. data/public/swagger-ui/swagger-ui.min.js +1 -0
  189. data/schemas/api.adapter.schema.yml +31 -0
  190. data/schemas/api.requirements.schema.yml +17 -0
  191. data/spec/factories/models.rb +61 -0
  192. data/spec/integration/api/auth_spec.rb +58 -0
  193. data/spec/integration/api/endpoints_spec.rb +167 -0
  194. data/spec/integration/api/errors_spec.rb +47 -0
  195. data/spec/integration/api/providers_spec.rb +157 -0
  196. data/spec/integration/api/swagger_schema_spec.rb +64 -0
  197. data/spec/integration/api/vendors_spec.rb +45 -0
  198. data/spec/integration/integration_spec_helper.rb +27 -0
  199. data/spec/integration/test_data_generator.rb +55 -0
  200. data/spec/nucleus_git_key.pem +51 -0
  201. data/spec/spec_helper.rb +98 -0
  202. data/spec/support/shared_example_request_types.rb +99 -0
  203. data/spec/test_suites.rake +31 -0
  204. data/spec/unit/adapters/archive_converter_spec.rb +25 -0
  205. data/spec/unit/adapters/file_manager_spec.rb +93 -0
  206. data/spec/unit/adapters/git_deployer_spec.rb +262 -0
  207. data/spec/unit/adapters/v1/stub_spec.rb +14 -0
  208. data/spec/unit/common/helpers/auth_helper_spec.rb +73 -0
  209. data/spec/unit/common/oauth2_auth_client_spec.rb +108 -0
  210. data/spec/unit/common/regexp_spec.rb +33 -0
  211. data/spec/unit/common/request_log_formatter_spec.rb +108 -0
  212. data/spec/unit/common/thread_config_accessor_spec.rb +97 -0
  213. data/spec/unit/models/endpoint_spec.rb +83 -0
  214. data/spec/unit/models/provider_spec.rb +102 -0
  215. data/spec/unit/models/vendor_spec.rb +100 -0
  216. data/spec/unit/schemas/adapter_schema_spec.rb +16 -0
  217. data/spec/unit/schemas/adapter_validation_spec.rb +56 -0
  218. data/spec/unit/schemas/requirements_schema_spec.rb +16 -0
  219. data/spec/unit/unit_spec_helper.rb +11 -0
  220. data/tasks/compatibility.rake +113 -0
  221. data/tasks/evaluation.rake +162 -0
  222. data/wiki/adapter_tests.md +99 -0
  223. data/wiki/implement_new_adapter.md +155 -0
  224. metadata +836 -0
@@ -0,0 +1,99 @@
1
+ # Adapter Tests
2
+
3
+ * [Recording](#recording)
4
+ * [Missing or invalid VCR recording](#missing-or-invalid-vcr-recording)
5
+ * [Sensitive data](#sensitive-data)
6
+
7
+ The adapter tests rely on previously recorded interactions with the provider's endpoints.
8
+ They do not invoke external HTTP requests.
9
+ When code changes result in different requests, the interactions have to be re-recorded.
10
+
11
+ ```
12
+ bundle exec rake spec:suite:adapters
13
+ ```
14
+
15
+ Each interaction of the adapter tests shall be made only once.
16
+ If there are further tests that all rely on the same request, the described spec shall be marked with `:as_cassette`.
17
+ All subsequent tests in this group now use the initial recording.
18
+
19
+ ```ruby
20
+ describe 'application services list empty', :as_cassette, cassette_group: 'application-services;list' do
21
+ before { get "/endpoints/#{@endpoint}/applications/#{@app_all[:updated_name]}/services", request_headers }
22
+ include_examples 'a valid GET request'
23
+ include_examples 'installed service list schema'
24
+ it 'does not contain any services' do
25
+ expect(json_body[:services]).to eql([])
26
+ end
27
+ end
28
+ ```
29
+
30
+ The `cassette_group: 'application-services;list'` marker in this example forces the `VCR` cassettes to be placed into a
31
+ directory structure of `application-services/list/{testname}.rec`.
32
+ With this structure we can automatically evaluate request differences for a specific operation.
33
+
34
+ ## Recording
35
+
36
+ Recording new VCR cassettes requires a valid user account at the platform that shall be recorded.
37
+ The `endpoint-id` that will be used during the recording is hard-coded as `@endpoint` variable inside the main adapter test file, e.g. `spec/adapter/v1/heroku/heroku_spec.rb`.
38
+ The credentials must be specified in the `config/.credentials` file.
39
+
40
+ The file is ignored by git and must _never_ be committed. It must use the following syntax:
41
+
42
+ ```
43
+ endpoint-id:
44
+ user: 'my_username'
45
+ password: 'my_usernames_password'
46
+ ```
47
+
48
+ Additional attributes can be used to filter out personal data from the recordings that may be included in the HTTP interactions (see [Sensitive data](#sensitive-data)).
49
+ A complete .credentials file could then look like:
50
+
51
+ ```yaml
52
+ heroku:
53
+ id: 'my_heroku_user_id'
54
+ user: 'my_heroku_username'
55
+ password: 'my_heroku_usernames_password'
56
+
57
+ bluemix-eu-gb:
58
+ user: 'my_bluemix_username'
59
+ password: 'my_bluemix_usernames_password'
60
+ username: 'my_bluemix_username_with_encoded_umlauts'
61
+
62
+ cloudcontrol:
63
+ user: 'my_cc_email'
64
+ password: 'my_cc_usernames_password'
65
+ username: 'my_cc_username'
66
+
67
+ openshift-online:
68
+ user: 'my_os_email'
69
+ password: 'my_os_usernames_password'
70
+ id: 'my_os_user_id'
71
+ ```
72
+
73
+ To record the interactions, you only have to call the Rake `record` task:
74
+
75
+ ```
76
+ bundle exec rake record
77
+ ```
78
+
79
+ To only record interactions for a specific adapter, simply append the adapter name to the record namespace:
80
+
81
+ ```
82
+ bundle exec rake record:heroku
83
+ ```
84
+
85
+ **Notes:**
86
+ * You must be allowed to create at least 3 additional applications with your account, otherwise the quota restrictions will invalidate the test results.
87
+ * A complete recording of a single vendor usually takes 5 up to 15 minutes. Openshift currently takes more than 30 minutes.
88
+ If you only require a certain functionality to be tested (during development), make sure to comment out irrelevant sections in the `spec/adapter/support/shared_example_adapters_valid.rb` file.
89
+ * cloudControl requires you to change the application names if the previous recording was made within the last 2 days, otherwise if fails because the name is still locked.
90
+ Change the name in the `spec/adapter/v1/cloud_control_spec.rb`.
91
+
92
+ ### Missing or invalid VCR recording
93
+
94
+ If the recorded cassette is invalid due to a recent change, tests that use this cassette are going to fail.
95
+
96
+ ### Sensitive data
97
+
98
+ Most of the requests contain sensitive data that we do not want to be included in the recorded cassettes.
99
+ By implementation, the API tokens and **all** data that is specified in the `config/.credentials` file are filtered.
@@ -0,0 +1,155 @@
1
+ # How to implement a new adapter
2
+
3
+ In total, the process can be grouped into X steps.
4
+ To prevent errors, they should be executed in the following order:
5
+
6
+ * [Add the vendor to the configuration](#add-the-vendor-to-the-configuration)
7
+ * [Create the adapter implementation files](#create-the-adapter-implementation-files)
8
+ * [Implementation](#implementation)
9
+
10
+ ## Add the vendor to the configuration
11
+
12
+ Open the directory `config/adapters` and create a new `.yml` configuration file for your platform:
13
+
14
+ ```yaml
15
+ ---
16
+ name: "Openshift 2"
17
+ id: "openshift_v2"
18
+ providers:
19
+ -
20
+ name: "Openshift Online"
21
+ id: "openshift-online"
22
+ endpoints:
23
+ -
24
+ name: "Openshift Online"
25
+ id: "openshift-online"
26
+ url: "openshift.redhat.com/broker/rest"
27
+ ```
28
+
29
+ The first level entry describes the vendor (here: Openshift 2).
30
+ **name:** The actual name of the vendor or his platform. Serves as description.
31
+ **id:** The ID under which the vendor will be available for use in the API. Should be URI compatible!
32
+ Different platform versions shall be distinguished by appending `_v{version}` to the *ID*.
33
+
34
+ The second level are the providers that shall be known to serve a PaaS running the vendors platform.
35
+ **name:** The actual name of the provider, which often equals to the vendor. Serves as description.
36
+ **id:** The ID under which the provider will be available for use in the API. Should be URI compatible!
37
+
38
+ The third level describes all API endpoints.
39
+ **name:** The actual name of the endpoint, which often equals to the provider. Serves as description.
40
+ **id:** The ID under which the endpoint will be available for use in the API. Should be URI compatible!
41
+
42
+ **NOTE:** Providers and Endpoints are optional as they could be added during runtime.
43
+
44
+ ## Create the adapter implementation files
45
+
46
+ Start by selecting the API version you want to implement the adapter for.
47
+ Next, create a copy of the `app/adapters/{API_VERSION}/stub_adapter.rb` matching the API version.
48
+ The pasted file must (!) be copied to `app/adapters/{API_VERSION}/{vendor_id}/{vendor_id}.rb`.
49
+ Please make sure that the `{vendor_id}` actually is equal to the **ID** that was assigned to the vendor in the `.yml` configuration file.
50
+
51
+ Open the new adapter file and change the namespace so that it matches the chosen naming and inherits from the `Stub`.
52
+
53
+ ```ruby
54
+ module Nucleus
55
+ module Adapters
56
+ module {API_VERSION}
57
+ class {VENDOR_ID} < Stub
58
+ ```
59
+
60
+ Now the adapter should already be available in the API, but all calls would fail and return `501 Not implemented`.
61
+
62
+ ## Tests
63
+
64
+ To include your adapter in the automatic adapter tests, we must create:
65
+
66
+ ```
67
+ spec/adapter/v1/{VENDOR_ID}/{VENDOR_ID}_spec.rb
68
+ ```
69
+
70
+ In this test file, you can use this basic template:
71
+
72
+ ```ruby
73
+ require 'spec/adapter/adapter_spec_helper'
74
+
75
+ describe Nucleus::Adapters::{API_VERSION}::{VENDOR_CLASS} do
76
+ before :all do
77
+ # skip these example groups / tests for this adapter. E.g.:
78
+ # @unsupported = ['with valid credentials is compliant and application update']
79
+ @unsupported = []
80
+ @endpoint = '{ENDPOINT_ID}'
81
+ @api_version = '{API_VERSION}'
82
+ @app_min = { original_name: 'nucleustestappminproperties',
83
+ updated_name: 'nucleustestappminproperties',
84
+ region: 'default' }
85
+ @app_all = { original_name: 'nucleustestappallupdated',
86
+ updated_name: 'nucleustestappallupdated',
87
+ region: 'default' }
88
+ end
89
+ before do |example|
90
+ if skip_example?(described_class, example.metadata[:full_description], @unsupported)
91
+ skip('This feature is currently not supported by CloudControl - 501')
92
+ end
93
+ # reload adapter for each test
94
+ @adapter = load_adapter(@endpoint, @api_version)
95
+ end
96
+
97
+ context 'with invalid credentials' do
98
+ let!(:request_headers) { credentials(@endpoint, false) }
99
+ include_examples 'compliant adapter with invalid credentials'
100
+ end
101
+
102
+ describe 'with missing credentials' do
103
+ let!(:request_headers) { {} }
104
+ include_examples 'compliant adapter with invalid credentials'
105
+ end
106
+
107
+ context 'with valid credentials' do
108
+ let!(:request_headers) { credentials(@endpoint) }
109
+ include_examples 'compliant adapter with valid credentials'
110
+
111
+ describe 'native adapter call' do
112
+ describe 'against endpoint' do
113
+ describe 'does fetch all available addons' do
114
+ before do
115
+ get "/endpoints/#{@endpoint}/call/addon", request_headers
116
+ end
117
+ include_examples 'a valid GET request'
118
+ it 'with the specified structure' do
119
+ # assumes there is at least one addon
120
+ expect(json_body[0].keys).to include(:name, :stage, :options)
121
+ end
122
+ it 'with the matching content declaration' do
123
+ expect_json_types(:array)
124
+ end
125
+ end
126
+ end
127
+ end
128
+ end
129
+ end
130
+ ```
131
+
132
+ ## Implementation
133
+
134
+ Now we can start with the actual implementation. But how do you know what the adapter shall invoke and return?
135
+
136
+ The expected behaviour of the adapter methods was described in the copied `stub_adapter.rb` and should therefore be in your adapter, too.
137
+ Within the adapter tests most of the behaviour will also be tested so that you receive feedback and get to known which parts are still not properly implemented.
138
+
139
+ ### Structure
140
+
141
+ In the already implemented adapters, we did split the logic into multiple modules.
142
+ With this approach, we could separate different parts of the application that are not actually related and also comply with the style guidelines that are monitored by Rubocop.
143
+
144
+ ### Authentication
145
+
146
+ Nucleus already offers quite some authentication approaches that could fit your needs.
147
+ You can find the authentication clients at `app/core/auth`.
148
+
149
+ ### What if the platform does not support action X?
150
+
151
+ Well, it depends ;-)
152
+
153
+ For most problems, there always is a workaround that involves some effort implement.
154
+ If the action should actually not be supported on the platform, for instance as *cloud Control* does not support to *start* or *stop* applications,
155
+ the method shall not be present in your adapter so that the `Stub` can provide a common error response.
metadata ADDED
@@ -0,0 +1,836 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nucleus
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Stefan Kolb
8
+ - Cedric Röck
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2015-10-28 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: configatron
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '4.5'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '4.5'
28
+ - !ruby/object:Gem::Dependency
29
+ name: daybreak
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '0.3'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '0.3'
42
+ - !ruby/object:Gem::Dependency
43
+ name: em-http-request
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '1.1'
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '1.1'
56
+ - !ruby/object:Gem::Dependency
57
+ name: excon
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '0.44'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '0.44'
70
+ - !ruby/object:Gem::Dependency
71
+ name: faye-websocket
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '0.9'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: '0.9'
84
+ - !ruby/object:Gem::Dependency
85
+ name: git
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - "~>"
89
+ - !ruby/object:Gem::Version
90
+ version: '1.2'
91
+ type: :runtime
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: '1.2'
98
+ - !ruby/object:Gem::Dependency
99
+ name: grape
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - "~>"
103
+ - !ruby/object:Gem::Version
104
+ version: '0.12'
105
+ type: :runtime
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - "~>"
110
+ - !ruby/object:Gem::Version
111
+ version: '0.12'
112
+ - !ruby/object:Gem::Dependency
113
+ name: grape-entity
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - "~>"
117
+ - !ruby/object:Gem::Version
118
+ version: '0.4'
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: 0.4.5
122
+ type: :runtime
123
+ prerelease: false
124
+ version_requirements: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - "~>"
127
+ - !ruby/object:Gem::Version
128
+ version: '0.4'
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: 0.4.5
132
+ - !ruby/object:Gem::Dependency
133
+ name: grape-swagger
134
+ requirement: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '0.10'
139
+ - - ">="
140
+ - !ruby/object:Gem::Version
141
+ version: 0.10.1
142
+ type: :runtime
143
+ prerelease: false
144
+ version_requirements: !ruby/object:Gem::Requirement
145
+ requirements:
146
+ - - "~>"
147
+ - !ruby/object:Gem::Version
148
+ version: '0.10'
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: 0.10.1
152
+ - !ruby/object:Gem::Dependency
153
+ name: kwalify
154
+ requirement: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - "~>"
157
+ - !ruby/object:Gem::Version
158
+ version: '0.7'
159
+ type: :runtime
160
+ prerelease: false
161
+ version_requirements: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - "~>"
164
+ - !ruby/object:Gem::Version
165
+ version: '0.7'
166
+ - !ruby/object:Gem::Dependency
167
+ name: lmdb
168
+ requirement: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - "~>"
171
+ - !ruby/object:Gem::Version
172
+ version: '0.4'
173
+ type: :runtime
174
+ prerelease: false
175
+ version_requirements: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - "~>"
178
+ - !ruby/object:Gem::Version
179
+ version: '0.4'
180
+ - !ruby/object:Gem::Dependency
181
+ name: logger
182
+ requirement: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - "~>"
185
+ - !ruby/object:Gem::Version
186
+ version: '1.2'
187
+ type: :runtime
188
+ prerelease: false
189
+ version_requirements: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - "~>"
192
+ - !ruby/object:Gem::Version
193
+ version: '1.2'
194
+ - !ruby/object:Gem::Dependency
195
+ name: mime-types
196
+ requirement: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - "~>"
199
+ - !ruby/object:Gem::Version
200
+ version: '2.4'
201
+ type: :runtime
202
+ prerelease: false
203
+ version_requirements: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - "~>"
206
+ - !ruby/object:Gem::Version
207
+ version: '2.4'
208
+ - !ruby/object:Gem::Dependency
209
+ name: moneta
210
+ requirement: !ruby/object:Gem::Requirement
211
+ requirements:
212
+ - - "~>"
213
+ - !ruby/object:Gem::Version
214
+ version: '0.8'
215
+ type: :runtime
216
+ prerelease: false
217
+ version_requirements: !ruby/object:Gem::Requirement
218
+ requirements:
219
+ - - "~>"
220
+ - !ruby/object:Gem::Version
221
+ version: '0.8'
222
+ - !ruby/object:Gem::Dependency
223
+ name: net-ssh
224
+ requirement: !ruby/object:Gem::Requirement
225
+ requirements:
226
+ - - "~>"
227
+ - !ruby/object:Gem::Version
228
+ version: '3.0'
229
+ type: :runtime
230
+ prerelease: false
231
+ version_requirements: !ruby/object:Gem::Requirement
232
+ requirements:
233
+ - - "~>"
234
+ - !ruby/object:Gem::Version
235
+ version: '3.0'
236
+ - !ruby/object:Gem::Dependency
237
+ name: oj
238
+ requirement: !ruby/object:Gem::Requirement
239
+ requirements:
240
+ - - "~>"
241
+ - !ruby/object:Gem::Version
242
+ version: '2.12'
243
+ type: :runtime
244
+ prerelease: false
245
+ version_requirements: !ruby/object:Gem::Requirement
246
+ requirements:
247
+ - - "~>"
248
+ - !ruby/object:Gem::Version
249
+ version: '2.12'
250
+ - !ruby/object:Gem::Dependency
251
+ name: protobuf
252
+ requirement: !ruby/object:Gem::Requirement
253
+ requirements:
254
+ - - "~>"
255
+ - !ruby/object:Gem::Version
256
+ version: '3.4'
257
+ type: :runtime
258
+ prerelease: false
259
+ version_requirements: !ruby/object:Gem::Requirement
260
+ requirements:
261
+ - - "~>"
262
+ - !ruby/object:Gem::Version
263
+ version: '3.4'
264
+ - !ruby/object:Gem::Dependency
265
+ name: rack-ssl-enforcer
266
+ requirement: !ruby/object:Gem::Requirement
267
+ requirements:
268
+ - - "~>"
269
+ - !ruby/object:Gem::Version
270
+ version: '0.2'
271
+ - - ">="
272
+ - !ruby/object:Gem::Version
273
+ version: 0.2.8
274
+ type: :runtime
275
+ prerelease: false
276
+ version_requirements: !ruby/object:Gem::Requirement
277
+ requirements:
278
+ - - "~>"
279
+ - !ruby/object:Gem::Version
280
+ version: '0.2'
281
+ - - ">="
282
+ - !ruby/object:Gem::Version
283
+ version: 0.2.8
284
+ - !ruby/object:Gem::Dependency
285
+ name: rest-client
286
+ requirement: !ruby/object:Gem::Requirement
287
+ requirements:
288
+ - - "~>"
289
+ - !ruby/object:Gem::Version
290
+ version: '1.8'
291
+ type: :runtime
292
+ prerelease: false
293
+ version_requirements: !ruby/object:Gem::Requirement
294
+ requirements:
295
+ - - "~>"
296
+ - !ruby/object:Gem::Version
297
+ version: '1.8'
298
+ - !ruby/object:Gem::Dependency
299
+ name: rack-stream
300
+ requirement: !ruby/object:Gem::Requirement
301
+ requirements:
302
+ - - '='
303
+ - !ruby/object:Gem::Version
304
+ version: 0.0.5
305
+ type: :runtime
306
+ prerelease: false
307
+ version_requirements: !ruby/object:Gem::Requirement
308
+ requirements:
309
+ - - '='
310
+ - !ruby/object:Gem::Version
311
+ version: 0.0.5
312
+ - !ruby/object:Gem::Dependency
313
+ name: request_store
314
+ requirement: !ruby/object:Gem::Requirement
315
+ requirements:
316
+ - - "~>"
317
+ - !ruby/object:Gem::Version
318
+ version: '1.1'
319
+ type: :runtime
320
+ prerelease: false
321
+ version_requirements: !ruby/object:Gem::Requirement
322
+ requirements:
323
+ - - "~>"
324
+ - !ruby/object:Gem::Version
325
+ version: '1.1'
326
+ - !ruby/object:Gem::Dependency
327
+ name: require_all
328
+ requirement: !ruby/object:Gem::Requirement
329
+ requirements:
330
+ - - "~>"
331
+ - !ruby/object:Gem::Version
332
+ version: '1.3'
333
+ type: :runtime
334
+ prerelease: false
335
+ version_requirements: !ruby/object:Gem::Requirement
336
+ requirements:
337
+ - - "~>"
338
+ - !ruby/object:Gem::Version
339
+ version: '1.3'
340
+ - !ruby/object:Gem::Dependency
341
+ name: rubyzip
342
+ requirement: !ruby/object:Gem::Requirement
343
+ requirements:
344
+ - - "~>"
345
+ - !ruby/object:Gem::Version
346
+ version: '1.1'
347
+ type: :runtime
348
+ prerelease: false
349
+ version_requirements: !ruby/object:Gem::Requirement
350
+ requirements:
351
+ - - "~>"
352
+ - !ruby/object:Gem::Version
353
+ version: '1.1'
354
+ - !ruby/object:Gem::Dependency
355
+ name: sshkey
356
+ requirement: !ruby/object:Gem::Requirement
357
+ requirements:
358
+ - - "~>"
359
+ - !ruby/object:Gem::Version
360
+ version: '1.7'
361
+ type: :runtime
362
+ prerelease: false
363
+ version_requirements: !ruby/object:Gem::Requirement
364
+ requirements:
365
+ - - "~>"
366
+ - !ruby/object:Gem::Version
367
+ version: '1.7'
368
+ - !ruby/object:Gem::Dependency
369
+ name: thin
370
+ requirement: !ruby/object:Gem::Requirement
371
+ requirements:
372
+ - - "~>"
373
+ - !ruby/object:Gem::Version
374
+ version: '1.6'
375
+ type: :runtime
376
+ prerelease: false
377
+ version_requirements: !ruby/object:Gem::Requirement
378
+ requirements:
379
+ - - "~>"
380
+ - !ruby/object:Gem::Version
381
+ version: '1.6'
382
+ - !ruby/object:Gem::Dependency
383
+ name: bundler
384
+ requirement: !ruby/object:Gem::Requirement
385
+ requirements:
386
+ - - ">="
387
+ - !ruby/object:Gem::Version
388
+ version: '0'
389
+ type: :development
390
+ prerelease: false
391
+ version_requirements: !ruby/object:Gem::Requirement
392
+ requirements:
393
+ - - ">="
394
+ - !ruby/object:Gem::Version
395
+ version: '0'
396
+ - !ruby/object:Gem::Dependency
397
+ name: guard
398
+ requirement: !ruby/object:Gem::Requirement
399
+ requirements:
400
+ - - ">="
401
+ - !ruby/object:Gem::Version
402
+ version: '0'
403
+ type: :development
404
+ prerelease: false
405
+ version_requirements: !ruby/object:Gem::Requirement
406
+ requirements:
407
+ - - ">="
408
+ - !ruby/object:Gem::Version
409
+ version: '0'
410
+ - !ruby/object:Gem::Dependency
411
+ name: guard-bundler
412
+ requirement: !ruby/object:Gem::Requirement
413
+ requirements:
414
+ - - ">="
415
+ - !ruby/object:Gem::Version
416
+ version: '0'
417
+ type: :development
418
+ prerelease: false
419
+ version_requirements: !ruby/object:Gem::Requirement
420
+ requirements:
421
+ - - ">="
422
+ - !ruby/object:Gem::Version
423
+ version: '0'
424
+ - !ruby/object:Gem::Dependency
425
+ name: guard-rack
426
+ requirement: !ruby/object:Gem::Requirement
427
+ requirements:
428
+ - - ">="
429
+ - !ruby/object:Gem::Version
430
+ version: '0'
431
+ type: :development
432
+ prerelease: false
433
+ version_requirements: !ruby/object:Gem::Requirement
434
+ requirements:
435
+ - - ">="
436
+ - !ruby/object:Gem::Version
437
+ version: '0'
438
+ - !ruby/object:Gem::Dependency
439
+ name: guard-rubocop
440
+ requirement: !ruby/object:Gem::Requirement
441
+ requirements:
442
+ - - ">="
443
+ - !ruby/object:Gem::Version
444
+ version: '0'
445
+ type: :development
446
+ prerelease: false
447
+ version_requirements: !ruby/object:Gem::Requirement
448
+ requirements:
449
+ - - ">="
450
+ - !ruby/object:Gem::Version
451
+ version: '0'
452
+ - !ruby/object:Gem::Dependency
453
+ name: guard-yard
454
+ requirement: !ruby/object:Gem::Requirement
455
+ requirements:
456
+ - - ">="
457
+ - !ruby/object:Gem::Version
458
+ version: '0'
459
+ type: :development
460
+ prerelease: false
461
+ version_requirements: !ruby/object:Gem::Requirement
462
+ requirements:
463
+ - - ">="
464
+ - !ruby/object:Gem::Version
465
+ version: '0'
466
+ - !ruby/object:Gem::Dependency
467
+ name: inch
468
+ requirement: !ruby/object:Gem::Requirement
469
+ requirements:
470
+ - - "~>"
471
+ - !ruby/object:Gem::Version
472
+ version: '0.7'
473
+ type: :development
474
+ prerelease: false
475
+ version_requirements: !ruby/object:Gem::Requirement
476
+ requirements:
477
+ - - "~>"
478
+ - !ruby/object:Gem::Version
479
+ version: '0.7'
480
+ - !ruby/object:Gem::Dependency
481
+ name: rake
482
+ requirement: !ruby/object:Gem::Requirement
483
+ requirements:
484
+ - - "~>"
485
+ - !ruby/object:Gem::Version
486
+ version: '10.4'
487
+ type: :development
488
+ prerelease: false
489
+ version_requirements: !ruby/object:Gem::Requirement
490
+ requirements:
491
+ - - "~>"
492
+ - !ruby/object:Gem::Version
493
+ version: '10.4'
494
+ - !ruby/object:Gem::Dependency
495
+ name: rubocop
496
+ requirement: !ruby/object:Gem::Requirement
497
+ requirements:
498
+ - - "~>"
499
+ - !ruby/object:Gem::Version
500
+ version: '0.34'
501
+ type: :development
502
+ prerelease: false
503
+ version_requirements: !ruby/object:Gem::Requirement
504
+ requirements:
505
+ - - "~>"
506
+ - !ruby/object:Gem::Version
507
+ version: '0.34'
508
+ - !ruby/object:Gem::Dependency
509
+ name: vcr
510
+ requirement: !ruby/object:Gem::Requirement
511
+ requirements:
512
+ - - "~>"
513
+ - !ruby/object:Gem::Version
514
+ version: '2.9'
515
+ type: :development
516
+ prerelease: false
517
+ version_requirements: !ruby/object:Gem::Requirement
518
+ requirements:
519
+ - - "~>"
520
+ - !ruby/object:Gem::Version
521
+ version: '2.9'
522
+ - !ruby/object:Gem::Dependency
523
+ name: webmock
524
+ requirement: !ruby/object:Gem::Requirement
525
+ requirements:
526
+ - - "~>"
527
+ - !ruby/object:Gem::Version
528
+ version: '1.20'
529
+ type: :development
530
+ prerelease: false
531
+ version_requirements: !ruby/object:Gem::Requirement
532
+ requirements:
533
+ - - "~>"
534
+ - !ruby/object:Gem::Version
535
+ version: '1.20'
536
+ - !ruby/object:Gem::Dependency
537
+ name: yard
538
+ requirement: !ruby/object:Gem::Requirement
539
+ requirements:
540
+ - - "~>"
541
+ - !ruby/object:Gem::Version
542
+ version: '0.8'
543
+ type: :development
544
+ prerelease: false
545
+ version_requirements: !ruby/object:Gem::Requirement
546
+ requirements:
547
+ - - "~>"
548
+ - !ruby/object:Gem::Version
549
+ version: '0.8'
550
+ description: Nucleus is a unified API for deployment and management of Platform-as-a-Service
551
+ (PaaS) systems.
552
+ email:
553
+ - stefan.kolb@uni-bamberg.de
554
+ executables:
555
+ - nucleus
556
+ extensions: []
557
+ extra_rdoc_files: []
558
+ files:
559
+ - ".gitattributes"
560
+ - ".gitignore"
561
+ - ".rspec"
562
+ - ".rubocop.yml"
563
+ - ".travis.yml"
564
+ - CHANGELOG.md
565
+ - CONTRIBUTING.md
566
+ - Gemfile
567
+ - Guardfile
568
+ - LICENSE
569
+ - README.md
570
+ - Rakefile
571
+ - bin/nucleus
572
+ - bin/nucleus.bat
573
+ - config.ru
574
+ - config/adapters/cloud_control.yml
575
+ - config/adapters/cloud_foundry_v2.yml
576
+ - config/adapters/heroku.yml
577
+ - config/adapters/openshift_v2.yml
578
+ - config/nucleus_config.rb
579
+ - lib/nucleus.rb
580
+ - lib/nucleus/adapter_resolver.rb
581
+ - lib/nucleus/adapters/base_adapter.rb
582
+ - lib/nucleus/adapters/buildpack_translator.rb
583
+ - lib/nucleus/adapters/v1/cloud_control/application.rb
584
+ - lib/nucleus/adapters/v1/cloud_control/authentication.rb
585
+ - lib/nucleus/adapters/v1/cloud_control/buildpacks.rb
586
+ - lib/nucleus/adapters/v1/cloud_control/cloud_control.rb
587
+ - lib/nucleus/adapters/v1/cloud_control/data.rb
588
+ - lib/nucleus/adapters/v1/cloud_control/domains.rb
589
+ - lib/nucleus/adapters/v1/cloud_control/lifecycle.rb
590
+ - lib/nucleus/adapters/v1/cloud_control/log_poller.rb
591
+ - lib/nucleus/adapters/v1/cloud_control/logs.rb
592
+ - lib/nucleus/adapters/v1/cloud_control/regions.rb
593
+ - lib/nucleus/adapters/v1/cloud_control/scaling.rb
594
+ - lib/nucleus/adapters/v1/cloud_control/semantic_errors.rb
595
+ - lib/nucleus/adapters/v1/cloud_control/services.rb
596
+ - lib/nucleus/adapters/v1/cloud_control/token.rb
597
+ - lib/nucleus/adapters/v1/cloud_control/vars.rb
598
+ - lib/nucleus/adapters/v1/cloud_foundry_v2/app_states.rb
599
+ - lib/nucleus/adapters/v1/cloud_foundry_v2/application.rb
600
+ - lib/nucleus/adapters/v1/cloud_foundry_v2/authentication.rb
601
+ - lib/nucleus/adapters/v1/cloud_foundry_v2/buildpacks.rb
602
+ - lib/nucleus/adapters/v1/cloud_foundry_v2/cloud_foundry_v2.rb
603
+ - lib/nucleus/adapters/v1/cloud_foundry_v2/data.rb
604
+ - lib/nucleus/adapters/v1/cloud_foundry_v2/domains.rb
605
+ - lib/nucleus/adapters/v1/cloud_foundry_v2/lifecycle.rb
606
+ - lib/nucleus/adapters/v1/cloud_foundry_v2/logs.rb
607
+ - lib/nucleus/adapters/v1/cloud_foundry_v2/regions.rb
608
+ - lib/nucleus/adapters/v1/cloud_foundry_v2/scaling.rb
609
+ - lib/nucleus/adapters/v1/cloud_foundry_v2/semantic_errors.rb
610
+ - lib/nucleus/adapters/v1/cloud_foundry_v2/services.rb
611
+ - lib/nucleus/adapters/v1/cloud_foundry_v2/vars.rb
612
+ - lib/nucleus/adapters/v1/heroku/app_states.rb
613
+ - lib/nucleus/adapters/v1/heroku/application.rb
614
+ - lib/nucleus/adapters/v1/heroku/authentication.rb
615
+ - lib/nucleus/adapters/v1/heroku/buildpacks.rb
616
+ - lib/nucleus/adapters/v1/heroku/data.rb
617
+ - lib/nucleus/adapters/v1/heroku/domains.rb
618
+ - lib/nucleus/adapters/v1/heroku/heroku.rb
619
+ - lib/nucleus/adapters/v1/heroku/lifecycle.rb
620
+ - lib/nucleus/adapters/v1/heroku/logs.rb
621
+ - lib/nucleus/adapters/v1/heroku/regions.rb
622
+ - lib/nucleus/adapters/v1/heroku/scaling.rb
623
+ - lib/nucleus/adapters/v1/heroku/semantic_errors.rb
624
+ - lib/nucleus/adapters/v1/heroku/services.rb
625
+ - lib/nucleus/adapters/v1/heroku/vars.rb
626
+ - lib/nucleus/adapters/v1/openshift_v2/app_states.rb
627
+ - lib/nucleus/adapters/v1/openshift_v2/application.rb
628
+ - lib/nucleus/adapters/v1/openshift_v2/authentication.rb
629
+ - lib/nucleus/adapters/v1/openshift_v2/data.rb
630
+ - lib/nucleus/adapters/v1/openshift_v2/domains.rb
631
+ - lib/nucleus/adapters/v1/openshift_v2/lifecycle.rb
632
+ - lib/nucleus/adapters/v1/openshift_v2/logs.rb
633
+ - lib/nucleus/adapters/v1/openshift_v2/openshift_v2.rb
634
+ - lib/nucleus/adapters/v1/openshift_v2/regions.rb
635
+ - lib/nucleus/adapters/v1/openshift_v2/scaling.rb
636
+ - lib/nucleus/adapters/v1/openshift_v2/semantic_errors.rb
637
+ - lib/nucleus/adapters/v1/openshift_v2/services.rb
638
+ - lib/nucleus/adapters/v1/openshift_v2/vars.rb
639
+ - lib/nucleus/adapters/v1/stub_adapter.rb
640
+ - lib/nucleus/core/adapter_authentication_inductor.rb
641
+ - lib/nucleus/core/adapter_extensions/auth/auth_client.rb
642
+ - lib/nucleus/core/adapter_extensions/auth/authentication_retry_wrapper.rb
643
+ - lib/nucleus/core/adapter_extensions/auth/expiring_token_auth_client.rb
644
+ - lib/nucleus/core/adapter_extensions/auth/http_basic_auth_client.rb
645
+ - lib/nucleus/core/adapter_extensions/auth/o_auth2_auth_client.rb
646
+ - lib/nucleus/core/adapter_extensions/auth/token_auth_client.rb
647
+ - lib/nucleus/core/adapter_extensions/http_client.rb
648
+ - lib/nucleus/core/adapter_extensions/http_tail_client.rb
649
+ - lib/nucleus/core/adapter_extensions/tail_stopper.rb
650
+ - lib/nucleus/core/common/errors/ambiguous_adapter_error.rb
651
+ - lib/nucleus/core/common/errors/file_existence_error.rb
652
+ - lib/nucleus/core/common/errors/startup_error.rb
653
+ - lib/nucleus/core/common/exit_codes.rb
654
+ - lib/nucleus/core/common/files/application_repo_sanitizer.rb
655
+ - lib/nucleus/core/common/files/archive_extractor.rb
656
+ - lib/nucleus/core/common/files/archiver.rb
657
+ - lib/nucleus/core/common/link_generator.rb
658
+ - lib/nucleus/core/common/logging/logging.rb
659
+ - lib/nucleus/core/common/logging/multi_logger.rb
660
+ - lib/nucleus/core/common/logging/request_log_formatter.rb
661
+ - lib/nucleus/core/common/ssh_handler.rb
662
+ - lib/nucleus/core/common/stream_callback.rb
663
+ - lib/nucleus/core/common/thread_config_accessor.rb
664
+ - lib/nucleus/core/common/url_converter.rb
665
+ - lib/nucleus/core/enums/application_states.rb
666
+ - lib/nucleus/core/enums/logfile_types.rb
667
+ - lib/nucleus/core/error_messages.rb
668
+ - lib/nucleus/core/errors/adapter_error.rb
669
+ - lib/nucleus/core/errors/adapter_missing_implementation_error.rb
670
+ - lib/nucleus/core/errors/adapter_request_error.rb
671
+ - lib/nucleus/core/errors/adapter_resource_not_found_error.rb
672
+ - lib/nucleus/core/errors/endpoint_authentication_error.rb
673
+ - lib/nucleus/core/errors/platform_specific_semantic_error.rb
674
+ - lib/nucleus/core/errors/platform_timeout_error.rb
675
+ - lib/nucleus/core/errors/platform_unavailable_error.rb
676
+ - lib/nucleus/core/errors/semantic_adapter_request_error.rb
677
+ - lib/nucleus/core/errors/unknown_adapter_call_error.rb
678
+ - lib/nucleus/core/file_handling/archive_converter.rb
679
+ - lib/nucleus/core/file_handling/file_manager.rb
680
+ - lib/nucleus/core/file_handling/git_deployer.rb
681
+ - lib/nucleus/core/file_handling/git_repo_analyzer.rb
682
+ - lib/nucleus/core/import/adapter_configuration.rb
683
+ - lib/nucleus/core/import/vendor_parser.rb
684
+ - lib/nucleus/core/import/version_detector.rb
685
+ - lib/nucleus/core/models/abstract_model.rb
686
+ - lib/nucleus/core/models/endpoint.rb
687
+ - lib/nucleus/core/models/provider.rb
688
+ - lib/nucleus/core/models/vendor.rb
689
+ - lib/nucleus/ext/kernel.rb
690
+ - lib/nucleus/ext/regexp.rb
691
+ - lib/nucleus/os.rb
692
+ - lib/nucleus/root_dir.rb
693
+ - lib/nucleus/scripts/finalize.rb
694
+ - lib/nucleus/scripts/initialize.rb
695
+ - lib/nucleus/scripts/initialize_config_defaults.rb
696
+ - lib/nucleus/scripts/load.rb
697
+ - lib/nucleus/scripts/load_dependencies.rb
698
+ - lib/nucleus/scripts/setup_config.rb
699
+ - lib/nucleus/scripts/shutdown.rb
700
+ - lib/nucleus/version.rb
701
+ - nucleus.gemspec
702
+ - public/robots.txt
703
+ - public/swagger-ui/css/reset.css
704
+ - public/swagger-ui/css/screen.css
705
+ - public/swagger-ui/images/apple-touch-icon-114x114.png
706
+ - public/swagger-ui/images/apple-touch-icon-120x120.png
707
+ - public/swagger-ui/images/apple-touch-icon-144x144.png
708
+ - public/swagger-ui/images/apple-touch-icon-152x152.png
709
+ - public/swagger-ui/images/apple-touch-icon-57x57.png
710
+ - public/swagger-ui/images/apple-touch-icon-60x60.png
711
+ - public/swagger-ui/images/apple-touch-icon-72x72.png
712
+ - public/swagger-ui/images/apple-touch-icon-76x76.png
713
+ - public/swagger-ui/images/explorer_icons.png
714
+ - public/swagger-ui/images/favicon-128.png
715
+ - public/swagger-ui/images/favicon-16x16.png
716
+ - public/swagger-ui/images/favicon-196x196.png
717
+ - public/swagger-ui/images/favicon-32x32.png
718
+ - public/swagger-ui/images/favicon-96x96.png
719
+ - public/swagger-ui/images/favicon.ico
720
+ - public/swagger-ui/images/logo_small.png
721
+ - public/swagger-ui/images/mstile-144x144.png
722
+ - public/swagger-ui/images/mstile-150x150.png
723
+ - public/swagger-ui/images/mstile-310x150.png
724
+ - public/swagger-ui/images/mstile-310x310.png
725
+ - public/swagger-ui/images/mstile-70x70.png
726
+ - public/swagger-ui/images/pet_store_api.png
727
+ - public/swagger-ui/images/throbber.gif
728
+ - public/swagger-ui/images/wordnik_api.png
729
+ - public/swagger-ui/index.html
730
+ - public/swagger-ui/lib/backbone-min.js
731
+ - public/swagger-ui/lib/handlebars-1.0.0.js
732
+ - public/swagger-ui/lib/highlight.7.3.pack.js
733
+ - public/swagger-ui/lib/jquery-1.8.0.min.js
734
+ - public/swagger-ui/lib/jquery.ba-bbq.min.js
735
+ - public/swagger-ui/lib/jquery.slideto.min.js
736
+ - public/swagger-ui/lib/jquery.wiggle.min.js
737
+ - public/swagger-ui/lib/shred.bundle.js
738
+ - public/swagger-ui/lib/shred/content.js
739
+ - public/swagger-ui/lib/swagger-oauth.js
740
+ - public/swagger-ui/lib/swagger.js
741
+ - public/swagger-ui/lib/underscore-min.js
742
+ - public/swagger-ui/o2c.html
743
+ - public/swagger-ui/redirect.html
744
+ - public/swagger-ui/swagger-ui.js
745
+ - public/swagger-ui/swagger-ui.min.js
746
+ - schemas/api.adapter.schema.yml
747
+ - schemas/api.requirements.schema.yml
748
+ - spec/factories/models.rb
749
+ - spec/integration/api/auth_spec.rb
750
+ - spec/integration/api/endpoints_spec.rb
751
+ - spec/integration/api/errors_spec.rb
752
+ - spec/integration/api/providers_spec.rb
753
+ - spec/integration/api/swagger_schema_spec.rb
754
+ - spec/integration/api/vendors_spec.rb
755
+ - spec/integration/integration_spec_helper.rb
756
+ - spec/integration/test_data_generator.rb
757
+ - spec/nucleus_git_key.pem
758
+ - spec/spec_helper.rb
759
+ - spec/support/shared_example_request_types.rb
760
+ - spec/test_suites.rake
761
+ - spec/unit/adapters/archive_converter_spec.rb
762
+ - spec/unit/adapters/file_manager_spec.rb
763
+ - spec/unit/adapters/git_deployer_spec.rb
764
+ - spec/unit/adapters/v1/stub_spec.rb
765
+ - spec/unit/common/helpers/auth_helper_spec.rb
766
+ - spec/unit/common/oauth2_auth_client_spec.rb
767
+ - spec/unit/common/regexp_spec.rb
768
+ - spec/unit/common/request_log_formatter_spec.rb
769
+ - spec/unit/common/thread_config_accessor_spec.rb
770
+ - spec/unit/models/endpoint_spec.rb
771
+ - spec/unit/models/provider_spec.rb
772
+ - spec/unit/models/vendor_spec.rb
773
+ - spec/unit/schemas/adapter_schema_spec.rb
774
+ - spec/unit/schemas/adapter_validation_spec.rb
775
+ - spec/unit/schemas/requirements_schema_spec.rb
776
+ - spec/unit/unit_spec_helper.rb
777
+ - tasks/compatibility.rake
778
+ - tasks/evaluation.rake
779
+ - wiki/adapter_tests.md
780
+ - wiki/implement_new_adapter.md
781
+ homepage: https://github.com/stefan-kolb/nucleus
782
+ licenses:
783
+ - MIT
784
+ metadata: {}
785
+ post_install_message:
786
+ rdoc_options: []
787
+ require_paths:
788
+ - lib
789
+ required_ruby_version: !ruby/object:Gem::Requirement
790
+ requirements:
791
+ - - ">="
792
+ - !ruby/object:Gem::Version
793
+ version: '2.0'
794
+ required_rubygems_version: !ruby/object:Gem::Requirement
795
+ requirements:
796
+ - - ">="
797
+ - !ruby/object:Gem::Version
798
+ version: '0'
799
+ requirements: []
800
+ rubyforge_project:
801
+ rubygems_version: 2.4.5
802
+ signing_key:
803
+ specification_version: 4
804
+ summary: Nucleus unifies core management functions of Platform-as-a-Service (PaaS)
805
+ systems.
806
+ test_files:
807
+ - spec/factories/models.rb
808
+ - spec/integration/api/auth_spec.rb
809
+ - spec/integration/api/endpoints_spec.rb
810
+ - spec/integration/api/errors_spec.rb
811
+ - spec/integration/api/providers_spec.rb
812
+ - spec/integration/api/swagger_schema_spec.rb
813
+ - spec/integration/api/vendors_spec.rb
814
+ - spec/integration/integration_spec_helper.rb
815
+ - spec/integration/test_data_generator.rb
816
+ - spec/nucleus_git_key.pem
817
+ - spec/spec_helper.rb
818
+ - spec/support/shared_example_request_types.rb
819
+ - spec/test_suites.rake
820
+ - spec/unit/adapters/archive_converter_spec.rb
821
+ - spec/unit/adapters/file_manager_spec.rb
822
+ - spec/unit/adapters/git_deployer_spec.rb
823
+ - spec/unit/adapters/v1/stub_spec.rb
824
+ - spec/unit/common/helpers/auth_helper_spec.rb
825
+ - spec/unit/common/oauth2_auth_client_spec.rb
826
+ - spec/unit/common/regexp_spec.rb
827
+ - spec/unit/common/request_log_formatter_spec.rb
828
+ - spec/unit/common/thread_config_accessor_spec.rb
829
+ - spec/unit/models/endpoint_spec.rb
830
+ - spec/unit/models/provider_spec.rb
831
+ - spec/unit/models/vendor_spec.rb
832
+ - spec/unit/schemas/adapter_schema_spec.rb
833
+ - spec/unit/schemas/adapter_validation_spec.rb
834
+ - spec/unit/schemas/requirements_schema_spec.rb
835
+ - spec/unit/unit_spec_helper.rb
836
+ has_rdoc: