cft_smartcloud 0.1.8 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. data/CHANGELOG +0 -1
  2. data/VERSION +1 -1
  3. data/bin/cft_smartcloud +11 -1
  4. data/bin/smartcloud +11 -1
  5. data/cft_smartcloud.gemspec +91 -2
  6. data/lib/cli_tools/README.txt +50 -0
  7. data/lib/cli_tools/ic-add-keypair.cmd +29 -0
  8. data/lib/cli_tools/ic-add-keypair.sh +15 -0
  9. data/lib/cli_tools/ic-allocate-address.cmd +29 -0
  10. data/lib/cli_tools/ic-allocate-address.sh +14 -0
  11. data/lib/cli_tools/ic-attach-volume.cmd +27 -0
  12. data/lib/cli_tools/ic-attach-volume.sh +27 -0
  13. data/lib/cli_tools/ic-clone-image.cmd +27 -0
  14. data/lib/cli_tools/ic-clone-image.sh +14 -0
  15. data/lib/cli_tools/ic-clone-volume.cmd +27 -0
  16. data/lib/cli_tools/ic-clone-volume.sh +60 -0
  17. data/lib/cli_tools/ic-cmd.cmd +41 -0
  18. data/lib/cli_tools/ic-cmd.sh +38 -0
  19. data/lib/cli_tools/ic-create-instance.cmd +27 -0
  20. data/lib/cli_tools/ic-create-instance.sh +14 -0
  21. data/lib/cli_tools/ic-create-password.cmd +27 -0
  22. data/lib/cli_tools/ic-create-password.sh +14 -0
  23. data/lib/cli_tools/ic-create-volume.cmd +27 -0
  24. data/lib/cli_tools/ic-create-volume.sh +14 -0
  25. data/lib/cli_tools/ic-delete-image.cmd +27 -0
  26. data/lib/cli_tools/ic-delete-image.sh +14 -0
  27. data/lib/cli_tools/ic-delete-instance.cmd +27 -0
  28. data/lib/cli_tools/ic-delete-instance.sh +14 -0
  29. data/lib/cli_tools/ic-delete-volume.cmd +27 -0
  30. data/lib/cli_tools/ic-delete-volume.sh +14 -0
  31. data/lib/cli_tools/ic-describe-address-offerings.cmd +27 -0
  32. data/lib/cli_tools/ic-describe-address-offerings.sh +14 -0
  33. data/lib/cli_tools/ic-describe-addresses.cmd +27 -0
  34. data/lib/cli_tools/ic-describe-addresses.sh +14 -0
  35. data/lib/cli_tools/ic-describe-image-agreement.cmd +27 -0
  36. data/lib/cli_tools/ic-describe-image-agreement.sh +14 -0
  37. data/lib/cli_tools/ic-describe-image.cmd +27 -0
  38. data/lib/cli_tools/ic-describe-image.sh +14 -0
  39. data/lib/cli_tools/ic-describe-images.cmd +27 -0
  40. data/lib/cli_tools/ic-describe-images.sh +14 -0
  41. data/lib/cli_tools/ic-describe-instance.cmd +27 -0
  42. data/lib/cli_tools/ic-describe-instance.sh +14 -0
  43. data/lib/cli_tools/ic-describe-instances.cmd +27 -0
  44. data/lib/cli_tools/ic-describe-instances.sh +14 -0
  45. data/lib/cli_tools/ic-describe-keypair.cmd +27 -0
  46. data/lib/cli_tools/ic-describe-keypair.sh +14 -0
  47. data/lib/cli_tools/ic-describe-keypairs.cmd +27 -0
  48. data/lib/cli_tools/ic-describe-keypairs.sh +14 -0
  49. data/lib/cli_tools/ic-describe-location.cmd +14 -0
  50. data/lib/cli_tools/ic-describe-location.sh +14 -0
  51. data/lib/cli_tools/ic-describe-locations.cmd +14 -0
  52. data/lib/cli_tools/ic-describe-locations.sh +14 -0
  53. data/lib/cli_tools/ic-describe-request.cmd +27 -0
  54. data/lib/cli_tools/ic-describe-request.sh +14 -0
  55. data/lib/cli_tools/ic-describe-vlans.cmd +27 -0
  56. data/lib/cli_tools/ic-describe-vlans.sh +14 -0
  57. data/lib/cli_tools/ic-describe-volume-offerings.cmd +27 -0
  58. data/lib/cli_tools/ic-describe-volume-offerings.sh +14 -0
  59. data/lib/cli_tools/ic-describe-volume.cmd +27 -0
  60. data/lib/cli_tools/ic-describe-volume.sh +14 -0
  61. data/lib/cli_tools/ic-describe-volumes.cmd +27 -0
  62. data/lib/cli_tools/ic-describe-volumes.sh +14 -0
  63. data/lib/cli_tools/ic-detach-volume.cmd +27 -0
  64. data/lib/cli_tools/ic-detach-volume.sh +27 -0
  65. data/lib/cli_tools/ic-extend-reservation.cmd +27 -0
  66. data/lib/cli_tools/ic-extend-reservation.sh +14 -0
  67. data/lib/cli_tools/ic-generate-keypair.cmd +27 -0
  68. data/lib/cli_tools/ic-generate-keypair.sh +14 -0
  69. data/lib/cli_tools/ic-release-address.cmd +27 -0
  70. data/lib/cli_tools/ic-release-address.sh +14 -0
  71. data/lib/cli_tools/ic-remove-keypair.cmd +27 -0
  72. data/lib/cli_tools/ic-remove-keypair.sh +14 -0
  73. data/lib/cli_tools/ic-restart-instance.cmd +27 -0
  74. data/lib/cli_tools/ic-restart-instance.sh +14 -0
  75. data/lib/cli_tools/ic-save-instance.cmd +27 -0
  76. data/lib/cli_tools/ic-save-instance.sh +14 -0
  77. data/lib/cli_tools/ic-set-default-key.cmd +27 -0
  78. data/lib/cli_tools/ic-set-default-key.sh +14 -0
  79. data/lib/cli_tools/ic-update-instance.cmd +27 -0
  80. data/lib/cli_tools/ic-update-instance.sh +14 -0
  81. data/lib/cli_tools/ic-update-keypair.cmd +27 -0
  82. data/lib/cli_tools/ic-update-keypair.sh +14 -0
  83. data/lib/cli_tools/lib/DeveloperCloud_API_Client_JAR.jar +0 -0
  84. data/lib/cli_tools/lib/DeveloperCloud_CMD_Tool.jar +0 -0
  85. data/lib/cli_tools/lib/commons-beanutils-1.6.1.jar +0 -0
  86. data/lib/cli_tools/lib/commons-cli-1.2.jar +0 -0
  87. data/lib/cli_tools/lib/commons-codec-1.3.jar +0 -0
  88. data/lib/cli_tools/lib/commons-collections-3.2.1.jar +0 -0
  89. data/lib/cli_tools/lib/commons-digester-1.8.jar +0 -0
  90. data/lib/cli_tools/lib/commons-httpclient-3.1.jar +0 -0
  91. data/lib/cli_tools/lib/commons-lang-2.3.jar +0 -0
  92. data/lib/cli_tools/lib/commons-logging-1.1.1.jar +0 -0
  93. data/lib/cli_tools/logging.properties +7 -0
  94. data/lib/cli_tools/manifest.rmd +26 -0
  95. data/lib/mock_smartcloud.rb +12 -4
  96. data/lib/smartcloud.rb +101 -15
  97. metadata +92 -3
