aviator 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (148) hide show
  1. checksums.yaml +15 -0
  2. data/.travis.yml +1 -0
  3. data/README.md +35 -8
  4. data/README.md.orig +217 -0
  5. data/aviator.gemspec +3 -3
  6. data/lib/aviator/openstack/compute/v2/public/change_admin_password.rb +54 -0
  7. data/lib/aviator/openstack/compute/v2/public/create_image.rb +56 -0
  8. data/lib/aviator/openstack/compute/v2/public/create_server.rb +64 -0
  9. data/lib/aviator/openstack/compute/v2/public/delete_server.rb +39 -0
  10. data/lib/aviator/openstack/compute/v2/public/get_server.rb +39 -0
  11. data/lib/aviator/openstack/compute/v2/public/list_addresses.rb +48 -0
  12. data/lib/aviator/openstack/compute/v2/public/list_flavors.rb +55 -0
  13. data/lib/aviator/openstack/compute/v2/public/reboot_server.rb +51 -0
  14. data/lib/aviator/openstack/compute/v2/public/rebuild_server.rb +63 -0
  15. data/lib/aviator/openstack/compute/v2/public/root.rb +34 -0
  16. data/lib/aviator/openstack/compute/v2/public/update_server.rb +55 -0
  17. data/lib/aviator/version.rb +1 -1
  18. data/test/aviator/core/service_test.rb +3 -15
  19. data/test/aviator/core/session_test.rb +3 -3
  20. data/test/aviator/openstack/compute/v2/public/change_admin_password_test.rb +141 -0
  21. data/test/aviator/openstack/compute/v2/public/create_image_test.rb +146 -0
  22. data/test/aviator/openstack/compute/v2/public/create_server_test.rb +177 -0
  23. data/test/aviator/openstack/compute/v2/public/delete_server_test.rb +131 -0
  24. data/test/aviator/openstack/compute/v2/public/get_server_test.rb +138 -0
  25. data/test/aviator/openstack/compute/v2/public/list_addresses_test.rb +161 -0
  26. data/test/aviator/openstack/compute/v2/public/list_flavors_test.rb +160 -0
  27. data/test/aviator/openstack/compute/v2/public/list_images_test.rb +1 -1
  28. data/test/aviator/openstack/compute/v2/public/reboot_server_test.rb +137 -0
  29. data/test/aviator/openstack/compute/v2/public/rebuild_server_test.rb +183 -0
  30. data/test/aviator/openstack/compute/v2/public/root_test.rb +106 -0
  31. data/test/aviator/openstack/compute/v2/public/update_server_test.rb +144 -0
  32. data/test/aviator/openstack/identity/v2/admin/create_tenant_test.rb +1 -1
  33. data/test/cassettes/core/service/i_default_session_data_/sets_the_service_s_default_session_data.yml +18 -17
  34. data/test/cassettes/core/service/i_request/accepts_an_endpoint_type_option_for_selecting_a_specific_request.yml +31 -30
  35. data/test/cassettes/core/service/i_request/can_find_the_correct_request_based_on_bootstrapped_session_data.yml +18 -17
  36. data/test/cassettes/core/service/i_request/can_find_the_correct_request_based_on_non-bootstrapped_session_data.yml +29 -27
  37. data/test/cassettes/core/service/i_request/can_find_the_correct_request_if_api_version_is_not_defined_but_can_be_inferred_from_host_uri.yml +18 -17
  38. data/test/cassettes/core/service/i_request/uses_the_default_session_data_if_session_data_is_not_provided.yml +29 -27
  39. data/test/cassettes/core/session/c_load/creates_a_new_instance_from_the_given_session_dump.yml +18 -17
  40. data/test/cassettes/core/session/c_load/uses_the_loaded_auth_info_for_its_services.yml +18 -17
  41. data/test/cassettes/core/session/c_new/directs_log_entries_to_the_given_log_file.yml +18 -17
  42. data/test/cassettes/core/session/i_authenticate/authenticates_against_the_auth_service_indicated_in_the_config_file.yml +18 -17
  43. data/test/cassettes/core/session/i_authenticate/authenticates_against_the_auth_service_using_the_credentials_in_the_given_block.yml +10 -10
  44. data/test/cassettes/core/session/i_authenticate/raises_an_AuthenticationError_when_authentication_fails.yml +3 -3
  45. data/test/cassettes/core/session/i_authenticate/updates_the_session_data_of_its_service_objects.yml +36 -34
  46. data/test/cassettes/core/session/i_dump/serializes_the_session_data_for_caching.yml +18 -17
  47. data/test/cassettes/core/session/i_load/returns_itself.yml +18 -17
  48. data/test/cassettes/core/session/i_load/updates_the_session_data_of_its_service_objects.yml +36 -34
  49. data/test/cassettes/core/session/i_validate/returns_false_if_session_is_no_longer_valid.yml +20 -19
  50. data/test/cassettes/core/session/i_validate/returns_true_if_session_is_still_valid.yml +22 -21
  51. data/test/cassettes/core/session/i_xxx_service/returns_an_instance_of_the_indicated_service.yml +18 -17
  52. data/test/cassettes/openstack/compute/v2/public/change_admin_password/leads_to_a_valid_response_when_invalid_server_id_is_provided.yml +97 -0
  53. data/test/cassettes/openstack/compute/v2/public/change_admin_password/leads_to_a_valid_response_when_valid_params_are_provided.yml +132 -0
  54. data/test/cassettes/openstack/compute/v2/public/change_admin_password/returns_the_correct_value_for_body_.yml +63 -0
  55. data/test/cassettes/openstack/compute/v2/public/change_admin_password/returns_the_correct_value_for_headers_.yml +63 -0
  56. data/test/cassettes/openstack/compute/v2/public/change_admin_password/returns_the_correct_value_for_http_method_.yml +63 -0
  57. data/test/cassettes/openstack/compute/v2/public/change_admin_password/returns_the_correct_value_for_url_.yml +63 -0
  58. data/test/cassettes/openstack/compute/v2/public/create_image/leads_to_a_valid_response_when_invalid_server_id_is_provided.yml +97 -0
  59. data/test/cassettes/openstack/compute/v2/public/create_image/leads_to_a_valid_response_when_valid_params_are_provided.yml +132 -0
  60. data/test/cassettes/openstack/compute/v2/public/create_image/returns_the_correct_value_for_body_.yml +63 -0
  61. data/test/cassettes/openstack/compute/v2/public/create_image/returns_the_correct_value_for_headers_.yml +63 -0
  62. data/test/cassettes/openstack/compute/v2/public/create_image/returns_the_correct_value_for_http_method_.yml +63 -0
  63. data/test/cassettes/openstack/compute/v2/public/create_image/returns_the_correct_value_for_url_.yml +63 -0
  64. data/test/cassettes/openstack/compute/v2/public/create_server/leads_to_a_valid_response_when_parameters_are_provided.yml +182 -0
  65. data/test/cassettes/openstack/compute/v2/public/create_server/leads_to_a_valid_response_when_the_adminPass_parameter_is_provided.yml +182 -0
  66. data/test/cassettes/openstack/compute/v2/public/create_server/leads_to_a_valid_response_when_the_flavorRef_parameter_is_invalid.yml +135 -0
  67. data/test/cassettes/openstack/compute/v2/public/create_server/returns_the_correct_value_for_body_.yml +142 -0
  68. data/test/cassettes/openstack/compute/v2/public/create_server/returns_the_correct_value_for_headers_.yml +142 -0
  69. data/test/cassettes/openstack/compute/v2/public/create_server/returns_the_correct_value_for_http_method_.yml +142 -0
  70. data/test/cassettes/openstack/compute/v2/public/create_server/returns_the_correct_value_for_url_.yml +222 -0
  71. data/test/cassettes/openstack/compute/v2/public/delete_server/leads_to_a_valid_response_when_invalid_server_id_is_provided.yml +96 -0
  72. data/test/cassettes/openstack/compute/v2/public/delete_server/leads_to_a_valid_response_when_valid_server_id_is_provided.yml +131 -0
  73. data/test/cassettes/openstack/compute/v2/public/delete_server/returns_the_correct_value_for_body_.yml +62 -0
  74. data/test/cassettes/openstack/compute/v2/public/delete_server/returns_the_correct_value_for_headers_.yml +62 -0
  75. data/test/cassettes/openstack/compute/v2/public/delete_server/returns_the_correct_value_for_http_method_.yml +62 -0
  76. data/test/cassettes/openstack/compute/v2/public/delete_server/returns_the_correct_value_for_url_.yml +62 -0
  77. data/test/cassettes/openstack/compute/v2/public/get_server/leads_to_a_valid_response_when_a_valid_server_id_is_provided.yml +145 -0
  78. data/test/cassettes/openstack/compute/v2/public/get_server/leads_to_a_valid_response_when_an_invalid_server_id_is_provided.yml +96 -0
  79. data/test/cassettes/openstack/compute/v2/public/get_server/returns_the_correct_value_for_body_.yml +62 -0
  80. data/test/cassettes/openstack/compute/v2/public/get_server/returns_the_correct_value_for_headers_.yml +62 -0
  81. data/test/cassettes/openstack/compute/v2/public/get_server/returns_the_correct_value_for_http_method_.yml +62 -0
  82. data/test/cassettes/openstack/compute/v2/public/get_server/returns_the_correct_value_for_url_.yml +62 -0
  83. data/test/cassettes/openstack/compute/v2/public/list_addresses/leads_to_a_valid_response_when_a_networkID_parameter_is_provided.yml +167 -0
  84. data/test/cassettes/openstack/compute/v2/public/list_addresses/leads_to_a_valid_response_when_a_valid_server_id_is_provided.yml +132 -0
  85. data/test/cassettes/openstack/compute/v2/public/list_addresses/leads_to_a_valid_response_when_an_invalid_server_id_is_provided.yml +96 -0
  86. data/test/cassettes/openstack/compute/v2/public/list_addresses/returns_the_correct_value_for_body_.yml +63 -0
  87. data/test/cassettes/openstack/compute/v2/public/list_addresses/returns_the_correct_value_for_headers_.yml +63 -0
  88. data/test/cassettes/openstack/compute/v2/public/list_addresses/returns_the_correct_value_for_http_method_.yml +63 -0
  89. data/test/cassettes/openstack/compute/v2/public/list_addresses/returns_the_correct_value_for_url_.yml +63 -0
  90. data/test/cassettes/openstack/compute/v2/public/list_flavors/leads_to_a_valid_response_when_no_parameters_are_provided.yml +104 -0
  91. data/test/cassettes/openstack/compute/v2/public/list_flavors/leads_to_a_valid_response_when_the_details_filter_is_provided.yml +111 -0
  92. data/test/cassettes/openstack/compute/v2/public/list_flavors/leads_to_a_valid_response_when_the_minDisk_filter_is_provided.yml +146 -0
  93. data/test/cassettes/openstack/compute/v2/public/list_flavors/returns_the_correct_value_for_body_.yml +62 -0
  94. data/test/cassettes/openstack/compute/v2/public/list_flavors/returns_the_correct_value_for_headers_.yml +62 -0
  95. data/test/cassettes/openstack/compute/v2/public/list_flavors/returns_the_correct_value_for_http_method_.yml +62 -0
  96. data/test/cassettes/openstack/compute/v2/public/list_flavors/returns_the_correct_value_for_url_.yml +62 -0
  97. data/test/cassettes/openstack/compute/v2/public/list_images/leads_to_a_valid_response_when_no_parameters_are_provided.yml +32 -31
  98. data/test/cassettes/openstack/compute/v2/public/list_images/leads_to_a_valid_response_when_parameters_are_invalid.yml +23 -22
  99. data/test/cassettes/openstack/compute/v2/public/list_images/leads_to_a_valid_response_when_parameters_are_valid.yml +32 -31
  100. data/test/cassettes/openstack/compute/v2/public/list_images/returns_the_correct_value_for_body_.yml +18 -17
  101. data/test/cassettes/openstack/compute/v2/public/list_images/returns_the_correct_value_for_headers_.yml +18 -17
  102. data/test/cassettes/openstack/compute/v2/public/list_images/returns_the_correct_value_for_http_method_.yml +18 -17
  103. data/test/cassettes/openstack/compute/v2/public/list_images/returns_the_correct_value_for_url_.yml +18 -17
  104. data/test/cassettes/openstack/compute/v2/public/list_servers/leads_to_a_valid_response_when_no_parameters_are_provided.yml +39 -38
  105. data/test/cassettes/openstack/compute/v2/public/list_servers/leads_to_a_valid_response_when_parameters_are_invalid.yml +37 -35
  106. data/test/cassettes/openstack/compute/v2/public/list_servers/leads_to_a_valid_response_when_parameters_are_valid.yml +42 -39
  107. data/test/cassettes/openstack/compute/v2/public/list_servers/returns_the_correct_value_for_body_.yml +32 -30
  108. data/test/cassettes/openstack/compute/v2/public/list_servers/returns_the_correct_value_for_headers_.yml +32 -30
  109. data/test/cassettes/openstack/compute/v2/public/list_servers/returns_the_correct_value_for_http_method_.yml +32 -30
  110. data/test/cassettes/openstack/compute/v2/public/list_servers/returns_the_correct_value_for_url_.yml +32 -30
  111. data/test/cassettes/openstack/compute/v2/public/reboot_server/leads_to_a_valid_response_when_invalid_server_id_is_provided.yml +97 -0
  112. data/test/cassettes/openstack/compute/v2/public/reboot_server/leads_to_a_valid_response_when_valid_params_are_provided.yml +130 -0
  113. data/test/cassettes/openstack/compute/v2/public/reboot_server/returns_the_correct_value_for_body_.yml +63 -0
  114. data/test/cassettes/openstack/compute/v2/public/reboot_server/returns_the_correct_value_for_headers_.yml +63 -0
  115. data/test/cassettes/openstack/compute/v2/public/reboot_server/returns_the_correct_value_for_http_method_.yml +63 -0
  116. data/test/cassettes/openstack/compute/v2/public/reboot_server/returns_the_correct_value_for_url_.yml +63 -0
  117. data/test/cassettes/openstack/compute/v2/public/rebuild_server/leads_to_a_valid_response_when_invalid_image_id_is_provided.yml +133 -0
  118. data/test/cassettes/openstack/compute/v2/public/rebuild_server/leads_to_a_valid_response_when_invalid_server_id_is_provided.yml +167 -0
  119. data/test/cassettes/openstack/compute/v2/public/rebuild_server/leads_to_a_valid_response_when_valid_params_are_provided.yml +216 -0
  120. data/test/cassettes/openstack/compute/v2/public/rebuild_server/returns_the_correct_value_for_body_.yml +63 -0
  121. data/test/cassettes/openstack/compute/v2/public/rebuild_server/returns_the_correct_value_for_headers_.yml +63 -0
  122. data/test/cassettes/openstack/compute/v2/public/rebuild_server/returns_the_correct_value_for_http_method_.yml +63 -0
  123. data/test/cassettes/openstack/compute/v2/public/rebuild_server/returns_the_correct_value_for_url_.yml +63 -0
  124. data/test/cassettes/openstack/compute/v2/public/root/leads_to_a_valid_response_when_no_parameters_are_provided.yml +101 -0
  125. data/test/cassettes/openstack/compute/v2/public/root/returns_the_correct_value_for_body_.yml +62 -0
  126. data/test/cassettes/openstack/compute/v2/public/root/returns_the_correct_value_for_headers_.yml +62 -0
  127. data/test/cassettes/openstack/compute/v2/public/root/returns_the_correct_value_for_http_method_.yml +62 -0
  128. data/test/cassettes/openstack/compute/v2/public/root/returns_the_correct_value_for_url_.yml +62 -0
  129. data/test/cassettes/openstack/compute/v2/public/update_server/leads_to_a_valid_response_when_invalid_server_id_is_provided.yml +96 -0
  130. data/test/cassettes/openstack/compute/v2/public/update_server/leads_to_a_valid_response_when_valid_server_id_is_provided.yml +142 -0
  131. data/test/cassettes/openstack/compute/v2/public/update_server/returns_the_correct_value_for_body_.yml +142 -0
  132. data/test/cassettes/openstack/compute/v2/public/update_server/returns_the_correct_value_for_headers_.yml +142 -0
  133. data/test/cassettes/openstack/compute/v2/public/update_server/returns_the_correct_value_for_http_method_.yml +142 -0
  134. data/test/cassettes/openstack/compute/v2/public/update_server/returns_the_correct_value_for_url_.yml +142 -0
  135. data/test/cassettes/openstack/identity/v2/admin/create_tenant/leads_to_a_valid_response_when_params_are_invalid.yml +21 -20
  136. data/test/cassettes/openstack/identity/v2/admin/create_tenant/leads_to_a_valid_response_when_params_are_valid.yml +25 -24
  137. data/test/cassettes/openstack/identity/v2/public/create_token/leads_to_a_valid_response_when_parameters_are_invalid.yml +3 -3
  138. data/test/cassettes/openstack/identity/v2/public/create_token/leads_to_a_valid_response_when_parameters_are_valid.yml +10 -10
  139. data/test/cassettes/openstack/identity/v2/public/create_token/leads_to_a_valid_response_when_provided_with_a_token.yml +28 -27
  140. data/test/environment.yml.example +16 -9
  141. data/test/environment.yml.travis-ci +19 -14
  142. data/test/support/vcr_setup.rb +35 -10
  143. data/test/test_helper.rb +3 -1
  144. metadata +180 -52
  145. data/test/cassettes/openstack/compute/v2/public/list_images/returns_the_correct_value_for_body.yml +0 -63
  146. data/test/cassettes/openstack/compute/v2/public/list_images/returns_the_correct_value_for_headers.yml +0 -63
  147. data/test/cassettes/openstack/compute/v2/public/list_images/returns_the_correct_value_for_url.yml +0 -63
  148. data/test/cassettes/openstack/identity/v2/admin/create_tenant/leads_to_a_valid_response_when_provided_with_invalid_params.yml +0 -97
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ NzI1YmNkNTM4YzhkNGUyMzczZTZiNGY4MzI4NTg3YzcyOTdkZjc3Nw==
5
+ data.tar.gz: !binary |-
6
+ M2Q4OTRjZWQwNDAwYjI5YzI2NjM3YzQzNjQ5ZGE3ZjYxYzUxYzBjMQ==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ ZTY1ZTYxNzZjOWRlMzk2NThjYmMzZjFkZjg1ZmZhYWM3MDk2YWQ3NTUxNjJl
10
+ MDg4ZWM2ZTFkMTNiYzM1ZDUzODE0YTQ0YjgyMmUzOGM3NjQ0MmMwM2E5NGIx
11
+ NGYyNjJkZjdjNDc1NGY3NTA5ZTgxYWY0MmZkZDgyYzFkMjA2ODg=
12
+ data.tar.gz: !binary |-
13
+ NGUxNTE0MjY1ZjBjMzA1Mjg3ZDIyMjAwYzc4ODBmZTQ2N2ZlM2IwZmQ3ODFl
14
+ ZmI2NjVhZTQzMjU4M2JlZWExZGViYTllNGI5YjQxMzY3Mjk2NjZkYjFlMmYw
15
+ NWMxMGIyMjE2ZmMxMmM4NDAwYzViYTU2NjJiMjhhZTI3ZTRhNjc=
data/.travis.yml CHANGED
@@ -1,6 +1,7 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 1.9.3
4
+ - 2.0.0
4
5
  branches:
