appscale-tools 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (114) hide show
  1. data/LICENSE +37 -0
  2. data/README +17 -0
  3. data/bin/appscale-add-keypair +15 -0
  4. data/bin/appscale-describe-instances +16 -0
  5. data/bin/appscale-remove-app +13 -0
  6. data/bin/appscale-reset-pwd +13 -0
  7. data/bin/appscale-run-instances +15 -0
  8. data/bin/appscale-terminate-instances +14 -0
  9. data/bin/appscale-upload-app +13 -0
  10. data/doc/AdvancedNode.html +163 -0
  11. data/doc/AppControllerClient.html +831 -0
  12. data/doc/AppEngineConfigException.html +165 -0
  13. data/doc/AppScaleException.html +165 -0
  14. data/doc/AppScaleTools.html +768 -0
  15. data/doc/BadCommandLineArgException.html +166 -0
  16. data/doc/BadConfigurationException.html +166 -0
  17. data/doc/CommonFunctions.html +2559 -0
  18. data/doc/EncryptionHelper.html +332 -0
  19. data/doc/GodInterface.html +443 -0
  20. data/doc/InfrastructureException.html +166 -0
  21. data/doc/Node.html +470 -0
  22. data/doc/NodeLayout.html +1297 -0
  23. data/doc/Object.html +539 -0
  24. data/doc/ParseArgs.html +268 -0
  25. data/doc/RemoteLogging.html +268 -0
  26. data/doc/SimpleNode.html +163 -0
  27. data/doc/UsageText.html +1204 -0
  28. data/doc/UserAppClient.html +993 -0
  29. data/doc/VMTools.html +1365 -0
  30. data/doc/bin/appscale-add-keypair.html +56 -0
  31. data/doc/bin/appscale-describe-instances.html +56 -0
  32. data/doc/bin/appscale-remove-app.html +56 -0
  33. data/doc/bin/appscale-reset-pwd.html +56 -0
  34. data/doc/bin/appscale-run-instances.html +56 -0
  35. data/doc/bin/appscale-terminate-instances.html +56 -0
  36. data/doc/bin/appscale-upload-app.html +56 -0
  37. data/doc/created.rid +21 -0
  38. data/doc/images/add.png +0 -0
  39. data/doc/images/brick.png +0 -0
  40. data/doc/images/brick_link.png +0 -0
  41. data/doc/images/bug.png +0 -0
  42. data/doc/images/bullet_black.png +0 -0
  43. data/doc/images/bullet_toggle_minus.png +0 -0
  44. data/doc/images/bullet_toggle_plus.png +0 -0
  45. data/doc/images/date.png +0 -0
  46. data/doc/images/delete.png +0 -0
  47. data/doc/images/find.png +0 -0
  48. data/doc/images/loadingAnimation.gif +0 -0
  49. data/doc/images/macFFBgHack.png +0 -0
  50. data/doc/images/package.png +0 -0
  51. data/doc/images/page_green.png +0 -0
  52. data/doc/images/page_white_text.png +0 -0
  53. data/doc/images/page_white_width.png +0 -0
  54. data/doc/images/plugin.png +0 -0
  55. data/doc/images/ruby.png +0 -0
  56. data/doc/images/tag_blue.png +0 -0
  57. data/doc/images/tag_green.png +0 -0
  58. data/doc/images/transparent.png +0 -0
  59. data/doc/images/wrench.png +0 -0
  60. data/doc/images/wrench_orange.png +0 -0
  61. data/doc/images/zoom.png +0 -0
  62. data/doc/index.html +116 -0
  63. data/doc/js/darkfish.js +153 -0
  64. data/doc/js/jquery.js +18 -0
  65. data/doc/js/navigation.js +142 -0
  66. data/doc/js/quicksearch.js +114 -0
  67. data/doc/js/search.js +94 -0
  68. data/doc/js/search_index.js +1 -0
  69. data/doc/js/searcher.js +228 -0
  70. data/doc/js/thickbox-compressed.js +10 -0
  71. data/doc/lib/app_controller_client_rb.html +60 -0
  72. data/doc/lib/appscale_tools_rb.html +88 -0
  73. data/doc/lib/common_functions_rb.html +78 -0
  74. data/doc/lib/custom_exceptions_rb.html +54 -0
  75. data/doc/lib/encryption_helper_rb.html +60 -0
  76. data/doc/lib/godinterface_rb.html +52 -0
  77. data/doc/lib/node_layout_rb.html +55 -0
  78. data/doc/lib/parse_args_rb.html +58 -0
  79. data/doc/lib/remote_log_rb.html +58 -0
  80. data/doc/lib/sshcopyid.html +174 -0
  81. data/doc/lib/usage_text_rb.html +58 -0
  82. data/doc/lib/user_app_client_rb.html +62 -0
  83. data/doc/lib/vm_tools_rb.html +62 -0
  84. data/doc/table_of_contents.html +496 -0
  85. data/lib/app_controller_client.rb +181 -0
  86. data/lib/appscale_tools.rb +403 -0
  87. data/lib/common_functions.rb +1467 -0
  88. data/lib/custom_exceptions.rb +25 -0
  89. data/lib/encryption_helper.rb +86 -0
  90. data/lib/godinterface.rb +152 -0
  91. data/lib/node_layout.rb +665 -0
  92. data/lib/parse_args.rb +415 -0
  93. data/lib/remote_log.rb +46 -0
  94. data/lib/sshcopyid +65 -0
  95. data/lib/usage_text.rb +144 -0
  96. data/lib/user_app_client.rb +245 -0
  97. data/lib/vm_tools.rb +549 -0
  98. data/test/tc_app_controller_client.rb +10 -0
  99. data/test/tc_appscale_add_keypair.rb +44 -0
  100. data/test/tc_appscale_describe_instances.rb +69 -0
  101. data/test/tc_appscale_remove_app.rb +128 -0
  102. data/test/tc_appscale_reset_pwd.rb +156 -0
  103. data/test/tc_appscale_run_instances.rb +48 -0
  104. data/test/tc_appscale_terminate_instances.rb +104 -0
  105. data/test/tc_appscale_upload_app.rb +166 -0
  106. data/test/tc_common_functions.rb +56 -0
  107. data/test/tc_encryption_helper.rb +10 -0
  108. data/test/tc_god_interface.rb +10 -0
  109. data/test/tc_node_layout.rb +93 -0
  110. data/test/tc_parse_args.rb +160 -0
  111. data/test/tc_user_app_client.rb +10 -0
  112. data/test/tc_vm_tools.rb +10 -0
  113. data/test/ts_all.rb +20 -0
  114. metadata +211 -0