@@ -0,0 +1,14 @@
1
+ #!/bin/sh
2
+ ############################################################################
3
+ #
4
+ # Licensed Materials - Property of IBM
5
+ #
6
+ # (C) COPYRIGHT International Business Machines Corp. 2009
7
+ #
8
+ # All Rights Reserved.
9
+ #
10
+ # US Government Users Restricted Rights - Use, duplication or
11
+ # disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
12
+ #
13
+ #############################################################################
14
+ ./ic-cmd.sh -action RestartInstance $*
@@ -0,0 +1,27 @@
1
+ @echo off
2
+
3
+ REM ###########################################################################
4
+
5
+ REM #
6
+
7
+ REM # Licensed Materials - Property of IBM
8
+
9
+ REM #
10
+
11
+ REM # (C) COPYRIGHT International Business Machines Corp. 2009
12
+
13
+ REM #
14
+
15
+ REM # All Rights Reserved.
16
+
17
+ REM #
18
+
19
+ REM # US Government Users Restricted Rights - Use, duplication or
20
+
21
+ REM # disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
22
+
23
+ REM #
24
+
25
+ REM #############################################################################
26
+
27
+ ic-cmd.cmd -action SaveInstance %*
@@ -0,0 +1,14 @@
1
+ #!/bin/sh
2
+ ############################################################################
3
+ #
4
+ # Licensed Materials - Property of IBM
5
+ #
6
+ # (C) COPYRIGHT International Business Machines Corp. 2009
7
+ #
8
+ # All Rights Reserved.
9
+ #
10
+ # US Government Users Restricted Rights - Use, duplication or
11
+ # disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
12
+ #
13
+ #############################################################################
14
+ ./ic-cmd.sh -action SaveInstance $*
@@ -0,0 +1,27 @@
1
+ @echo off
2
+
3
+ REM ###########################################################################
4
+
5
+ REM #
6
+
7
+ REM # Licensed Materials - Property of IBM
8
+
9
+ REM #
10
+
11
+ REM # (C) COPYRIGHT International Business Machines Corp. 2009
12
+
13
+ REM #
14
+
15
+ REM # All Rights Reserved.
16
+
17
+ REM #
18
+
19
+ REM # US Government Users Restricted Rights - Use, duplication or
20
+
21
+ REM # disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
22
+
23
+ REM #
24
+
25
+ REM #############################################################################
26
+
27
+ ic-cmd.cmd -action SetDefaultKey %*
@@ -0,0 +1,14 @@
1
+ #!/bin/sh
2
+ ############################################################################
3
+ #
4
+ # Licensed Materials - Property of IBM
5
+ #
6
+ # (C) COPYRIGHT International Business Machines Corp. 2009
7
+ #
8
+ # All Rights Reserved.
9
+ #
10
+ # US Government Users Restricted Rights - Use, duplication or
11
+ # disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
12
+ #
13
+ #############################################################################
14
+ ./ic-cmd.sh -action SetDefaultKey $*
@@ -0,0 +1,27 @@
1
+ @echo off
2
+
3
+ REM ###########################################################################
4
+
5
+ REM #
6
+
7
+ REM # Licensed Materials - Property of IBM
8
+
9
+ REM #
10
+
11
+ REM # (C) COPYRIGHT International Business Machines Corp. 2009
12
+
13
+ REM #
14
+
15
+ REM # All Rights Reserved.
16
+
17
+ REM #
18
+
19
+ REM # US Government Users Restricted Rights - Use, duplication or
20
+
21
+ REM # disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
22
+
23
+ REM #
24
+
25
+ REM #############################################################################
26
+
27
+ ic-cmd.cmd -action UpdateInstance %*
@@ -0,0 +1,14 @@
1
+ #!/bin/sh
2
+ ############################################################################
3
+ #
4
+ # Licensed Materials - Property of IBM
5
+ #
6
+ # (C) COPYRIGHT International Business Machines Corp. 2009
7
+ #
8
+ # All Rights Reserved.
9
+ #
10
+ # US Government Users Restricted Rights - Use, duplication or
11
+ # disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
12
+ #
13
+ #############################################################################
14
+ ./ic-cmd.sh -action UpdateInstance $*
@@ -0,0 +1,27 @@
1
+ @echo off
2
+
3
+ REM ###########################################################################
4
+
5
+ REM #
6
+
7
+ REM # Licensed Materials - Property of IBM
8
+
9
+ REM #
10
+
11
+ REM # (C) COPYRIGHT International Business Machines Corp. 2009
12
+
13
+ REM #
14
+
15
+ REM # All Rights Reserved.
16
+
17
+ REM #
18
+
19
+ REM # US Government Users Restricted Rights - Use, duplication or
20
+
21
+ REM # disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
22
+
23
+ REM #
24
+
25
+ REM #############################################################################
26
+
27
+ ic-cmd.cmd -action UpdateKeyPair %*
@@ -0,0 +1,14 @@
1
+ #!/bin/sh
2
+ ############################################################################
3
+ #
4
+ # Licensed Materials - Property of IBM
5
+ #
6
+ # (C) COPYRIGHT International Business Machines Corp. 2009
7
+ #
8
+ # All Rights Reserved.
9
+ #
10
+ # US Government Users Restricted Rights - Use, duplication or
11
+ # disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
12
+ #
13
+ #############################################################################
14
+ ./ic-cmd.sh -action UpdateKeyPair $*
@@ -0,0 +1,7 @@
1
+ handlers = java.util.logging.FileHandler
2
+ java.util.logging.FileHandler.level = INFO
3
+ java.util.logging.FileHandler.pattern = ./logs/log%u.log
4
+ java.util.logging.FileHandler.limit = 50000
5
+ java.util.logging.FileHandler.count = 1
6
+ java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
7
+ java.util.logging.FileHandler.append = true
@@ -0,0 +1,26 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <defaultprofile:Asset xmi:version="2.0"
3
+ xmlns:xmi="http://www.omg.org/XMI" xmlns:defaultprofile="http:///defaultprofile22.ecore" name="Command Line Tool Reference and Binaries"
4
+ id="{F1466F46-A4AB-3879-D883-1A26A43BF046}" date="2011-05-13" state="Approved" version="1.4" shortDescription="Cloud API Reference of Command Line Tool">
5
+ <classification>
6
+ <descriptorGroup name="AssetType">
7
+ <nodeDescriptor href="https://www-147.ibm.com/cloud/enterprise/ram/classif/assetTypesSchema.xmi#documentation"/>
8
+ </descriptorGroup>
9
+ <descriptorGroup name="StandardInfo">
10
+ <freeFormValue value="31" freeFormDescriptor="//@classification/@descriptorGroup.1/@freeFormDescriptor.0"/>
11
+ <freeFormDescriptor name="revisionCount"/>
12
+ </descriptorGroup>
13
+ </classification>
14
+ <solution>
15
+ <artifact name="GA_CommandLine.pdf" type="application/pdf">
16
+ <reference value="GA_CommandLine.pdf"/>
17
+ </artifact>
18
+ <artifact name="README.txt" type="text/plain">
19
+ <reference value="README.txt"/>
20
+ </artifact>
21
+ <artifact name="DeveloperCloud_CMD_Tool.zip" type="multipart/x-zip">
22
+ <reference value="DeveloperCloud_CMD_Tool.zip"/>
23
+ </artifact>
24
+ </solution>
25
+ <description value="&lt;p style=&quot;margin: 0px;&quot;>You can retrieve the command line tool and its documentation by clicking the &quot;Content&quot; tab above. &lt;/p>"/>
26
+ </defaultprofile:Asset>
@@ -16,11 +16,19 @@ class MockSmartCloud
16
16
  end
17
17
 
18
18
  def describe_image(*args)
19
- {"CreatedTime"=>"2011-02-25T01:22:57.000Z", "Owner"=>"SYSTEM", "SupportedInstanceTypes"=>{"InstanceType"=>{"Label"=>"Bronze 32 bit", "ID"=>"BRZ32.1/2048/60*175", "Price"=>{"Rate"=>"0.21", "PricePerQuantity"=>"1", "UnitOfMeasure"=>"UHR ", "CountryCode"=>"897", "CurrencyCode"=>"USD"}}}, "Name"=>"CohesiveFT VPN-Cubed Datacenter Connect V2.0.0 - BYOL (TOR)", "Location"=>"101", "ProductCodes"=>{"ProductCode"=>"caondc13bV97Kg5TLyGNodD9or7gA"}, "Documentation"=>"https://www-147.ibm.com/cloud/enterprise/ram.ws/RAMSecure/artifact/{974E595E-566E-87E3-A483-AC0FC468C4D9}/1.0/GettingStarted.html", "ID"=>"20016530", "Manifest"=>"https://www-147.ibm.com/cloud/enterprise/ram.ws/RAMSecure/artifact/{974E595E-566E-87E3-A483-AC0FC468C4D9}/1.0/parameters.xml", "Description"=>"CohesiveFT VPN-Cubed 2.0.0 UL - for TOR datacenter", "State"=>"AVAILABLE", "Visibility"=>"PUBLIC", "Platform"=>"Red Hat Enterprise Linux/5.4"}
19
+ {"CreatedTime"=>"2011-02-25T01:22:57.000Z", "Owner"=>"SYSTEM",
20
+ "SupportedInstanceTypes"=>{"InstanceType"=>[
21
+ {"Label"=>"Bronze 32 bit", "ID"=>"BRZ32.1/2048/60*175",
22
+ "Price"=>{"Rate"=>"0.21", "PricePerQuantity"=>"1", "UnitOfMeasure"=>"UHR ", "CountryCode"=>"897", "CurrencyCode"=>"USD"}},
23
+ {"Label"=>"Copper 32 bit", "ID"=>"COP32.1/2048/60",
24
+ "Price"=>{"Rate"=>"0.21", "PricePerQuantity"=>"1", "UnitOfMeasure"=>"UHR ", "CountryCode"=>"897", "CurrencyCode"=>"USD"}},
25
+ ]
26
+ },
27
+ "Name"=>"CohesiveFT VPN-Cubed Datacenter Connect V2.0.0 - BYOL (TOR)", "Location"=>"101", "ProductCodes"=>{"ProductCode"=>"caondc13bV97Kg5TLyGNodD9or7gA"}, "Documentation"=>"https://www-147.ibm.com/cloud/enterprise/ram.ws/RAMSecure/artifact/{974E595E-566E-87E3-A483-AC0FC468C4D9}/1.0/GettingStarted.html", "ID"=>"20016530", "Manifest"=>"https://www-147.ibm.com/cloud/enterprise/ram.ws/RAMSecure/artifact/{974E595E-566E-87E3-A483-AC0FC468C4D9}/1.0/parameters.xml", "Description"=>"CohesiveFT VPN-Cubed 2.0.0 UL - for TOR datacenter", "State"=>"AVAILABLE", "Visibility"=>"PUBLIC", "Platform"=>"Red Hat Enterprise Linux/5.4"}
20
28
  end
21
29
 
22
30
  def describe_instance(*args)
23
- {"Instance" => {"Status"=>"NEW", "PrimaryIP"=>{"IP"=>{}, "Hostname"=>{}, "Type"=>"DYNAMIC"}, "ImageID"=>"20015391", "DiskSize"=>"60", "Owner"=>"smartes@cohesiveft.com", "RequestID"=>{"name"=>"sir_19_rhel5532-bit-1zGS", "content"=>"102271"}, "Name"=>"DELETEsir_19_rhel5532-bit-1zGS", "ProductCodes"=>{}, "KeyName"=>"si-tempkey-rhel5532-bit-1zGS-eDY4T", "Location"=>"101", "LaunchTime"=>"2011-07-07T22:13:49.891Z", "Volumes"=>{}, "ID"=>"101971", "MiniEphemeral"=>"false", "Software"=>{"Application"=>{"Version"=>"5.5", "Name"=>"Red Hat Enterprise Linux", "Type"=>"OS"}}, "IP"=>{}, "InstanceType"=>"COP32.1/2048/60", "Hostname"=>{}}}
31
+ {"Status"=>"NEW", "PrimaryIP"=>{"IP"=>{}, "Hostname"=>{}, "Type"=>"DYNAMIC"}, "ImageID"=>"20015391", "DiskSize"=>"60", "Owner"=>"smartes@cohesiveft.com", "RequestID"=>{"name"=>"sir_19_rhel5532-bit-1zGS", "content"=>"102271"}, "Name"=>"MockInstance", "ProductCodes"=>{}, "KeyName"=>"si-tempkey-rhel5532-bit-1zGS-eDY4T", "Location"=>"101", "LaunchTime"=>"2011-07-07T22:13:49.891Z", "Volumes"=>{}, "ID"=>"101971", "MiniEphemeral"=>"false", "Software"=>{"Application"=>{"Version"=>"5.5", "Name"=>"Red Hat Enterprise Linux", "Type"=>"OS"}}, "IP"=>{}, "InstanceType"=>"COP32.1/2048/60", "Hostname"=>{}}
24
32
  end
25
33
 
26
34
  def create_volume(*args)
@@ -44,10 +52,10 @@ class MockSmartCloud
44
52
  end
45
53
 
46
54
  def poll_for_volume_state(*args)
47
- true
55
+ describe_volume(*args)
48
56
  end
49
57
 
50
58
  def poll_for_instance_state(*args)
51
- true
59
+ describe_instance(*args)
52
60
  end
53
61
  end
data/lib/smartcloud.rb CHANGED
@@ -23,6 +23,8 @@ require 'hash_fix'
23
23
  require 'xmlsimple'
24
24
  require 'smartcloud_logger'
25
25
 
26
+ IBM_TOOLS_HOME=File.join(File.dirname(__FILE__), "cli_tools") unless defined?(IBM_TOOLS_HOME)
27
+
26
28
  # Encapsulates communications with IBM SmartCloud via REST
27
29
  class IBMSmartCloud
28
30
 
@@ -100,6 +102,10 @@ class IBMSmartCloud
100
102
  get("/locations").Location
101
103
  end
102
104
 
105
+ def describe_location(location_id)
106
+ get("/locations/#{location_id}").Location
107
+ end
108
+
103
109
  def display_locations
104
110
  log = describe_locations.map {|loc| "#{loc.ID.ljust(4)} | #{loc.Location.ljust(15)} | #{loc.Name}"}.join("\n")