5
6
  only:
6
7
  - master
data/README.md CHANGED
@@ -1,9 +1,10 @@
1
1
  # Aviator
2
2
 
3
- [![Build Status](https://travis-ci.org/relaxdiego/aviator.png?branch=master)](https://travis-ci.org/relaxdiego/aviator)
4
- [![Coverage Status](https://coveralls.io/repos/relaxdiego/aviator/badge.png?branch=master)](https://coveralls.io/r/relaxdiego/aviator?branch=master)
5
- [![Code Climate](https://codeclimate.com/github/relaxdiego/aviator.png)](https://codeclimate.com/github/relaxdiego/aviator)
6
-
3
+ [![Build Status](https://travis-ci.org/aviator/aviator.png?branch=master)](https://travis-ci.org/aviator/aviator)
4
+ [![Coverage Status](https://coveralls.io/repos/aviator/aviator/badge.png?branch=master)](https://coveralls.io/r/aviator/aviator?branch=master)
5
+ [![Code Climate](https://codeclimate.com/github/aviator/aviator.png)](https://codeclimate.com/github/aviator/aviator)
6
+ [![Gem Version](https://badge.fury.io/rb/aviator.png)](http://badge.fury.io/rb/aviator)
7
+ [![Dependency Status](https://gemnasium.com/aviator/aviator.png)](https://gemnasium.com/aviator/aviator)
7
8
 
8
9
  A lightweight library for communicating with the OpenStack API.
9
10
 
@@ -14,6 +15,10 @@ Add this line to your application's Gemfile:
14
15
 
15
16
  gem 'aviator'
16
17
 
18
+ Or if you want to live on the edge:
19
+
20
+ gem 'aviator', :git => 'git@github.com:aviator/aviator.git', :branch => 'develop'
21
+
17
22
  And then execute:
18
23
 
19
24
  $ bundle
@@ -25,7 +30,7 @@ Or install it yourself as:
25
30
  ## Usage
26
31
 
27
32
  ```ruby
28
- require 'aviator/core'
33
+ require 'aviator'
29
34
 
30
35
  # Create a new session. See 'Configuration' below for the config file format.
31
36
  session = Aviator::Session.new(
@@ -52,7 +57,7 @@ session.authenticate do |credentials|
52
57
  end
53
58
 
54
59
  # Serialize the session information for caching. The output is in plaintext JSON which
55
- # contains sensitive information and you are responsible for securing this data.
60
+ # contains sensitive information. You are responsible for securing that.
56
61
  str = session.dump
57
62
 
58
63
  # Create a new Session object from a session dump. This DOES NOT create a new token.
@@ -67,7 +72,7 @@ session = Aviator::Session.load(str)
67
72
  # a brand new session object.
68
73
  session.load(other_session_dump)
69
74
 
70
- # Depending on how old the loaded session dump is, the auth_info may already be expired.
75
+ # Depending on how old the loaded session dump is, its session data may already be expired.
71
76
  # Check if it's still current by calling Session#validate and reauthenticate as needed.
72
77
  #
73
78
  # IMPORTANT: The validator must be defined in the config file and it must refer to the
@@ -104,7 +109,7 @@ response = keystone.request(:list_tenants, endpoint_type: 'admin')
104
109
 
105
110
  ## Configuration
106
111
 
107
- The configuration file is a simple YAML file with one or more environment definitions.
112
+ The configuration file is a simple YAML file that can have one or more environment definitions.
108
113
 
109
114
  ```
110
115
  production:
@@ -176,6 +181,28 @@ Describe Keystone's create_tenant request
176
181
  ```bash
177
182
  $ aviator describe openstack identity v2 admin create_tenant
178
183
  ```
184
+
185
+ The last command above will display:
186
+
187
+ ```bash
188
+ Request: create_tenant
189
+
190
+ Parameters:
191
+ (required) description
192
+ (required) enabled
193
+ (required) name
194
+
195
+ Sample Code:
196
+ session.identity_service.request(:create_tenant, endpoint_type: 'admin') do |params|
197
+ params['name'] = value
198
+ params['description'] = value
199
+ params['enabled'] = value
200
+ end
201
+
202
+ Links:
203
+ documentation:
204
+ http://docs.openstack.org/api/openstack-identity-service/2.0/content/
205
+ ```
179
206
 
180
207
  ## Contributing
181
208
 
data/README.md.orig ADDED
@@ -0,0 +1,217 @@
1
+ # Aviator
2
+
3
+ [![Build Status](https://travis-ci.org/aviator/aviator.png?branch=master)](https://travis-ci.org/aviator/aviator)
4
+ [![Coverage Status](https://coveralls.io/repos/aviator/aviator/badge.png?branch=master)](https://coveralls.io/r/aviator/aviator?branch=master)
5
+ [![Code Climate](https://codeclimate.com/github/aviator/aviator.png)](https://codeclimate.com/github/aviator/aviator)
6
+ [![Gem Version](https://badge.fury.io/rb/aviator.png)](http://badge.fury.io/rb/aviator)
7
+ [![Dependency Status](https://gemnasium.com/aviator/aviator.png)](https://gemnasium.com/aviator/aviator)
8
+ <<<<<<< HEAD
9
+
10
+ =======
11
+ >>>>>>> develop
12
+
13
+ A lightweight library for communicating with the OpenStack API.
14
+
15
+
16
+ ## Installation
17
+
18
+ Add this line to your application's Gemfile:
19
+
20
+ gem 'aviator'
21
+
22
+ Or if you want to live on the edge:
23
+
24
+ gem 'aviator', :git => 'git@github.com:aviator/aviator.git', :branch => 'develop'
25
+
26
+ And then execute:
27
+
28
+ $ bundle
29
+
30
+ Or install it yourself as:
31
+
32
+ $ gem install aviator
33
+
34
+ ## Usage
35
+
36
+ ```ruby
37
+ require 'aviator'
38
+
39
+ # Create a new session. See 'Configuration' below for the config file format.
40
+ session = Aviator::Session.new(
41
+ config_file: 'path/to/aviator.yml',
42
+ environment: :production,
43
+ log_file: 'path/to/aviator.log'
44
+ )
45
+
46
+ # Authenticate against the auth service specified in :config_file. If no
47
+ # credentials are available in the config file, this line will throw an error.
48
+ session.authenticate
49
+
50
+ # You can re-authenticate anytime. Note that this creates a new token in the
51
+ # underlying environment while the old token is discarded by the Session object.
52
+ # Be aware of this fact as it might unnecessarily generate too many tokens.
53
+ #
54
+ # Notice how you can override the credentials in the config file. Also note that
55
+ # the keys used below (:username, :password, :tenantName) match the name as
56
+ # indicated in the official OpenStack documentation.
57
+ session.authenticate do |credentials|
58
+ credentials[:username] = myusername
59
+ credentials[:password] = mypassword
60
+ credentials[:tenantName] = tenantName
61
+ end
62
+
63
+ # Serialize the session information for caching. The output is in plaintext JSON which
64
+ # contains sensitive information. You are responsible for securing that.
65
+ str = session.dump
66
+
67
+ # Create a new Session object from a session dump. This DOES NOT create a new token.
68
+ # If you employed any form of encryption on the string, make sure to decrypt it first!
69
+ session = Aviator::Session.load(str)
70
+
71
+ # In some instances, Session::load is inefficient because it creates a new session object
72
+ # each time. In a web app environment, for instance, having to destroy and recreate the
73
+ # session object can take its toll on performance. In such a scenario, use Session#load
74
+ # (instance method, as opposed to class method). This will 'infect' an already existing
75
+ # session object with the supplied session dump and return itself instead of creating
76
+ # a brand new session object.
77
+ session.load(other_session_dump)
78
+
79
+ # Depending on how old the loaded session dump is, its session data may already be expired.
80
+ # Check if it's still current by calling Session#validate and reauthenticate as needed.
81
+ #
82
+ # IMPORTANT: The validator must be defined in the config file and it must refer to the
83
+ # name of a request that is known to Aviator. See 'Configuration' below for examples
84
+ session.authenticate unless session.validate
85
+
86
+ # If you want the newly created session to log its output, make sure to indicate it on load
87
+ session = Aviator::Session.load(str, log_file: 'path/to/aviator.log')
88
+
89
+ # Get a handle to the Identity Service.
90
+ keystone = session.identity_service
91
+
92
+ # Create a new tenant
93
+ response = keystone.request(:create_tenant) do |params|
94
+ params[:name] = 'Project'
95
+ params[:description] = 'My Project'
96
+ params[:enabled] = true
97
+ end
98
+
99
+ # Aviator uses parameter names as defined in the official OpenStack API doc. You can
100
+ # also access the params via dot notation (e.g. params.description) or by using a string
101
+ # for a hash key (e.g. params['description']). However, keep in mind that OpenStack
102
+ # parameters that have dashes and other characters that are not valid for method names
103
+ # and symbols can only be expressed as strings. E.g. params['changes-since']
104
+
105
+
106
+ # Be explicit about the endpoint type. Useful in those rare instances when
107
+ # the same request name means differently depending on the endpoint type.
108
+ # For example, in OpenStack, :list_tenants will return only the tenants the
109
+ # user is a member of in the public endpoint whereas the admin endpoint will
110
+ # return all tenants in the system.
111
+ response = keystone.request(:list_tenants, endpoint_type: 'admin')
112
+ ```
113
+
114
+ ## Configuration
115
+
116
+ The configuration file is a simple YAML file that can have one or more environment definitions.
117
+
118
+ ```
119
+ production:
120
+ provider: openstack
121
+ auth_service:
122
+ name: identity
123
+ host_uri: http://my.openstackenv.org:5000
124
+ request: create_token
125
+ validator: list_tenants # Request to make for validating the session
126
+ api_version: v2 # Optional if version is indicated in host_uri
127
+ auth_credentials:
128
+ username: admin
129
+ password: mypassword
130
+ tenantName: myproject
131
+
132
+ development_1:
133
+ provider: openstack
134
+ auth_service:
135
+ name: identity
136
+ host_uri: http://devstack:5000/v2.0
137
+ request: create_token
138
+ validator: list_tenants
139
+ auth_credentials:
140
+ tokenId: 2c963f5512d067b24fdc312707c80c7a6d3d261b
141
+ tenantName: admin
142
+
143
+ development_2:
144
+ provider: openstack
145
+ auth_service:
146
+ name: identity
147
+ host_uri: http://devstack:5000/v2.0
148
+ request: create_token
149
+ validator: list_tenants
150
+ auth_credentials:
151
+ username: admin
152
+ password: mypassword
153
+ tenantName: myproject
154
+ ```
155
+
156
+ A note on the validator: it can be any request as long as
157
+
158
+ 1. It is defined in Aviator
159
+ 1. Does not require any parameters
160
+ 1. It returns an HTTP status 200 or 203 to indicate auth info validity.
161
+ 1. It returns any other HTTP status to indicate that the auth info is invalid.
162
+
163
+ ## CLI tools
164
+
165
+ List available providers. Includes only OpenStack for now.
166
+
167
+ ```bash
168
+ $ aviator describe
169
+ ```
170
+
171
+ List available services for OpenStack.
172
+
173
+ ```bash
174
+ $ aviator describe openstack
175
+ ```
176
+
177
+ List available requests for Keystone
178
+
179
+ ```bash
180
+ $ aviator describe openstack identity
181
+ ```
182
+
183
+ Describe Keystone's create_tenant request
184
+
185
+ ```bash
186
+ $ aviator describe openstack identity v2 admin create_tenant
187
+ ```
188
+
189
+ The last command above will display:
190
+
191
+ ```bash
192
+ Request: create_tenant
193
+
194
+ Parameters:
195
+ (required) description
196
+ (required) enabled
197
+ (required) name
198
+
199
+ Sample Code:
200
+ session.identity_service.request(:create_tenant, endpoint_type: 'admin') do |params|
201
+ params['name'] = value
202
+ params['description'] = value
203
+ params['enabled'] = value
204
+ end
205
+
206
+ Links:
207
+ documentation:
208
+ http://docs.openstack.org/api/openstack-identity-service/2.0/content/
209
+ ```
210
+
211
+ ## Contributing
212
+
213
+ 1. Fork it
214
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
215
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
216
+ 4. Push to the branch (`git push origin my-new-feature`)
217
+ 5. Create new Pull Request
data/aviator.gemspec CHANGED
@@ -8,9 +8,9 @@ Gem::Specification.new do |spec|
8
8
  spec.version = Aviator::VERSION
9
9
  spec.authors = ["Mark Maglana"]
10
10
  spec.email = ["mmaglana@gmail.com"]
11
- spec.description = %q{ Lightweight Ruby bindings for the OpenStack API }
12
- spec.summary = %q{ Lightweight Ruby bindings for the OpenStack API }
13
- spec.homepage = "https://github.com/relaxdiego/aviator"
11
+ spec.description = %q{ A lightweight Ruby library for the OpenStack API }
12
+ spec.summary = %q{ A lightweight Ruby library for the OpenStack API }
13
+ spec.homepage = "https://github.com/aviator/aviator"
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.files = `git ls-files`.split($/)
@@ -0,0 +1,54 @@
1
+ module Aviator
2
+
3
+ define_request :change_admin_password do
4
+
5
+ meta :provider, :openstack
6
+ meta :service, :compute
7
+ meta :api_version, :v2
8
+ meta :endpoint_type, :public
9
+
10
+ link 'documentation',
11
+ 'http://docs.openstack.org/api/openstack-compute/2/content/Change_Password-d1e3234.html'
12
+
13
+ link 'additional spec',
14
+ 'https://answers.launchpad.net/nova/+question/228462'
15
+
16
+ param :adminPass, required: true
17
+ param :id, required: true
18
+
19
+
20
+ def body
21
+ p = {
22
+ changePassword: {
23
+ adminPass: params[:adminPass]
24
+ }
25
+ }
26
+
27
+ p
28
+ end
29
+
30
+
31
+ def headers
32
+ h = {}
33
+
34
+ unless self.anonymous?
35
+ h['X-Auth-Token'] = session_data[:access][:token][:id]
36
+ end
37
+
38
+ h
39
+ end
40
+
41
+
42
+ def http_method
43
+ :post
44
+ end
45
+
46
+
47
+ def url
48
+ service_spec = session_data[:access][:serviceCatalog].find{|s| s[:type] == service.to_s }
49
+ "#{ service_spec[:endpoints][0][:publicURL] }/servers/#{ params[:id] }/action"
50
+ end
51
+
52
+ end
53
+
54
+ end
@@ -0,0 +1,56 @@
1
+ module Aviator
2
+
3
+ define_request :create_image do
4
+
5
+ meta :provider, :openstack
6
+ meta :service, :compute
7
+ meta :api_version, :v2
8
+ meta :endpoint_type, :public
9
+
10
+ link 'documentation',
11
+ 'http://docs.openstack.org/api/openstack-compute/2/content/Create_Image-d1e4655.html'
12
+
13
+ param :id, required: true
14
+ param :metadata, required: false
15
+ param :name, required: true
16
+
17
+
18
+ def body
19
+ p = {
20
+ createImage: {
21
+ name: params[:name]
22
+ }
23
+ }
24
+
25
+ [:metadata].each do |key|
26
+ p[:createImage][key] = params[key] if params[key]
27
+ end
28
+
29
+ p
30
+ end
31
+
32
+
33
+ def headers
34
+ h = {}
35
+
36
+ unless self.anonymous?
37
+ h['X-Auth-Token'] = session_data[:access][:token][:id]
38
+ end
39
+
40
+ h
41
+ end
42
+
43
+
44
+ def http_method
45
+ :post
46
+ end
47
+
48
+
49
+ def url
50
+ service_spec = session_data[:access][:serviceCatalog].find{|s| s[:type] == service.to_s }
51
+ "#{ service_spec[:endpoints][0][:publicURL] }/servers/#{ params[:id] }/action"
52
+ end
53
+
54
+ end
55
+
56
+ end
@@ -0,0 +1,64 @@
1
+ module Aviator
2
+
3
+ define_request :create_server do
4
+
5
+ meta :provider, :openstack
6
+ meta :service, :compute
7
+ meta :api_version, :v2
8
+ meta :endpoint_type, :public
9
+
10
+ link 'documentation',
11
+ 'http://docs.openstack.org/api/openstack-compute/2/content/CreateServers.html'
12
+
13
+ param :accessIPv4, required: false
14
+ param :accessIPv6, required: false
15
+ param :adminPass, required: false
16
+ param :imageRef, required: true
17
+ param :flavorRef, required: true
18
+ param :metadata, required: false
19
+ param :name, required: true
20
+ param :networks, required: false
21
+ param :personality, required: false
22
+
23
+
24
+ def body
25
+ p = {
26
+ server: {
27
+ flavorRef: params[:flavorRef],
28
+ imageRef: params[:imageRef],
29
+ name: params[:name]
30
+ }
31
+ }
32
+
33
+ [:adminPass, :metadata, :personality, :networks, :accessIPv4, :accessIPv6].each do |key|
34
+ p[:server][key] = params[key] if params[key]
35
+ end
36
+
37
+ p
38
+ end
39
+
40
+
41
+ def headers
42
+ h = {}
43
+
44
+ unless self.anonymous?
45
+ h['X-Auth-Token'] = session_data[:access][:token][:id]
46
+ end
47
+
48
+ h
49
+ end
50
+
51
+
52
+ def http_method
53
+ :post
54
+ end
55
+
56
+
57
+ def url
58
+ service_spec = session_data[:access][:serviceCatalog].find{|s| s[:type] == service.to_s }
59
+ "#{ service_spec[:endpoints][0][:publicURL] }/servers"
60
+ end
61
+
62
+ end
63
+
64
+ end
@@ -0,0 +1,39 @@
1
+ module Aviator
2
+
3
+ define_request :delete_server do
4
+
5
+ meta :provider, :openstack
6
+ meta :service, :compute
7
+ meta :api_version, :v2
8
+ meta :endpoint_type, :public
9
+
10
+ link 'documentation',
11
+ 'http://docs.openstack.org/api/openstack-compute/2/content/Delete_Server-d1e2883.html'
12
+
13
+ param :id, required: true
14
+
15
+
16
+ def headers
17
+ h = {}
18
+
19
+ unless self.anonymous?
20
+ h['X-Auth-Token'] = session_data[:access][:token][:id]
21
+ end
22
+
23
+ h
24
+ end
25
+
26
+
27
+ def http_method
28
+ :delete
29
+ end
30
+
31
+
32
+ def url
33
+ service_spec = session_data[:access][:serviceCatalog].find{|s| s[:type] == service.to_s }
34
+ "#{ service_spec[:endpoints][0][:publicURL] }/servers/#{ params[:id] }"
35
+ end
36
+
37
+ end
38
+
39
+ end
@@ -0,0 +1,39 @@
1
+ module Aviator
2
+
3
+ define_request :get_server do
4
+
5
+ meta :provider, :openstack
6
+ meta :service, :compute
7
+ meta :api_version, :v2
8
+ meta :endpoint_type, :public
9
+
10
+ link 'documentation',
11
+ 'http://docs.openstack.org/api/openstack-compute/2/content/Get_Server_Details-d1e2623.html'
12
+
13
+ param :id, required: true
14
+
15
+ def headers
16
+ h = {}
17
+
18
+ unless self.anonymous?
19
+ h['X-Auth-Token'] = session_data[:access][:token][:id]
20
+ end
21
+
22
+ h
23
+ end
24
+
25
+
26
+ def http_method
27
+ :get
28
+ end
29
+
30
+
31
+ def url
32
+ service_spec = session_data[:access][:serviceCatalog].find{|s| s[:type] == service.to_s }
33
+
34
+ "#{ service_spec[:endpoints][0][:publicURL] }/servers/#{ params[:id] }"
35
+ end
36
+
37
+ end
38
+
39
+ end
@@ -0,0 +1,48 @@
1
+ module Aviator
2
+
3
+ define_request :list_addresses do
4
+
5
+ meta :provider, :openstack
6
+ meta :service, :compute
7
+ meta :api_version, :v2
8
+ meta :endpoint_type, :public
9
+
10
+ link 'documentation',
11
+ 'http://docs.openstack.org/api/openstack-compute/2/content/List_Addresses-d1e3014.html'
12
+
13
+ link 'documentation',
14
+ 'http://docs.openstack.org/api/openstack-compute/2/content/List_Addresses_by_Network-d1e3118.html'
15
+
16
+
17
+ param :id, required: true
18
+ param :networkID, required: false
19
+
20
+
21
+ def headers
22
+ h = {}
23
+
24
+ unless self.anonymous?
25
+ h['X-Auth-Token'] = session_data[:access][:token][:id]
26
+ end
27
+
28
+ h
29
+ end
30
+
31
+
32
+ def http_method
33
+ :get
34
+ end
35
+
36
+
37
+ def url
38
+ service_spec = session_data[:access][:serviceCatalog].find{|s| s[:type] == service.to_s }
39
+
40
+ url = "#{ service_spec[:endpoints][0][:publicURL] }/servers/#{ params[:id] }/ips"
41
+ url += "/#{ params[:networkID] }" if params[:networkID]
42
+
43
+ url
44
+ end
45
+
46
+ end
47
+
48
+ end