data/doc/VMTools.html ADDED
@@ -0,0 +1,1365 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html>
4
+ <head>
5
+ <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
6
+
7
+ <title>module VMTools - RDoc Documentation</title>
8
+
9
+ <link type="text/css" media="screen" href="./rdoc.css" rel="stylesheet">
10
+
11
+ <script type="text/javascript">
12
+ var rdoc_rel_prefix = "./";
13
+ </script>
14
+
15
+ <script type="text/javascript" charset="utf-8" src="./js/jquery.js"></script>
16
+ <script type="text/javascript" charset="utf-8" src="./js/navigation.js"></script>
17
+ <script type="text/javascript" charset="utf-8" src="./js/search_index.js"></script>
18
+ <script type="text/javascript" charset="utf-8" src="./js/search.js"></script>
19
+ <script type="text/javascript" charset="utf-8" src="./js/searcher.js"></script>
20
+ <script type="text/javascript" charset="utf-8" src="./js/darkfish.js"></script>
21
+
22
+
23
+ <body id="top" class="module">
24
+ <nav id="metadata">
25
+ <nav id="home-section" class="section">
26
+ <h3 class="section-header">
27
+ <a href="./index.html">Home</a>
28
+ <a href="./table_of_contents.html#classes">Classes</a>
29
+ <a href="./table_of_contents.html#methods">Methods</a>
30
+ </h3>
31
+ </nav>
32
+
33
+
34
+ <nav id="search-section" class="section project-section" class="initially-hidden">
35
+ <form action="#" method="get" accept-charset="utf-8">
36
+ <h3 class="section-header">
37
+ <input type="text" name="search" placeholder="Search" id="search-field"
38
+ title="Type to search, Up and Down to navigate, Enter to load">
39
+ </h3>
40
+ </form>
41
+
42
+ <ul id="search-results" class="initially-hidden"></ul>
43
+ </nav>
44
+
45
+
46
+ <div id="file-metadata">
47
+ <nav id="file-list-section" class="section">
48
+ <h3 class="section-header">Defined In</h3>
49
+ <ul>
50
+ <li>lib/vm_tools.rb
51
+ </ul>
52
+ </nav>
53
+
54
+
55
+ </div>
56
+
57
+ <div id="class-metadata">
58
+
59
+
60
+
61
+ <!-- Method Quickref -->
62
+ <nav id="method-list-section" class="section">
63
+ <h3 class="section-header">Methods</h3>
64
+
65
+ <ul class="link-list">
66
+
67
+ <li><a href="#method-c-ensure_keyname_not_in_use">::ensure_keyname_not_in_use</a>
68
+
69
+ <li><a href="#method-c-ensure_min_vms_available">::ensure_min_vms_available</a>
70
+
71
+ <li><a href="#method-c-ensure_tools_are_installed">::ensure_tools_are_installed</a>
72
+
73
+ <li><a href="#method-c-get_cloud_creds">::get_cloud_creds</a>
74
+
75
+ <li><a href="#method-c-get_creds_from_env">::get_creds_from_env</a>
76
+
77
+ <li><a href="#method-c-get_hybrid_creds">::get_hybrid_creds</a>
78
+
79
+ <li><a href="#method-c-get_hybrid_env_vars">::get_hybrid_env_vars</a>
80
+
81
+ <li><a href="#method-c-get_hybrid_machine">::get_hybrid_machine</a>
82
+
83
+ <li><a href="#method-c-get_initial_layout">::get_initial_layout</a>
84
+
85
+ <li><a href="#method-c-get_ips">::get_ips</a>
86
+
87
+ <li><a href="#method-c-get_public_ips">::get_public_ips</a>
88
+
89
+ <li><a href="#method-c-get_vmm_keys">::get_vmm_keys</a>
90
+
91
+ <li><a href="#method-c-local_ip">::local_ip</a>
92
+
93
+ <li><a href="#method-c-lookup_cloud_env">::lookup_cloud_env</a>
94
+
95
+ <li><a href="#method-c-open_ports_in_cloud">::open_ports_in_cloud</a>
96
+
97
+ <li><a href="#method-c-set_hybrid_creds">::set_hybrid_creds</a>
98
+
99
+ <li><a href="#method-c-spawn_head_node">::spawn_head_node</a>
100
+
101
+ <li><a href="#method-c-spawn_head_node_via_cloud">::spawn_head_node_via_cloud</a>
102
+
103
+ <li><a href="#method-c-spawn_head_node_via_vmm">::spawn_head_node_via_vmm</a>
104
+
105
+ <li><a href="#method-c-spawn_vms">::spawn_vms</a>
106
+
107
+ <li><a href="#method-c-terminate_all_vms">::terminate_all_vms</a>
108
+
109
+ <li><a href="#method-c-terminate_infrastructure_machines">::terminate_infrastructure_machines</a>
110
+
111
+ <li><a href="#method-c-verify_credentials_are_set_correctly">::verify_credentials_are_set_correctly</a>
112
+
113
+ <li><a href="#method-c-verify_credentials_exist">::verify_credentials_exist</a>
114
+
115
+ <li><a href="#method-c-verify_ids">::verify_ids</a>
116
+
117
+ </ul>
118
+ </nav>
119
+
120
+ </div>
121
+
122
+ <div id="project-metadata">
123
+ <nav id="fileindex-section" class="section project-section">
124
+ <h3 class="section-header">Pages</h3>
125
+
126
+ <ul>
127
+
128
+ <li class="file"><a href="./lib/sshcopyid.html">sshcopyid</a>
129
+
130
+ </ul>
131
+ </nav>
132
+
133
+ <nav id="classindex-section" class="section project-section">
134
+ <h3 class="section-header">Class and Module Index</h3>
135
+
136
+ <ul class="link-list">
137
+
138
+ <li><a href="./AdvancedNode.html">AdvancedNode</a>
139
+
140
+ <li><a href="./AppControllerClient.html">AppControllerClient</a>
141
+
142
+ <li><a href="./AppEngineConfigException.html">AppEngineConfigException</a>
143
+
144
+ <li><a href="./AppScaleException.html">AppScaleException</a>
145
+
146
+ <li><a href="./AppScaleTools.html">AppScaleTools</a>
147
+
148
+ <li><a href="./BadCommandLineArgException.html">BadCommandLineArgException</a>
149
+
150
+ <li><a href="./BadConfigurationException.html">BadConfigurationException</a>
151
+
152
+ <li><a href="./CommonFunctions.html">CommonFunctions</a>
153
+
154
+ <li><a href="./EncryptionHelper.html">EncryptionHelper</a>
155
+
156
+ <li><a href="./GodInterface.html">GodInterface</a>
157
+
158
+ <li><a href="./InfrastructureException.html">InfrastructureException</a>
159
+
160
+ <li><a href="./Node.html">Node</a>
161
+
162
+ <li><a href="./NodeLayout.html">NodeLayout</a>
163
+
164
+ <li><a href="./Object.html">Object</a>
165
+
166
+ <li><a href="./ParseArgs.html">ParseArgs</a>
167
+
168
+ <li><a href="./RemoteLogging.html">RemoteLogging</a>
169
+
170
+ <li><a href="./SimpleNode.html">SimpleNode</a>
171
+
172
+ <li><a href="./UsageText.html">UsageText</a>
173
+
174
+ <li><a href="./UserAppClient.html">UserAppClient</a>
175
+
176
+ <li><a href="./VMTools.html">VMTools</a>
177
+
178
+ </ul>
179
+ </nav>
180
+
181
+ </div>
182
+ </nav>
183
+
184
+ <div id="documentation">
185
+ <h1 class="module">module VMTools</h1>
186
+
187
+ <div id="description" class="description">
188
+
189
+ </div><!-- description -->
190
+
191
+
192
+
193
+
194
+ <section id="5Buntitled-5D" class="documentation-section">
195
+
196
+
197
+
198
+
199
+
200
+
201
+
202
+
203
+ <!-- Methods -->
204
+
205
+ <section id="public-class-5Buntitled-5D-method-details" class="method-section section">
206
+ <h3 class="section-header">Public Class Methods</h3>
207
+
208
+
209
+ <div id="method-c-ensure_keyname_not_in_use" class="method-detail ">
210
+
211
+ <div class="method-heading">
212
+ <span class="method-name">ensure_keyname_not_in_use</span><span
213
+ class="method-args">(keyname, infrastructure)</span>
214
+ <span class="method-click-advice">click to toggle source</span>
215
+ </div>
216
+
217
+
218
+ <div class="method-description">
219
+
220
+
221
+
222
+
223
+
224
+ <div class="method-source-code" id="ensure_keyname_not_in_use-source">
225
+ <pre><span class="ruby-comment"># File lib/vm_tools.rb, line 108</span>
226
+ <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">ensure_keyname_not_in_use</span>(<span class="ruby-identifier">keyname</span>, <span class="ruby-identifier">infrastructure</span>)
227
+ <span class="ruby-identifier">describe_instances</span> = <span class="ruby-constant">CommonFunctions</span>.<span class="ruby-identifier">shell</span>(<span class="ruby-node">&quot;#{infrastructure}-describe-instances 2&gt;&amp;1&quot;</span>)
228
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">describe_instances</span> <span class="ruby-operator">=~</span> <span class="ruby-node">%r\s#{keyname}\s/</span>
229
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">InfrastructureException</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">&quot;The keyname you chose is &quot;</span> <span class="ruby-operator">+</span>
230
+ <span class="ruby-string">&quot;already in use. Please choose another keyname and try again.&quot;</span>)
231
+ <span class="ruby-keyword">end</span>
232
+ <span class="ruby-keyword">end</span></pre>
233
+ </div><!-- ensure_keyname_not_in_use-source -->
234
+
235
+ </div>
236
+
237
+
238
+
239
+
240
+ </div><!-- ensure_keyname_not_in_use-method -->
241
+
242
+
243
+ <div id="method-c-ensure_min_vms_available" class="method-detail ">
244
+
245
+ <div class="method-heading">
246
+ <span class="method-name">ensure_min_vms_available</span><span
247
+ class="method-args">(min_vms_needed, instance_type, infrastructure)</span>
248
+ <span class="method-click-advice">click to toggle source</span>
249
+ </div>
250
+
251
+
252
+ <div class="method-description">
253
+
254
+
255
+
256
+
257
+
258
+ <div class="method-source-code" id="ensure_min_vms_available-source">
259
+ <pre><span class="ruby-comment"># File lib/vm_tools.rb, line 116</span>
260
+ <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">ensure_min_vms_available</span>(<span class="ruby-identifier">min_vms_needed</span>, <span class="ruby-identifier">instance_type</span>, <span class="ruby-identifier">infrastructure</span>)
261
+ <span class="ruby-identifier">puts</span> <span class="ruby-string">&quot;warn: this doesn't work on ec2 - euca only&quot;</span>
262
+ <span class="ruby-identifier">availability_zones</span> = <span class="ruby-constant">CommonFunctions</span>.<span class="ruby-identifier">shell</span>(<span class="ruby-node">&quot;#{infrastructure}-describe-availability-zones verbose 2&gt;&amp;1&quot;</span>)
263
+ <span class="ruby-comment"># check for errors from last command</span>
264
+ <span class="ruby-identifier">vms_str</span> = <span class="ruby-identifier">availability_zones</span>.<span class="ruby-identifier">scan</span>(<span class="ruby-node">%r#{instance_type}\t([\d]+)/</span>).<span class="ruby-identifier">flatten</span>.<span class="ruby-identifier">to_s</span>
265
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">vms_str</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-keyword">or</span> <span class="ruby-identifier">vms_str</span>.<span class="ruby-identifier">empty?</span>
266
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">InfrastructureException</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">&quot;There was a problem seeing how many &quot;</span> <span class="ruby-operator">+</span>
267
+ <span class="ruby-node">&quot;virtual machines were available. We saw [#{availability_zones}].&quot;</span>)
268
+ <span class="ruby-keyword">end</span>
269
+
270
+ <span class="ruby-identifier">free_vms</span> = <span class="ruby-constant">Integer</span>(<span class="ruby-identifier">vms_str</span>)
271
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">free_vms</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">min_vms_needed</span>
272
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">InfrastructureException</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">&quot;Not enough VMs were free of the &quot;</span> <span class="ruby-operator">+</span>
273
+ <span class="ruby-node">&quot;type #{instance_type}. Needed #{min_vms_needed} but only #{free_vms}&quot;</span> <span class="ruby-operator">+</span>
274
+ <span class="ruby-string">&quot; were available.&quot;</span>)
275
+ <span class="ruby-keyword">end</span>
276
+ <span class="ruby-keyword">end</span></pre>
277
+ </div><!-- ensure_min_vms_available-source -->
278
+
279
+ </div>
280
+
281
+
282
+
283
+
284
+ </div><!-- ensure_min_vms_available-method -->
285
+
286
+
287
+ <div id="method-c-ensure_tools_are_installed" class="method-detail ">
288
+
289
+ <div class="method-heading">
290
+ <span class="method-name">ensure_tools_are_installed</span><span
291
+ class="method-args">(infrastructure)</span>
292
+ <span class="method-click-advice">click to toggle source</span>
293
+ </div>
294
+
295
+
296
+ <div class="method-description">
297
+
298
+
299
+
300
+
301
+
302
+ <div class="method-source-code" id="ensure_tools_are_installed-source">
303
+ <pre><span class="ruby-comment"># File lib/vm_tools.rb, line 87</span>
304
+ <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">ensure_tools_are_installed</span>(<span class="ruby-identifier">infrastructure</span>)
305
+ <span class="ruby-identifier">commands</span> = [<span class="ruby-string">&quot;-add-group&quot;</span>, <span class="ruby-string">&quot;-authorize&quot;</span>, <span class="ruby-string">&quot;-describe-instances&quot;</span>, <span class="ruby-string">&quot;-run-instances&quot;</span>, <span class="ruby-string">&quot;-terminate-instances&quot;</span>]
306
+ <span class="ruby-identifier">commands</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">cmd</span><span class="ruby-operator">|</span>
307
+ <span class="ruby-identifier">full_cmd</span> = <span class="ruby-node">&quot;#{infrastructure}#{cmd}&quot;</span>
308
+ <span class="ruby-keyword">if</span> <span class="ruby-operator">!</span><span class="ruby-constant">CommonFunctions</span>.<span class="ruby-identifier">user_has_cmd?</span>(<span class="ruby-identifier">full_cmd</span>)
309
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">BadConfigurationException</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">&quot;You do not appear to &quot;</span> <span class="ruby-operator">+</span>
310
+ <span class="ruby-node">&quot;have the command '#{full_cmd}'. Please put it in your PATH and &quot;</span> <span class="ruby-operator">+</span>
311
+ <span class="ruby-string">&quot;try again.&quot;</span>)
312
+ <span class="ruby-keyword">end</span>
313
+ }
314
+ <span class="ruby-keyword">end</span></pre>
315
+ </div><!-- ensure_tools_are_installed-source -->
316
+
317
+ </div>
318
+
319
+
320
+
321
+
322
+ </div><!-- ensure_tools_are_installed-method -->
323
+
324
+
325
+ <div id="method-c-get_cloud_creds" class="method-detail ">
326
+
327
+ <div class="method-heading">
328
+ <span class="method-name">get_cloud_creds</span><span
329
+ class="method-args">(node_layout, val_hash)</span>
330
+ <span class="method-click-advice">click to toggle source</span>
331
+ </div>
332
+
333
+
334
+ <div class="method-description">
335
+
336
+
337
+
338
+
339
+
340
+ <div class="method-source-code" id="get_cloud_creds-source">
341
+ <pre><span class="ruby-comment"># File lib/vm_tools.rb, line 376</span>
342
+ <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">get_cloud_creds</span>(<span class="ruby-identifier">node_layout</span>, <span class="ruby-identifier">val_hash</span>)
343
+ <span class="ruby-identifier">cloud_creds</span> = {
344
+ <span class="ruby-string">&quot;machine&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-node">&quot;#{val_hash['machine']}&quot;</span>,
345
+ <span class="ruby-string">&quot;instance_type&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-node">&quot;#{val_hash['instance_type']}&quot;</span>,
346
+ <span class="ruby-string">&quot;infrastructure&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-node">&quot;#{val_hash['infrastructure']}&quot;</span>,
347
+ <span class="ruby-string">&quot;min_images&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-node">&quot;#{node_layout.min_images}&quot;</span>,
348
+ <span class="ruby-string">&quot;max_images&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-node">&quot;#{node_layout.max_images}&quot;</span>
349
+ }
350
+ <span class="ruby-identifier">cloud_creds</span>.<span class="ruby-identifier">merge!</span>(<span class="ruby-constant">VMTools</span>.<span class="ruby-identifier">get_creds_from_env</span>)
351
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">cloud_creds</span>
352
+ <span class="ruby-keyword">end</span></pre>
353
+ </div><!-- get_cloud_creds-source -->
354
+
355
+ </div>
356
+
357
+
358
+
359
+
360
+ </div><!-- get_cloud_creds-method -->
361
+
362
+
363
+ <div id="method-c-get_creds_from_env" class="method-detail ">
364
+
365
+ <div class="method-heading">
366
+ <span class="method-name">get_creds_from_env</span><span
367
+ class="method-args">()</span>
368
+ <span class="method-click-advice">click to toggle source</span>
369
+ </div>
370
+
371
+
372
+ <div class="method-description">
373
+
374
+
375
+
376
+
377
+
378
+ <div class="method-source-code" id="get_creds_from_env-source">
379
+ <pre><span class="ruby-comment"># File lib/vm_tools.rb, line 65</span>
380
+ <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">get_creds_from_env</span>
381
+ <span class="ruby-identifier">creds</span> = {}
382
+ <span class="ruby-identifier">optional</span> = {<span class="ruby-string">&quot;ec2_url&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;https://us-east-1.ec2.amazonaws.com&quot;</span>}
383
+ <span class="ruby-identifier">required</span> = [<span class="ruby-string">&quot;ec2_access_key&quot;</span>, <span class="ruby-string">&quot;ec2_secret_key&quot;</span>]
384
+
385
+ <span class="ruby-identifier">optional</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">k</span>, <span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
386
+ <span class="ruby-identifier">creds</span>[<span class="ruby-identifier">k</span>] = <span class="ruby-constant">ENV</span>[<span class="ruby-identifier">k</span>.<span class="ruby-identifier">upcase</span>] <span class="ruby-keyword">or</span> <span class="ruby-identifier">v</span>
387
+ }
388
+
389
+ <span class="ruby-identifier">required</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">var</span><span class="ruby-operator">|</span>
390
+ <span class="ruby-keyword">if</span> <span class="ruby-constant">ENV</span>[<span class="ruby-identifier">var</span>.<span class="ruby-identifier">upcase</span>]
391
+ <span class="ruby-identifier">creds</span>[<span class="ruby-identifier">var</span>] = <span class="ruby-constant">ENV</span>[<span class="ruby-identifier">var</span>.<span class="ruby-identifier">upcase</span>]
392
+ <span class="ruby-keyword">else</span>
393
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">BadConfigurationException</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">&quot;The required &quot;</span> <span class="ruby-operator">+</span>
394
+ <span class="ruby-node">&quot;environment variable #{var.upcase} was not set. Please set it &quot;</span> <span class="ruby-operator">+</span>
395
+ <span class="ruby-string">&quot;and try running AppScale again.&quot;</span>)
396
+ <span class="ruby-keyword">end</span>
397
+ }
398
+
399
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">creds</span>
400
+ <span class="ruby-keyword">end</span></pre>
401
+ </div><!-- get_creds_from_env-source -->
402
+
403
+ </div>
404
+
405
+
406
+
407
+
408
+ </div><!-- get_creds_from_env-method -->
409
+
410
+
411
+ <div id="method-c-get_hybrid_creds" class="method-detail ">
412
+
413
+ <div class="method-heading">
414
+ <span class="method-name">get_hybrid_creds</span><span
415
+ class="method-args">(node_layout, set_head_node_creds=false)</span>
416
+ <span class="method-click-advice">click to toggle source</span>
417
+ </div>
418
+
419
+
420
+ <div class="method-description">
421
+
422
+
423
+
424
+
425
+
426
+ <div class="method-source-code" id="get_hybrid_creds-source">
427
+ <pre><span class="ruby-comment"># File lib/vm_tools.rb, line 409</span>
428
+ <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">get_hybrid_creds</span>(<span class="ruby-identifier">node_layout</span>, <span class="ruby-identifier">set_head_node_creds</span>=<span class="ruby-keyword">false</span>)
429
+ <span class="ruby-identifier">cloud_creds</span> = {
430
+ <span class="ruby-string">&quot;infrastructure&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;hybrid&quot;</span>,
431
+ <span class="ruby-string">&quot;min_images&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-node">&quot;#{node_layout.min_images}&quot;</span>,
432
+ <span class="ruby-string">&quot;max_images&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-node">&quot;#{node_layout.max_images}&quot;</span>
433
+ }
434
+
435
+ <span class="ruby-identifier">cloud_num</span> = <span class="ruby-value">1</span>
436
+ <span class="ruby-identifier">loop</span> {
437
+ <span class="ruby-identifier">cloud_type</span> = <span class="ruby-constant">ENV</span>[<span class="ruby-node">&quot;CLOUD#{cloud_num}_TYPE&quot;</span>]
438
+ <span class="ruby-keyword">break</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">cloud_type</span>.<span class="ruby-identifier">nil?</span>
439
+
440
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">cloud_num</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">set_head_node_creds</span>
441
+ <span class="ruby-identifier">set_vars</span> = <span class="ruby-keyword">true</span>
442
+ <span class="ruby-keyword">else</span>
443
+ <span class="ruby-identifier">set_vars</span> = <span class="ruby-keyword">false</span>
444
+ <span class="ruby-keyword">end</span>
445
+
446
+ <span class="ruby-identifier">cloud_creds</span>.<span class="ruby-identifier">merge!</span>(<span class="ruby-keyword">self</span>.<span class="ruby-identifier">get_hybrid_env_vars</span>(<span class="ruby-identifier">cloud_type</span>, <span class="ruby-identifier">cloud_num</span>, <span class="ruby-identifier">set_vars</span>))
447
+ <span class="ruby-identifier">cloud_num</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
448
+ }
449
+
450
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">cloud_creds</span>
451
+ <span class="ruby-keyword">end</span></pre>
452
+ </div><!-- get_hybrid_creds-source -->
453
+
454
+ </div>
455
+
456
+
457
+
458
+
459
+ </div><!-- get_hybrid_creds-method -->
460
+
461
+
462
+ <div id="method-c-get_hybrid_env_vars" class="method-detail ">
463
+
464
+ <div class="method-heading">
465
+ <span class="method-name">get_hybrid_env_vars</span><span
466
+ class="method-args">(cloud_type, cloud_num, set_vars=false)</span>
467
+ <span class="method-click-advice">click to toggle source</span>
468
+ </div>
469
+
470
+
471
+ <div class="method-description">
472
+
473
+
474
+
475
+
476
+
477
+ <div class="method-source-code" id="get_hybrid_env_vars-source">
478
+ <pre><span class="ruby-comment"># File lib/vm_tools.rb, line 438</span>
479
+ <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">get_hybrid_env_vars</span>(<span class="ruby-identifier">cloud_type</span>, <span class="ruby-identifier">cloud_num</span>, <span class="ruby-identifier">set_vars</span>=<span class="ruby-keyword">false</span>)
480
+ <span class="ruby-identifier">creds</span> = {}
481
+
482
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">cloud_type</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;euca&quot;</span>
483
+ <span class="ruby-identifier">required</span> = <span class="ruby-constant">REQUIRED_EUCA_CREDS_FOR_HYBRID</span>
484
+ <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">cloud_type</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;ec2&quot;</span>
485
+ <span class="ruby-identifier">required</span> = <span class="ruby-constant">REQUIRED_EC2_CREDS_FOR_HYBRID</span>
486
+ <span class="ruby-keyword">else</span>
487
+ <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;Incorrect cloud type of #{cloud_type}&quot;</span>
488
+ <span class="ruby-identifier">fail</span>
489
+ <span class="ruby-keyword">end</span>
490
+
491
+ <span class="ruby-identifier">required</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">cred</span><span class="ruby-operator">|</span>
492
+ <span class="ruby-identifier">key</span> = <span class="ruby-node">&quot;CLOUD#{cloud_num}_#{cred}&quot;</span>
493
+ <span class="ruby-identifier">val</span> = <span class="ruby-constant">ENV</span>[<span class="ruby-identifier">key</span>]
494
+
495
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">val</span>.<span class="ruby-identifier">nil?</span>
496
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">BadConfigurationException</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">&quot;The required &quot;</span> <span class="ruby-operator">+</span>
497
+ <span class="ruby-node">&quot;environment variable #{key} was not set. Please set it and &quot;</span> <span class="ruby-operator">+</span>
498
+ <span class="ruby-string">&quot;try again.&quot;</span>)
499
+ <span class="ruby-keyword">end</span>
500
+
501
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">set_vars</span>
502
+ <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;Setting #{cred} to #{val}&quot;</span>
503
+ <span class="ruby-constant">ENV</span>[<span class="ruby-identifier">cred</span>] = <span class="ruby-identifier">val</span>
504
+ <span class="ruby-keyword">end</span>
505
+
506
+ <span class="ruby-identifier">creds</span>[<span class="ruby-identifier">key</span>] = <span class="ruby-identifier">val</span>
507
+ }
508
+
509
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">creds</span>
510
+ <span class="ruby-keyword">end</span></pre>
511
+ </div><!-- get_hybrid_env_vars-source -->
512
+
513
+ </div>
514
+
515
+
516
+
517
+
518
+ </div><!-- get_hybrid_env_vars-method -->
519
+
520
+
521
+ <div id="method-c-get_hybrid_machine" class="method-detail ">
522
+
523
+ <div class="method-heading">
524
+ <span class="method-name">get_hybrid_machine</span><span
525
+ class="method-args">(infra, cloud_num)</span>
526
+ <span class="method-click-advice">click to toggle source</span>
527
+ </div>
528
+
529
+
530
+ <div class="method-description">
531
+
532
+
533
+
534
+
535
+
536
+ <div class="method-source-code" id="get_hybrid_machine-source">
537
+ <pre><span class="ruby-comment"># File lib/vm_tools.rb, line 471</span>
538
+ <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">get_hybrid_machine</span>(<span class="ruby-identifier">infra</span>, <span class="ruby-identifier">cloud_num</span>)
539
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">infra</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;euca&quot;</span>
540
+ <span class="ruby-identifier">key</span> = <span class="ruby-node">&quot;CLOUD#{cloud_num}_EMI&quot;</span>
541
+ <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">infra</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;ec2&quot;</span>
542
+ <span class="ruby-identifier">key</span> = <span class="ruby-node">&quot;CLOUD#{cloud_num}_AMI&quot;</span>
543
+ <span class="ruby-keyword">else</span>
544
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">BadConfigurationException</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">&quot;infrastructure #{infra} &quot;</span> <span class="ruby-operator">+</span>
545
+ <span class="ruby-string">&quot;is not a supported value.&quot;</span>)
546
+ <span class="ruby-keyword">end</span>
547
+
548
+ <span class="ruby-keyword">return</span> <span class="ruby-constant">ENV</span>[<span class="ruby-identifier">key</span>]
549
+ <span class="ruby-keyword">end</span></pre>
550
+ </div><!-- get_hybrid_machine-source -->
551
+
552
+ </div>
553
+
554
+
555
+
556
+
557
+ </div><!-- get_hybrid_machine-method -->
558
+
559
+
560
+ <div id="method-c-get_initial_layout" class="method-detail ">
561
+
562
+ <div class="method-heading">
563
+ <span class="method-name">get_initial_layout</span><span
564
+ class="method-args">(head_node, separate, num_of_nodes, total_nodes)</span>
565
+ <span class="method-click-advice">click to toggle source</span>
566
+ </div>
567
+
568
+
569
+ <div class="method-description">
570
+
571
+
572
+
573
+
574
+
575
+ <div class="method-source-code" id="get_initial_layout-source">
576
+ <pre><span class="ruby-comment"># File lib/vm_tools.rb, line 44</span>
577
+ <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">get_initial_layout</span>(<span class="ruby-identifier">head_node</span>, <span class="ruby-identifier">separate</span>, <span class="ruby-identifier">num_of_nodes</span>, <span class="ruby-identifier">total_nodes</span>)
578
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">head_node</span>
579
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">separate</span>
580
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">NotImplementedError</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">&quot;haven't done head node, separate yet&quot;</span>)
581
+ <span class="ruby-keyword">else</span>
582
+ <span class="ruby-identifier">layout</span> = <span class="ruby-string">&quot;shadow:load_balancer:db_master&quot;</span>
583
+ <span class="ruby-identifier">layout</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;:appengine&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">total_nodes</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>
584
+ <span class="ruby-keyword">end</span>
585
+ <span class="ruby-keyword">else</span>
586
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">NotImplementedError</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">&quot;haven't done slave nodes, separate yet&quot;</span>)
587
+ <span class="ruby-keyword">end</span>
588
+
589
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">layout</span>
590
+ <span class="ruby-keyword">end</span></pre>
591
+ </div><!-- get_initial_layout-source -->
592
+
593
+ </div>
594
+
595
+
596
+
597
+
598
+ </div><!-- get_initial_layout-method -->
599
+
600
+
601
+ <div id="method-c-get_ips" class="method-detail ">
602
+
603
+ <div class="method-heading">
604
+ <span class="method-name">get_ips</span><span
605
+ class="method-args">(ips, verbose)</span>
606
+ <span class="method-click-advice">click to toggle source</span>
607
+ </div>
608
+
609
+
610
+ <div class="method-description">
611
+
612
+
613
+
614
+
615
+
616
+ <div class="method-source-code" id="get_ips-source">
617
+ <pre><span class="ruby-comment"># File lib/vm_tools.rb, line 159</span>
618
+ <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">get_ips</span>(<span class="ruby-identifier">ips</span>, <span class="ruby-identifier">verbose</span>)
619
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">ips</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">%</span> <span class="ruby-value">2</span> <span class="ruby-operator">!=</span> <span class="ruby-value">0</span>
620
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">InfrastructureException</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">&quot;ips not even length array&quot;</span>)
621
+ <span class="ruby-keyword">end</span>
622
+ <span class="ruby-identifier">reported_public</span> = []
623
+ <span class="ruby-identifier">reported_private</span> = []
624
+ <span class="ruby-identifier">ips</span>.<span class="ruby-identifier">each_index</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">index</span><span class="ruby-operator">|</span>
625
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">index</span> <span class="ruby-operator">%</span> <span class="ruby-value">2</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
626
+ <span class="ruby-identifier">reported_public</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">ips</span>[<span class="ruby-identifier">index</span>]
627
+ <span class="ruby-keyword">else</span>
628
+ <span class="ruby-identifier">reported_private</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">ips</span>[<span class="ruby-identifier">index</span>]
629
+ <span class="ruby-keyword">end</span>
630
+ }
631
+
632
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">verbose</span>
633
+ <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;Reported Public IPs: [#{reported_public.join(', ')}]&quot;</span>
634
+ <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;Reported Private IPs: [#{reported_private.join(', ')}]&quot;</span>
635
+ <span class="ruby-keyword">end</span>
636
+
637
+ <span class="ruby-identifier">actual_public</span> = []
638
+ <span class="ruby-identifier">actual_private</span> = []
639
+
640
+ <span class="ruby-identifier">reported_public</span>.<span class="ruby-identifier">each_index</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">index</span><span class="ruby-operator">|</span>
641
+ <span class="ruby-identifier">pub</span> = <span class="ruby-identifier">reported_public</span>[<span class="ruby-identifier">index</span>]
642
+ <span class="ruby-identifier">pri</span> = <span class="ruby-identifier">reported_private</span>[<span class="ruby-identifier">index</span>]
643
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">pub</span> <span class="ruby-operator">!=</span> <span class="ruby-string">&quot;0.0.0.0&quot;</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">pri</span> <span class="ruby-operator">!=</span> <span class="ruby-string">&quot;0.0.0.0&quot;</span>
644
+ <span class="ruby-identifier">actual_public</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">pub</span>
645
+ <span class="ruby-identifier">actual_private</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">pri</span>
646
+ <span class="ruby-keyword">end</span>
647
+ }
648
+
649
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">actual_public</span>, <span class="ruby-identifier">actual_private</span>
650
+ <span class="ruby-keyword">end</span></pre>
651
+ </div><!-- get_ips-source -->
652
+
653
+ </div>
654
+
655
+
656
+
657
+
658
+ </div><!-- get_ips-method -->
659
+
660
+
661
+ <div id="method-c-get_public_ips" class="method-detail ">
662
+
663
+ <div class="method-heading">
664
+ <span class="method-name">get_public_ips</span><span
665
+ class="method-args">(ips, verbose)</span>
666
+ <span class="method-click-advice">click to toggle source</span>
667
+ </div>
668
+
669
+
670
+ <div class="method-description">
671
+
672
+
673
+
674
+
675
+
676
+ <div class="method-source-code" id="get_public_ips-source">
677
+ <pre><span class="ruby-comment"># File lib/vm_tools.rb, line 193</span>
678
+ <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">get_public_ips</span>(<span class="ruby-identifier">ips</span>, <span class="ruby-identifier">verbose</span>)
679
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">ips</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">%</span> <span class="ruby-value">2</span> <span class="ruby-operator">!=</span> <span class="ruby-value">0</span>
680
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">InfrastructureException</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">&quot;ips not even length array&quot;</span>)
681
+ <span class="ruby-keyword">end</span>
682
+
683
+ <span class="ruby-identifier">reported_public</span> = []
684
+ <span class="ruby-identifier">reported_private</span> = []
685
+ <span class="ruby-identifier">ips</span>.<span class="ruby-identifier">each_index</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">index</span><span class="ruby-operator">|</span>
686
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">index</span> <span class="ruby-operator">%</span> <span class="ruby-value">2</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
687
+ <span class="ruby-identifier">reported_public</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">ips</span>[<span class="ruby-identifier">index</span>]
688
+ <span class="ruby-keyword">else</span>
689
+ <span class="ruby-identifier">reported_private</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">ips</span>[<span class="ruby-identifier">index</span>]
690
+ <span class="ruby-keyword">end</span>
691
+ }
692
+
693
+ <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;Reported Public IPs: [#{reported_public.join(', ')}]&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">verbose</span>
694
+ <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;Reported Private IPs: [#{reported_private.join(', ')}]&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">verbose</span>
695
+
696
+ <span class="ruby-identifier">public_ips</span> = []
697
+ <span class="ruby-identifier">reported_public</span>.<span class="ruby-identifier">each_index</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">index</span><span class="ruby-operator">|</span>
698
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">reported_public</span>[<span class="ruby-identifier">index</span>] <span class="ruby-operator">!=</span> <span class="ruby-string">&quot;0.0.0.0&quot;</span>
699
+ <span class="ruby-identifier">public_ips</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">reported_public</span>[<span class="ruby-identifier">index</span>]
700
+ <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">reported_private</span>[<span class="ruby-identifier">index</span>] <span class="ruby-operator">!=</span> <span class="ruby-string">&quot;0.0.0.0&quot;</span>
701
+ <span class="ruby-identifier">public_ips</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">reported_private</span>[<span class="ruby-identifier">index</span>]
702
+ <span class="ruby-keyword">end</span>
703
+ }
704
+
705
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">public_ips</span>.<span class="ruby-identifier">flatten</span>
706
+ <span class="ruby-keyword">end</span></pre>
707
+ </div><!-- get_public_ips-source -->
708
+
709
+ </div>
710
+
711
+
712
+
713
+
714
+ </div><!-- get_public_ips-method -->
715
+
716
+
717
+ <div id="method-c-get_vmm_keys" class="method-detail ">
718
+
719
+ <div class="method-heading">
720
+ <span class="method-name">get_vmm_keys</span><span
721
+ class="method-args">(val_hash)</span>
722
+ <span class="method-click-advice">click to toggle source</span>
723
+ </div>
724
+
725
+
726
+ <div class="method-description">
727
+
728
+
729
+
730
+
731
+
732
+ <div class="method-source-code" id="get_vmm_keys-source">
733
+ <pre><span class="ruby-comment"># File lib/vm_tools.rb, line 388</span>
734
+ <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">get_vmm_keys</span>(<span class="ruby-identifier">val_hash</span>)
735
+ <span class="ruby-identifier">puts</span> <span class="ruby-string">&quot;Generating certificate and private key&quot;</span>
736
+ <span class="ruby-identifier">key</span>, <span class="ruby-identifier">cert</span> = <span class="ruby-constant">EncryptionHelper</span>.<span class="ruby-identifier">generate_pem_files</span>(<span class="ruby-identifier">val_hash</span>[<span class="ruby-string">'keyname'</span>])
737
+ <span class="ruby-identifier">key</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>(<span class="ruby-node">&quot;~/.appscale/#{val_hash['keyname']}-key.pem&quot;</span>)
738
+ <span class="ruby-identifier">cert</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>(<span class="ruby-node">&quot;~/.appscale/#{val_hash['keyname']}-cert.pem&quot;</span>)
739
+
740
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">cert</span>, <span class="ruby-identifier">key</span>
741
+ <span class="ruby-keyword">end</span></pre>
742
+ </div><!-- get_vmm_keys-source -->
743
+
744
+ </div>
745
+
746
+
747
+
748
+
749
+ </div><!-- get_vmm_keys-method -->
750
+
751
+
752
+ <div id="method-c-local_ip" class="method-detail ">
753
+
754
+ <div class="method-heading">
755
+ <span class="method-name">local_ip</span><span
756
+ class="method-args">()</span>
757
+ <span class="method-click-advice">click to toggle source</span>
758
+ </div>
759
+
760
+
761
+ <div class="method-description">
762
+
763
+ <p>Code for <a href="VMTools.html#method-c-local_ip">::local_ip</a> taken from
764
+ <a
765
+ href="http://coderrr.wordpress.com/2008/05/28/get-your-local-ip-address/">coderrr.wordpress.com/2008/05/28/get-your-local-ip-address/</a></p>
766
+
767
+
768
+
769
+ <div class="method-source-code" id="local_ip-source">
770
+ <pre><span class="ruby-comment"># File lib/vm_tools.rb, line 61</span>
771
+ <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">local_ip</span>
772
+ <span class="ruby-constant">UDPSocket</span>.<span class="ruby-identifier">open</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">connect</span>(<span class="ruby-string">&quot;64.233.187.99&quot;</span>, <span class="ruby-value">1</span>); <span class="ruby-identifier">s</span>.<span class="ruby-identifier">addr</span>.<span class="ruby-identifier">last</span> }
773
+ <span class="ruby-keyword">end</span></pre>
774
+ </div><!-- local_ip-source -->
775
+
776
+ </div>
777
+
778
+
779
+
780
+
781
+ </div><!-- local_ip-method -->
782
+
783
+
784
+ <div id="method-c-lookup_cloud_env" class="method-detail ">
785
+
786
+ <div class="method-heading">
787
+ <span class="method-name">lookup_cloud_env</span><span
788
+ class="method-args">(cloud)</span>
789
+ <span class="method-click-advice">click to toggle source</span>
790
+ </div>
791
+
792
+
793
+ <div class="method-description">
794
+
795
+
796
+
797
+
798
+
799
+ <div class="method-source-code" id="lookup_cloud_env-source">
800
+ <pre><span class="ruby-comment"># File lib/vm_tools.rb, line 397</span>
801
+ <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">lookup_cloud_env</span>(<span class="ruby-identifier">cloud</span>)
802
+ <span class="ruby-identifier">cloud_type_var</span> = <span class="ruby-identifier">cloud</span>.<span class="ruby-identifier">upcase</span> <span class="ruby-operator">+</span> <span class="ruby-string">&quot;_TYPE&quot;</span>
803
+ <span class="ruby-identifier">cloud_type</span> = <span class="ruby-constant">ENV</span>[<span class="ruby-identifier">cloud_type_var</span>]
804
+
805
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">cloud_type</span>.<span class="ruby-identifier">nil?</span>
806
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">BadConfigurationException</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">&quot;The environment variable &quot;</span> <span class="ruby-operator">+</span>
807
+ <span class="ruby-node">&quot;#{cloud_type_var} was not set. Please set it and try again.&quot;</span>)
808
+ <span class="ruby-keyword">end</span>
809
+
810
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">cloud_type</span>
811
+ <span class="ruby-keyword">end</span></pre>
812
+ </div><!-- lookup_cloud_env-source -->
813
+
814
+ </div>
815
+
816
+
817
+
818
+
819
+ </div><!-- lookup_cloud_env-method -->
820
+
821
+
822
+ <div id="method-c-open_ports_in_cloud" class="method-detail ">
823
+
824
+ <div class="method-heading">
825
+ <span class="method-name">open_ports_in_cloud</span><span
826
+ class="method-args">(infrastructure, group, verbose)</span>
827
+ <span class="method-click-advice">click to toggle source</span>
828
+ </div>
829
+
830
+
831
+ <div class="method-description">
832
+
833
+
834
+
835
+
836
+
837
+ <div class="method-source-code" id="open_ports_in_cloud-source">
838
+ <pre><span class="ruby-comment"># File lib/vm_tools.rb, line 99</span>
839
+ <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">open_ports_in_cloud</span>(<span class="ruby-identifier">infrastructure</span>, <span class="ruby-identifier">group</span>, <span class="ruby-identifier">verbose</span>)
840
+ <span class="ruby-identifier">retn</span> = <span class="ruby-constant">CommonFunctions</span>.<span class="ruby-identifier">shell</span>(<span class="ruby-node">&quot;#{infrastructure}-authorize #{group} -p 1-65535 -s 0.0.0.0/0 -P udp 2&gt;&amp;1&quot;</span>)
841
+ <span class="ruby-identifier">puts</span> <span class="ruby-identifier">retn</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">verbose</span>
842
+ <span class="ruby-identifier">retn</span> = <span class="ruby-constant">CommonFunctions</span>.<span class="ruby-identifier">shell</span>(<span class="ruby-node">&quot;#{infrastructure}-authorize #{group} -p 1-65535 -s 0.0.0.0/0 -P tcp 2&gt;&amp;1&quot;</span>)
843
+ <span class="ruby-identifier">puts</span> <span class="ruby-identifier">retn</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">verbose</span>
844
+ <span class="ruby-identifier">retn</span> = <span class="ruby-constant">CommonFunctions</span>.<span class="ruby-identifier">shell</span>(<span class="ruby-node">&quot;#{infrastructure}-authorize #{group} -s 0.0.0.0/0 -P icmp -t -1:-1 2&gt;&amp;1&quot;</span>)
845
+ <span class="ruby-identifier">puts</span> <span class="ruby-identifier">retn</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">verbose</span>
846
+ <span class="ruby-keyword">end</span></pre>
847
+ </div><!-- open_ports_in_cloud-source -->
848
+
849
+ </div>
850
+
851
+
852
+
853
+
854
+ </div><!-- open_ports_in_cloud-method -->
855
+
856
+
857
+ <div id="method-c-set_hybrid_creds" class="method-detail ">
858
+
859
+ <div class="method-heading">
860
+ <span class="method-name">set_hybrid_creds</span><span
861
+ class="method-args">(node_layout)</span>
862
+ <span class="method-click-advice">click to toggle source</span>
863
+ </div>
864
+
865
+
866
+ <div class="method-description">
867
+
868
+
869
+
870
+
871
+
872
+ <div class="method-source-code" id="set_hybrid_creds-source">
873
+ <pre><span class="ruby-comment"># File lib/vm_tools.rb, line 434</span>
874
+ <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">set_hybrid_creds</span>(<span class="ruby-identifier">node_layout</span>)
875
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">get_hybrid_creds</span>(<span class="ruby-identifier">node_layout</span>, <span class="ruby-identifier">set_head_node_creds</span>=<span class="ruby-keyword">true</span>)
876
+ <span class="ruby-keyword">end</span></pre>
877
+ </div><!-- set_hybrid_creds-source -->
878
+
879
+ </div>
880
+
881
+
882
+
883
+
884
+ </div><!-- set_hybrid_creds-method -->
885
+
886
+
887
+ <div id="method-c-spawn_head_node" class="method-detail ">
888
+
889
+ <div class="method-heading">
890
+ <span class="method-name">spawn_head_node</span><span
891
+ class="method-args">(head_node, infrastructure, keyname, ssh_key_location, ssh_keys, force, machine, instance_type, group, verbose)</span>
892
+ <span class="method-click-advice">click to toggle source</span>
893
+ </div>
894
+
895
+
896
+ <div class="method-description">
897
+
898
+
899
+
900
+
901
+
902
+ <div class="method-source-code" id="spawn_head_node-source">
903
+ <pre><span class="ruby-comment"># File lib/vm_tools.rb, line 327</span>
904
+ <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">spawn_head_node</span>(<span class="ruby-identifier">head_node</span>, <span class="ruby-identifier">infrastructure</span>, <span class="ruby-identifier">keyname</span>,
905
+ <span class="ruby-identifier">ssh_key_location</span>, <span class="ruby-identifier">ssh_keys</span>, <span class="ruby-identifier">force</span>, <span class="ruby-identifier">machine</span>, <span class="ruby-identifier">instance_type</span>, <span class="ruby-identifier">group</span>, <span class="ruby-identifier">verbose</span>)
906
+
907
+ <span class="ruby-identifier">head_node_jobs</span> = <span class="ruby-identifier">head_node</span>.<span class="ruby-identifier">roles</span>.<span class="ruby-identifier">join</span>(<span class="ruby-string">&quot;:&quot;</span>)
908
+ <span class="ruby-keyword">if</span> <span class="ruby-constant">VALID_CLOUD_TYPES</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">infrastructure</span>)
909
+ <span class="ruby-constant">VMTools</span>.<span class="ruby-identifier">spawn_head_node_via_cloud</span>(<span class="ruby-identifier">infrastructure</span>, <span class="ruby-identifier">keyname</span>,
910
+ <span class="ruby-identifier">ssh_key_location</span>, <span class="ruby-identifier">ssh_keys</span>, <span class="ruby-identifier">force</span>, <span class="ruby-identifier">head_node_jobs</span>, <span class="ruby-identifier">machine</span>,
911
+ <span class="ruby-identifier">instance_type</span>, <span class="ruby-identifier">group</span>, <span class="ruby-identifier">verbose</span>)
912
+ <span class="ruby-keyword">else</span>
913
+ <span class="ruby-constant">VMTools</span>.<span class="ruby-identifier">spawn_head_node_via_vmm</span>(<span class="ruby-identifier">head_node</span>, <span class="ruby-identifier">keyname</span>, <span class="ruby-identifier">head_node_jobs</span>)
914
+ <span class="ruby-keyword">end</span>
915
+ <span class="ruby-keyword">end</span></pre>
916
+ </div><!-- spawn_head_node-source -->
917
+
918
+ </div>
919
+
920
+
921
+
922
+
923
+ </div><!-- spawn_head_node-method -->
924
+
925
+
926
+ <div id="method-c-spawn_head_node_via_cloud" class="method-detail ">
927
+
928
+ <div class="method-heading">
929
+ <span class="method-name">spawn_head_node_via_cloud</span><span
930
+ class="method-args">(infrastructure, keyname, ssh_key_location, ssh_keys, force, head_node_jobs, machine, instance_type, group, verbose)</span>
931
+ <span class="method-click-advice">click to toggle source</span>
932
+ </div>
933
+
934
+
935
+ <div class="method-description">
936
+
937
+
938
+
939
+
940
+
941
+ <div class="method-source-code" id="spawn_head_node_via_cloud-source">
942
+ <pre><span class="ruby-comment"># File lib/vm_tools.rb, line 340</span>
943
+ <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">spawn_head_node_via_cloud</span>(<span class="ruby-identifier">infrastructure</span>, <span class="ruby-identifier">keyname</span>,
944
+ <span class="ruby-identifier">ssh_key_location</span>, <span class="ruby-identifier">ssh_keys</span>, <span class="ruby-identifier">force</span>, <span class="ruby-identifier">head_node_jobs</span>, <span class="ruby-identifier">machine</span>,
945
+ <span class="ruby-identifier">instance_type</span>, <span class="ruby-identifier">group</span>, <span class="ruby-identifier">verbose</span>)
946
+
947
+ <span class="ruby-constant">VMTools</span>.<span class="ruby-identifier">ensure_tools_are_installed</span>(<span class="ruby-identifier">infrastructure</span>)
948
+ <span class="ruby-comment">#VMTools.verify_ids(machine, infrastructure)</span>
949
+ <span class="ruby-constant">VMTools</span>.<span class="ruby-identifier">ensure_keyname_not_in_use</span>(<span class="ruby-identifier">keyname</span>, <span class="ruby-identifier">infrastructure</span>)
950
+ <span class="ruby-comment">#VMTools.ensure_min_vms_available(min_images, instance_type, infrastructure)</span>
951
+ <span class="ruby-constant">EncryptionHelper</span>.<span class="ruby-identifier">generate_ssh_key</span>(<span class="ruby-identifier">verbose</span>, <span class="ruby-identifier">ssh_keys</span>, <span class="ruby-identifier">keyname</span>, <span class="ruby-identifier">infrastructure</span>, <span class="ruby-identifier">force</span>)
952
+ <span class="ruby-identifier">locations</span> = <span class="ruby-constant">VMTools</span>.<span class="ruby-identifier">spawn_vms</span>(<span class="ruby-value">1</span>, <span class="ruby-identifier">head_node_jobs</span>, <span class="ruby-identifier">machine</span>, <span class="ruby-identifier">instance_type</span>, <span class="ruby-identifier">keyname</span>, <span class="ruby-identifier">infrastructure</span>, <span class="ruby-identifier">group</span>, <span class="ruby-identifier">verbose</span>)
953
+ <span class="ruby-identifier">puts</span> <span class="ruby-string">&quot;Please wait for your instance to complete the bootup process.&quot;</span>
954
+ <span class="ruby-identifier">head_node_ip</span> = <span class="ruby-identifier">locations</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">split</span>(<span class="ruby-string">&quot;:&quot;</span>)[<span class="ruby-value">0</span>]
955
+ <span class="ruby-constant">CommonFunctions</span>.<span class="ruby-identifier">sleep_until_port_is_open</span>(<span class="ruby-identifier">head_node_ip</span>, <span class="ruby-constant">AppScaleTools</span><span class="ruby-operator">::</span><span class="ruby-constant">SSH_PORT</span>)
956
+ <span class="ruby-identifier">sleep</span>(<span class="ruby-value">10</span>)
957
+ <span class="ruby-identifier">options</span> = <span class="ruby-string">&quot;-o StrictHostkeyChecking=no -o NumberOfPasswordPrompts=0&quot;</span>
958
+ <span class="ruby-identifier">enable_root_login</span> = <span class="ruby-string">&quot;sudo cp /home/ubuntu/.ssh/authorized_keys /root/.ssh/&quot;</span>
959
+ <span class="ruby-node">%xssh -i #{ssh_keys.join(&quot; -i &quot;)} #{options} 2&gt;&amp;1 ubuntu@#{head_node_ip} '#{enable_root_login}'`</span> <span class="ruby-comment"># kloogy ec2 fix</span>
960
+ <span class="ruby-constant">CommonFunctions</span>.<span class="ruby-identifier">scp_file</span>(<span class="ruby-identifier">ssh_key_location</span>, <span class="ruby-string">&quot;/root/.ssh/id_dsa&quot;</span>, <span class="ruby-identifier">head_node_ip</span>, <span class="ruby-identifier">ssh_keys</span>) <span class="ruby-comment"># kloogy ec2 fix</span>
961
+ <span class="ruby-constant">CommonFunctions</span>.<span class="ruby-identifier">scp_file</span>(<span class="ruby-identifier">ssh_key_location</span>, <span class="ruby-string">&quot;/root/.ssh/id_rsa&quot;</span>, <span class="ruby-identifier">head_node_ip</span>, <span class="ruby-identifier">ssh_keys</span>)
962
+ <span class="ruby-constant">CommonFunctions</span>.<span class="ruby-identifier">shell</span>(<span class="ruby-node">&quot;scp -i #{ssh_keys.join(&quot; -i &quot;)} -o StrictHostkeyChecking=no 2&gt;&amp;1 root@#{head_node_ip}:/root/.ssh/authorized_keys /tmp/remote_keys&quot;</span>)
963
+ <span class="ruby-identifier">remote_keys</span> = (<span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-string">&quot;/tmp/remote_keys&quot;</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">read</span> }).<span class="ruby-identifier">chomp</span>
964
+ <span class="ruby-identifier">public_key_contents</span> = <span class="ruby-identifier">remote_keys</span>.<span class="ruby-identifier">scan</span>(<span class="ruby-regexp">%rssh-rsa [\w+\/=]+ [\w@]+/</span>).<span class="ruby-identifier">flatten</span>.<span class="ruby-identifier">to_s</span>
965
+ <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-string">&quot;/tmp/id_rsa.pub&quot;</span>, <span class="ruby-string">&quot;w+&quot;</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">file</span><span class="ruby-operator">|</span> <span class="ruby-identifier">file</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">public_key_contents</span>) }
966
+ <span class="ruby-constant">CommonFunctions</span>.<span class="ruby-identifier">scp_file</span>(<span class="ruby-string">&quot;/tmp/id_rsa.pub&quot;</span>, <span class="ruby-string">&quot;/root/.ssh/id_rsa.pub&quot;</span>, <span class="ruby-identifier">head_node_ip</span>, <span class="ruby-identifier">ssh_keys</span>)
967
+ <span class="ruby-identifier">locations</span> = <span class="ruby-identifier">locations</span>.<span class="ruby-identifier">flatten</span>.<span class="ruby-identifier">to_s</span>
968
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">locations</span>
969
+ <span class="ruby-keyword">end</span></pre>
970
+ </div><!-- spawn_head_node_via_cloud-source -->
971
+
972
+ </div>
973
+
974
+
975
+
976
+
977
+ </div><!-- spawn_head_node_via_cloud-method -->
978
+
979
+
980
+ <div id="method-c-spawn_head_node_via_vmm" class="method-detail ">
981
+
982
+ <div class="method-heading">
983
+ <span class="method-name">spawn_head_node_via_vmm</span><span
984
+ class="method-args">(node, keyname, head_node_jobs)</span>
985
+ <span class="method-click-advice">click to toggle source</span>
986
+ </div>
987
+
988
+
989
+ <div class="method-description">
990
+
991
+
992
+
993
+
994
+
995
+ <div class="method-source-code" id="spawn_head_node_via_vmm-source">
996
+ <pre><span class="ruby-comment"># File lib/vm_tools.rb, line 368</span>
997
+ <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">spawn_head_node_via_vmm</span>(<span class="ruby-identifier">node</span>, <span class="ruby-identifier">keyname</span>, <span class="ruby-identifier">head_node_jobs</span>)
998
+ <span class="ruby-comment"># We don't care about the instance's ID if not using cloud-tools</span>
999
+ <span class="ruby-comment"># and for Xen, public ip = private ip</span>
1000
+ <span class="ruby-identifier">head_node</span> = <span class="ruby-node">&quot;#{node.id}:#{node.id}:#{head_node_jobs}:i-ZFOOBARZ:cloud1&quot;</span>
1001
+ <span class="ruby-identifier">locations</span> = [<span class="ruby-identifier">head_node</span>].<span class="ruby-identifier">flatten</span>.<span class="ruby-identifier">to_s</span>
1002
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">locations</span>
1003
+ <span class="ruby-keyword">end</span></pre>
1004
+ </div><!-- spawn_head_node_via_vmm-source -->
1005
+
1006
+ </div>
1007
+
1008
+
1009
+
1010
+
1011
+ </div><!-- spawn_head_node_via_vmm-method -->
1012
+
1013
+
1014
+ <div id="method-c-spawn_vms" class="method-detail ">
1015
+
1016
+ <div class="method-heading">
1017
+ <span class="method-name">spawn_vms</span><span
1018
+ class="method-args">(num_of_vms_to_spawn, job, image_id, instance_type, keyname, infrastructure, group, verbose)</span>
1019
+ <span class="method-click-advice">click to toggle source</span>
1020
+ </div>
1021
+
1022
+
1023
+ <div class="method-description">
1024
+
1025
+
1026
+
1027
+
1028
+
1029
+ <div class="method-source-code" id="spawn_vms-source">
1030
+ <pre><span class="ruby-comment"># File lib/vm_tools.rb, line 223</span>
1031
+ <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">spawn_vms</span>(<span class="ruby-identifier">num_of_vms_to_spawn</span>, <span class="ruby-identifier">job</span>, <span class="ruby-identifier">image_id</span>, <span class="ruby-identifier">instance_type</span>, <span class="ruby-identifier">keyname</span>,
1032
+ <span class="ruby-identifier">infrastructure</span>, <span class="ruby-identifier">group</span>, <span class="ruby-identifier">verbose</span>)
1033
+ <span class="ruby-comment">#adding check first so that we don't do any of this if the infrastructure setting is wrong</span>
1034
+ <span class="ruby-keyword">if</span> <span class="ruby-operator">!</span><span class="ruby-constant">VALID_CLOUD_TYPES</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">infrastructure</span>)
1035
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">BadConfigurationException</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">&quot;Infrastructure must be &quot;</span> <span class="ruby-operator">+</span>
1036
+ <span class="ruby-node">&quot;iaas, ec2, or euca, but instead was #{infrastructure}&quot;</span>)
1037
+ <span class="ruby-keyword">end</span>
1038
+
1039
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">infrastructure</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;ec2&quot;</span>
1040
+ <span class="ruby-identifier">check_group</span> = <span class="ruby-constant">CommonFunctions</span>.<span class="ruby-identifier">shell</span>(<span class="ruby-node">&quot;#{infrastructure}-describe-group #{group} 2&gt;&amp;1&quot;</span>)
1041
+ <span class="ruby-identifier">make_group</span> = <span class="ruby-identifier">check_group</span>.<span class="ruby-identifier">include?</span> <span class="ruby-string">'InvalidGroup.NotFound'</span>
1042
+ <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">infrastructure</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;euca&quot;</span>
1043
+ <span class="ruby-identifier">check_group</span> = <span class="ruby-constant">CommonFunctions</span>.<span class="ruby-identifier">shell</span>(<span class="ruby-node">&quot;#{infrastructure}-describe-groups #{group} 2&gt;&amp;1&quot;</span>)
1044
+ <span class="ruby-identifier">make_group</span> = <span class="ruby-identifier">check_group</span>.<span class="ruby-identifier">empty?</span>
1045
+ <span class="ruby-keyword">end</span>
1046
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">make_group</span>
1047
+ <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;Creating security group #{group}&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">verbose</span>
1048
+ <span class="ruby-identifier">create_sec_group</span> = <span class="ruby-constant">CommonFunctions</span>.<span class="ruby-identifier">shell</span>(<span class="ruby-node">&quot;#{infrastructure}-add-group #{group} -d #{group} 2&gt;&amp;1&quot;</span>)
1049
+ <span class="ruby-identifier">puts</span> <span class="ruby-identifier">create_sec_group</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">verbose</span>
1050
+ <span class="ruby-keyword">else</span> <span class="ruby-comment"># security group exists</span>
1051
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">InfrastructureException</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">&quot;Security group #{group} exists, &quot;</span> <span class="ruby-operator">+</span>
1052
+ <span class="ruby-node">&quot;delete this group via #{infrastructure}-delete-group #{group}, &quot;</span> <span class="ruby-operator">+</span>
1053
+ <span class="ruby-string">&quot;prior to starting an AppScale cloud&quot;</span>)
1054
+ <span class="ruby-keyword">end</span>
1055
+ <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;Security group #{group} in place&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">verbose</span>
1056
+ <span class="ruby-constant">VMTools</span>.<span class="ruby-identifier">open_ports_in_cloud</span>(<span class="ruby-identifier">infrastructure</span>, <span class="ruby-identifier">group</span>, <span class="ruby-identifier">verbose</span>)
1057
+ <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;Ports set for security group #{group}&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">verbose</span>
1058
+
1059
+ <span class="ruby-identifier">describe_instances</span> = <span class="ruby-constant">CommonFunctions</span>.<span class="ruby-identifier">shell</span>(<span class="ruby-node">&quot;#{infrastructure}-describe-instances 2&gt;&amp;1&quot;</span>)
1060
+ <span class="ruby-identifier">puts</span> <span class="ruby-identifier">describe_instances</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">verbose</span>
1061
+ <span class="ruby-identifier">all_ip_addrs</span> = <span class="ruby-identifier">describe_instances</span>.<span class="ruby-identifier">scan</span>(<span class="ruby-node">%r\s+(#{IP_OR_FQDN})\s+(#{IP_OR_FQDN})\s+running\s+#{keyname}\s/</span>).<span class="ruby-identifier">flatten</span>
1062
+ <span class="ruby-identifier">ips_up_already</span> = <span class="ruby-constant">VMTools</span>.<span class="ruby-identifier">get_public_ips</span>(<span class="ruby-identifier">all_ip_addrs</span>, <span class="ruby-identifier">verbose</span>)
1063
+ <span class="ruby-identifier">vms_up_already</span> = <span class="ruby-identifier">ips_up_already</span>.<span class="ruby-identifier">length</span>
1064
+
1065
+ <span class="ruby-identifier">command_to_run</span> = <span class="ruby-node">&quot;#{infrastructure}-run-instances -k #{keyname} -n #{num_of_vms_to_spawn} --instance-type #{instance_type} --group #{group} #{image_id}&quot;</span>
1066
+
1067
+ <span class="ruby-identifier">puts</span> <span class="ruby-identifier">command_to_run</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">verbose</span>
1068
+ <span class="ruby-identifier">run_instances</span> = <span class="ruby-string">&quot;&quot;</span>
1069
+ <span class="ruby-identifier">loop</span> {
1070
+ <span class="ruby-identifier">run_instances</span> = <span class="ruby-constant">CommonFunctions</span>.<span class="ruby-identifier">shell</span>(<span class="ruby-node">&quot;#{command_to_run} 2&gt;&amp;1&quot;</span>)
1071
+ <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;run_instances: [#{run_instances}]&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">verbose</span>
1072
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">run_instances</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">%rPlease try again later./</span>
1073
+ <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;Error with run_instances: #{run_instances}. Will try again in a moment.&quot;</span>
1074
+ <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">run_instances</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">%rtry --addressing private/</span>
1075
+ <span class="ruby-identifier">puts</span> <span class="ruby-string">&quot;Need to retry with addressing private. Will try again in a moment.&quot;</span>
1076
+ <span class="ruby-identifier">command_to_run</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot; --addressing private&quot;</span>
1077
+ <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">run_instances</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">%rPROBLEM/</span>
1078
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">InfrastructureException</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">&quot;Saw the following error message &quot;</span> <span class="ruby-operator">+</span>
1079
+ <span class="ruby-string">&quot;from iaas tools. Please resolve the issue and try again:\n&quot;</span> <span class="ruby-operator">+</span>
1080
+ <span class="ruby-node">&quot;#{run_instances}&quot;</span>)
1081
+ <span class="ruby-keyword">else</span>
1082
+ <span class="ruby-identifier">puts</span> <span class="ruby-string">&quot;Run instances message sent successfully. Waiting for the image to start up.&quot;</span>
1083
+ <span class="ruby-keyword">break</span>
1084
+ <span class="ruby-keyword">end</span>
1085
+ }
1086
+
1087
+ <span class="ruby-identifier">instance_ids</span> = <span class="ruby-identifier">run_instances</span>.<span class="ruby-identifier">scan</span>(<span class="ruby-node">%rINSTANCE\s+(i-\w+)\s+[\w\-\s\.]+#{keyname}\s/</span>).<span class="ruby-identifier">flatten</span>
1088
+
1089
+ <span class="ruby-identifier">end_time</span> = <span class="ruby-constant">Time</span>.<span class="ruby-identifier">now</span> <span class="ruby-operator">+</span> <span class="ruby-constant">MAX_VM_CREATION_TIME</span>
1090
+ <span class="ruby-keyword">while</span> (<span class="ruby-identifier">now</span> = <span class="ruby-constant">Time</span>.<span class="ruby-identifier">now</span>) <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">end_time</span>
1091
+ <span class="ruby-identifier">describe_instances</span> = <span class="ruby-constant">CommonFunctions</span>.<span class="ruby-identifier">shell</span>(<span class="ruby-node">&quot;#{infrastructure}-describe-instances 2&gt;&amp;1&quot;</span>)
1092
+ <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;[#{Time.now}] #{end_time - now} seconds left until timeout...&quot;</span>
1093
+ <span class="ruby-identifier">puts</span> <span class="ruby-identifier">describe_instances</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">verbose</span>
1094
+
1095
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">describe_instances</span> <span class="ruby-operator">=~</span> <span class="ruby-node">%rterminated\s#{keyname}\s/</span>
1096
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">InfrastructureException</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">&quot;An instance was unexpectedly &quot;</span> <span class="ruby-operator">+</span>
1097
+ <span class="ruby-string">&quot;terminated. Please contact your cloud administrator to determine &quot;</span> <span class="ruby-operator">+</span>
1098
+ <span class="ruby-node">&quot;why and try again. \n#{describe_instances}&quot;</span>)
1099
+ <span class="ruby-keyword">end</span>
1100
+
1101
+ <span class="ruby-identifier">all_ip_addrs</span> = <span class="ruby-identifier">describe_instances</span>.<span class="ruby-identifier">scan</span>(<span class="ruby-node">%r\s+(#{IP_OR_FQDN})\s+(#{IP_OR_FQDN})\s+running\s+#{keyname}\s/</span>).<span class="ruby-identifier">flatten</span>
1102
+ <span class="ruby-identifier">instance_ids</span> = <span class="ruby-identifier">describe_instances</span>.<span class="ruby-identifier">scan</span>(<span class="ruby-node">%rINSTANCE\s+(i-\w+)\s+[\w\-\s\.]+#{keyname}\s/</span>).<span class="ruby-identifier">flatten</span>
1103
+ <span class="ruby-identifier">public_ips</span>, <span class="ruby-identifier">private_ips</span> = <span class="ruby-constant">VMTools</span>.<span class="ruby-identifier">get_ips</span>(<span class="ruby-identifier">all_ip_addrs</span>, <span class="ruby-identifier">verbose</span>)
1104
+ <span class="ruby-keyword">break</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">public_ips</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">num_of_vms_to_spawn</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">vms_up_already</span>
1105
+ <span class="ruby-identifier">sleep</span>(<span class="ruby-constant">SLEEP_TIME</span>)
1106
+ <span class="ruby-keyword">end</span>
1107
+
1108
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">public_ips</span>.<span class="ruby-identifier">length</span>.<span class="ruby-identifier">zero?</span>
1109
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">InfrastructureException</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">&quot;No public IPs were able to be &quot;</span> <span class="ruby-operator">+</span>
1110
+ <span class="ruby-string">&quot;procured within the time limit.&quot;</span>)
1111
+ <span class="ruby-keyword">end</span>
1112
+
1113
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">public_ips</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">instance_ids</span>.<span class="ruby-identifier">length</span>
1114
+ <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;Public IPs: #{public_ips.join(', ')}, Instance ids: #{instance_ids.join(', ')}&quot;</span>
1115
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">InfrastructureException</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">&quot;Public IPs size didn't match &quot;</span> <span class="ruby-operator">+</span>
1116
+ <span class="ruby-string">&quot;instance names size&quot;</span>)
1117
+ <span class="ruby-keyword">end</span>
1118
+
1119
+ <span class="ruby-identifier">instances_created</span> = []
1120
+ <span class="ruby-identifier">public_ips</span>.<span class="ruby-identifier">each_index</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">index</span><span class="ruby-operator">|</span>
1121
+ <span class="ruby-identifier">instances_created</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;#{public_ips[index]}:#{private_ips[index]}:#{job}:#{instance_ids[index]}:cloud1&quot;</span>
1122
+ }
1123
+
1124
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">instances_created</span>
1125
+ <span class="ruby-keyword">end</span></pre>
1126
+ </div><!-- spawn_vms-source -->
1127
+
1128
+ </div>
1129
+
1130
+
1131
+
1132
+
1133
+ </div><!-- spawn_vms-method -->
1134
+
1135
+
1136
+ <div id="method-c-terminate_all_vms" class="method-detail ">
1137
+
1138
+ <div class="method-heading">
1139
+ <span class="method-name">terminate_all_vms</span><span
1140
+ class="method-args">(keyname, infrastructure)</span>
1141
+ <span class="method-click-advice">click to toggle source</span>
1142
+ </div>
1143
+
1144
+
1145
+ <div class="method-description">
1146
+
1147
+
1148
+
1149
+
1150
+
1151
+ <div class="method-source-code" id="terminate_all_vms-source">
1152
+ <pre><span class="ruby-comment"># File lib/vm_tools.rb, line 319</span>
1153
+ <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">terminate_all_vms</span>(<span class="ruby-identifier">keyname</span>, <span class="ruby-identifier">infrastructure</span>)
1154
+ <span class="ruby-identifier">desc_instances</span> = <span class="ruby-constant">CommonFunctions</span>.<span class="ruby-identifier">shell</span>(<span class="ruby-node">&quot;#{infrastructure}-describe-instances 2&gt;&amp;1&quot;</span>)
1155
+ <span class="ruby-identifier">instances</span> = <span class="ruby-identifier">desc_instances</span>.<span class="ruby-identifier">scan</span>(<span class="ruby-node">%rINSTANCE\s+(i-\w+)\s+[\w\-\s\.]+#{keyname}\s/</span>).<span class="ruby-identifier">flatten</span>
1156
+ <span class="ruby-keyword">return</span> <span class="ruby-value">0</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">instances</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
1157
+ <span class="ruby-identifier">puts</span> <span class="ruby-constant">CommonFunctions</span>.<span class="ruby-identifier">shell</span>(<span class="ruby-node">&quot;#{infrastructure}-terminate-instances #{instances.join(' ')} 2&gt;&amp;1&quot;</span>)
1158
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">instances</span>.<span class="ruby-identifier">length</span>
1159
+ <span class="ruby-keyword">end</span></pre>
1160
+ </div><!-- terminate_all_vms-source -->
1161
+
1162
+ </div>
1163
+
1164
+
1165
+
1166
+
1167
+ </div><!-- terminate_all_vms-method -->
1168
+
1169
+
1170
+ <div id="method-c-terminate_infrastructure_machines" class="method-detail ">
1171
+
1172
+ <div class="method-heading">
1173
+ <span class="method-name">terminate_infrastructure_machines</span><span
1174
+ class="method-args">(infrastructure, keyname)</span>
1175
+ <span class="method-click-advice">click to toggle source</span>
1176
+ </div>
1177
+
1178
+
1179
+ <div class="method-description">
1180
+
1181
+
1182
+
1183
+
1184
+
1185
+ <div class="method-source-code" id="terminate_infrastructure_machines-source">
1186
+ <pre><span class="ruby-comment"># File lib/vm_tools.rb, line 521</span>
1187
+ <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">terminate_infrastructure_machines</span>(<span class="ruby-identifier">infrastructure</span>, <span class="ruby-identifier">keyname</span>)
1188
+ <span class="ruby-comment"># TODO: if we know all the other ips in the system, contact one</span>
1189
+ <span class="ruby-comment"># of them instead</span>
1190
+
1191
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">keyname</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;appscale&quot;</span> <span class="ruby-comment"># appscale keyname messes up the next command</span>
1192
+ <span class="ruby-identifier">abort</span>(<span class="ruby-string">&quot;Error seen trying to terminate your machines - please do so manually.&quot;</span>)
1193
+ <span class="ruby-keyword">end</span>
1194
+
1195
+ <span class="ruby-comment"># for now, just kill them the hard way</span>
1196
+ <span class="ruby-identifier">desc</span> = <span class="ruby-node">&quot;#{infrastructure}-describe-instances&quot;</span>
1197
+ <span class="ruby-identifier">term</span> = <span class="ruby-node">&quot;#{infrastructure}-terminate-instances&quot;</span>
1198
+ <span class="ruby-identifier">cmd</span> = <span class="ruby-node">&quot;#{desc} | grep #{keyname} | awk '{print $2}' | xargs #{term}&quot;</span>
1199
+ <span class="ruby-identifier">puts</span> <span class="ruby-string">&quot;Unable to contact shadow node, shutting down via tools...&quot;</span>
1200
+ <span class="ruby-identifier">puts</span> <span class="ruby-node">%x#{cmd}`</span>
1201
+ <span class="ruby-identifier">cmd</span> = <span class="ruby-node">&quot;#{infrastructure}-delete-group appscale&quot;</span>
1202
+ <span class="ruby-identifier">puts</span> <span class="ruby-node">%x#{cmd}`</span>
1203
+ <span class="ruby-keyword">end</span></pre>
1204
+ </div><!-- terminate_infrastructure_machines-source -->
1205
+
1206
+ </div>
1207
+
1208
+
1209
+
1210
+
1211
+ </div><!-- terminate_infrastructure_machines-method -->
1212
+
1213
+
1214
+ <div id="method-c-verify_credentials_are_set_correctly" class="method-detail ">
1215
+
1216
+ <div class="method-heading">
1217
+ <span class="method-name">verify_credentials_are_set_correctly</span><span
1218
+ class="method-args">(infrastructure)</span>
1219
+ <span class="method-click-advice">click to toggle source</span>
1220
+ </div>
1221
+
1222
+
1223
+ <div class="method-description">
1224
+
1225
+
1226
+
1227
+
1228
+
1229
+ <div class="method-source-code" id="verify_credentials_are_set_correctly-source">
1230
+ <pre><span class="ruby-comment"># File lib/vm_tools.rb, line 484</span>
1231
+ <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">verify_credentials_are_set_correctly</span>(<span class="ruby-identifier">infrastructure</span>)
1232
+ <span class="ruby-comment"># In non-hybrid cloud environments, the user has to provide us with their</span>
1233
+ <span class="ruby-comment"># EC2 credentials. If they didn't, let them know and abort.</span>
1234
+ <span class="ruby-constant">EC2_ENVIRONMENT_VARIABLES</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">var</span><span class="ruby-operator">|</span>
1235
+ <span class="ruby-keyword">if</span> <span class="ruby-constant">ENV</span>[<span class="ruby-identifier">var</span>].<span class="ruby-identifier">nil?</span>
1236
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">BadConfigurationException</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">&quot;The required &quot;</span> <span class="ruby-operator">+</span>
1237
+ <span class="ruby-node">&quot;environment variable #{var} was not set. Please set it and try &quot;</span> <span class="ruby-operator">+</span>
1238
+ <span class="ruby-string">&quot;again.&quot;</span>)
1239
+ <span class="ruby-keyword">end</span>
1240
+ }
1241
+
1242
+ <span class="ruby-constant">VMTools</span>.<span class="ruby-identifier">verify_credentials_exist</span>()
1243
+
1244
+ <span class="ruby-comment"># The euca2ools default to using localhost as the EC2_URL and S3_URL if</span>
1245
+ <span class="ruby-comment"># it's not set, so make sure the user has explicitly set it.</span>
1246
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">infrastructure</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;euca&quot;</span>
1247
+ [<span class="ruby-string">'EC2_URL'</span>, <span class="ruby-string">'S3_URL'</span>].<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">var</span><span class="ruby-operator">|</span>
1248
+ <span class="ruby-keyword">if</span> <span class="ruby-constant">ENV</span>[<span class="ruby-identifier">var</span>].<span class="ruby-identifier">nil?</span>
1249
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">BadConfigurationException</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">&quot;When running over &quot;</span> <span class="ruby-operator">+</span>
1250
+ <span class="ruby-node">&quot;Eucalyptus, the environment variable #{var} must be set.&quot;</span>)
1251
+ <span class="ruby-keyword">end</span>
1252
+ }
1253
+ <span class="ruby-keyword">end</span>
1254
+ <span class="ruby-keyword">end</span></pre>
1255
+ </div><!-- verify_credentials_are_set_correctly-source -->
1256
+
1257
+ </div>
1258
+
1259
+
1260
+
1261
+
1262
+ </div><!-- verify_credentials_are_set_correctly-method -->
1263
+
1264
+
1265
+ <div id="method-c-verify_credentials_exist" class="method-detail ">
1266
+
1267
+ <div class="method-heading">
1268
+ <span class="method-name">verify_credentials_exist</span><span
1269
+ class="method-args">()</span>
1270
+ <span class="method-click-advice">click to toggle source</span>
1271
+ </div>
1272
+
1273
+
1274
+ <div class="method-description">
1275
+
1276
+ <p>Validates that the private key and certificate for use with EC2 or
1277
+ Eucalyptus both refer to files that exist, aborting if either do not exist.</p>
1278
+
1279
+
1280
+
1281
+ <div class="method-source-code" id="verify_credentials_exist-source">
1282
+ <pre><span class="ruby-comment"># File lib/vm_tools.rb, line 511</span>
1283
+ <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">verify_credentials_exist</span>()
1284
+ [<span class="ruby-string">&quot;EC2_PRIVATE_KEY&quot;</span>, <span class="ruby-string">&quot;EC2_CERT&quot;</span>].<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">var</span><span class="ruby-operator">|</span>
1285
+ <span class="ruby-identifier">file_path</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>(<span class="ruby-constant">ENV</span>[<span class="ruby-identifier">var</span>])
1286
+ <span class="ruby-keyword">if</span> <span class="ruby-operator">!</span><span class="ruby-constant">File</span>.<span class="ruby-identifier">exists?</span>(<span class="ruby-identifier">file_path</span>)
1287
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">BadConfigurationException</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">&quot;The environment variable&quot;</span> <span class="ruby-operator">+</span>
1288
+ <span class="ruby-node">&quot; #{var} pointed to the file #{file_path}, which didn't exist.&quot;</span>)
1289
+ <span class="ruby-keyword">end</span>
1290
+ }
1291
+ <span class="ruby-keyword">end</span></pre>
1292
+ </div><!-- verify_credentials_exist-source -->
1293
+
1294
+ </div>
1295
+
1296
+
1297
+
1298
+
1299
+ </div><!-- verify_credentials_exist-method -->
1300
+
1301
+
1302
+ <div id="method-c-verify_ids" class="method-detail ">
1303
+
1304
+ <div class="method-heading">
1305
+ <span class="method-name">verify_ids</span><span
1306
+ class="method-args">(disk, infrastructure)</span>
1307
+ <span class="method-click-advice">click to toggle source</span>
1308
+ </div>
1309
+
1310
+
1311
+ <div class="method-description">
1312
+
1313
+
1314
+
1315
+
1316
+
1317
+ <div class="method-source-code" id="verify_ids-source">
1318
+ <pre><span class="ruby-comment"># File lib/vm_tools.rb, line 134</span>
1319
+ <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">verify_ids</span>(<span class="ruby-identifier">disk</span>, <span class="ruby-identifier">infrastructure</span>)
1320
+ <span class="ruby-identifier">ec2_images</span> = <span class="ruby-constant">CommonFunctions</span>.<span class="ruby-identifier">shell</span>(<span class="ruby-node">&quot;#{infrastructure}-describe-images 2&gt;&amp;1&quot;</span>)
1321
+
1322
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">disk</span> <span class="ruby-operator">!~</span> <span class="ruby-regexp">%r[a|e]mi/</span>
1323
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">InfrastructureException</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">&quot;The disk image you specified was &quot;</span> <span class="ruby-operator">+</span>
1324
+ <span class="ruby-string">&quot;not in the proper format. Please correct this and try again.&quot;</span>)
1325
+ <span class="ruby-keyword">end</span>
1326
+
1327
+ <span class="ruby-comment"># if the tools are not configured properly an error message will show up</span>
1328
+ <span class="ruby-comment"># be sure to catch it and die if so</span>
1329
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">ec2_images</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">%r\AServer:/</span>
1330
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">InfrastructureException</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">&quot;Problem with &quot;</span> <span class="ruby-operator">+</span>
1331
+ <span class="ruby-node">&quot;#{infrastructure}-tools: &quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">ec2_images</span>)
1332
+ <span class="ruby-keyword">end</span>
1333
+
1334
+ <span class="ruby-identifier">id</span> = <span class="ruby-string">&quot;disk&quot;</span>
1335
+ <span class="ruby-identifier">id_value</span> = <span class="ruby-identifier">eval</span>(<span class="ruby-identifier">id</span>)
1336
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">ec2_images</span> <span class="ruby-operator">!~</span> <span class="ruby-node">%rIMAGE\t#{id_value}/</span>
1337
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">InfrastructureException</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">&quot;The #{id} image you specified, &quot;</span> <span class="ruby-operator">+</span>
1338
+ <span class="ruby-node">&quot;#{id_value}, was not found when querying &quot;</span> <span class="ruby-operator">+</span>
1339
+ <span class="ruby-node">&quot;#{infrastructure}-describe-images. Please specify a #{id} image in &quot;</span> <span class="ruby-operator">+</span>
1340
+ <span class="ruby-string">&quot;the database and try again.&quot;</span>)
1341
+ <span class="ruby-keyword">end</span>
1342
+ <span class="ruby-keyword">end</span></pre>
1343
+ </div><!-- verify_ids-source -->
1344
+
1345
+ </div>
1346
+
1347
+
1348
+
1349
+
1350
+ </div><!-- verify_ids-method -->
1351
+
1352
+
1353
+ </section><!-- public-class-method-details -->
1354
+
1355
+ </section><!-- 5Buntitled-5D -->
1356
+
1357
+ </div><!-- documentation -->
1358
+
1359
+
1360
+ <footer id="validator-badges">
1361
+ <p><a href="http://validator.w3.org/check/referer">[Validate]</a>
1362
+ <p>Generated by <a href="https://github.com/rdoc/rdoc">RDoc</a> 3.12.
1363
+ <p>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish Rdoc Generator</a> 3.
1364
+ </footer>
1365
+