105
111
  logger.info "\n#{log}"
@@ -197,12 +203,27 @@ class IBMSmartCloud
197
203
  # TODO: the API call does not work, we have to use the cli for now
198
204
  args :clone_volume, [:name, :source_disk_id]
199
205
  def clone_volume(name, source_disk_id)
200
- original_disk = describe_volume(source_disk_id)
201
- logger.info "Looking up volume #{source_disk_id} to prepare for cloning..."
202
- offering = describe_volume_offerings(original_disk.Location).detect {|offer| offer.ID == original_disk.OfferingID}
203
- logger.info "Original volume size: #{offering.Name}"
204
- result = post("/storage", :name => name, :SourceDiskID => source_disk_id, :format => original_disk.Format.upcase, :location => original_disk.Location, :size => offering.Name, :offeringID => original_disk.OfferingID )
205
- result.Volume.ID
206
+ # original_disk = describe_volume(source_disk_id)
207
+ # logger.info "Looking up volume #{source_disk_id} to prepare for cloning..."
208
+ # offering = describe_volume_offerings(original_disk.Location).detect {|offer| offer.ID == original_disk.OfferingID}
209
+ # logger.info "Original volume size: #{offering.Name}"
210
+ # result = post("/storage", :name => name, :SourceDiskID => source_disk_id, :format => original_disk.Format.upcase, :location => original_disk.Location, :size => offering.Name, :offeringID => original_disk.OfferingID )
211
+ # result.Volume.ID
212
+
213
+ create_password_file
214
+ result = run_ibm_tool("ic-clone-volume.sh -n #{name} -S #{source_disk_id}")
215
+ result =~ /ID : (.*)/
216
+ return $1 # grab the id of the created volume
217
+ end
218
+
219
+ args :attach_volume, [:instance_id, :volume_id]
220
+ def attach_volume(instance_id, volume_id)
221
+ put("/instances/#{instance_id}", :volumeID => volume_id, :attach => true)
222
+ end
223
+
224
+ args :detach_volume, [:instance_id, :volume_id]
225
+ def detach_volume(instance_id, volume_id)
226
+ put("/instances/#{instance_id}", :volumeID => volume_id, :detach => true)
206
227
  end
