nucleus 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.
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: