rightresource 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +463 -0
- data/README.rdoc +45 -8
- data/lib/right_resource/base.rb +128 -42
- data/lib/right_resource/connection.rb +17 -16
- data/lib/right_resource/core_ext/hash/{generate_attributes.rb → alter_keys.rb} +2 -2
- data/lib/right_resource/core_ext/hash.rb +1 -1
- data/lib/right_resource/deployment.rb +1 -1
- data/lib/right_resource/ec2_elastic_ip.rb +0 -3
- data/lib/right_resource/formats/json_format.rb +0 -2
- data/lib/right_resource/formats/xml_format.rb +2 -4
- data/lib/right_resource/multi_cloud_image.rb +1 -1
- data/lib/right_resource/right_script.rb +1 -1
- data/lib/right_resource/s3_bucket.rb +0 -3
- data/lib/right_resource/server.rb +5 -23
- data/lib/right_resource/server_array.rb +22 -11
- data/lib/right_resource/server_template.rb +2 -2
- data/lib/right_resource/status.rb +1 -1
- data/lib/right_resource/tag.rb +26 -8
- data/lib/right_resource.rb +6 -3
- metadata +6 -6
- data/CHANGELOG +0 -18
data/History.txt
ADDED
|
@@ -0,0 +1,463 @@
|
|
|
1
|
+
=== 0.0.1 2010-11-23
|
|
2
|
+
|
|
3
|
+
* 1 major enhancement:
|
|
4
|
+
* Initial release
|
|
5
|
+
|
|
6
|
+
commit dd59bf61c82aad05d90b35c3286cdefb65830277
|
|
7
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
8
|
+
Date: Wed Nov 24 08:58:24 2010 +0900
|
|
9
|
+
|
|
10
|
+
refactor: recursive convert attrs, update method
|
|
11
|
+
|
|
12
|
+
* recursive convert resource attributes
|
|
13
|
+
* update method support
|
|
14
|
+
* add fixtures of resource attributes
|
|
15
|
+
|
|
16
|
+
commit 2cab626e7cf166a62787415261d479b9b2bb31ce
|
|
17
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
18
|
+
Date: Mon Nov 15 02:41:29 2010 +0900
|
|
19
|
+
|
|
20
|
+
refactor: method chain
|
|
21
|
+
|
|
22
|
+
commit b1add55c13950a7f8085f97b9c91216d7a7d07fa
|
|
23
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
24
|
+
Date: Mon Nov 15 01:51:48 2010 +0900
|
|
25
|
+
|
|
26
|
+
versionup: v0.2.9
|
|
27
|
+
|
|
28
|
+
commit c206b7201b88b7864c60b3e5b64192d8ba794523
|
|
29
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
30
|
+
Date: Mon Nov 15 01:42:34 2010 +0900
|
|
31
|
+
|
|
32
|
+
refactor and add: tag resource, undef method
|
|
33
|
+
|
|
34
|
+
core_ext class Hash: generate_attributes(key: String2Symbol and '-'2'_')
|
|
35
|
+
add tag resource api
|
|
36
|
+
refactor: undef not use method
|
|
37
|
+
|
|
38
|
+
commit 716ea66791a7ca9bf284fa2f854258c82d1df6ae
|
|
39
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
40
|
+
Date: Sun Nov 14 15:30:09 2010 +0900
|
|
41
|
+
|
|
42
|
+
add: resource method, base class method: action(RestFul)
|
|
43
|
+
|
|
44
|
+
commit 241c072da738d41fa543b5218093555a66a798ae
|
|
45
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
46
|
+
Date: Sat Nov 13 11:45:40 2010 +0900
|
|
47
|
+
|
|
48
|
+
refactor: remove methods
|
|
49
|
+
|
|
50
|
+
commit cdaba1c34a4605eb4c89504057b9b417bd32f3e7
|
|
51
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
52
|
+
Date: Sat Nov 13 11:41:25 2010 +0900
|
|
53
|
+
|
|
54
|
+
add: action method support
|
|
55
|
+
|
|
56
|
+
commit f546e00d9c35a87324df05d910335d4a8a7d4a1c
|
|
57
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
58
|
+
Date: Fri Nov 12 18:44:02 2010 +0900
|
|
59
|
+
|
|
60
|
+
modified: Resource.create comment
|
|
61
|
+
|
|
62
|
+
commit d7c446c190dcf8a2d78cf74f56826e845dc7f946
|
|
63
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
64
|
+
Date: Fri Nov 12 17:39:43 2010 +0900
|
|
65
|
+
|
|
66
|
+
bug fix: tab, space
|
|
67
|
+
|
|
68
|
+
commit a33ccde253c9a3c8b03db5f393814b7d75f9888a
|
|
69
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
70
|
+
Date: Fri Nov 12 16:24:47 2010 +0900
|
|
71
|
+
|
|
72
|
+
v0.2.6->v0.2.7
|
|
73
|
+
|
|
74
|
+
commit a91118256ed82fc436fcca827eaa95b6b5e1515a
|
|
75
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
76
|
+
Date: Fri Nov 12 16:21:13 2010 +0900
|
|
77
|
+
|
|
78
|
+
add: Search server's tag support
|
|
79
|
+
|
|
80
|
+
Search servers's resource tag(server's href or current instance's href)
|
|
81
|
+
created by Nimai Malle
|
|
82
|
+
|
|
83
|
+
commit b87729b4595f09914110ebe61e9467502ec51b10
|
|
84
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
85
|
+
Date: Wed Nov 10 11:43:01 2010 +0900
|
|
86
|
+
|
|
87
|
+
version up
|
|
88
|
+
|
|
89
|
+
commit d27ae1037c75900c384339ca4e320ecd1e2fb8b2
|
|
90
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
91
|
+
Date: Wed Nov 10 10:49:37 2010 +0900
|
|
92
|
+
|
|
93
|
+
bug fix: format
|
|
94
|
+
|
|
95
|
+
commit 99838b47518bee172be4d649917ebf4744f250f7
|
|
96
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
97
|
+
Date: Wed Nov 10 09:02:39 2010 +0900
|
|
98
|
+
|
|
99
|
+
modified: variable inherit
|
|
100
|
+
|
|
101
|
+
commit be4cedc3556840f6ec25914b86f7579c3736e668
|
|
102
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
103
|
+
Date: Tue Nov 9 22:06:56 2010 +0900
|
|
104
|
+
|
|
105
|
+
bug fix: mistake except api returns array, collect hash
|
|
106
|
+
|
|
107
|
+
commit b46cf20bc72fe2580a46f95fdd1425e03754a01c
|
|
108
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
109
|
+
Date: Tue Nov 9 22:06:21 2010 +0900
|
|
110
|
+
|
|
111
|
+
bug fix: mistake except api returns array, collect hash
|
|
112
|
+
|
|
113
|
+
commit 9e2e4fc1932a5b97a237513356f4bbf673a9fe92
|
|
114
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
115
|
+
Date: Tue Nov 9 21:14:44 2010 +0900
|
|
116
|
+
|
|
117
|
+
bug fix: mistake expect hash of api returns, collect array
|
|
118
|
+
|
|
119
|
+
commit 8b7698d66db112037c338f0d2eb19fb886e36fbd
|
|
120
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
121
|
+
Date: Tue Nov 9 09:39:05 2010 +0900
|
|
122
|
+
|
|
123
|
+
modified: logger level debug -> warn
|
|
124
|
+
|
|
125
|
+
commit 789c239a8df5f385d23eb871b2d739e6ddbb6953
|
|
126
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
127
|
+
Date: Mon Nov 8 22:24:03 2010 +0900
|
|
128
|
+
|
|
129
|
+
version up: v0.2.1 -> v0.2.2
|
|
130
|
+
|
|
131
|
+
commit eebbb4fe3a7608053ae852efb703c5946f120acb
|
|
132
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
133
|
+
Date: Mon Nov 8 22:22:44 2010 +0900
|
|
134
|
+
|
|
135
|
+
modified: add rdoc in gem
|
|
136
|
+
|
|
137
|
+
commit b916804a3dd3e123ba1be9f35d6562d69d6b8c9e
|
|
138
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
139
|
+
Date: Mon Nov 8 19:56:38 2010 +0900
|
|
140
|
+
|
|
141
|
+
modified: convert subresources hash key string2symbol
|
|
142
|
+
|
|
143
|
+
commit 61e1bea412912a3833f8dee9327fd050a9e188b5
|
|
144
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
145
|
+
Date: Mon Nov 8 15:46:18 2010 +0900
|
|
146
|
+
|
|
147
|
+
bug fix: method, rdoc commentout
|
|
148
|
+
|
|
149
|
+
commit 779ab906e6b6da686312472e6f95e401d2221a3c
|
|
150
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
151
|
+
Date: Mon Nov 8 11:55:02 2010 +0900
|
|
152
|
+
|
|
153
|
+
bug fix: gems name mistake
|
|
154
|
+
|
|
155
|
+
commit 2e01389ef942886ab3fddc4644d419b6d4acc009
|
|
156
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
157
|
+
Date: Mon Nov 8 11:48:02 2010 +0900
|
|
158
|
+
|
|
159
|
+
bug fix: gems name mistake
|
|
160
|
+
|
|
161
|
+
commit 5c52c7e1c68dc16439e0f474f96a558909300994
|
|
162
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
163
|
+
Date: Mon Nov 8 10:24:42 2010 +0900
|
|
164
|
+
|
|
165
|
+
modified: when create resource, except modified cloud_id
|
|
166
|
+
|
|
167
|
+
commit f15a75f72ea9a46650710b813af6ac901dacdfc2
|
|
168
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
169
|
+
Date: Mon Nov 8 10:24:03 2010 +0900
|
|
170
|
+
|
|
171
|
+
modified: when create resource, except modified cloud_id
|
|
172
|
+
|
|
173
|
+
commit 07a8076ca9e7e96a8afb1d78d9bdad9791c3d1e2
|
|
174
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
175
|
+
Date: Mon Nov 8 09:33:01 2010 +0900
|
|
176
|
+
|
|
177
|
+
modified: support create, update method and bug fix
|
|
178
|
+
|
|
179
|
+
commit 68e3311ec100f324604780c86acbcb062731104d
|
|
180
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
181
|
+
Date: Mon Nov 8 01:06:40 2010 +0900
|
|
182
|
+
|
|
183
|
+
add: license paragraph, rename README
|
|
184
|
+
|
|
185
|
+
commit 28bd894a086b37db7ef7d70629c482d8f7aa960b
|
|
186
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
187
|
+
Date: Sun Nov 7 17:14:47 2010 +0900
|
|
188
|
+
|
|
189
|
+
modified: Rakefile, add tags(ctag) ignore
|
|
190
|
+
|
|
191
|
+
commit 59d47437af3ec0cc30dfe3962b2e047b28910d59
|
|
192
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
193
|
+
Date: Sun Nov 7 13:49:31 2010 +0900
|
|
194
|
+
|
|
195
|
+
modified: change rdoc template, gem_spec
|
|
196
|
+
|
|
197
|
+
rdoc template: sdoc
|
|
198
|
+
gem spec: add dependency, homepage
|
|
199
|
+
|
|
200
|
+
commit c1ff829ce7f3c0c7490eb44096d156bdf5d443df
|
|
201
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
202
|
+
Date: Sun Nov 7 13:47:58 2010 +0900
|
|
203
|
+
|
|
204
|
+
modified: remove pp
|
|
205
|
+
|
|
206
|
+
commit 26d3c47926c470f7ff59b85eb18048a5521a7a9a
|
|
207
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
208
|
+
Date: Sun Nov 7 02:37:49 2010 +0900
|
|
209
|
+
|
|
210
|
+
modified: ignore rdoc, gem package, rake rdoc task
|
|
211
|
+
|
|
212
|
+
commit 333ff220e8b23e1c84d64ed49a5b4249455d0cad
|
|
213
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
214
|
+
Date: Sat Nov 6 22:11:55 2010 +0900
|
|
215
|
+
|
|
216
|
+
modified: version string freeze
|
|
217
|
+
|
|
218
|
+
commit ee0f54b418407c0d5b47ca95325b61ca21765be9
|
|
219
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
220
|
+
Date: Sat Nov 6 21:39:38 2010 +0900
|
|
221
|
+
|
|
222
|
+
add: require class[logger, pp]
|
|
223
|
+
|
|
224
|
+
commit 9fdf9ceb21b4a6afbb048409e4f9970bfd3a1679
|
|
225
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
226
|
+
Date: Fri Nov 5 19:45:19 2010 +0900
|
|
227
|
+
|
|
228
|
+
add: refactor
|
|
229
|
+
|
|
230
|
+
commit 57bb16f2eb05204451c33bfa7279f91d52b899b2
|
|
231
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
232
|
+
Date: Fri Nov 5 09:23:49 2010 +0900
|
|
233
|
+
|
|
234
|
+
remove file
|
|
235
|
+
|
|
236
|
+
commit 88c2967f94153efeaeca8c228442f8d97a9d80c4
|
|
237
|
+
Merge: 3589cb8 5b828d3
|
|
238
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
239
|
+
Date: Fri Nov 5 09:20:55 2010 +0900
|
|
240
|
+
|
|
241
|
+
refactor and merge core_ext
|
|
242
|
+
|
|
243
|
+
commit 5b828d35d4ea6dec7631e590cda28913692f5f3f
|
|
244
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
245
|
+
Date: Thu Nov 4 21:03:40 2010 +0900
|
|
246
|
+
|
|
247
|
+
add: core_ext
|
|
248
|
+
|
|
249
|
+
commit 42dc61051ed11387601b9784cb57a544eca151a8
|
|
250
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
251
|
+
Date: Thu Nov 4 19:03:24 2010 +0900
|
|
252
|
+
|
|
253
|
+
add: core_ext.rb
|
|
254
|
+
|
|
255
|
+
commit 9fe0b4c667964d7f843daf2042d218a02908e15d
|
|
256
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
257
|
+
Date: Thu Nov 4 18:57:49 2010 +0900
|
|
258
|
+
|
|
259
|
+
add: tap method[ruby version < 1.9]
|
|
260
|
+
|
|
261
|
+
commit 380247af7cc6fb245d86b8d1cc73ce06ae536afd
|
|
262
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
263
|
+
Date: Thu Nov 4 16:43:35 2010 +0900
|
|
264
|
+
|
|
265
|
+
yield self
|
|
266
|
+
|
|
267
|
+
commit 3589cb8714651238b2476887a0837c10639c4f53
|
|
268
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
269
|
+
Date: Sun Oct 31 15:47:09 2010 +0900
|
|
270
|
+
|
|
271
|
+
modified: require rubygems line moved
|
|
272
|
+
|
|
273
|
+
commit 423b213c07790437efab7df2d45d59b9129eb710
|
|
274
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
275
|
+
Date: Sun Oct 31 15:37:18 2010 +0900
|
|
276
|
+
|
|
277
|
+
modified: require rubygems line moved
|
|
278
|
+
|
|
279
|
+
commit 218b8b4e725abf9587c6fd8e7f971d1f0e3d8cb0
|
|
280
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
281
|
+
Date: Fri Oct 29 16:56:36 2010 +0900
|
|
282
|
+
|
|
283
|
+
add: new resource
|
|
284
|
+
|
|
285
|
+
commit 604c0253080c7f413a6604832b14e83ce707dd63
|
|
286
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
287
|
+
Date: Fri Oct 29 09:00:57 2010 +0900
|
|
288
|
+
|
|
289
|
+
work temporary
|
|
290
|
+
|
|
291
|
+
commit 3aa0346177961835477556fe49de2a1528c8d907
|
|
292
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
293
|
+
Date: Thu Oct 28 16:11:59 2010 +0900
|
|
294
|
+
|
|
295
|
+
version up gem: 0.1.3
|
|
296
|
+
|
|
297
|
+
commit c8b69bafb25444c1b1c6073c67ba049430938db8
|
|
298
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
299
|
+
Date: Thu Oct 28 16:11:16 2010 +0900
|
|
300
|
+
|
|
301
|
+
versionup
|
|
302
|
+
|
|
303
|
+
commit d849c4772e4a66fff45a794d84832bcfab97cb50
|
|
304
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
305
|
+
Date: Thu Oct 28 16:09:42 2010 +0900
|
|
306
|
+
|
|
307
|
+
modified: resource action methods support, add: new resource support
|
|
308
|
+
|
|
309
|
+
commit 31dbd90d8a156cd157889f301ddf0d4f13a3c6da
|
|
310
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
311
|
+
Date: Wed Oct 27 18:08:15 2010 +0900
|
|
312
|
+
|
|
313
|
+
modified: version up
|
|
314
|
+
|
|
315
|
+
commit 57bc0d37597cee69f30ddba0bc064cb4f4075d49
|
|
316
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
317
|
+
Date: Wed Oct 27 17:47:30 2010 +0900
|
|
318
|
+
|
|
319
|
+
modified: set fileformat
|
|
320
|
+
|
|
321
|
+
commit 6f3cd28a2f77d8f8af61fd6d8655aba9f3ae9c08
|
|
322
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
323
|
+
Date: Mon Oct 25 21:38:34 2010 +0900
|
|
324
|
+
|
|
325
|
+
bug fix: future method: __method__ in v1.8.5
|
|
326
|
+
|
|
327
|
+
commit 0134f9b10bfe6a81180227a2748f43b53238028d
|
|
328
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
329
|
+
Date: Mon Oct 25 15:48:10 2010 +0900
|
|
330
|
+
|
|
331
|
+
Modified: changelog
|
|
332
|
+
|
|
333
|
+
commit badcf624cb6a23d15376eb4f823d576749f169e0
|
|
334
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
335
|
+
Date: Mon Oct 25 15:45:29 2010 +0900
|
|
336
|
+
|
|
337
|
+
bug fix: centos5.4 older ruby version unsupported method
|
|
338
|
+
|
|
339
|
+
commit 885ac3a4b65d5d30b3dbd3a49f881622d2aaf05f
|
|
340
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
341
|
+
Date: Mon Oct 25 02:48:57 2010 +0900
|
|
342
|
+
|
|
343
|
+
modified: return self in server_array#instances for method chain
|
|
344
|
+
|
|
345
|
+
commit 3c786aa835b932847905011077114424aac1449d
|
|
346
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
347
|
+
Date: Mon Oct 25 01:30:44 2010 +0900
|
|
348
|
+
|
|
349
|
+
refactor: require packages
|
|
350
|
+
|
|
351
|
+
commit 2727106d0b8da35d0fbdbb22c8ee9a079e2ff29d
|
|
352
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
353
|
+
Date: Mon Oct 25 01:14:54 2010 +0900
|
|
354
|
+
|
|
355
|
+
bug fix: path
|
|
356
|
+
|
|
357
|
+
commit 82d890712462641a994218ec465536f8e982ce2d
|
|
358
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
359
|
+
Date: Mon Oct 25 01:04:11 2010 +0900
|
|
360
|
+
|
|
361
|
+
Removed: oldfile
|
|
362
|
+
|
|
363
|
+
commit fbb08ecd98bbff3f175abef37e638511a33c4be8
|
|
364
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
365
|
+
Date: Mon Oct 25 01:03:03 2010 +0900
|
|
366
|
+
|
|
367
|
+
Add: Gem package files
|
|
368
|
+
|
|
369
|
+
commit 80ed530ecc702592a322d9dccc1b4d371c8fd282
|
|
370
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
371
|
+
Date: Mon Oct 25 01:01:31 2010 +0900
|
|
372
|
+
|
|
373
|
+
modified: version removed
|
|
374
|
+
|
|
375
|
+
commit ad32eecc7696eaf83fdb9d36fbc9cb11f692cc0d
|
|
376
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
377
|
+
Date: Mon Oct 25 01:00:17 2010 +0900
|
|
378
|
+
|
|
379
|
+
modified: rdoc author removed
|
|
380
|
+
|
|
381
|
+
commit 304b5a8adba3666528189844b611f474e09f58f8
|
|
382
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
383
|
+
Date: Mon Oct 25 00:41:32 2010 +0900
|
|
384
|
+
|
|
385
|
+
Add: library's git ignore
|
|
386
|
+
|
|
387
|
+
commit 1cf40878bbec32276548643a128bee222dadfaa8
|
|
388
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
389
|
+
Date: Mon Oct 25 00:09:45 2010 +0900
|
|
390
|
+
|
|
391
|
+
remove testcode from git
|
|
392
|
+
|
|
393
|
+
commit 5275ce543458d7f8152b8f67f2639ee441e3b40f
|
|
394
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
395
|
+
Date: Mon Oct 25 00:07:55 2010 +0900
|
|
396
|
+
|
|
397
|
+
test directory ignore
|
|
398
|
+
|
|
399
|
+
commit 67ef25b9db2ecb7f82fd19491d111a5f457a8439
|
|
400
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
401
|
+
Date: Sun Oct 24 23:43:26 2010 +0900
|
|
402
|
+
|
|
403
|
+
Add: format processor
|
|
404
|
+
|
|
405
|
+
commit b3fa7b84f7a17608ebd45236bb07650c129ff657
|
|
406
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
407
|
+
Date: Sun Oct 24 21:44:00 2010 +0900
|
|
408
|
+
|
|
409
|
+
bug fix: matchobject.to_s
|
|
410
|
+
|
|
411
|
+
commit 4b9f9e9be62ffc16bdc7a4b2a057a664ed68a736
|
|
412
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
413
|
+
Date: Sun Oct 24 16:34:18 2010 +0900
|
|
414
|
+
|
|
415
|
+
Add: require file
|
|
416
|
+
|
|
417
|
+
commit 2a0c86ae94cd2ab226083d6348de2282163b6f4a
|
|
418
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
419
|
+
Date: Sun Oct 24 15:14:06 2010 +0900
|
|
420
|
+
|
|
421
|
+
Add: deployments API
|
|
422
|
+
|
|
423
|
+
commit c09397ebc384163da1c057cb26285ea6e68bf5b9
|
|
424
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
425
|
+
Date: Sun Oct 24 14:57:56 2010 +0900
|
|
426
|
+
|
|
427
|
+
Modified: Split Child class to new file
|
|
428
|
+
|
|
429
|
+
commit 5c9eb46b61e1b5d329c70498e18a2f672ad1e72d
|
|
430
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
431
|
+
Date: Sun Oct 24 14:53:16 2010 +0900
|
|
432
|
+
|
|
433
|
+
Add: server subresource
|
|
434
|
+
|
|
435
|
+
commit 32ba81fd72a083854f5f57e7deb408315a1601a8
|
|
436
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
437
|
+
Date: Sun Oct 24 14:52:55 2010 +0900
|
|
438
|
+
|
|
439
|
+
Add: server subresource
|
|
440
|
+
|
|
441
|
+
commit 0807bc50ac59d185d1c634e8af7221572273f6bb
|
|
442
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
443
|
+
Date: Sun Oct 24 12:04:16 2010 +0900
|
|
444
|
+
|
|
445
|
+
Add: alert specifications
|
|
446
|
+
|
|
447
|
+
commit 4652139b64d1ce26be444063907b25b17180fa0d
|
|
448
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
449
|
+
Date: Sun Oct 24 11:52:31 2010 +0900
|
|
450
|
+
|
|
451
|
+
Add: package include module and class file
|
|
452
|
+
|
|
453
|
+
commit 1098221342df77d6a12ea5cfabe84bdc208112e4
|
|
454
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
455
|
+
Date: Sun Oct 24 10:55:27 2010 +0900
|
|
456
|
+
|
|
457
|
+
move libfile to directory
|
|
458
|
+
|
|
459
|
+
commit e30dfd47a4c37f68a28fb03d523174ee5131159a
|
|
460
|
+
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
461
|
+
Date: Sun Oct 24 10:51:48 2010 +0900
|
|
462
|
+
|
|
463
|
+
rename package
|
data/README.rdoc
CHANGED
|
@@ -1,13 +1,50 @@
|
|
|
1
|
-
=
|
|
1
|
+
= right_resource
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
Author:: Satoshi Ohki <_roothybrid7_@_gmail.com_>
|
|
5
|
-
Copyright:: Copyright (c) 2010 Satoshi Ohki
|
|
6
|
-
License:: The MIT License
|
|
3
|
+
* http://github.com/#{github_username}/#{project_name}
|
|
7
4
|
|
|
8
|
-
==
|
|
5
|
+
== DESCRIPTION:
|
|
6
|
+
|
|
7
|
+
RightScale Resource API wrapper
|
|
8
|
+
|
|
9
|
+
== FEATURES/PROBLEMS:
|
|
10
|
+
|
|
11
|
+
* list of features or problems
|
|
12
|
+
|
|
13
|
+
== SYNOPSIS:
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
== REQUIREMENTS:
|
|
17
|
+
|
|
18
|
+
* list of requirements
|
|
9
19
|
json
|
|
10
|
-
|
|
20
|
+
rest-client
|
|
11
21
|
crack
|
|
12
22
|
|
|
13
|
-
==
|
|
23
|
+
== INSTALL:
|
|
24
|
+
|
|
25
|
+
* sudo gem install rightresource
|
|
26
|
+
|
|
27
|
+
== LICENSE:
|
|
28
|
+
|
|
29
|
+
(The MIT License)
|
|
30
|
+
|
|
31
|
+
Copyright (c) 2010 Satoshi Ohki
|
|
32
|
+
|
|
33
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
34
|
+
a copy of this software and associated documentation files (the
|
|
35
|
+
'Software'), to deal in the Software without restriction, including
|
|
36
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
37
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
38
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
39
|
+
the following conditions:
|
|
40
|
+
|
|
41
|
+
The above copyright notice and this permission notice shall be
|
|
42
|
+
included in all copies or substantial portions of the Software.
|
|
43
|
+
|
|
44
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
|
45
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
46
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
47
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
48
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
49
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
50
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/lib/right_resource/base.rb
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
module RightResource
|
|
2
2
|
class Base
|
|
3
|
+
@@non_rs_params = [:cloud_id,] # Non RightScale parameters(ex. ec2 api request parameters)
|
|
4
|
+
|
|
3
5
|
class << self # Define singleton methods
|
|
4
6
|
# Set Logger object
|
|
5
7
|
# === Examples
|
|
@@ -74,8 +76,8 @@ module RightResource
|
|
|
74
76
|
end
|
|
75
77
|
|
|
76
78
|
# Get response status code
|
|
77
|
-
def
|
|
78
|
-
connection.
|
|
79
|
+
def status_code
|
|
80
|
+
connection.status_code || nil
|
|
79
81
|
end
|
|
80
82
|
|
|
81
83
|
# Get resource id in response location header via RESTFul client(create only?)
|
|
@@ -95,11 +97,10 @@ module RightResource
|
|
|
95
97
|
when :delete
|
|
96
98
|
connection.delete(path, params)
|
|
97
99
|
end
|
|
98
|
-
rescue RestClient::ResourceNotFound
|
|
99
|
-
nil
|
|
100
100
|
rescue => e
|
|
101
101
|
logger.error("#{e.class}: #{e.pretty_inspect}")
|
|
102
102
|
logger.debug {"Backtrace:\n#{e.backtrace.pretty_inspect}"}
|
|
103
|
+
nil
|
|
103
104
|
ensure
|
|
104
105
|
logger.debug {"#{__FILE__} #{__LINE__}: #{self.class}\n#{self.pretty_inspect}\n"}
|
|
105
106
|
end
|
|
@@ -135,12 +136,15 @@ module RightResource
|
|
|
135
136
|
def index(params = {})
|
|
136
137
|
path = "#{resource_name}s.#{format.extension}#{query_string(params)}"
|
|
137
138
|
connection.clear
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
139
|
+
result = format.decode(connection.get(path || [])).map do |resource|
|
|
140
|
+
correct_attributes(resource)
|
|
141
|
+
resource
|
|
142
|
+
end
|
|
143
|
+
instantiate_collection(result)
|
|
141
144
|
rescue => e
|
|
142
145
|
logger.error("#{e.class}: #{e.pretty_inspect}")
|
|
143
146
|
logger.debug {"Backtrace:\n#{e.backtrace.pretty_inspect}"}
|
|
147
|
+
[]
|
|
144
148
|
ensure
|
|
145
149
|
logger.debug {"#{__FILE__} #{__LINE__}: #{self.class}\n#{self.pretty_inspect}\n"}
|
|
146
150
|
end
|
|
@@ -160,12 +164,16 @@ module RightResource
|
|
|
160
164
|
def show(id, params = {})
|
|
161
165
|
path = element_path(id, nil, params)
|
|
162
166
|
connection.clear
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
167
|
+
result = format.decode(connection.get(path)).tap do |resource|
|
|
168
|
+
correct_attributes(resource)
|
|
169
|
+
resource[:id] = resource[:href].match(/[0-9]+$/).to_s.to_i
|
|
170
|
+
resource
|
|
171
|
+
end
|
|
172
|
+
instantiate_record(result)
|
|
166
173
|
rescue => e
|
|
167
174
|
logger.error("#{e.class}: #{e.pretty_inspect}")
|
|
168
175
|
logger.debug {"Backtrace:\n#{e.backtrace.pretty_inspect}"}
|
|
176
|
+
nil
|
|
169
177
|
ensure
|
|
170
178
|
logger.debug {"#{__FILE__} #{__LINE__}: #{self.class}\n#{self.pretty_inspect}\n"}
|
|
171
179
|
end
|
|
@@ -178,38 +186,35 @@ module RightResource
|
|
|
178
186
|
# === Examples
|
|
179
187
|
# params = {
|
|
180
188
|
# :cloud_id => 4, # {1 = us-east; 2 = eu; 3 = us-west, 4 = ap}
|
|
181
|
-
# :ec2_image_href => "https://my.rightscale.com/api/acct
|
|
189
|
+
# :ec2_image_href => "https://my.rightscale.com/api/acct/###/multi_cloud_images/40840", # AMI image or MultiCloud image
|
|
182
190
|
# :nickname =>"dev703", # Instance rightscale nickname
|
|
183
191
|
# :instance_type => 'm1.xlarge',
|
|
184
192
|
# :assoicate_eip_at_launch => '0',
|
|
185
|
-
# :deployment_href => "https://my.rightscale.com/api/acct
|
|
193
|
+
# :deployment_href => "https://my.rightscale.com/api/acct/###/deployments/63387",
|
|
186
194
|
# :ec2_availability_zone=>"ap-southeast-1b", # (ex: 'us-east-1a', 'any')
|
|
187
|
-
# :ec2_ssh_key_href => "https://my.rightscale.com/api/acct
|
|
195
|
+
# :ec2_ssh_key_href => "https://my.rightscale.com/api/acct/###/ec2_ssh_keys/240662",
|
|
188
196
|
# :ec2_security_group =>
|
|
189
|
-
# ["https://my.rightscale.com/api/acct
|
|
190
|
-
# "https://my.rightscale.com/api/acct
|
|
191
|
-
# "https://my.rightscale.com/api/acct
|
|
192
|
-
# :server_template_href => "https://my.rightscale.com/api/acct
|
|
197
|
+
# ["https://my.rightscale.com/api/acct/###/ec2_security_groups/170342",
|
|
198
|
+
# "https://my.rightscale.com/api/acct/###/ec2_security_groups/170344",
|
|
199
|
+
# "https://my.rightscale.com/api/acct/###/ec2_security_groups/170353"],
|
|
200
|
+
# :server_template_href => "https://my.rightscale.com/api/acct/###/ec2_server_templates/82665" # rightscale servertemplate
|
|
193
201
|
# }
|
|
194
202
|
# server_id = Server.create(params).id
|
|
195
203
|
# settings = Server.settings(server_id)
|
|
196
204
|
# p settings
|
|
197
205
|
#
|
|
198
206
|
def create(params={})
|
|
199
|
-
#TODO: refactor
|
|
200
207
|
self.new(params).tap do |resource|
|
|
201
208
|
resource.save
|
|
202
209
|
end
|
|
203
|
-
# path = collection_path
|
|
204
|
-
# connection.post(path, params)
|
|
205
210
|
end
|
|
206
211
|
|
|
207
212
|
# Update resource
|
|
208
|
-
def update(id, params={})
|
|
209
|
-
#TODO: refactor
|
|
210
|
-
path = element_path(id)
|
|
211
|
-
connection.put(path, params)
|
|
212
|
-
end
|
|
213
|
+
# def update(id, params={})
|
|
214
|
+
# #TODO: refactor
|
|
215
|
+
# path = element_path(id)
|
|
216
|
+
# connection.put(path, params)
|
|
217
|
+
# end
|
|
213
218
|
|
|
214
219
|
# Delete resource
|
|
215
220
|
# Example:
|
|
@@ -245,11 +250,31 @@ module RightResource
|
|
|
245
250
|
name
|
|
246
251
|
end
|
|
247
252
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
+
# Correct attributes(Correct hash keys recursively)
|
|
254
|
+
# '-'(dash) is included but not '_'(under score) in AWS Parameter keys.
|
|
255
|
+
# On the other hand '_'(under score) is included in RightScale Parameter keys
|
|
256
|
+
# e.g. Hash["ip-address"] -> Hash[:ip_address], Hash["deployment_href"] -> Hash[:deployment_href]
|
|
257
|
+
def correct_attributes(attributes)
|
|
258
|
+
return unless attributes.is_a?(Hash)
|
|
259
|
+
|
|
260
|
+
attributes.alter_keys
|
|
261
|
+
attributes.each do |key,value| # recursive
|
|
262
|
+
attributes[key] =
|
|
263
|
+
case value
|
|
264
|
+
when Array
|
|
265
|
+
value.map do |attrs|
|
|
266
|
+
if attrs.is_a?(Hash)
|
|
267
|
+
correct_attributes(attrs)
|
|
268
|
+
else
|
|
269
|
+
attrs.dup rescue attrs
|
|
270
|
+
end
|
|
271
|
+
end
|
|
272
|
+
when Hash
|
|
273
|
+
correct_attributes(value)
|
|
274
|
+
else
|
|
275
|
+
value.dup rescue value
|
|
276
|
+
end
|
|
277
|
+
end
|
|
253
278
|
end
|
|
254
279
|
|
|
255
280
|
protected
|
|
@@ -289,11 +314,34 @@ module RightResource
|
|
|
289
314
|
end
|
|
290
315
|
end
|
|
291
316
|
|
|
317
|
+
attr_accessor :id, :attributes
|
|
318
|
+
|
|
319
|
+
# If no schema has been defined for the class (see
|
|
320
|
+
# <tt>ActiveResource::schema=</tt>), the default automatic schema is
|
|
321
|
+
# generated from the current instance's attributes
|
|
322
|
+
def schema
|
|
323
|
+
# self.class.schema || self.attributes
|
|
324
|
+
end
|
|
325
|
+
|
|
326
|
+
# This is a list of known attributes for this resource. Either
|
|
327
|
+
# gathered from the provided <tt>schema</tt>, or from the attributes
|
|
328
|
+
# set on this instance after it has been fetched from the remote system.
|
|
329
|
+
def known_attributes
|
|
330
|
+
# self.class.known_attributes + self.attributes.keys.map(&:to_s)
|
|
331
|
+
end
|
|
332
|
+
|
|
333
|
+
# Duplicate resource
|
|
334
|
+
def dup
|
|
335
|
+
self.class.new.tap do |resource|
|
|
336
|
+
resource.attributes = @attributes.reject {|key,value| key == :href}
|
|
337
|
+
resource.load_accessor(resource.attributes)
|
|
338
|
+
end
|
|
339
|
+
end
|
|
340
|
+
|
|
292
341
|
def initialize(attributes={})
|
|
293
342
|
# sub-resource4json's key name contains '-'
|
|
294
|
-
# attrs = generate_attributes(attributes)
|
|
295
343
|
@attributes = {}
|
|
296
|
-
|
|
344
|
+
load_attributes(attributes)
|
|
297
345
|
if @attributes
|
|
298
346
|
if self.class.resource_id.nil?
|
|
299
347
|
@id = @attributes[:href].match(/\d+$/).to_s if @attributes[:href]
|
|
@@ -304,16 +352,15 @@ module RightResource
|
|
|
304
352
|
end
|
|
305
353
|
yield self if block_given?
|
|
306
354
|
end
|
|
307
|
-
attr_accessor :id, :attributes
|
|
308
355
|
|
|
309
|
-
def
|
|
356
|
+
def load_attributes(attributes)
|
|
310
357
|
raise ArgumentError, "expected an attributes Hash, got #{attributes.pretty_inspect}" unless attributes.is_a?(Hash)
|
|
311
|
-
@attributes = attributes
|
|
358
|
+
@attributes = self.class.correct_attributes(attributes)
|
|
312
359
|
self
|
|
313
360
|
end
|
|
314
361
|
|
|
315
362
|
def update_attributes(attributes)
|
|
316
|
-
|
|
363
|
+
load_attributes(attributes) && load_accessor(attributes) && save
|
|
317
364
|
end
|
|
318
365
|
|
|
319
366
|
def load_accessor(attributes)
|
|
@@ -344,28 +391,48 @@ module RightResource
|
|
|
344
391
|
connection.delete(element_path)
|
|
345
392
|
end
|
|
346
393
|
|
|
394
|
+
# For checking <tt>respond_to?</tt> without searching the attributes (which is faster).
|
|
395
|
+
alias_method :respond_to_without_attributes?, :respond_to?
|
|
396
|
+
|
|
397
|
+
# A method to determine if an object responds to a message (e.g., a method call). In Active Resource, a Person object with a
|
|
398
|
+
# +name+ attribute can answer <tt>true</tt> to <tt>my_person.respond_to?(:name)</tt>, <tt>my_person.respond_to?(:name=)</tt>, and
|
|
399
|
+
# <tt>my_person.respond_to?(:name?)</tt>.
|
|
400
|
+
def respond_to?(method, include_priv = false)
|
|
401
|
+
method_name = method.to_s
|
|
402
|
+
if attributes.nil?
|
|
403
|
+
super
|
|
404
|
+
# elsif known_attributes.include?(method_name)
|
|
405
|
+
# true
|
|
406
|
+
elsif method_name =~ /(?:=|\?)$/ && attributes.include?($`)
|
|
407
|
+
true
|
|
408
|
+
else
|
|
409
|
+
# super must be called at the end of the method, because the inherited respond_to?
|
|
410
|
+
# would return true for generated readers, even if the attribute wasn't present
|
|
411
|
+
super
|
|
412
|
+
end
|
|
413
|
+
end
|
|
414
|
+
|
|
347
415
|
protected
|
|
348
416
|
def connection
|
|
349
417
|
self.class.connection
|
|
350
418
|
end
|
|
351
419
|
|
|
352
420
|
def update
|
|
353
|
-
|
|
354
|
-
attrs = self.attributes.reject {|key,value| key.to_s == "cloud_id"}
|
|
421
|
+
attrs = self.attributes.reject {|key,value| @@non_rs_params.include?(key.to_sym) || value.nil?}
|
|
355
422
|
pair = URI.decode({resource_name.to_sym => attrs}.to_params).split('&').map {|l| l.split('=')}
|
|
356
423
|
h = Hash[*pair.flatten]
|
|
357
|
-
h[
|
|
424
|
+
@@non_rs_params.each {|key| h[key.to_s] = self.attributes[key] if self.attributes.has_key?(key) && self.attributes[key]}
|
|
358
425
|
connection.put(element_path, h)
|
|
359
426
|
end
|
|
360
427
|
|
|
361
428
|
def create
|
|
362
|
-
|
|
363
|
-
attrs = self.attributes.reject {|key,value| key.to_s == "cloud_id"}
|
|
429
|
+
attrs = self.attributes.reject {|key,value| @@non_rs_params.include?(key.to_sym) || value.nil?}
|
|
364
430
|
pair = URI.decode({resource_name.to_sym => attrs}.to_params).split('&').map {|l| l.split('=')}
|
|
365
431
|
h= Hash[*pair.flatten]
|
|
366
|
-
h[
|
|
432
|
+
@@non_rs_params.each {|key| h[key.to_s] = self.attributes[key] if self.attributes.has_key?(key) && self.attributes[key]}
|
|
367
433
|
connection.post(collection_path, h)
|
|
368
434
|
self.id = self.class.resource_id
|
|
435
|
+
self.href = self.class.headers[:location]
|
|
369
436
|
end
|
|
370
437
|
|
|
371
438
|
def resource_name
|
|
@@ -379,5 +446,24 @@ module RightResource
|
|
|
379
446
|
def collection_path(prefix_options=nil, query_options=nil)
|
|
380
447
|
self.class.collection_path(prefix_options, query_options)
|
|
381
448
|
end
|
|
449
|
+
|
|
450
|
+
private
|
|
451
|
+
def method_missing(method_symbol, *arguments) #:nodoc:
|
|
452
|
+
method_name = method_symbol.to_s
|
|
453
|
+
|
|
454
|
+
if method_name =~ /(=|\?)$/
|
|
455
|
+
case $1
|
|
456
|
+
when "="
|
|
457
|
+
attributes[$`.to_sym] = arguments.first
|
|
458
|
+
when "?"
|
|
459
|
+
attributes[$`.to_sym]
|
|
460
|
+
end
|
|
461
|
+
else
|
|
462
|
+
return attributes[method_symbol] if attributes.include?(method_symbol)
|
|
463
|
+
# not set right now but we know about it
|
|
464
|
+
# return nil if known_attributes.include?(method_name)
|
|
465
|
+
super
|
|
466
|
+
end
|
|
467
|
+
end
|
|
382
468
|
end
|
|
383
469
|
end
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
module RightResource
|
|
2
2
|
class Connection
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
attr_accessor :api_version, :log, :api, :format, :username, :password, :account, :reraise, :logger
|
|
6
|
-
attr_reader :headers, :resource_id, :response, :status
|
|
3
|
+
attr_accessor :api_version, :log, :url, :api, :format, :username, :password, :account, :logger
|
|
4
|
+
attr_reader :headers, :resource_id, :response, :status_code, :timeout, :open_timeout
|
|
7
5
|
|
|
8
6
|
# Set RestFul Client Parameters
|
|
9
7
|
def initialize(params={})
|
|
10
8
|
@api_version = API_VERSION
|
|
11
|
-
@
|
|
9
|
+
@url = params[:url] || "https://my.rightscale.com"
|
|
10
|
+
@api = "#{@url}/api/acct/"
|
|
12
11
|
@format = params[:format] || RightResource::Formats::JsonFormat
|
|
13
12
|
@logger = params[:logger] || Logger.new(STDERR).tap {|l| l.level = Logger::WARN}
|
|
14
13
|
RestClient.log = STDERR if @logger.level == Logger::DEBUG # HTTP request/response log
|
|
@@ -21,14 +20,16 @@ module RightResource
|
|
|
21
20
|
# conn = Connection.new
|
|
22
21
|
# conn.login(params)
|
|
23
22
|
def login(params={})
|
|
24
|
-
@username = params[:username]
|
|
25
|
-
@password = params[:password]
|
|
26
|
-
@account = params[:account]
|
|
27
|
-
@
|
|
23
|
+
@username = params[:username] if params[:username]
|
|
24
|
+
@password = params[:password] if params[:password]
|
|
25
|
+
@account = params[:account] if params[:account]
|
|
26
|
+
@open_timeout = params[:open_timeout] || 10 # Connection.timeout
|
|
27
|
+
@timeout = params[:timeout] || 60 # Response.read.timeout
|
|
28
|
+
req_opts = {:user => @username, :password => @password, :open_timeout => @open_timeout, :timeout => @timeout}
|
|
29
|
+
@api_object = RestClient::Resource.new("#{@api}#{@account}", req_opts)
|
|
28
30
|
rescue => e
|
|
29
31
|
@logger.error("#{e.class}: #{e.pretty_inspect}")
|
|
30
32
|
@logger.debug {"Backtrace:\n#{e.backtrace.pretty_inspect}"}
|
|
31
|
-
raise if self.reraise
|
|
32
33
|
ensure
|
|
33
34
|
@logger.debug {"#{__FILE__} #{__LINE__}: #{self.class}\n#{self.pretty_inspect}\n"}
|
|
34
35
|
end
|
|
@@ -51,24 +52,24 @@ module RightResource
|
|
|
51
52
|
raise "Invalid Action: get|put|post|delete only"
|
|
52
53
|
end
|
|
53
54
|
api_version = {:x_api_version => @api_version, :api_version => @api_version}
|
|
54
|
-
|
|
55
|
-
@
|
|
56
|
-
@status = @response.code
|
|
55
|
+
@response = @api_object[path].__send__(method.to_sym, api_version.merge(headers))
|
|
56
|
+
@status_code = @response.code
|
|
57
57
|
@headers = @response.headers
|
|
58
58
|
@resource_id = @headers[:location].match(/\d+$/).to_s unless @headers[:location].nil?
|
|
59
59
|
@response.body
|
|
60
|
+
rescue Timeout::Error => e
|
|
61
|
+
raise TimeoutError.new(e.message)
|
|
60
62
|
rescue => e
|
|
61
|
-
@
|
|
63
|
+
@status_code = e.http_code
|
|
62
64
|
@logger.error("#{e.class}: #{e.pretty_inspect}")
|
|
63
65
|
@logger.debug {"Backtrace:\n#{e.backtrace.pretty_inspect}"}
|
|
64
|
-
raise if self.reraise
|
|
65
66
|
ensure
|
|
66
67
|
@logger.debug {"#{__FILE__} #{__LINE__}: #{self.class}\n#{self.pretty_inspect}\n"}
|
|
67
68
|
end
|
|
68
69
|
|
|
69
70
|
# Resource clear
|
|
70
71
|
def clear
|
|
71
|
-
@response = @headers = @resource_id = @
|
|
72
|
+
@response = @headers = @resource_id = @status_code = nil
|
|
72
73
|
ensure
|
|
73
74
|
@logger.debug {"#{__FILE__} #{__LINE__}: #{self.class}\n#{self.pretty_inspect}\n"}
|
|
74
75
|
end
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require 'right_resource/core_ext/hash/
|
|
1
|
+
require 'right_resource/core_ext/hash/alter_keys'
|
|
@@ -6,7 +6,7 @@ class Deployment < RightResource::Base
|
|
|
6
6
|
class << self
|
|
7
7
|
[:start_all, :stop_all, :duplicate].each do |act_method|
|
|
8
8
|
define_method(act_method) do |id|
|
|
9
|
-
path = element_path(id, act_method).sub(/\.#{format.extension}$/, '')
|
|
9
|
+
path = element_path(id, act_method).sub(/\.#{format.extension}$/, '') # response empty and format xml only
|
|
10
10
|
action(:post, path)
|
|
11
11
|
end
|
|
12
12
|
end
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
require 'crack/xml'
|
|
2
|
-
|
|
3
1
|
module RightResource
|
|
4
2
|
module Formats
|
|
5
3
|
module XmlFormat
|
|
@@ -17,8 +15,8 @@ module RightResource
|
|
|
17
15
|
raise NotImplementedError, "Not Implementated function #{self.class.name}::#{__method__.to_s}"
|
|
18
16
|
end
|
|
19
17
|
|
|
20
|
-
def decode(
|
|
21
|
-
Crack::XML.parse(
|
|
18
|
+
def decode(xml)
|
|
19
|
+
Crack::XML.parse(xml)
|
|
22
20
|
end
|
|
23
21
|
end
|
|
24
22
|
end
|
|
@@ -25,7 +25,7 @@ class Server < RightResource::Base
|
|
|
25
25
|
class << self
|
|
26
26
|
[:start, :stop, :reboot].each do |act_method|
|
|
27
27
|
define_method(act_method) do |id|
|
|
28
|
-
path = element_path(id, act_method).sub(/\.#{format.extension}$/, '')
|
|
28
|
+
path = element_path(id, act_method).sub(/\.#{format.extension}$/, '') # can't include json extension in request
|
|
29
29
|
action(:post, path)
|
|
30
30
|
end
|
|
31
31
|
end
|
|
@@ -50,7 +50,7 @@ class Server < RightResource::Base
|
|
|
50
50
|
# Server.get_sketchy_data(server_id, params)
|
|
51
51
|
def get_sketchy_data(id, params)
|
|
52
52
|
path = element_path(id, :get_sketchy_data, params)
|
|
53
|
-
format.decode(action(:get, path)).
|
|
53
|
+
format.decode(action(:get, path)).tap {|resource| correct_attributes(resource)}
|
|
54
54
|
end
|
|
55
55
|
|
|
56
56
|
# Get URL of Server monitoring graph
|
|
@@ -70,7 +70,7 @@ class Server < RightResource::Base
|
|
|
70
70
|
else
|
|
71
71
|
path = element_path(id, :monitoring)
|
|
72
72
|
end
|
|
73
|
-
format.decode(action(:get, path, params)).
|
|
73
|
+
format.decode(action(:get, path, params)).tap {|resource| correct_attributes(resource)}
|
|
74
74
|
end
|
|
75
75
|
|
|
76
76
|
# Get Server settings(Subresource)
|
|
@@ -79,25 +79,7 @@ class Server < RightResource::Base
|
|
|
79
79
|
# settings = Server.settings(server_id)
|
|
80
80
|
def settings(id)
|
|
81
81
|
path = element_path(id, :settings)
|
|
82
|
-
format.decode(action(:get, path)).
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
# Get status of any running jobs after calling to the servers resource to run_script
|
|
86
|
-
# === Parameters
|
|
87
|
-
# * +resource_ref+ - Hash[:id] or Hash[:href](execute run_script method response location header)
|
|
88
|
-
# (ex. Location: https://my.rightscale.com/api/acct/##/statuses/{id})
|
|
89
|
-
# === Examples
|
|
90
|
-
# server_id = 1
|
|
91
|
-
# right_script_id = 1
|
|
92
|
-
# Server.run_script(server_id, :right_script => right_script_id)
|
|
93
|
-
# # => 201 Created, location: https://my.rightscale.com/api/acct/##/statuses/12345
|
|
94
|
-
#
|
|
95
|
-
# Server.statuses(:id => Server.resource_id) if Server.status == 201
|
|
96
|
-
# or
|
|
97
|
-
# Server.statuses(:href => Server.headers[:location]) if Server.status == 201
|
|
98
|
-
def statuses(resource_ref)
|
|
99
|
-
path = element_path(id, :get_sketchy_data, params)
|
|
100
|
-
format.decode(action(:get, path)).generate_attributes
|
|
82
|
+
format.decode(action(:get, path)).tap {|resource| correct_attributes(resource)}
|
|
101
83
|
end
|
|
102
84
|
|
|
103
85
|
# Get Server tags(server or ec2_current_instance)
|
|
@@ -106,7 +88,7 @@ class Server < RightResource::Base
|
|
|
106
88
|
# === Examples
|
|
107
89
|
# server = Server.show(1)
|
|
108
90
|
# tags = Server.tags(server.ec2_current_href)
|
|
109
|
-
# # => [{"
|
|
91
|
+
# # => [{"rs_login:state" => "active"}, {"name"=>"rs_logging:state=active"}, {"name"=>"rs_monitoring:state=active"}]
|
|
110
92
|
def tags(resource_href)
|
|
111
93
|
query_options = {:resource_href => resource_href}
|
|
112
94
|
path = "tags/search.#{format.extension}#{query_string(query_options)}"
|
|
@@ -19,24 +19,35 @@ class ServerArray < RightResource::Base
|
|
|
19
19
|
# "success"=>[{"ec2_instance_href"=>"https://my.rightscale.com/api/acct/##/ec2_instances/1367"}]}}
|
|
20
20
|
def terminate_all(id)
|
|
21
21
|
path = element_path(id, :terminate_all)
|
|
22
|
-
format.decode(action(:post, path)).
|
|
22
|
+
format.decode(action(:post, path)).tap {|resource| correct_attributes(resource)}
|
|
23
23
|
end
|
|
24
24
|
|
|
25
|
-
# Run script on all
|
|
26
|
-
# ===
|
|
27
|
-
#
|
|
25
|
+
# Run script on all(Response format is only xml)
|
|
26
|
+
# === Examples
|
|
27
|
+
# RightResource::Base.connection = RightResource::Connection.new do |c|
|
|
28
|
+
# c.login(:username => "user", :password => "pass", :account => "1")
|
|
29
|
+
# end
|
|
30
|
+
# array_id = 1
|
|
31
|
+
# scripts_params = {
|
|
32
|
+
# :right_script_href => "#{RightResource::Base.connection.api}###/right_scripts/261296",
|
|
33
|
+
# :server_template_hrefs => ["#{RightResource::Base.connection.api}###/server_templates/83632"],
|
|
34
|
+
# }
|
|
35
|
+
#
|
|
36
|
+
# ServerArray.run_script_on_all(array_id, scripts_params)
|
|
37
|
+
# => {:audit_entries=>
|
|
38
|
+
# [{:href=>"https://my.rightscale.com/api/acct/###/audit_entries/44723645"},
|
|
39
|
+
# {:href=>"https://my.rightscale.com/api/acct/###/audit_entries/44723646"}]}
|
|
28
40
|
def run_script_on_all(id, params)
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
# action(:post, path, h)
|
|
41
|
+
pair = URI.decode({resource_name.to_sym => params}.to_params).split('&').map {|l| l.split('=')}
|
|
42
|
+
h = Hash[*pair.flatten]
|
|
43
|
+
path = element_path(id, :run_script_on_all).sub(/\.#{format.extension}$/, '') # xml only
|
|
44
|
+
RightResource::Formats::XmlFormat.decode(action(:post, path, h)).tap {|resource| correct_attributes(resource)}
|
|
34
45
|
end
|
|
35
46
|
|
|
36
47
|
def instances(id)
|
|
37
48
|
path = element_path(id, :instances)
|
|
38
|
-
|
|
39
|
-
instance
|
|
49
|
+
format.decode(action(:get, path)).map do |instance|
|
|
50
|
+
correct_attributes(instance)
|
|
40
51
|
end
|
|
41
52
|
end
|
|
42
53
|
end
|
|
@@ -2,10 +2,10 @@ class ServerTemplate < RightResource::Base
|
|
|
2
2
|
class << self
|
|
3
3
|
# === Parameters
|
|
4
4
|
# * _id_ - ServerTemplate id
|
|
5
|
-
# * _params_ - Hash (keys = [:phase]) ex. 'boot', 'operational', 'decommission'
|
|
5
|
+
# * _params_ - Hash (keys = [:phase]) ex. 'boot', 'operational', 'decommission' if not defined, all phases
|
|
6
6
|
def executables(id, params={})
|
|
7
7
|
path = element_path(id, :executables, params)
|
|
8
|
-
format.decode(connection.get(path)).map {|
|
|
8
|
+
format.decode(connection.get(path)).map {|resource| correct_attributes(resource)}
|
|
9
9
|
end
|
|
10
10
|
end
|
|
11
11
|
end
|
data/lib/right_resource/tag.rb
CHANGED
|
@@ -3,18 +3,18 @@
|
|
|
3
3
|
# * _unset_
|
|
4
4
|
# === Examples
|
|
5
5
|
# Set tags for a resource
|
|
6
|
-
# ec2_href = Server.show(1)
|
|
6
|
+
# ec2_href = Server.show(1)[:current_instance_href]
|
|
7
7
|
# params = {:resource_href => ec2_href, :tags => ["xx99_server:role=dev", "xx99_server:group=dev"]}
|
|
8
8
|
# Tag.set(params)
|
|
9
|
-
# puts Tag.
|
|
9
|
+
# puts Tag.status_code
|
|
10
10
|
# p Tag.search(:resource_href => ec2_href)
|
|
11
11
|
# Unset tags for a resource
|
|
12
12
|
# Tag.unset(params)
|
|
13
|
-
# puts Tag.
|
|
13
|
+
# puts Tag.status_code
|
|
14
14
|
# p Tag.search(:resource_href => ec2_href)
|
|
15
15
|
class Tag < RightResource::Base
|
|
16
16
|
class << self
|
|
17
|
-
undef :index, :show, :create, :
|
|
17
|
+
undef :index, :show, :create, :destory
|
|
18
18
|
|
|
19
19
|
[:set, :unset].each do |act_method|
|
|
20
20
|
define_method(act_method) do |params|
|
|
@@ -25,7 +25,7 @@ class Tag < RightResource::Base
|
|
|
25
25
|
|
|
26
26
|
# Search tags for a resource(resource_href in params) or resources matching giving tags
|
|
27
27
|
# === Parameters
|
|
28
|
-
# * +params+ - Hash (keys = [:resource_href or :resource_type, :match_all, :tags])
|
|
28
|
+
# * +params+ - Hash (keys = [:resource_href or :resource_type, :match_all(exact match), :tags])
|
|
29
29
|
# === Return
|
|
30
30
|
# Array(tags)
|
|
31
31
|
# === Examples
|
|
@@ -44,9 +44,27 @@ class Tag < RightResource::Base
|
|
|
44
44
|
# end
|
|
45
45
|
def search(params)
|
|
46
46
|
path = "#{get_tag_resource_path("search")}.#{format.extension}#{query_string(params)}"
|
|
47
|
-
result = format.decode(action(:get, path)).map do |
|
|
48
|
-
|
|
47
|
+
result = format.decode(action(:get, path)).map do |resource|
|
|
48
|
+
correct_attributes(resource)
|
|
49
|
+
resource
|
|
49
50
|
end
|
|
51
|
+
if params.has_key?(:resource_href)
|
|
52
|
+
result
|
|
53
|
+
else
|
|
54
|
+
if params[:resource_type] == "ec2_instance"
|
|
55
|
+
resource_name = "Server"
|
|
56
|
+
else
|
|
57
|
+
resource_name = params[:resource_type].split(/-/).map {|r| r.capitalize}.join
|
|
58
|
+
end
|
|
59
|
+
klass = const_get(resource_name)
|
|
60
|
+
klass.instantiate_collection(result)
|
|
61
|
+
end
|
|
62
|
+
rescue => e
|
|
63
|
+
logger.error("#{e.class}: #{e.pretty_inspect}")
|
|
64
|
+
logger.debug {"Backtrace:\n#{e.backtrace.pretty_inspect}"}
|
|
65
|
+
[]
|
|
66
|
+
ensure
|
|
67
|
+
logger.debug {"#{__FILE__} #{__LINE__}: #{self.class}\n#{self.pretty_inspect}\n"}
|
|
50
68
|
end
|
|
51
69
|
|
|
52
70
|
# === Examples
|
|
@@ -54,7 +72,7 @@ class Tag < RightResource::Base
|
|
|
54
72
|
def taggable_resources
|
|
55
73
|
# "#{self.name.to_s.split('::').last}s/#{__method__}" if RUBY_VERSION >= "1.8.7"
|
|
56
74
|
path = get_tag_resource_path("taggable_resources")
|
|
57
|
-
RightResource::Formats::XmlFormat.decode(action(:get, path))
|
|
75
|
+
RightResource::Formats::XmlFormat.decode(action(:get, path)).tap {|resource| correct_attributes(resource)}
|
|
58
76
|
end
|
|
59
77
|
|
|
60
78
|
private
|
data/lib/right_resource.rb
CHANGED
|
@@ -4,11 +4,13 @@ require 'logger'
|
|
|
4
4
|
require 'pp'
|
|
5
5
|
require 'rubygems'
|
|
6
6
|
|
|
7
|
-
require 'json
|
|
7
|
+
require 'json'
|
|
8
8
|
require 'rest_client'
|
|
9
9
|
require 'crack'
|
|
10
10
|
|
|
11
|
-
$:.unshift(File.dirname(__FILE__))
|
|
11
|
+
$:.unshift(File.dirname(__FILE__)) unless
|
|
12
|
+
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
|
13
|
+
|
|
12
14
|
# Ruby core extensions
|
|
13
15
|
require 'right_resource/core_ext'
|
|
14
16
|
# base class
|
|
@@ -36,5 +38,6 @@ require 'right_resource/macro'
|
|
|
36
38
|
require 'right_resource/credential'
|
|
37
39
|
|
|
38
40
|
module RightResource
|
|
39
|
-
|
|
41
|
+
VERSION = '0.3.1'
|
|
42
|
+
API_VERSION = "1.0"
|
|
40
43
|
end
|
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rightresource
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
hash:
|
|
4
|
+
hash: 17
|
|
5
5
|
prerelease: false
|
|
6
6
|
segments:
|
|
7
7
|
- 0
|
|
8
8
|
- 3
|
|
9
|
-
-
|
|
10
|
-
version: 0.3.
|
|
9
|
+
- 1
|
|
10
|
+
version: 0.3.1
|
|
11
11
|
platform: ruby
|
|
12
12
|
authors:
|
|
13
13
|
- Satoshi Ohki
|
|
@@ -15,7 +15,7 @@ autorequire:
|
|
|
15
15
|
bindir: bin
|
|
16
16
|
cert_chain: []
|
|
17
17
|
|
|
18
|
-
date: 2010-11-
|
|
18
|
+
date: 2010-11-24 00:00:00 +09:00
|
|
19
19
|
default_executable:
|
|
20
20
|
dependencies:
|
|
21
21
|
- !ruby/object:Gem::Dependency
|
|
@@ -74,13 +74,13 @@ extensions: []
|
|
|
74
74
|
extra_rdoc_files:
|
|
75
75
|
- README.rdoc
|
|
76
76
|
files:
|
|
77
|
-
-
|
|
77
|
+
- History.txt
|
|
78
78
|
- README.rdoc
|
|
79
79
|
- LICENSE
|
|
80
80
|
- lib/right_resource/alert_spec.rb
|
|
81
81
|
- lib/right_resource/base.rb
|
|
82
82
|
- lib/right_resource/connection.rb
|
|
83
|
-
- lib/right_resource/core_ext/hash/
|
|
83
|
+
- lib/right_resource/core_ext/hash/alter_keys.rb
|
|
84
84
|
- lib/right_resource/core_ext/hash.rb
|
|
85
85
|
- lib/right_resource/core_ext/object/tap.rb
|
|
86
86
|
- lib/right_resource/core_ext/object.rb
|
data/CHANGELOG
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
commit d849c4772e4a66fff45a794d84832bcfab97cb50
|
|
2
|
-
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
3
|
-
Date: Thu Oct 28 16:09:42 2010 +0900
|
|
4
|
-
|
|
5
|
-
modified: resource action methods support, add: new resource support
|
|
6
|
-
|
|
7
|
-
commit 57bc0d37597cee69f30ddba0bc064cb4f4075d49
|
|
8
|
-
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
9
|
-
Date: Wed Oct 27 17:47:30 2010 +0900
|
|
10
|
-
|
|
11
|
-
modified: set fileformat
|
|
12
|
-
|
|
13
|
-
commit d57e3180e9d86604c08b3a2cf4b0cb925f2c7b1d
|
|
14
|
-
Author: Satoshi Ohki <roothybrid7@gmail.com>
|
|
15
|
-
Date: Mon Oct 25 15:45:29 2010 +0900
|
|
16
|
-
|
|
17
|
-
bug fix: centos5.4 older ruby version unsupported method
|
|
18
|
-
|