207
228
 
208
229
  # Delete the volume
@@ -212,9 +233,14 @@ class IBMSmartCloud
212
233
  true
213
234
  end
214
235
 
215
- args :delete_volumes, [:array_of_vol_ids]
216
- def delete_volumes(vol_id_list)
217
- vol_id_list.each {|vol| delete_volume(vol)}
236
+ args :delete_volumes, [:volume_ids], %{Example: smartcloud "delete_volumes(12345,12346,12347)"}
237
+ def delete_volumes(*vol_id_list)
238
+ threads=[]
239
+ vol_id_list.each {|vol|
240
+ threads << Thread.new { logger.info "Sending delete request for: #{vol}..."; delete_volume(vol); logger.info "Finished delete request for #{vol}" }
241
+ }
242
+ threads.each(&:join)
243
+ true
218
244
  end
219
245
 
220
246
  # generates a keypair and returns the private key
@@ -248,6 +274,14 @@ class IBMSmartCloud
248
274
  response
249
275
  end
250
276
 
277
+ def display_addresses
278
+ addresses = describe_addresses
279
+
280
+ logger.info "\nID | Loc | State | IP \n" + addresses.map {|a|
281
+ a.ID.ljust(6) + " | " + a.Location.ljust(4) + " | " + (a.State[0..9].ljust(10) rescue '?'.ljust(10)) + " | " + (a.IP.to_s || "")
282
+ }.join("\n")
283
+ end
284
+
251
285
  # Allows you to poll for a specific storage state
252
286
  # ex: storage_state_is?("123456", "UNMOUNTED")
253
287
  # storage state string can be given as a string or symbol
@@ -298,7 +332,8 @@ class IBMSmartCloud
298
332
  # Optionally supply a location to get offerings filtered to a particular location
299
333
  # Optionally supply a name (Small, Medium, Large) to get the specific offering
300
334
  args :describe_volume_offerings, [{:location => :opt}, {:name => :opt}]
301
- def describe_volume_offerings(location=nil, name=nil)
335
+ args :describe_storage_offerings, [{:location => :opt}, {:name => :opt}]
336
+ def describe_storage_offerings(location=nil, name=nil)
302
337
  response = get("/offerings/storage")
303
338
  if location
304
339
  filtered_by_location = response.Offerings.select {|o| o.Location.to_s == location.to_s}
@@ -312,6 +347,8 @@ class IBMSmartCloud
312
347
  end
313
348
  end
314
349
 
350
+ alias describe_volume_offerings describe_storage_offerings
351
+
315
352
  # Create a volume. offering_id is optional and will be determined automatically
316
353
  # for you based on the location and volume size.
317
354
  #
@@ -430,11 +467,18 @@ class IBMSmartCloud
430
467
  end
431
468
 
432
469
  # Deletes many instances in a thread
433
- args :delete_instances, [:instance_ids => [12345,12346,12347, '...']]
434
- def delete_instances(instance_ids)
435
- instance_ids.each {|id| delete_instance(id) }
470
+ args :delete_instances, [:instance_ids], %{Example: smartcloud "delete_instances(12345,12346,12347)"}
471
+ def delete_instances(*instance_ids)
472
+ threads=[]
473
+ instance_ids.each {|id| logger.info "Sending delete request for: #{id}..."; threads << Thread.new { delete_instance(id) }; logger.info "Finished delete request for #{id}" }
474
+ threads.each(&:join)
475
+ true
436
476
  end
437
477
 
478
+ args :rename_instance, [:instance_id, :new_name]
479
+ def rename_instance(instance_id, new_name)
480
+ put("/instances/#{instance_id}", :name => new_name)
481
+ end
438
482
 
439
483
  args :delete_instance, [:instance_id]
440
484
  def delete_instance(instance_id)
