appscale-tools 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +37 -0
- data/README +17 -0
- data/bin/appscale-add-keypair +15 -0
- data/bin/appscale-describe-instances +16 -0
- data/bin/appscale-remove-app +13 -0
- data/bin/appscale-reset-pwd +13 -0
- data/bin/appscale-run-instances +15 -0
- data/bin/appscale-terminate-instances +14 -0
- data/bin/appscale-upload-app +13 -0
- data/doc/AdvancedNode.html +163 -0
- data/doc/AppControllerClient.html +831 -0
- data/doc/AppEngineConfigException.html +165 -0
- data/doc/AppScaleException.html +165 -0
- data/doc/AppScaleTools.html +768 -0
- data/doc/BadCommandLineArgException.html +166 -0
- data/doc/BadConfigurationException.html +166 -0
- data/doc/CommonFunctions.html +2559 -0
- data/doc/EncryptionHelper.html +332 -0
- data/doc/GodInterface.html +443 -0
- data/doc/InfrastructureException.html +166 -0
- data/doc/Node.html +470 -0
- data/doc/NodeLayout.html +1297 -0
- data/doc/Object.html +539 -0
- data/doc/ParseArgs.html +268 -0
- data/doc/RemoteLogging.html +268 -0
- data/doc/SimpleNode.html +163 -0
- data/doc/UsageText.html +1204 -0
- data/doc/UserAppClient.html +993 -0
- data/doc/VMTools.html +1365 -0
- data/doc/bin/appscale-add-keypair.html +56 -0
- data/doc/bin/appscale-describe-instances.html +56 -0
- data/doc/bin/appscale-remove-app.html +56 -0
- data/doc/bin/appscale-reset-pwd.html +56 -0
- data/doc/bin/appscale-run-instances.html +56 -0
- data/doc/bin/appscale-terminate-instances.html +56 -0
- data/doc/bin/appscale-upload-app.html +56 -0
- data/doc/created.rid +21 -0
- data/doc/images/add.png +0 -0
- data/doc/images/brick.png +0 -0
- data/doc/images/brick_link.png +0 -0
- data/doc/images/bug.png +0 -0
- data/doc/images/bullet_black.png +0 -0
- data/doc/images/bullet_toggle_minus.png +0 -0
- data/doc/images/bullet_toggle_plus.png +0 -0
- data/doc/images/date.png +0 -0
- data/doc/images/delete.png +0 -0
- data/doc/images/find.png +0 -0
- data/doc/images/loadingAnimation.gif +0 -0
- data/doc/images/macFFBgHack.png +0 -0
- data/doc/images/package.png +0 -0
- data/doc/images/page_green.png +0 -0
- data/doc/images/page_white_text.png +0 -0
- data/doc/images/page_white_width.png +0 -0
- data/doc/images/plugin.png +0 -0
- data/doc/images/ruby.png +0 -0
- data/doc/images/tag_blue.png +0 -0
- data/doc/images/tag_green.png +0 -0
- data/doc/images/transparent.png +0 -0
- data/doc/images/wrench.png +0 -0
- data/doc/images/wrench_orange.png +0 -0
- data/doc/images/zoom.png +0 -0
- data/doc/index.html +116 -0
- data/doc/js/darkfish.js +153 -0
- data/doc/js/jquery.js +18 -0
- data/doc/js/navigation.js +142 -0
- data/doc/js/quicksearch.js +114 -0
- data/doc/js/search.js +94 -0
- data/doc/js/search_index.js +1 -0
- data/doc/js/searcher.js +228 -0
- data/doc/js/thickbox-compressed.js +10 -0
- data/doc/lib/app_controller_client_rb.html +60 -0
- data/doc/lib/appscale_tools_rb.html +88 -0
- data/doc/lib/common_functions_rb.html +78 -0
- data/doc/lib/custom_exceptions_rb.html +54 -0
- data/doc/lib/encryption_helper_rb.html +60 -0
- data/doc/lib/godinterface_rb.html +52 -0
- data/doc/lib/node_layout_rb.html +55 -0
- data/doc/lib/parse_args_rb.html +58 -0
- data/doc/lib/remote_log_rb.html +58 -0
- data/doc/lib/sshcopyid.html +174 -0
- data/doc/lib/usage_text_rb.html +58 -0
- data/doc/lib/user_app_client_rb.html +62 -0
- data/doc/lib/vm_tools_rb.html +62 -0
- data/doc/table_of_contents.html +496 -0
- data/lib/app_controller_client.rb +181 -0
- data/lib/appscale_tools.rb +403 -0
- data/lib/common_functions.rb +1467 -0
- data/lib/custom_exceptions.rb +25 -0
- data/lib/encryption_helper.rb +86 -0
- data/lib/godinterface.rb +152 -0
- data/lib/node_layout.rb +665 -0
- data/lib/parse_args.rb +415 -0
- data/lib/remote_log.rb +46 -0
- data/lib/sshcopyid +65 -0
- data/lib/usage_text.rb +144 -0
- data/lib/user_app_client.rb +245 -0
- data/lib/vm_tools.rb +549 -0
- data/test/tc_app_controller_client.rb +10 -0
- data/test/tc_appscale_add_keypair.rb +44 -0
- data/test/tc_appscale_describe_instances.rb +69 -0
- data/test/tc_appscale_remove_app.rb +128 -0
- data/test/tc_appscale_reset_pwd.rb +156 -0
- data/test/tc_appscale_run_instances.rb +48 -0
- data/test/tc_appscale_terminate_instances.rb +104 -0
- data/test/tc_appscale_upload_app.rb +166 -0
- data/test/tc_common_functions.rb +56 -0
- data/test/tc_encryption_helper.rb +10 -0
- data/test/tc_god_interface.rb +10 -0
- data/test/tc_node_layout.rb +93 -0
- data/test/tc_parse_args.rb +160 -0
- data/test/tc_user_app_client.rb +10 -0
- data/test/tc_vm_tools.rb +10 -0
- data/test/ts_all.rb +20 -0
- 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">"#{infrastructure}-describe-instances 2>&1"</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">"The keyname you chose is "</span> <span class="ruby-operator">+</span>
|
|
230
|
+
<span class="ruby-string">"already in use. Please choose another keyname and try again."</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">"warn: this doesn't work on ec2 - euca only"</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">"#{infrastructure}-describe-availability-zones verbose 2>&1"</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">"There was a problem seeing how many "</span> <span class="ruby-operator">+</span>
|
|
267
|
+
<span class="ruby-node">"virtual machines were available. We saw [#{availability_zones}]."</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"><</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">"Not enough VMs were free of the "</span> <span class="ruby-operator">+</span>
|
|
273
|
+
<span class="ruby-node">"type #{instance_type}. Needed #{min_vms_needed} but only #{free_vms}"</span> <span class="ruby-operator">+</span>
|
|
274
|
+
<span class="ruby-string">" were available."</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">"-add-group"</span>, <span class="ruby-string">"-authorize"</span>, <span class="ruby-string">"-describe-instances"</span>, <span class="ruby-string">"-run-instances"</span>, <span class="ruby-string">"-terminate-instances"</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">"#{infrastructure}#{cmd}"</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">"You do not appear to "</span> <span class="ruby-operator">+</span>
|
|
310
|
+
<span class="ruby-node">"have the command '#{full_cmd}'. Please put it in your PATH and "</span> <span class="ruby-operator">+</span>
|
|
311
|
+
<span class="ruby-string">"try again."</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">"machine"</span> =<span class="ruby-operator">></span> <span class="ruby-node">"#{val_hash['machine']}"</span>,
|
|
345
|
+
<span class="ruby-string">"instance_type"</span> =<span class="ruby-operator">></span> <span class="ruby-node">"#{val_hash['instance_type']}"</span>,
|
|
346
|
+
<span class="ruby-string">"infrastructure"</span> =<span class="ruby-operator">></span> <span class="ruby-node">"#{val_hash['infrastructure']}"</span>,
|
|
347
|
+
<span class="ruby-string">"min_images"</span> =<span class="ruby-operator">></span> <span class="ruby-node">"#{node_layout.min_images}"</span>,
|
|
348
|
+
<span class="ruby-string">"max_images"</span> =<span class="ruby-operator">></span> <span class="ruby-node">"#{node_layout.max_images}"</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">"ec2_url"</span> =<span class="ruby-operator">></span> <span class="ruby-string">"https://us-east-1.ec2.amazonaws.com"</span>}
|
|
383
|
+
<span class="ruby-identifier">required</span> = [<span class="ruby-string">"ec2_access_key"</span>, <span class="ruby-string">"ec2_secret_key"</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">"The required "</span> <span class="ruby-operator">+</span>
|
|
394
|
+
<span class="ruby-node">"environment variable #{var.upcase} was not set. Please set it "</span> <span class="ruby-operator">+</span>
|
|
395
|
+
<span class="ruby-string">"and try running AppScale again."</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">"infrastructure"</span> =<span class="ruby-operator">></span> <span class="ruby-string">"hybrid"</span>,
|
|
431
|
+
<span class="ruby-string">"min_images"</span> =<span class="ruby-operator">></span> <span class="ruby-node">"#{node_layout.min_images}"</span>,
|
|
432
|
+
<span class="ruby-string">"max_images"</span> =<span class="ruby-operator">></span> <span class="ruby-node">"#{node_layout.max_images}"</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">"CLOUD#{cloud_num}_TYPE"</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">"euca"</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">"ec2"</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">"Incorrect cloud type of #{cloud_type}"</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">"CLOUD#{cloud_num}_#{cred}"</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">"The required "</span> <span class="ruby-operator">+</span>
|
|
497
|
+
<span class="ruby-node">"environment variable #{key} was not set. Please set it and "</span> <span class="ruby-operator">+</span>
|
|
498
|
+
<span class="ruby-string">"try again."</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">"Setting #{cred} to #{val}"</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">"euca"</span>
|
|
540
|
+
<span class="ruby-identifier">key</span> = <span class="ruby-node">"CLOUD#{cloud_num}_EMI"</span>
|
|
541
|
+
<span class="ruby-keyword">elsif</span> <span class="ruby-identifier">infra</span> <span class="ruby-operator">==</span> <span class="ruby-string">"ec2"</span>
|
|
542
|
+
<span class="ruby-identifier">key</span> = <span class="ruby-node">"CLOUD#{cloud_num}_AMI"</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">"infrastructure #{infra} "</span> <span class="ruby-operator">+</span>
|
|
545
|
+
<span class="ruby-string">"is not a supported value."</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">"haven't done head node, separate yet"</span>)
|
|
581
|
+
<span class="ruby-keyword">else</span>
|
|
582
|
+
<span class="ruby-identifier">layout</span> = <span class="ruby-string">"shadow:load_balancer:db_master"</span>
|
|
583
|
+
<span class="ruby-identifier">layout</span> <span class="ruby-operator"><<</span> <span class="ruby-string">":appengine"</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">"haven't done slave nodes, separate yet"</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">"ips not even length array"</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"><<</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"><<</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">"Reported Public IPs: [#{reported_public.join(', ')}]"</span>
|
|
634
|
+
<span class="ruby-identifier">puts</span> <span class="ruby-node">"Reported Private IPs: [#{reported_private.join(', ')}]"</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">"0.0.0.0"</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">pri</span> <span class="ruby-operator">!=</span> <span class="ruby-string">"0.0.0.0"</span>
|
|
644
|
+
<span class="ruby-identifier">actual_public</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">pub</span>
|
|
645
|
+
<span class="ruby-identifier">actual_private</span> <span class="ruby-operator"><<</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">"ips not even length array"</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"><<</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"><<</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">"Reported Public IPs: [#{reported_public.join(', ')}]"</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">verbose</span>
|
|
694
|
+
<span class="ruby-identifier">puts</span> <span class="ruby-node">"Reported Private IPs: [#{reported_private.join(', ')}]"</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">"0.0.0.0"</span>
|
|
699
|
+
<span class="ruby-identifier">public_ips</span> <span class="ruby-operator"><<</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">"0.0.0.0"</span>
|
|
701
|
+
<span class="ruby-identifier">public_ips</span> <span class="ruby-operator"><<</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">"Generating certificate and private key"</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">"~/.appscale/#{val_hash['keyname']}-key.pem"</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">"~/.appscale/#{val_hash['keyname']}-cert.pem"</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">"64.233.187.99"</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">"_TYPE"</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">"The environment variable "</span> <span class="ruby-operator">+</span>
|
|
807
|
+
<span class="ruby-node">"#{cloud_type_var} was not set. Please set it and try again."</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">"#{infrastructure}-authorize #{group} -p 1-65535 -s 0.0.0.0/0 -P udp 2>&1"</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">"#{infrastructure}-authorize #{group} -p 1-65535 -s 0.0.0.0/0 -P tcp 2>&1"</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">"#{infrastructure}-authorize #{group} -s 0.0.0.0/0 -P icmp -t -1:-1 2>&1"</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">":"</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">"Please wait for your instance to complete the bootup process."</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">":"</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">"-o StrictHostkeyChecking=no -o NumberOfPasswordPrompts=0"</span>
|
|
958
|
+
<span class="ruby-identifier">enable_root_login</span> = <span class="ruby-string">"sudo cp /home/ubuntu/.ssh/authorized_keys /root/.ssh/"</span>
|
|
959
|
+
<span class="ruby-node">%xssh -i #{ssh_keys.join(" -i ")} #{options} 2>&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">"/root/.ssh/id_dsa"</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">"/root/.ssh/id_rsa"</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">"scp -i #{ssh_keys.join(" -i ")} -o StrictHostkeyChecking=no 2>&1 root@#{head_node_ip}:/root/.ssh/authorized_keys /tmp/remote_keys"</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">"/tmp/remote_keys"</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">"/tmp/id_rsa.pub"</span>, <span class="ruby-string">"w+"</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">"/tmp/id_rsa.pub"</span>, <span class="ruby-string">"/root/.ssh/id_rsa.pub"</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">"#{node.id}:#{node.id}:#{head_node_jobs}:i-ZFOOBARZ:cloud1"</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">"Infrastructure must be "</span> <span class="ruby-operator">+</span>
|
|
1036
|
+
<span class="ruby-node">"iaas, ec2, or euca, but instead was #{infrastructure}"</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">"ec2"</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">"#{infrastructure}-describe-group #{group} 2>&1"</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">"euca"</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">"#{infrastructure}-describe-groups #{group} 2>&1"</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">"Creating security group #{group}"</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">"#{infrastructure}-add-group #{group} -d #{group} 2>&1"</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">"Security group #{group} exists, "</span> <span class="ruby-operator">+</span>
|
|
1052
|
+
<span class="ruby-node">"delete this group via #{infrastructure}-delete-group #{group}, "</span> <span class="ruby-operator">+</span>
|
|
1053
|
+
<span class="ruby-string">"prior to starting an AppScale cloud"</span>)
|
|
1054
|
+
<span class="ruby-keyword">end</span>
|
|
1055
|
+
<span class="ruby-identifier">puts</span> <span class="ruby-node">"Security group #{group} in place"</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">"Ports set for security group #{group}"</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">"#{infrastructure}-describe-instances 2>&1"</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">"#{infrastructure}-run-instances -k #{keyname} -n #{num_of_vms_to_spawn} --instance-type #{instance_type} --group #{group} #{image_id}"</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">""</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">"#{command_to_run} 2>&1"</span>)
|
|
1071
|
+
<span class="ruby-identifier">puts</span> <span class="ruby-node">"run_instances: [#{run_instances}]"</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">"Error with run_instances: #{run_instances}. Will try again in a moment."</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">"Need to retry with addressing private. Will try again in a moment."</span>
|
|
1076
|
+
<span class="ruby-identifier">command_to_run</span> <span class="ruby-operator"><<</span> <span class="ruby-string">" --addressing private"</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">"Saw the following error message "</span> <span class="ruby-operator">+</span>
|
|
1079
|
+
<span class="ruby-string">"from iaas tools. Please resolve the issue and try again:\n"</span> <span class="ruby-operator">+</span>
|
|
1080
|
+
<span class="ruby-node">"#{run_instances}"</span>)
|
|
1081
|
+
<span class="ruby-keyword">else</span>
|
|
1082
|
+
<span class="ruby-identifier">puts</span> <span class="ruby-string">"Run instances message sent successfully. Waiting for the image to start up."</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"><</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">"#{infrastructure}-describe-instances 2>&1"</span>)
|
|
1092
|
+
<span class="ruby-identifier">puts</span> <span class="ruby-node">"[#{Time.now}] #{end_time - now} seconds left until timeout..."</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">"An instance was unexpectedly "</span> <span class="ruby-operator">+</span>
|
|
1097
|
+
<span class="ruby-string">"terminated. Please contact your cloud administrator to determine "</span> <span class="ruby-operator">+</span>
|
|
1098
|
+
<span class="ruby-node">"why and try again. \n#{describe_instances}"</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">"No public IPs were able to be "</span> <span class="ruby-operator">+</span>
|
|
1110
|
+
<span class="ruby-string">"procured within the time limit."</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">"Public IPs: #{public_ips.join(', ')}, Instance ids: #{instance_ids.join(', ')}"</span>
|
|
1115
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-constant">InfrastructureException</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">"Public IPs size didn't match "</span> <span class="ruby-operator">+</span>
|
|
1116
|
+
<span class="ruby-string">"instance names size"</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"><<</span> <span class="ruby-node">"#{public_ips[index]}:#{private_ips[index]}:#{job}:#{instance_ids[index]}:cloud1"</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">"#{infrastructure}-describe-instances 2>&1"</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">"#{infrastructure}-terminate-instances #{instances.join(' ')} 2>&1"</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">"appscale"</span> <span class="ruby-comment"># appscale keyname messes up the next command</span>
|
|
1192
|
+
<span class="ruby-identifier">abort</span>(<span class="ruby-string">"Error seen trying to terminate your machines - please do so manually."</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">"#{infrastructure}-describe-instances"</span>
|
|
1197
|
+
<span class="ruby-identifier">term</span> = <span class="ruby-node">"#{infrastructure}-terminate-instances"</span>
|
|
1198
|
+
<span class="ruby-identifier">cmd</span> = <span class="ruby-node">"#{desc} | grep #{keyname} | awk '{print $2}' | xargs #{term}"</span>
|
|
1199
|
+
<span class="ruby-identifier">puts</span> <span class="ruby-string">"Unable to contact shadow node, shutting down via tools..."</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">"#{infrastructure}-delete-group appscale"</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">"The required "</span> <span class="ruby-operator">+</span>
|
|
1237
|
+
<span class="ruby-node">"environment variable #{var} was not set. Please set it and try "</span> <span class="ruby-operator">+</span>
|
|
1238
|
+
<span class="ruby-string">"again."</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">"euca"</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">"When running over "</span> <span class="ruby-operator">+</span>
|
|
1250
|
+
<span class="ruby-node">"Eucalyptus, the environment variable #{var} must be set."</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">"EC2_PRIVATE_KEY"</span>, <span class="ruby-string">"EC2_CERT"</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">"The environment variable"</span> <span class="ruby-operator">+</span>
|
|
1288
|
+
<span class="ruby-node">" #{var} pointed to the file #{file_path}, which didn't exist."</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">"#{infrastructure}-describe-images 2>&1"</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">"The disk image you specified was "</span> <span class="ruby-operator">+</span>
|
|
1324
|
+
<span class="ruby-string">"not in the proper format. Please correct this and try again."</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">"Problem with "</span> <span class="ruby-operator">+</span>
|
|
1331
|
+
<span class="ruby-node">"#{infrastructure}-tools: "</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">"disk"</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">"The #{id} image you specified, "</span> <span class="ruby-operator">+</span>
|
|
1338
|
+
<span class="ruby-node">"#{id_value}, was not found when querying "</span> <span class="ruby-operator">+</span>
|
|
1339
|
+
<span class="ruby-node">"#{infrastructure}-describe-images. Please specify a #{id} image in "</span> <span class="ruby-operator">+</span>
|
|
1340
|
+
<span class="ruby-string">"the database and try again."</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
|
+
|