@@ -478,9 +522,11 @@ class IBMSmartCloud
478
522
  def display_instances(filters={})
479
523
  instances = describe_instances(filters)
480
524
 
481
- log = %{#{"Started".ljust(18)} | #{"Instance".ljust(8)} | #{"Image".ljust(9)} | #{"Loc".ljust(3)} | #{"Status".ljust(10)} | #{"KeyName".ljust(15)} | #{"IP".ljust(15)} | Name\n}
525
+ log = %{#{"Started".ljust(18)} | #{"Instance".ljust(8)} | #{"Image".ljust(9)} | #{"Loc".ljust(3)} | #{"Status".ljust(10)} | #{"KeyName".ljust(15)} | #{"IP".ljust(15)} | #{"Volume".ljust(6)} | Name\n}
482
526
  log << instances.map do |ins|
483
- "#{DateTime.parse(ins.LaunchTime).strftime("%Y-%m-%d %I:%M%p")} | #{ins.ID.ljust(8)} | #{ins.ImageID.ljust(9)} | #{ins.Location.ljust(3)} | #{ins.Status[0..9].ljust(10)} | #{(ins.KeyName || "").strip[0..14].ljust(15)} | #{(ins.IP.strip=="" ? '[NONE]' : ins.IP.strip).to_s.ljust(15)} | #{ins.Name}"
527
+ ip = (ins.IP && ins.IP.to_s) || ""
528
+ ip = (ip.strip == "") ? "[NONE]" : ip.strip
529
+ "#{DateTime.parse(ins.LaunchTime).strftime("%Y-%m-%d %I:%M%p")} | #{ins.ID.ljust(8)} | #{ins.ImageID.ljust(9)} | #{ins.Location.ljust(3)} | #{ins.Status[0..9].ljust(10)} | #{(ins.KeyName || "").strip[0..14].ljust(15)} | #{ip.ljust(15)} | #{(ins.Volume && ins.Volume || "").ljust(6)} | #{ins.Name}"
484
530
  end.join("\n")
485
531
  logger.info "\n#{log}"
486
532
  end
@@ -501,6 +547,10 @@ class IBMSmartCloud
501
547
  images = filter_and_sort(images, filters)
502
548
  end
503
549
 
550
+ def describe_manifest(image_id)
551
+ get("offerings/image/#{image_id}/manifest").Manifest
552
+ end
553
+
504
554
  args :display_images, [:filters => :opt]
505
555
  def display_images(filters={})
506
556
  images = describe_images(filters)
@@ -603,6 +653,42 @@ class IBMSmartCloud
603
653
  array_or_object.is_a?(Array) ? array_or_object : [array_or_object]
604
654
  end
605
655
 
656
+ # TODO: all methods below here can be nuked once CLI tools are removed
657
+ def run_ibm_tool(command)
658
+ FileUtils.mkdir_p(File.join(IBM_TOOLS_HOME, 'logs'))
659
+ cmd = "cd #{IBM_TOOLS_HOME} && ./#{command} -u #{@username} -w #{passphrase} -g #{password_file}"
660
+ logger.debug cmd
661
+ output = if @debug
662
+ IBMMockResponseGenerator.respond(command)
663
+ else
664
+ `#{cmd}`
665
+ end
666
+
667
+ logger.debug output
668
+
669
+ if output =~ /ErrorMessage : (.*)/
670
+ raise $1 # raise the error message matched above
671
+ else
672
+ return output
673
+ end
674
+ end
675
+
676
+ def create_password_file
677
+ # if no passphrase or password file is supplied, we'll generate it
678
+ run_ibm_tool("ic-create-password.sh -u #{@username} -p #{@password}")
679
+ end
680
+
681
+ def password_file
682
+ @password_file ||= "/tmp/smrtcloud-pwfile-#{Time.now.to_i.to_s}"
683
+ end
684
+
685
+ def passphrase
686
+ @passphrase ||= Time.now.to_i.to_s
687
+ end
688
+ # End CLI tool helpers
689
+
690
+
691
+
606
692
  end
607
693
 
608
694
  # predefine an instance for convenience