gcloud 0.0.7 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (998) hide show
  1. checksums.yaml +7 -0
  2. data/{packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/ext/__init__.py → .gemtest} +0 -0
  3. data/.rubocop.yml +17 -0
  4. data/CHANGELOG.md +5 -0
  5. data/CONTRIBUTING.md +93 -0
  6. data/LICENSE +201 -674
  7. data/Manifest.txt +66 -0
  8. data/README.md +110 -12
  9. data/Rakefile +34 -3
  10. data/gcloud.gemspec +48 -17
  11. data/lib/gcloud.rb +8 -0
  12. data/lib/gcloud/backoff.rb +115 -0
  13. data/lib/gcloud/credentials.rb +124 -0
  14. data/lib/gcloud/datastore.rb +66 -0
  15. data/lib/gcloud/datastore/connection.rb +177 -0
  16. data/lib/gcloud/datastore/credentials.rb +41 -0
  17. data/lib/gcloud/datastore/dataset.rb +259 -0
  18. data/lib/gcloud/datastore/dataset/lookup_results.rb +60 -0
  19. data/lib/gcloud/datastore/dataset/query_results.rb +87 -0
  20. data/lib/gcloud/datastore/entity.rb +257 -0
  21. data/lib/gcloud/datastore/errors.rb +65 -0
  22. data/lib/gcloud/datastore/key.rb +151 -0
  23. data/lib/gcloud/datastore/properties.rb +102 -0
  24. data/lib/gcloud/datastore/proto.rb +253 -0
  25. data/lib/gcloud/datastore/query.rb +189 -0
  26. data/lib/gcloud/datastore/transaction.rb +116 -0
  27. data/lib/gcloud/proto/datastore_v1.pb.rb +377 -0
  28. data/lib/gcloud/storage.rb +78 -0
  29. data/lib/gcloud/storage/bucket.rb +254 -0
  30. data/lib/gcloud/storage/bucket/acl.rb +311 -0
  31. data/lib/gcloud/storage/bucket/list.rb +45 -0
  32. data/lib/gcloud/storage/connection.rb +358 -0
  33. data/{packages/gsutil/gslib/commands/__init__.py → lib/gcloud/storage/credentials.rb} +13 -2
  34. data/lib/gcloud/storage/errors.rb +78 -0
  35. data/lib/gcloud/storage/file.rb +287 -0
  36. data/lib/gcloud/storage/file/acl.rb +172 -0
  37. data/lib/gcloud/storage/file/list.rb +52 -0
  38. data/lib/gcloud/storage/file/verifier.rb +65 -0
  39. data/lib/gcloud/storage/project.rb +119 -0
  40. data/lib/gcloud/version.rb +5 -0
  41. data/{packages/gsutil/gslib/tests/testcase/__init__.py → rakelib/console.rake} +14 -4
  42. data/{packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/version.py → rakelib/manifest.rake} +11 -4
  43. data/{packages/gsutil/gslib/addlhelp/__init__.py → rakelib/proto.rake} +4 -2
  44. data/{packages/gsutil/gslib/tests/__init__.py → rakelib/rubocop.rake} +4 -2
  45. data/rakelib/test.rake +144 -0
  46. data/test/gcloud/datastore/proto/test_cursor.rb +36 -0
  47. data/test/gcloud/datastore/proto/test_direction.rb +60 -0
  48. data/test/gcloud/datastore/proto/test_operator.rb +76 -0
  49. data/test/gcloud/datastore/proto/test_value.rb +231 -0
  50. data/test/gcloud/datastore/test_connection.rb +93 -0
  51. data/test/gcloud/datastore/test_credentials.rb +38 -0
  52. data/test/gcloud/datastore/test_dataset.rb +413 -0
  53. data/test/gcloud/datastore/test_entity.rb +161 -0
  54. data/test/gcloud/datastore/test_entity_exclude.rb +225 -0
  55. data/test/gcloud/datastore/test_key.rb +189 -0
  56. data/test/gcloud/datastore/test_query.rb +271 -0
  57. data/test/gcloud/datastore/test_transaction.rb +121 -0
  58. data/test/gcloud/storage/test_backoff.rb +127 -0
  59. data/test/gcloud/storage/test_bucket.rb +270 -0
  60. data/test/gcloud/storage/test_bucket_acl.rb +253 -0
  61. data/test/gcloud/storage/test_default_acl.rb +256 -0
  62. data/test/gcloud/storage/test_file.rb +221 -0
  63. data/test/gcloud/storage/test_file_acl.rb +367 -0
  64. data/test/gcloud/storage/test_project.rb +180 -0
  65. data/{packages/gsutil/gslib/no_op_auth_plugin.py → test/gcloud/storage/test_storage.rb} +14 -15
  66. data/test/gcloud/storage/test_verifier.rb +62 -0
  67. data/test/gcloud/test_version.rb +8 -0
  68. data/test/helper.rb +91 -0
  69. metadata +259 -1020
  70. data.tar.gz.sig +0 -2
  71. data/CHANGELOG +0 -14
  72. data/Makefile +0 -13
  73. data/Manifest +0 -937
  74. data/TODO +0 -2
  75. data/bin/gcloud +0 -7
  76. data/bin/gcutil-symlink +0 -53
  77. data/bin/gsutil-symlink +0 -377
  78. data/init.rb +0 -3
  79. data/packages/README +0 -6
  80. data/packages/gcutil-1.7.1.tar.gz +0 -0
  81. data/packages/gcutil-1.7.1/CHANGELOG +0 -197
  82. data/packages/gcutil-1.7.1/LICENSE +0 -202
  83. data/packages/gcutil-1.7.1/VERSION +0 -1
  84. data/packages/gcutil-1.7.1/gcutil +0 -53
  85. data/packages/gcutil-1.7.1/lib/google_api_python_client/LICENSE +0 -23
  86. data/packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/__init__.py +0 -1
  87. data/packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/__init__.pyc +0 -0
  88. data/packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/discovery.py +0 -743
  89. data/packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/discovery.pyc +0 -0
  90. data/packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/errors.py +0 -123
  91. data/packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/errors.pyc +0 -0
  92. data/packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/http.py +0 -1443
  93. data/packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/http.pyc +0 -0
  94. data/packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/mimeparse.py +0 -172
  95. data/packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/mimeparse.pyc +0 -0
  96. data/packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/model.py +0 -385
  97. data/packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/model.pyc +0 -0
  98. data/packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/schema.py +0 -303
  99. data/packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/schema.pyc +0 -0
  100. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/__init__.py +0 -1
  101. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/__init__.pyc +0 -0
  102. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/anyjson.py +0 -32
  103. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/anyjson.pyc +0 -0
  104. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/appengine.py +0 -528
  105. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/client.py +0 -1139
  106. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/client.pyc +0 -0
  107. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/clientsecrets.py +0 -105
  108. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/clientsecrets.pyc +0 -0
  109. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/crypt.py +0 -244
  110. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/crypt.pyc +0 -0
  111. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/django_orm.py +0 -124
  112. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/file.py +0 -107
  113. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/locked_file.py +0 -343
  114. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/locked_file.pyc +0 -0
  115. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/multistore_file.py +0 -379
  116. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/multistore_file.pyc +0 -0
  117. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/tools.py +0 -174
  118. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/tools.pyc +0 -0
  119. data/packages/gcutil-1.7.1/lib/google_api_python_client/uritemplate/__init__.py +0 -147
  120. data/packages/gcutil-1.7.1/lib/google_api_python_client/uritemplate/__init__.pyc +0 -0
  121. data/packages/gcutil-1.7.1/lib/google_apputils/LICENSE +0 -202
  122. data/packages/gcutil-1.7.1/lib/google_apputils/google/__init__.py +0 -3
  123. data/packages/gcutil-1.7.1/lib/google_apputils/google/__init__.pyc +0 -0
  124. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/__init__.py +0 -3
  125. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/__init__.pyc +0 -0
  126. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/app.py +0 -356
  127. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/app.pyc +0 -0
  128. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/appcommands.py +0 -783
  129. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/appcommands.pyc +0 -0
  130. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/basetest.py +0 -1260
  131. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/datelib.py +0 -421
  132. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/debug.py +0 -60
  133. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/file_util.py +0 -181
  134. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/resources.py +0 -67
  135. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/run_script_module.py +0 -217
  136. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/setup_command.py +0 -159
  137. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/shellutil.py +0 -49
  138. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/stopwatch.py +0 -204
  139. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/__init__.py +0 -0
  140. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/__init__.pyc +0 -0
  141. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/auth_helper.py +0 -140
  142. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/auth_helper.pyc +0 -0
  143. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/auth_helper_test.py +0 -149
  144. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/auto_auth.py +0 -130
  145. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/auto_auth.pyc +0 -0
  146. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/auto_auth_test.py +0 -75
  147. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/basic_cmds.py +0 -128
  148. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/basic_cmds.pyc +0 -0
  149. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/basic_cmds_test.py +0 -111
  150. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/command_base.py +0 -1808
  151. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/command_base.pyc +0 -0
  152. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/command_base_test.py +0 -1651
  153. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/compute/v1beta13.json +0 -2851
  154. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/compute/v1beta14.json +0 -3361
  155. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/disk_cmds.py +0 -342
  156. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/disk_cmds.pyc +0 -0
  157. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/disk_cmds_test.py +0 -474
  158. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/firewall_cmds.py +0 -344
  159. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/firewall_cmds.pyc +0 -0
  160. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/firewall_cmds_test.py +0 -231
  161. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/flags_cache.py +0 -274
  162. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/flags_cache.pyc +0 -0
  163. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/gcutil +0 -89
  164. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/gcutil_logging.py +0 -69
  165. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/gcutil_logging.pyc +0 -0
  166. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/image_cmds.py +0 -262
  167. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/image_cmds.pyc +0 -0
  168. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/image_cmds_test.py +0 -172
  169. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/instance_cmds.py +0 -1506
  170. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/instance_cmds.pyc +0 -0
  171. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/instance_cmds_test.py +0 -1904
  172. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/kernel_cmds.py +0 -91
  173. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/kernel_cmds.pyc +0 -0
  174. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/kernel_cmds_test.py +0 -56
  175. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/machine_type_cmds.py +0 -106
  176. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/machine_type_cmds.pyc +0 -0
  177. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/machine_type_cmds_test.py +0 -59
  178. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/metadata.py +0 -96
  179. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/metadata.pyc +0 -0
  180. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/metadata_lib.py +0 -357
  181. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/metadata_lib.pyc +0 -0
  182. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/metadata_test.py +0 -84
  183. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/mock_api.py +0 -420
  184. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/mock_metadata.py +0 -58
  185. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/move_cmds.py +0 -824
  186. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/move_cmds.pyc +0 -0
  187. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/move_cmds_test.py +0 -307
  188. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/network_cmds.py +0 -178
  189. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/network_cmds.pyc +0 -0
  190. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/network_cmds_test.py +0 -133
  191. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/operation_cmds.py +0 -181
  192. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/operation_cmds.pyc +0 -0
  193. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/operation_cmds_test.py +0 -196
  194. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/path_initializer.py +0 -38
  195. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/path_initializer.pyc +0 -0
  196. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/project_cmds.py +0 -173
  197. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/project_cmds.pyc +0 -0
  198. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/project_cmds_test.py +0 -111
  199. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/scopes.py +0 -61
  200. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/scopes.pyc +0 -0
  201. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/scopes_test.py +0 -50
  202. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/snapshot_cmds.py +0 -276
  203. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/snapshot_cmds.pyc +0 -0
  204. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/snapshot_cmds_test.py +0 -260
  205. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/ssh_keys.py +0 -266
  206. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/ssh_keys.pyc +0 -0
  207. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/ssh_keys_test.py +0 -128
  208. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/table_formatter.py +0 -563
  209. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/table_formatter.pyc +0 -0
  210. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/thread_pool.py +0 -188
  211. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/thread_pool.pyc +0 -0
  212. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/thread_pool_test.py +0 -88
  213. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/utils.py +0 -208
  214. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/utils.pyc +0 -0
  215. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/utils_test.py +0 -193
  216. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/version.pyc +0 -0
  217. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/version_checker.py +0 -246
  218. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/version_checker.pyc +0 -0
  219. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/version_checker_test.py +0 -271
  220. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/zone_cmds.py +0 -151
  221. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/zone_cmds.pyc +0 -0
  222. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/zone_cmds_test.py +0 -60
  223. data/packages/gcutil-1.7.1/lib/httplib2/LICENSE +0 -21
  224. data/packages/gcutil-1.7.1/lib/httplib2/httplib2/__init__.py +0 -1630
  225. data/packages/gcutil-1.7.1/lib/httplib2/httplib2/__init__.pyc +0 -0
  226. data/packages/gcutil-1.7.1/lib/httplib2/httplib2/cacerts.txt +0 -714
  227. data/packages/gcutil-1.7.1/lib/httplib2/httplib2/iri2uri.py +0 -110
  228. data/packages/gcutil-1.7.1/lib/httplib2/httplib2/iri2uri.pyc +0 -0
  229. data/packages/gcutil-1.7.1/lib/httplib2/httplib2/socks.py +0 -438
  230. data/packages/gcutil-1.7.1/lib/httplib2/httplib2/socks.pyc +0 -0
  231. data/packages/gcutil-1.7.1/lib/iso8601/LICENSE +0 -20
  232. data/packages/gcutil-1.7.1/lib/iso8601/iso8601/__init__.py +0 -1
  233. data/packages/gcutil-1.7.1/lib/iso8601/iso8601/__init__.pyc +0 -0
  234. data/packages/gcutil-1.7.1/lib/iso8601/iso8601/iso8601.py +0 -102
  235. data/packages/gcutil-1.7.1/lib/iso8601/iso8601/iso8601.pyc +0 -0
  236. data/packages/gcutil-1.7.1/lib/iso8601/iso8601/test_iso8601.py +0 -111
  237. data/packages/gcutil-1.7.1/lib/python_gflags/AUTHORS +0 -2
  238. data/packages/gcutil-1.7.1/lib/python_gflags/LICENSE +0 -28
  239. data/packages/gcutil-1.7.1/lib/python_gflags/gflags.py +0 -2862
  240. data/packages/gcutil-1.7.1/lib/python_gflags/gflags.pyc +0 -0
  241. data/packages/gcutil-1.7.1/lib/python_gflags/gflags2man.py +0 -544
  242. data/packages/gcutil-1.7.1/lib/python_gflags/gflags_validators.py +0 -187
  243. data/packages/gcutil-1.7.1/lib/python_gflags/gflags_validators.pyc +0 -0
  244. data/packages/gsutil.tar.gz +0 -0
  245. data/packages/gsutil/CHECKSUM +0 -1
  246. data/packages/gsutil/COPYING +0 -202
  247. data/packages/gsutil/LICENSE.third_party +0 -295
  248. data/packages/gsutil/MANIFEST.in +0 -5
  249. data/packages/gsutil/README +0 -38
  250. data/packages/gsutil/README.pkg +0 -49
  251. data/packages/gsutil/ReleaseNotes.txt +0 -780
  252. data/packages/gsutil/VERSION +0 -1
  253. data/packages/gsutil/boto/Changelog.rst +0 -35
  254. data/packages/gsutil/boto/LICENSE +0 -18
  255. data/packages/gsutil/boto/MANIFEST.in +0 -12
  256. data/packages/gsutil/boto/README.rst +0 -163
  257. data/packages/gsutil/boto/bin/asadmin +0 -290
  258. data/packages/gsutil/boto/bin/bundle_image +0 -27
  259. data/packages/gsutil/boto/bin/cfadmin +0 -108
  260. data/packages/gsutil/boto/bin/cq +0 -89
  261. data/packages/gsutil/boto/bin/cwutil +0 -140
  262. data/packages/gsutil/boto/bin/elbadmin +0 -284
  263. data/packages/gsutil/boto/bin/fetch_file +0 -43
  264. data/packages/gsutil/boto/bin/glacier +0 -154
  265. data/packages/gsutil/boto/bin/instance_events +0 -145
  266. data/packages/gsutil/boto/bin/kill_instance +0 -35
  267. data/packages/gsutil/boto/bin/launch_instance +0 -252
  268. data/packages/gsutil/boto/bin/list_instances +0 -90
  269. data/packages/gsutil/boto/bin/lss3 +0 -77
  270. data/packages/gsutil/boto/bin/mturk +0 -465
  271. data/packages/gsutil/boto/bin/pyami_sendmail +0 -52
  272. data/packages/gsutil/boto/bin/route53 +0 -205
  273. data/packages/gsutil/boto/bin/s3put +0 -374
  274. data/packages/gsutil/boto/bin/sdbadmin +0 -194
  275. data/packages/gsutil/boto/bin/taskadmin +0 -116
  276. data/packages/gsutil/boto/boto/__init__.py +0 -793
  277. data/packages/gsutil/boto/boto/__init__.pyc +0 -0
  278. data/packages/gsutil/boto/boto/auth.py +0 -682
  279. data/packages/gsutil/boto/boto/auth.pyc +0 -0
  280. data/packages/gsutil/boto/boto/auth_handler.py +0 -58
  281. data/packages/gsutil/boto/boto/auth_handler.pyc +0 -0
  282. data/packages/gsutil/boto/boto/beanstalk/__init__.py +0 -65
  283. data/packages/gsutil/boto/boto/beanstalk/exception.py +0 -64
  284. data/packages/gsutil/boto/boto/beanstalk/layer1.py +0 -1153
  285. data/packages/gsutil/boto/boto/beanstalk/response.py +0 -703
  286. data/packages/gsutil/boto/boto/beanstalk/wrapper.py +0 -29
  287. data/packages/gsutil/boto/boto/cacerts/__init__.py +0 -22
  288. data/packages/gsutil/boto/boto/cacerts/__init__.pyc +0 -0
  289. data/packages/gsutil/boto/boto/cacerts/cacerts.txt +0 -633
  290. data/packages/gsutil/boto/boto/cloudformation/__init__.py +0 -68
  291. data/packages/gsutil/boto/boto/cloudformation/connection.py +0 -364
  292. data/packages/gsutil/boto/boto/cloudformation/stack.py +0 -360
  293. data/packages/gsutil/boto/boto/cloudformation/template.py +0 -43
  294. data/packages/gsutil/boto/boto/cloudfront/__init__.py +0 -324
  295. data/packages/gsutil/boto/boto/cloudfront/distribution.py +0 -745
  296. data/packages/gsutil/boto/boto/cloudfront/exception.py +0 -26
  297. data/packages/gsutil/boto/boto/cloudfront/identity.py +0 -122
  298. data/packages/gsutil/boto/boto/cloudfront/invalidation.py +0 -216
  299. data/packages/gsutil/boto/boto/cloudfront/logging.py +0 -38
  300. data/packages/gsutil/boto/boto/cloudfront/object.py +0 -48
  301. data/packages/gsutil/boto/boto/cloudfront/origin.py +0 -150
  302. data/packages/gsutil/boto/boto/cloudfront/signers.py +0 -60
  303. data/packages/gsutil/boto/boto/cloudsearch/__init__.py +0 -45
  304. data/packages/gsutil/boto/boto/cloudsearch/document.py +0 -265
  305. data/packages/gsutil/boto/boto/cloudsearch/domain.py +0 -394
  306. data/packages/gsutil/boto/boto/cloudsearch/layer1.py +0 -738
  307. data/packages/gsutil/boto/boto/cloudsearch/layer2.py +0 -67
  308. data/packages/gsutil/boto/boto/cloudsearch/optionstatus.py +0 -248
  309. data/packages/gsutil/boto/boto/cloudsearch/search.py +0 -365
  310. data/packages/gsutil/boto/boto/cloudsearch/sourceattribute.py +0 -75
  311. data/packages/gsutil/boto/boto/compat.py +0 -28
  312. data/packages/gsutil/boto/boto/compat.pyc +0 -0
  313. data/packages/gsutil/boto/boto/connection.py +0 -1081
  314. data/packages/gsutil/boto/boto/connection.pyc +0 -0
  315. data/packages/gsutil/boto/boto/contrib/__init__.py +0 -22
  316. data/packages/gsutil/boto/boto/contrib/ymlmessage.py +0 -52
  317. data/packages/gsutil/boto/boto/core/README +0 -58
  318. data/packages/gsutil/boto/boto/core/__init__.py +0 -23
  319. data/packages/gsutil/boto/boto/core/auth.py +0 -78
  320. data/packages/gsutil/boto/boto/core/credentials.py +0 -154
  321. data/packages/gsutil/boto/boto/core/dictresponse.py +0 -178
  322. data/packages/gsutil/boto/boto/core/service.py +0 -67
  323. data/packages/gsutil/boto/boto/datapipeline/__init__.py +0 -0
  324. data/packages/gsutil/boto/boto/datapipeline/exceptions.py +0 -42
  325. data/packages/gsutil/boto/boto/datapipeline/layer1.py +0 -546
  326. data/packages/gsutil/boto/boto/dynamodb/__init__.py +0 -66
  327. data/packages/gsutil/boto/boto/dynamodb/batch.py +0 -262
  328. data/packages/gsutil/boto/boto/dynamodb/condition.py +0 -170
  329. data/packages/gsutil/boto/boto/dynamodb/exceptions.py +0 -64
  330. data/packages/gsutil/boto/boto/dynamodb/item.py +0 -196
  331. data/packages/gsutil/boto/boto/dynamodb/layer1.py +0 -575
  332. data/packages/gsutil/boto/boto/dynamodb/layer2.py +0 -798
  333. data/packages/gsutil/boto/boto/dynamodb/schema.py +0 -112
  334. data/packages/gsutil/boto/boto/dynamodb/table.py +0 -540
  335. data/packages/gsutil/boto/boto/dynamodb/types.py +0 -326
  336. data/packages/gsutil/boto/boto/ec2/__init__.py +0 -96
  337. data/packages/gsutil/boto/boto/ec2/address.py +0 -103
  338. data/packages/gsutil/boto/boto/ec2/autoscale/__init__.py +0 -781
  339. data/packages/gsutil/boto/boto/ec2/autoscale/activity.py +0 -74
  340. data/packages/gsutil/boto/boto/ec2/autoscale/group.py +0 -337
  341. data/packages/gsutil/boto/boto/ec2/autoscale/instance.py +0 -60
  342. data/packages/gsutil/boto/boto/ec2/autoscale/launchconfig.py +0 -209
  343. data/packages/gsutil/boto/boto/ec2/autoscale/policy.py +0 -166
  344. data/packages/gsutil/boto/boto/ec2/autoscale/request.py +0 -38
  345. data/packages/gsutil/boto/boto/ec2/autoscale/scheduled.py +0 -60
  346. data/packages/gsutil/boto/boto/ec2/autoscale/tag.py +0 -84
  347. data/packages/gsutil/boto/boto/ec2/blockdevicemapping.py +0 -141
  348. data/packages/gsutil/boto/boto/ec2/bundleinstance.py +0 -78
  349. data/packages/gsutil/boto/boto/ec2/buyreservation.py +0 -84
  350. data/packages/gsutil/boto/boto/ec2/cloudwatch/__init__.py +0 -603
  351. data/packages/gsutil/boto/boto/ec2/cloudwatch/alarm.py +0 -316
  352. data/packages/gsutil/boto/boto/ec2/cloudwatch/datapoint.py +0 -40
  353. data/packages/gsutil/boto/boto/ec2/cloudwatch/dimension.py +0 -38
  354. data/packages/gsutil/boto/boto/ec2/cloudwatch/listelement.py +0 -31
  355. data/packages/gsutil/boto/boto/ec2/cloudwatch/metric.py +0 -175
  356. data/packages/gsutil/boto/boto/ec2/connection.py +0 -3409
  357. data/packages/gsutil/boto/boto/ec2/ec2object.py +0 -107
  358. data/packages/gsutil/boto/boto/ec2/elb/__init__.py +0 -553
  359. data/packages/gsutil/boto/boto/ec2/elb/healthcheck.py +0 -89
  360. data/packages/gsutil/boto/boto/ec2/elb/instancestate.py +0 -62
  361. data/packages/gsutil/boto/boto/ec2/elb/listelement.py +0 -36
  362. data/packages/gsutil/boto/boto/ec2/elb/listener.py +0 -75
  363. data/packages/gsutil/boto/boto/ec2/elb/loadbalancer.py +0 -324
  364. data/packages/gsutil/boto/boto/ec2/elb/policies.py +0 -89
  365. data/packages/gsutil/boto/boto/ec2/elb/securitygroup.py +0 -38
  366. data/packages/gsutil/boto/boto/ec2/group.py +0 -39
  367. data/packages/gsutil/boto/boto/ec2/image.py +0 -350
  368. data/packages/gsutil/boto/boto/ec2/instance.py +0 -661
  369. data/packages/gsutil/boto/boto/ec2/instanceinfo.py +0 -51
  370. data/packages/gsutil/boto/boto/ec2/instancestatus.py +0 -207
  371. data/packages/gsutil/boto/boto/ec2/keypair.py +0 -113
  372. data/packages/gsutil/boto/boto/ec2/launchspecification.py +0 -105
  373. data/packages/gsutil/boto/boto/ec2/networkinterface.py +0 -247
  374. data/packages/gsutil/boto/boto/ec2/placementgroup.py +0 -51
  375. data/packages/gsutil/boto/boto/ec2/regioninfo.py +0 -34
  376. data/packages/gsutil/boto/boto/ec2/reservedinstance.py +0 -227
  377. data/packages/gsutil/boto/boto/ec2/securitygroup.py +0 -357
  378. data/packages/gsutil/boto/boto/ec2/snapshot.py +0 -170
  379. data/packages/gsutil/boto/boto/ec2/spotdatafeedsubscription.py +0 -63
  380. data/packages/gsutil/boto/boto/ec2/spotinstancerequest.py +0 -188
  381. data/packages/gsutil/boto/boto/ec2/spotpricehistory.py +0 -55
  382. data/packages/gsutil/boto/boto/ec2/tag.py +0 -87
  383. data/packages/gsutil/boto/boto/ec2/vmtype.py +0 -58
  384. data/packages/gsutil/boto/boto/ec2/volume.py +0 -293
  385. data/packages/gsutil/boto/boto/ec2/volumestatus.py +0 -200
  386. data/packages/gsutil/boto/boto/ec2/zone.py +0 -80
  387. data/packages/gsutil/boto/boto/ecs/__init__.py +0 -90
  388. data/packages/gsutil/boto/boto/ecs/item.py +0 -153
  389. data/packages/gsutil/boto/boto/elasticache/__init__.py +0 -62
  390. data/packages/gsutil/boto/boto/elasticache/layer1.py +0 -1252
  391. data/packages/gsutil/boto/boto/elastictranscoder/__init__.py +0 -62
  392. data/packages/gsutil/boto/boto/elastictranscoder/exceptions.py +0 -46
  393. data/packages/gsutil/boto/boto/elastictranscoder/layer1.py +0 -509
  394. data/packages/gsutil/boto/boto/emr/__init__.py +0 -73
  395. data/packages/gsutil/boto/boto/emr/bootstrap_action.py +0 -44
  396. data/packages/gsutil/boto/boto/emr/connection.py +0 -531
  397. data/packages/gsutil/boto/boto/emr/emrobject.py +0 -176
  398. data/packages/gsutil/boto/boto/emr/instance_group.py +0 -43
  399. data/packages/gsutil/boto/boto/emr/step.py +0 -281
  400. data/packages/gsutil/boto/boto/exception.py +0 -476
  401. data/packages/gsutil/boto/boto/exception.pyc +0 -0
  402. data/packages/gsutil/boto/boto/file/README +0 -49
  403. data/packages/gsutil/boto/boto/file/__init__.py +0 -28
  404. data/packages/gsutil/boto/boto/file/bucket.py +0 -112
  405. data/packages/gsutil/boto/boto/file/connection.py +0 -33
  406. data/packages/gsutil/boto/boto/file/key.py +0 -199
  407. data/packages/gsutil/boto/boto/file/simpleresultset.py +0 -30
  408. data/packages/gsutil/boto/boto/fps/__init__.py +0 -21
  409. data/packages/gsutil/boto/boto/fps/connection.py +0 -369
  410. data/packages/gsutil/boto/boto/fps/exception.py +0 -344
  411. data/packages/gsutil/boto/boto/fps/response.py +0 -175
  412. data/packages/gsutil/boto/boto/glacier/__init__.py +0 -57
  413. data/packages/gsutil/boto/boto/glacier/concurrent.py +0 -409
  414. data/packages/gsutil/boto/boto/glacier/exceptions.py +0 -58
  415. data/packages/gsutil/boto/boto/glacier/job.py +0 -152
  416. data/packages/gsutil/boto/boto/glacier/layer1.py +0 -637
  417. data/packages/gsutil/boto/boto/glacier/layer2.py +0 -93
  418. data/packages/gsutil/boto/boto/glacier/response.py +0 -48
  419. data/packages/gsutil/boto/boto/glacier/utils.py +0 -163
  420. data/packages/gsutil/boto/boto/glacier/vault.py +0 -387
  421. data/packages/gsutil/boto/boto/glacier/writer.py +0 -242
  422. data/packages/gsutil/boto/boto/gs/__init__.py +0 -22
  423. data/packages/gsutil/boto/boto/gs/__init__.pyc +0 -0
  424. data/packages/gsutil/boto/boto/gs/acl.py +0 -304
  425. data/packages/gsutil/boto/boto/gs/acl.pyc +0 -0
  426. data/packages/gsutil/boto/boto/gs/bucket.py +0 -870
  427. data/packages/gsutil/boto/boto/gs/bucket.pyc +0 -0
  428. data/packages/gsutil/boto/boto/gs/bucketlistresultset.py +0 -64
  429. data/packages/gsutil/boto/boto/gs/bucketlistresultset.pyc +0 -0
  430. data/packages/gsutil/boto/boto/gs/connection.py +0 -103
  431. data/packages/gsutil/boto/boto/gs/connection.pyc +0 -0
  432. data/packages/gsutil/boto/boto/gs/cors.py +0 -169
  433. data/packages/gsutil/boto/boto/gs/cors.pyc +0 -0
  434. data/packages/gsutil/boto/boto/gs/key.py +0 -704
  435. data/packages/gsutil/boto/boto/gs/key.pyc +0 -0
  436. data/packages/gsutil/boto/boto/gs/resumable_upload_handler.py +0 -659
  437. data/packages/gsutil/boto/boto/gs/resumable_upload_handler.pyc +0 -0
  438. data/packages/gsutil/boto/boto/gs/user.py +0 -54
  439. data/packages/gsutil/boto/boto/gs/user.pyc +0 -0
  440. data/packages/gsutil/boto/boto/handler.py +0 -44
  441. data/packages/gsutil/boto/boto/handler.pyc +0 -0
  442. data/packages/gsutil/boto/boto/https_connection.py +0 -124
  443. data/packages/gsutil/boto/boto/https_connection.pyc +0 -0
  444. data/packages/gsutil/boto/boto/iam/__init__.py +0 -74
  445. data/packages/gsutil/boto/boto/iam/connection.py +0 -1317
  446. data/packages/gsutil/boto/boto/iam/summarymap.py +0 -42
  447. data/packages/gsutil/boto/boto/jsonresponse.py +0 -163
  448. data/packages/gsutil/boto/boto/jsonresponse.pyc +0 -0
  449. data/packages/gsutil/boto/boto/manage/__init__.py +0 -23
  450. data/packages/gsutil/boto/boto/manage/cmdshell.py +0 -241
  451. data/packages/gsutil/boto/boto/manage/propget.py +0 -64
  452. data/packages/gsutil/boto/boto/manage/server.py +0 -556
  453. data/packages/gsutil/boto/boto/manage/task.py +0 -175
  454. data/packages/gsutil/boto/boto/manage/test_manage.py +0 -34
  455. data/packages/gsutil/boto/boto/manage/volume.py +0 -420
  456. data/packages/gsutil/boto/boto/mashups/__init__.py +0 -23
  457. data/packages/gsutil/boto/boto/mashups/interactive.py +0 -97
  458. data/packages/gsutil/boto/boto/mashups/iobject.py +0 -115
  459. data/packages/gsutil/boto/boto/mashups/order.py +0 -211
  460. data/packages/gsutil/boto/boto/mashups/server.py +0 -395
  461. data/packages/gsutil/boto/boto/mturk/__init__.py +0 -23
  462. data/packages/gsutil/boto/boto/mturk/connection.py +0 -1027
  463. data/packages/gsutil/boto/boto/mturk/layoutparam.py +0 -55
  464. data/packages/gsutil/boto/boto/mturk/notification.py +0 -103
  465. data/packages/gsutil/boto/boto/mturk/price.py +0 -48
  466. data/packages/gsutil/boto/boto/mturk/qualification.py +0 -137
  467. data/packages/gsutil/boto/boto/mturk/question.py +0 -455
  468. data/packages/gsutil/boto/boto/mws/__init__.py +0 -21
  469. data/packages/gsutil/boto/boto/mws/connection.py +0 -813
  470. data/packages/gsutil/boto/boto/mws/exception.py +0 -75
  471. data/packages/gsutil/boto/boto/mws/response.py +0 -655
  472. data/packages/gsutil/boto/boto/plugin.py +0 -90
  473. data/packages/gsutil/boto/boto/plugin.pyc +0 -0
  474. data/packages/gsutil/boto/boto/provider.py +0 -337
  475. data/packages/gsutil/boto/boto/provider.pyc +0 -0
  476. data/packages/gsutil/boto/boto/pyami/__init__.py +0 -22
  477. data/packages/gsutil/boto/boto/pyami/__init__.pyc +0 -0
  478. data/packages/gsutil/boto/boto/pyami/bootstrap.py +0 -134
  479. data/packages/gsutil/boto/boto/pyami/config.py +0 -229
  480. data/packages/gsutil/boto/boto/pyami/config.pyc +0 -0
  481. data/packages/gsutil/boto/boto/pyami/copybot.cfg +0 -60
  482. data/packages/gsutil/boto/boto/pyami/copybot.py +0 -97
  483. data/packages/gsutil/boto/boto/pyami/helloworld.py +0 -28
  484. data/packages/gsutil/boto/boto/pyami/installers/__init__.py +0 -64
  485. data/packages/gsutil/boto/boto/pyami/installers/ubuntu/__init__.py +0 -22
  486. data/packages/gsutil/boto/boto/pyami/installers/ubuntu/apache.py +0 -43
  487. data/packages/gsutil/boto/boto/pyami/installers/ubuntu/ebs.py +0 -238
  488. data/packages/gsutil/boto/boto/pyami/installers/ubuntu/installer.py +0 -96
  489. data/packages/gsutil/boto/boto/pyami/installers/ubuntu/mysql.py +0 -109
  490. data/packages/gsutil/boto/boto/pyami/installers/ubuntu/trac.py +0 -139
  491. data/packages/gsutil/boto/boto/pyami/launch_ami.py +0 -178
  492. data/packages/gsutil/boto/boto/pyami/scriptbase.py +0 -44
  493. data/packages/gsutil/boto/boto/pyami/startup.py +0 -60
  494. data/packages/gsutil/boto/boto/rds/__init__.py +0 -1194
  495. data/packages/gsutil/boto/boto/rds/dbinstance.py +0 -357
  496. data/packages/gsutil/boto/boto/rds/dbsecuritygroup.py +0 -177
  497. data/packages/gsutil/boto/boto/rds/dbsnapshot.py +0 -108
  498. data/packages/gsutil/boto/boto/rds/event.py +0 -49
  499. data/packages/gsutil/boto/boto/rds/parametergroup.py +0 -201
  500. data/packages/gsutil/boto/boto/rds/regioninfo.py +0 -32
  501. data/packages/gsutil/boto/boto/regioninfo.py +0 -63
  502. data/packages/gsutil/boto/boto/regioninfo.pyc +0 -0
  503. data/packages/gsutil/boto/boto/resultset.py +0 -169
  504. data/packages/gsutil/boto/boto/resultset.pyc +0 -0
  505. data/packages/gsutil/boto/boto/roboto/__init__.py +0 -1
  506. data/packages/gsutil/boto/boto/roboto/awsqueryrequest.py +0 -504
  507. data/packages/gsutil/boto/boto/roboto/awsqueryservice.py +0 -121
  508. data/packages/gsutil/boto/boto/roboto/param.py +0 -147
  509. data/packages/gsutil/boto/boto/route53/__init__.py +0 -75
  510. data/packages/gsutil/boto/boto/route53/connection.py +0 -403
  511. data/packages/gsutil/boto/boto/route53/exception.py +0 -27
  512. data/packages/gsutil/boto/boto/route53/hostedzone.py +0 -56
  513. data/packages/gsutil/boto/boto/route53/record.py +0 -306
  514. data/packages/gsutil/boto/boto/route53/status.py +0 -42
  515. data/packages/gsutil/boto/boto/route53/zone.py +0 -412
  516. data/packages/gsutil/boto/boto/s3/__init__.py +0 -84
  517. data/packages/gsutil/boto/boto/s3/__init__.pyc +0 -0
  518. data/packages/gsutil/boto/boto/s3/acl.py +0 -164
  519. data/packages/gsutil/boto/boto/s3/acl.pyc +0 -0
  520. data/packages/gsutil/boto/boto/s3/bucket.py +0 -1634
  521. data/packages/gsutil/boto/boto/s3/bucket.pyc +0 -0
  522. data/packages/gsutil/boto/boto/s3/bucketlistresultset.py +0 -139
  523. data/packages/gsutil/boto/boto/s3/bucketlistresultset.pyc +0 -0
  524. data/packages/gsutil/boto/boto/s3/bucketlogging.py +0 -83
  525. data/packages/gsutil/boto/boto/s3/bucketlogging.pyc +0 -0
  526. data/packages/gsutil/boto/boto/s3/connection.py +0 -540
  527. data/packages/gsutil/boto/boto/s3/connection.pyc +0 -0
  528. data/packages/gsutil/boto/boto/s3/cors.py +0 -210
  529. data/packages/gsutil/boto/boto/s3/cors.pyc +0 -0
  530. data/packages/gsutil/boto/boto/s3/deletemarker.py +0 -55
  531. data/packages/gsutil/boto/boto/s3/deletemarker.pyc +0 -0
  532. data/packages/gsutil/boto/boto/s3/key.py +0 -1712
  533. data/packages/gsutil/boto/boto/s3/key.pyc +0 -0
  534. data/packages/gsutil/boto/boto/s3/keyfile.py +0 -134
  535. data/packages/gsutil/boto/boto/s3/keyfile.pyc +0 -0
  536. data/packages/gsutil/boto/boto/s3/lifecycle.py +0 -231
  537. data/packages/gsutil/boto/boto/s3/lifecycle.pyc +0 -0
  538. data/packages/gsutil/boto/boto/s3/multidelete.py +0 -138
  539. data/packages/gsutil/boto/boto/s3/multidelete.pyc +0 -0
  540. data/packages/gsutil/boto/boto/s3/multipart.py +0 -315
  541. data/packages/gsutil/boto/boto/s3/multipart.pyc +0 -0
  542. data/packages/gsutil/boto/boto/s3/prefix.py +0 -42
  543. data/packages/gsutil/boto/boto/s3/prefix.pyc +0 -0
  544. data/packages/gsutil/boto/boto/s3/resumable_download_handler.py +0 -339
  545. data/packages/gsutil/boto/boto/s3/resumable_download_handler.pyc +0 -0
  546. data/packages/gsutil/boto/boto/s3/tagging.py +0 -71
  547. data/packages/gsutil/boto/boto/s3/tagging.pyc +0 -0
  548. data/packages/gsutil/boto/boto/s3/user.py +0 -49
  549. data/packages/gsutil/boto/boto/s3/user.pyc +0 -0
  550. data/packages/gsutil/boto/boto/s3/website.py +0 -237
  551. data/packages/gsutil/boto/boto/s3/website.pyc +0 -0
  552. data/packages/gsutil/boto/boto/sdb/__init__.py +0 -67
  553. data/packages/gsutil/boto/boto/sdb/connection.py +0 -617
  554. data/packages/gsutil/boto/boto/sdb/db/__init__.py +0 -20
  555. data/packages/gsutil/boto/boto/sdb/db/blob.py +0 -75
  556. data/packages/gsutil/boto/boto/sdb/db/key.py +0 -59
  557. data/packages/gsutil/boto/boto/sdb/db/manager/__init__.py +0 -85
  558. data/packages/gsutil/boto/boto/sdb/db/manager/sdbmanager.py +0 -732
  559. data/packages/gsutil/boto/boto/sdb/db/manager/xmlmanager.py +0 -517
  560. data/packages/gsutil/boto/boto/sdb/db/model.py +0 -294
  561. data/packages/gsutil/boto/boto/sdb/db/property.py +0 -703
  562. data/packages/gsutil/boto/boto/sdb/db/query.py +0 -85
  563. data/packages/gsutil/boto/boto/sdb/db/sequence.py +0 -226
  564. data/packages/gsutil/boto/boto/sdb/db/test_db.py +0 -231
  565. data/packages/gsutil/boto/boto/sdb/domain.py +0 -377
  566. data/packages/gsutil/boto/boto/sdb/item.py +0 -181
  567. data/packages/gsutil/boto/boto/sdb/queryresultset.py +0 -92
  568. data/packages/gsutil/boto/boto/sdb/regioninfo.py +0 -32
  569. data/packages/gsutil/boto/boto/services/__init__.py +0 -23
  570. data/packages/gsutil/boto/boto/services/bs.py +0 -179
  571. data/packages/gsutil/boto/boto/services/message.py +0 -58
  572. data/packages/gsutil/boto/boto/services/result.py +0 -136
  573. data/packages/gsutil/boto/boto/services/service.py +0 -161
  574. data/packages/gsutil/boto/boto/services/servicedef.py +0 -91
  575. data/packages/gsutil/boto/boto/services/sonofmmm.cfg +0 -43
  576. data/packages/gsutil/boto/boto/services/sonofmmm.py +0 -81
  577. data/packages/gsutil/boto/boto/services/submit.py +0 -88
  578. data/packages/gsutil/boto/boto/ses/__init__.py +0 -54
  579. data/packages/gsutil/boto/boto/ses/connection.py +0 -521
  580. data/packages/gsutil/boto/boto/ses/exceptions.py +0 -77
  581. data/packages/gsutil/boto/boto/sns/__init__.py +0 -78
  582. data/packages/gsutil/boto/boto/sns/connection.py +0 -431
  583. data/packages/gsutil/boto/boto/sqs/__init__.py +0 -56
  584. data/packages/gsutil/boto/boto/sqs/attributes.py +0 -46
  585. data/packages/gsutil/boto/boto/sqs/batchresults.py +0 -95
  586. data/packages/gsutil/boto/boto/sqs/connection.py +0 -417
  587. data/packages/gsutil/boto/boto/sqs/jsonmessage.py +0 -43
  588. data/packages/gsutil/boto/boto/sqs/message.py +0 -253
  589. data/packages/gsutil/boto/boto/sqs/queue.py +0 -478
  590. data/packages/gsutil/boto/boto/sqs/regioninfo.py +0 -32
  591. data/packages/gsutil/boto/boto/storage_uri.py +0 -835
  592. data/packages/gsutil/boto/boto/storage_uri.pyc +0 -0
  593. data/packages/gsutil/boto/boto/sts/__init__.py +0 -55
  594. data/packages/gsutil/boto/boto/sts/connection.py +0 -207
  595. data/packages/gsutil/boto/boto/sts/credentials.py +0 -215
  596. data/packages/gsutil/boto/boto/swf/__init__.py +0 -60
  597. data/packages/gsutil/boto/boto/swf/exceptions.py +0 -44
  598. data/packages/gsutil/boto/boto/swf/layer1.py +0 -1512
  599. data/packages/gsutil/boto/boto/swf/layer1_decisions.py +0 -287
  600. data/packages/gsutil/boto/boto/swf/layer2.py +0 -342
  601. data/packages/gsutil/boto/boto/utils.py +0 -927
  602. data/packages/gsutil/boto/boto/utils.pyc +0 -0
  603. data/packages/gsutil/boto/boto/vpc/__init__.py +0 -910
  604. data/packages/gsutil/boto/boto/vpc/customergateway.py +0 -54
  605. data/packages/gsutil/boto/boto/vpc/dhcpoptions.py +0 -72
  606. data/packages/gsutil/boto/boto/vpc/internetgateway.py +0 -72
  607. data/packages/gsutil/boto/boto/vpc/routetable.py +0 -109
  608. data/packages/gsutil/boto/boto/vpc/subnet.py +0 -57
  609. data/packages/gsutil/boto/boto/vpc/vpc.py +0 -54
  610. data/packages/gsutil/boto/boto/vpc/vpnconnection.py +0 -60
  611. data/packages/gsutil/boto/boto/vpc/vpngateway.py +0 -83
  612. data/packages/gsutil/boto/docs/BotoCheatSheet.pdf +0 -0
  613. data/packages/gsutil/boto/docs/Makefile +0 -89
  614. data/packages/gsutil/boto/docs/make.bat +0 -113
  615. data/packages/gsutil/boto/docs/source/_templates/layout.html +0 -3
  616. data/packages/gsutil/boto/docs/source/autoscale_tut.rst +0 -220
  617. data/packages/gsutil/boto/docs/source/boto_config_tut.rst +0 -125
  618. data/packages/gsutil/boto/docs/source/boto_theme/static/boto.css_t +0 -239
  619. data/packages/gsutil/boto/docs/source/boto_theme/static/pygments.css +0 -61
  620. data/packages/gsutil/boto/docs/source/boto_theme/theme.conf +0 -3
  621. data/packages/gsutil/boto/docs/source/cloudfront_tut.rst +0 -196
  622. data/packages/gsutil/boto/docs/source/cloudsearch_tut.rst +0 -411
  623. data/packages/gsutil/boto/docs/source/cloudwatch_tut.rst +0 -116
  624. data/packages/gsutil/boto/docs/source/conf.py +0 -32
  625. data/packages/gsutil/boto/docs/source/contributing.rst +0 -204
  626. data/packages/gsutil/boto/docs/source/documentation.rst +0 -59
  627. data/packages/gsutil/boto/docs/source/dynamodb_tut.rst +0 -339
  628. data/packages/gsutil/boto/docs/source/ec2_tut.rst +0 -86
  629. data/packages/gsutil/boto/docs/source/elb_tut.rst +0 -257
  630. data/packages/gsutil/boto/docs/source/emr_tut.rst +0 -108
  631. data/packages/gsutil/boto/docs/source/index.rst +0 -146
  632. data/packages/gsutil/boto/docs/source/rds_tut.rst +0 -108
  633. data/packages/gsutil/boto/docs/source/ref/autoscale.rst +0 -62
  634. data/packages/gsutil/boto/docs/source/ref/beanstalk.rst +0 -26
  635. data/packages/gsutil/boto/docs/source/ref/boto.rst +0 -47
  636. data/packages/gsutil/boto/docs/source/ref/cloudformation.rst +0 -34
  637. data/packages/gsutil/boto/docs/source/ref/cloudfront.rst +0 -68
  638. data/packages/gsutil/boto/docs/source/ref/cloudsearch.rst +0 -59
  639. data/packages/gsutil/boto/docs/source/ref/cloudwatch.rst +0 -27
  640. data/packages/gsutil/boto/docs/source/ref/contrib.rst +0 -32
  641. data/packages/gsutil/boto/docs/source/ref/datapipeline.rst +0 -26
  642. data/packages/gsutil/boto/docs/source/ref/dynamodb.rst +0 -61
  643. data/packages/gsutil/boto/docs/source/ref/ec2.rst +0 -140
  644. data/packages/gsutil/boto/docs/source/ref/ecs.rst +0 -19
  645. data/packages/gsutil/boto/docs/source/ref/elasticache.rst +0 -19
  646. data/packages/gsutil/boto/docs/source/ref/elastictranscoder.rst +0 -26
  647. data/packages/gsutil/boto/docs/source/ref/elb.rst +0 -47
  648. data/packages/gsutil/boto/docs/source/ref/emr.rst +0 -34
  649. data/packages/gsutil/boto/docs/source/ref/file.rst +0 -34
  650. data/packages/gsutil/boto/docs/source/ref/fps.rst +0 -19
  651. data/packages/gsutil/boto/docs/source/ref/glacier.rst +0 -63
  652. data/packages/gsutil/boto/docs/source/ref/gs.rst +0 -72
  653. data/packages/gsutil/boto/docs/source/ref/iam.rst +0 -27
  654. data/packages/gsutil/boto/docs/source/ref/index.rst +0 -40
  655. data/packages/gsutil/boto/docs/source/ref/manage.rst +0 -47
  656. data/packages/gsutil/boto/docs/source/ref/mturk.rst +0 -54
  657. data/packages/gsutil/boto/docs/source/ref/mws.rst +0 -33
  658. data/packages/gsutil/boto/docs/source/ref/pyami.rst +0 -103
  659. data/packages/gsutil/boto/docs/source/ref/rds.rst +0 -47
  660. data/packages/gsutil/boto/docs/source/ref/route53.rst +0 -34
  661. data/packages/gsutil/boto/docs/source/ref/s3.rst +0 -111
  662. data/packages/gsutil/boto/docs/source/ref/sdb.rst +0 -45
  663. data/packages/gsutil/boto/docs/source/ref/sdb_db.rst +0 -83
  664. data/packages/gsutil/boto/docs/source/ref/services.rst +0 -61
  665. data/packages/gsutil/boto/docs/source/ref/ses.rst +0 -21
  666. data/packages/gsutil/boto/docs/source/ref/sns.rst +0 -17
  667. data/packages/gsutil/boto/docs/source/ref/sqs.rst +0 -61
  668. data/packages/gsutil/boto/docs/source/ref/sts.rst +0 -25
  669. data/packages/gsutil/boto/docs/source/ref/swf.rst +0 -22
  670. data/packages/gsutil/boto/docs/source/ref/vpc.rst +0 -54
  671. data/packages/gsutil/boto/docs/source/s3_tut.rst +0 -450
  672. data/packages/gsutil/boto/docs/source/security_groups.rst +0 -82
  673. data/packages/gsutil/boto/docs/source/ses_tut.rst +0 -171
  674. data/packages/gsutil/boto/docs/source/simpledb_tut.rst +0 -188
  675. data/packages/gsutil/boto/docs/source/sqs_tut.rst +0 -246
  676. data/packages/gsutil/boto/docs/source/vpc_tut.rst +0 -100
  677. data/packages/gsutil/boto/pylintrc +0 -305
  678. data/packages/gsutil/boto/requirements.txt +0 -10
  679. data/packages/gsutil/boto/setup.py +0 -89
  680. data/packages/gsutil/boto/tests/__init__.py +0 -20
  681. data/packages/gsutil/boto/tests/db/test_lists.py +0 -96
  682. data/packages/gsutil/boto/tests/db/test_password.py +0 -128
  683. data/packages/gsutil/boto/tests/db/test_query.py +0 -152
  684. data/packages/gsutil/boto/tests/db/test_sequence.py +0 -109
  685. data/packages/gsutil/boto/tests/devpay/__init__.py +0 -0
  686. data/packages/gsutil/boto/tests/devpay/test_s3.py +0 -181
  687. data/packages/gsutil/boto/tests/fps/__init__.py +0 -0
  688. data/packages/gsutil/boto/tests/fps/test.py +0 -100
  689. data/packages/gsutil/boto/tests/fps/test_verify_signature.py +0 -12
  690. data/packages/gsutil/boto/tests/integration/__init__.py +0 -0
  691. data/packages/gsutil/boto/tests/integration/beanstalk/test_wrapper.py +0 -209
  692. data/packages/gsutil/boto/tests/integration/cloudformation/__init__.py +0 -21
  693. data/packages/gsutil/boto/tests/integration/cloudformation/test_cert_verification.py +0 -40
  694. data/packages/gsutil/boto/tests/integration/cloudformation/test_connection.py +0 -110
  695. data/packages/gsutil/boto/tests/integration/cloudsearch/__init__.py +0 -21
  696. data/packages/gsutil/boto/tests/integration/cloudsearch/test_cert_verification.py +0 -40
  697. data/packages/gsutil/boto/tests/integration/datapipeline/test_layer1.py +0 -122
  698. data/packages/gsutil/boto/tests/integration/dynamodb/__init__.py +0 -20
  699. data/packages/gsutil/boto/tests/integration/dynamodb/test_cert_verification.py +0 -40
  700. data/packages/gsutil/boto/tests/integration/dynamodb/test_layer1.py +0 -266
  701. data/packages/gsutil/boto/tests/integration/dynamodb/test_layer2.py +0 -484
  702. data/packages/gsutil/boto/tests/integration/dynamodb/test_table.py +0 -84
  703. data/packages/gsutil/boto/tests/integration/ec2/__init__.py +0 -20
  704. data/packages/gsutil/boto/tests/integration/ec2/autoscale/__init__.py +0 -21
  705. data/packages/gsutil/boto/tests/integration/ec2/autoscale/test_cert_verification.py +0 -40
  706. data/packages/gsutil/boto/tests/integration/ec2/autoscale/test_connection.py +0 -167
  707. data/packages/gsutil/boto/tests/integration/ec2/cloudwatch/__init__.py +0 -20
  708. data/packages/gsutil/boto/tests/integration/ec2/cloudwatch/test_cert_verification.py +0 -40
  709. data/packages/gsutil/boto/tests/integration/ec2/cloudwatch/test_connection.py +0 -277
  710. data/packages/gsutil/boto/tests/integration/ec2/elb/__init__.py +0 -20
  711. data/packages/gsutil/boto/tests/integration/ec2/elb/test_cert_verification.py +0 -40
  712. data/packages/gsutil/boto/tests/integration/ec2/elb/test_connection.py +0 -130
  713. data/packages/gsutil/boto/tests/integration/ec2/test_cert_verification.py +0 -40
  714. data/packages/gsutil/boto/tests/integration/ec2/test_connection.py +0 -192
  715. data/packages/gsutil/boto/tests/integration/ec2/vpc/__init__.py +0 -0
  716. data/packages/gsutil/boto/tests/integration/ec2/vpc/test_connection.py +0 -95
  717. data/packages/gsutil/boto/tests/integration/elasticache/__init__.py +0 -0
  718. data/packages/gsutil/boto/tests/integration/elasticache/test_layer1.py +0 -67
  719. data/packages/gsutil/boto/tests/integration/elastictranscoder/__init__.py +0 -0
  720. data/packages/gsutil/boto/tests/integration/elastictranscoder/test_cert_verification.py +0 -35
  721. data/packages/gsutil/boto/tests/integration/elastictranscoder/test_layer1.py +0 -115
  722. data/packages/gsutil/boto/tests/integration/emr/__init__.py +0 -20
  723. data/packages/gsutil/boto/tests/integration/emr/test_cert_verification.py +0 -40
  724. data/packages/gsutil/boto/tests/integration/glacier/__init__.py +0 -22
  725. data/packages/gsutil/boto/tests/integration/glacier/test_cert_verification.py +0 -40
  726. data/packages/gsutil/boto/tests/integration/glacier/test_layer1.py +0 -44
  727. data/packages/gsutil/boto/tests/integration/glacier/test_layer2.py +0 -45
  728. data/packages/gsutil/boto/tests/integration/gs/__init__.py +0 -0
  729. data/packages/gsutil/boto/tests/integration/gs/cb_test_harness.py +0 -71
  730. data/packages/gsutil/boto/tests/integration/gs/test_basic.py +0 -379
  731. data/packages/gsutil/boto/tests/integration/gs/test_generation_conditionals.py +0 -399
  732. data/packages/gsutil/boto/tests/integration/gs/test_resumable_downloads.py +0 -358
  733. data/packages/gsutil/boto/tests/integration/gs/test_resumable_uploads.py +0 -525
  734. data/packages/gsutil/boto/tests/integration/gs/test_storage_uri.py +0 -125
  735. data/packages/gsutil/boto/tests/integration/gs/test_versioning.py +0 -268
  736. data/packages/gsutil/boto/tests/integration/gs/testcase.py +0 -116
  737. data/packages/gsutil/boto/tests/integration/gs/util.py +0 -63
  738. data/packages/gsutil/boto/tests/integration/iam/__init__.py +0 -20
  739. data/packages/gsutil/boto/tests/integration/iam/test_cert_verification.py +0 -40
  740. data/packages/gsutil/boto/tests/integration/mws/__init__.py +0 -0
  741. data/packages/gsutil/boto/tests/integration/mws/test.py +0 -100
  742. data/packages/gsutil/boto/tests/integration/rds/__init__.py +0 -21
  743. data/packages/gsutil/boto/tests/integration/rds/test_cert_verification.py +0 -40
  744. data/packages/gsutil/boto/tests/integration/route53/__init__.py +0 -20
  745. data/packages/gsutil/boto/tests/integration/route53/test_cert_verification.py +0 -40
  746. data/packages/gsutil/boto/tests/integration/route53/test_zone.py +0 -132
  747. data/packages/gsutil/boto/tests/integration/s3/__init__.py +0 -20
  748. data/packages/gsutil/boto/tests/integration/s3/mock_storage_service.py +0 -589
  749. data/packages/gsutil/boto/tests/integration/s3/other_cacerts.txt +0 -70
  750. data/packages/gsutil/boto/tests/integration/s3/test_bucket.py +0 -263
  751. data/packages/gsutil/boto/tests/integration/s3/test_cert_verification.py +0 -40
  752. data/packages/gsutil/boto/tests/integration/s3/test_connection.py +0 -245
  753. data/packages/gsutil/boto/tests/integration/s3/test_cors.py +0 -78
  754. data/packages/gsutil/boto/tests/integration/s3/test_encryption.py +0 -115
  755. data/packages/gsutil/boto/tests/integration/s3/test_https_cert_validation.py +0 -141
  756. data/packages/gsutil/boto/tests/integration/s3/test_key.py +0 -375
  757. data/packages/gsutil/boto/tests/integration/s3/test_mfa.py +0 -95
  758. data/packages/gsutil/boto/tests/integration/s3/test_multidelete.py +0 -181
  759. data/packages/gsutil/boto/tests/integration/s3/test_multipart.py +0 -139
  760. data/packages/gsutil/boto/tests/integration/s3/test_pool.py +0 -246
  761. data/packages/gsutil/boto/tests/integration/s3/test_versioning.py +0 -158
  762. data/packages/gsutil/boto/tests/integration/sdb/__init__.py +0 -20
  763. data/packages/gsutil/boto/tests/integration/sdb/test_cert_verification.py +0 -40
  764. data/packages/gsutil/boto/tests/integration/sdb/test_connection.py +0 -119
  765. data/packages/gsutil/boto/tests/integration/ses/__init__.py +0 -0
  766. data/packages/gsutil/boto/tests/integration/ses/test_cert_verification.py +0 -40
  767. data/packages/gsutil/boto/tests/integration/ses/test_connection.py +0 -38
  768. data/packages/gsutil/boto/tests/integration/sns/__init__.py +0 -20
  769. data/packages/gsutil/boto/tests/integration/sns/test_cert_verification.py +0 -40
  770. data/packages/gsutil/boto/tests/integration/sqs/__init__.py +0 -20
  771. data/packages/gsutil/boto/tests/integration/sqs/test_cert_verification.py +0 -40
  772. data/packages/gsutil/boto/tests/integration/sqs/test_connection.py +0 -217
  773. data/packages/gsutil/boto/tests/integration/sts/__init__.py +0 -20
  774. data/packages/gsutil/boto/tests/integration/sts/test_cert_verification.py +0 -40
  775. data/packages/gsutil/boto/tests/integration/sts/test_session_token.py +0 -65
  776. data/packages/gsutil/boto/tests/integration/swf/__init__.py +0 -0
  777. data/packages/gsutil/boto/tests/integration/swf/test_cert_verification.py +0 -40
  778. data/packages/gsutil/boto/tests/integration/swf/test_layer1.py +0 -246
  779. data/packages/gsutil/boto/tests/integration/swf/test_layer1_workflow_execution.py +0 -173
  780. data/packages/gsutil/boto/tests/mturk/__init__.py +0 -0
  781. data/packages/gsutil/boto/tests/mturk/_init_environment.py +0 -28
  782. data/packages/gsutil/boto/tests/mturk/all_tests.py +0 -24
  783. data/packages/gsutil/boto/tests/mturk/cleanup_tests.py +0 -47
  784. data/packages/gsutil/boto/tests/mturk/common.py +0 -45
  785. data/packages/gsutil/boto/tests/mturk/create_free_text_question_regex.doctest +0 -100
  786. data/packages/gsutil/boto/tests/mturk/create_hit.doctest +0 -92
  787. data/packages/gsutil/boto/tests/mturk/create_hit_binary.doctest +0 -94
  788. data/packages/gsutil/boto/tests/mturk/create_hit_external.py +0 -21
  789. data/packages/gsutil/boto/tests/mturk/create_hit_from_hit_type.doctest +0 -103
  790. data/packages/gsutil/boto/tests/mturk/create_hit_test.py +0 -21
  791. data/packages/gsutil/boto/tests/mturk/create_hit_with_qualifications.py +0 -16
  792. data/packages/gsutil/boto/tests/mturk/hit_persistence.py +0 -27
  793. data/packages/gsutil/boto/tests/mturk/mocks.py +0 -11
  794. data/packages/gsutil/boto/tests/mturk/reviewable_hits.doctest +0 -129
  795. data/packages/gsutil/boto/tests/mturk/run-doctest.py +0 -13
  796. data/packages/gsutil/boto/tests/mturk/search_hits.doctest +0 -16
  797. data/packages/gsutil/boto/tests/mturk/selenium_support.py +0 -61
  798. data/packages/gsutil/boto/tests/mturk/support.py +0 -7
  799. data/packages/gsutil/boto/tests/mturk/test_disable_hit.py +0 -11
  800. data/packages/gsutil/boto/tests/test.py +0 -59
  801. data/packages/gsutil/boto/tests/unit/__init__.py +0 -79
  802. data/packages/gsutil/boto/tests/unit/auth/__init__.py +0 -0
  803. data/packages/gsutil/boto/tests/unit/auth/test_sigv4.py +0 -73
  804. data/packages/gsutil/boto/tests/unit/beanstalk/__init__.py +0 -0
  805. data/packages/gsutil/boto/tests/unit/beanstalk/test_layer1.py +0 -128
  806. data/packages/gsutil/boto/tests/unit/cloudformation/__init__.py +0 -0
  807. data/packages/gsutil/boto/tests/unit/cloudformation/test_connection.py +0 -605
  808. data/packages/gsutil/boto/tests/unit/cloudformation/test_stack.py +0 -63
  809. data/packages/gsutil/boto/tests/unit/cloudfront/__init__.py +0 -0
  810. data/packages/gsutil/boto/tests/unit/cloudfront/test_invalidation_list.py +0 -113
  811. data/packages/gsutil/boto/tests/unit/cloudfront/test_signed_urls.py +0 -354
  812. data/packages/gsutil/boto/tests/unit/cloudsearch/__init__.py +0 -1
  813. data/packages/gsutil/boto/tests/unit/cloudsearch/test_connection.py +0 -241
  814. data/packages/gsutil/boto/tests/unit/cloudsearch/test_document.py +0 -324
  815. data/packages/gsutil/boto/tests/unit/cloudsearch/test_search.py +0 -325
  816. data/packages/gsutil/boto/tests/unit/dynamodb/__init__.py +0 -0
  817. data/packages/gsutil/boto/tests/unit/dynamodb/test_batch.py +0 -103
  818. data/packages/gsutil/boto/tests/unit/dynamodb/test_layer2.py +0 -119
  819. data/packages/gsutil/boto/tests/unit/dynamodb/test_types.py +0 -82
  820. data/packages/gsutil/boto/tests/unit/ec2/__init__.py +0 -0
  821. data/packages/gsutil/boto/tests/unit/ec2/autoscale/__init__.py +0 -0
  822. data/packages/gsutil/boto/tests/unit/ec2/autoscale/test_group.py +0 -162
  823. data/packages/gsutil/boto/tests/unit/ec2/test_address.py +0 -39
  824. data/packages/gsutil/boto/tests/unit/ec2/test_blockdevicemapping.py +0 -79
  825. data/packages/gsutil/boto/tests/unit/ec2/test_connection.py +0 -480
  826. data/packages/gsutil/boto/tests/unit/ec2/test_instance.py +0 -243
  827. data/packages/gsutil/boto/tests/unit/ec2/test_networkinterface.py +0 -140
  828. data/packages/gsutil/boto/tests/unit/ec2/test_volume.py +0 -248
  829. data/packages/gsutil/boto/tests/unit/emr/test_emr_responses.py +0 -373
  830. data/packages/gsutil/boto/tests/unit/glacier/__init__.py +0 -0
  831. data/packages/gsutil/boto/tests/unit/glacier/test_concurrent.py +0 -120
  832. data/packages/gsutil/boto/tests/unit/glacier/test_job.py +0 -60
  833. data/packages/gsutil/boto/tests/unit/glacier/test_layer1.py +0 -98
  834. data/packages/gsutil/boto/tests/unit/glacier/test_layer2.py +0 -266
  835. data/packages/gsutil/boto/tests/unit/glacier/test_utils.py +0 -116
  836. data/packages/gsutil/boto/tests/unit/glacier/test_vault.py +0 -100
  837. data/packages/gsutil/boto/tests/unit/glacier/test_writer.py +0 -185
  838. data/packages/gsutil/boto/tests/unit/provider/__init__.py +0 -0
  839. data/packages/gsutil/boto/tests/unit/provider/test_provider.py +0 -176
  840. data/packages/gsutil/boto/tests/unit/rds/__init__.py +0 -0
  841. data/packages/gsutil/boto/tests/unit/rds/test_connection.py +0 -131
  842. data/packages/gsutil/boto/tests/unit/s3/__init__.py +0 -0
  843. data/packages/gsutil/boto/tests/unit/s3/test_cors_configuration.py +0 -77
  844. data/packages/gsutil/boto/tests/unit/s3/test_key.py +0 -75
  845. data/packages/gsutil/boto/tests/unit/s3/test_keyfile.py +0 -101
  846. data/packages/gsutil/boto/tests/unit/s3/test_lifecycle.py +0 -97
  847. data/packages/gsutil/boto/tests/unit/s3/test_tagging.py +0 -47
  848. data/packages/gsutil/boto/tests/unit/s3/test_uri.py +0 -257
  849. data/packages/gsutil/boto/tests/unit/s3/test_website.py +0 -188
  850. data/packages/gsutil/boto/tests/unit/sns/__init__.py +0 -0
  851. data/packages/gsutil/boto/tests/unit/sns/test_connection.py +0 -99
  852. data/packages/gsutil/boto/tests/unit/sqs/__init__.py +0 -0
  853. data/packages/gsutil/boto/tests/unit/sqs/test_connection.py +0 -98
  854. data/packages/gsutil/boto/tests/unit/sqs/test_queue.py +0 -40
  855. data/packages/gsutil/boto/tests/unit/sts/test_connection.py +0 -74
  856. data/packages/gsutil/boto/tests/unit/test_connection.py +0 -60
  857. data/packages/gsutil/boto/tests/unit/utils/test_utils.py +0 -109
  858. data/packages/gsutil/boto/tox.ini +0 -8
  859. data/packages/gsutil/gslib/README +0 -5
  860. data/packages/gsutil/gslib/__init__.py +0 -22
  861. data/packages/gsutil/gslib/__init__.pyc +0 -0
  862. data/packages/gsutil/gslib/addlhelp/acls.py +0 -234
  863. data/packages/gsutil/gslib/addlhelp/anon.py +0 -57
  864. data/packages/gsutil/gslib/addlhelp/command_opts.py +0 -116
  865. data/packages/gsutil/gslib/addlhelp/dev.py +0 -139
  866. data/packages/gsutil/gslib/addlhelp/metadata.py +0 -186
  867. data/packages/gsutil/gslib/addlhelp/naming.py +0 -173
  868. data/packages/gsutil/gslib/addlhelp/prod.py +0 -160
  869. data/packages/gsutil/gslib/addlhelp/projects.py +0 -130
  870. data/packages/gsutil/gslib/addlhelp/subdirs.py +0 -110
  871. data/packages/gsutil/gslib/addlhelp/support.py +0 -86
  872. data/packages/gsutil/gslib/addlhelp/versioning.py +0 -242
  873. data/packages/gsutil/gslib/addlhelp/wildcards.py +0 -170
  874. data/packages/gsutil/gslib/bucket_listing_ref.py +0 -175
  875. data/packages/gsutil/gslib/bucket_listing_ref.pyc +0 -0
  876. data/packages/gsutil/gslib/command.py +0 -722
  877. data/packages/gsutil/gslib/command.pyc +0 -0
  878. data/packages/gsutil/gslib/command_runner.py +0 -101
  879. data/packages/gsutil/gslib/command_runner.pyc +0 -0
  880. data/packages/gsutil/gslib/commands/__init__.pyc +0 -0
  881. data/packages/gsutil/gslib/commands/cat.py +0 -131
  882. data/packages/gsutil/gslib/commands/cat.pyc +0 -0
  883. data/packages/gsutil/gslib/commands/chacl.py +0 -532
  884. data/packages/gsutil/gslib/commands/chacl.pyc +0 -0
  885. data/packages/gsutil/gslib/commands/config.py +0 -694
  886. data/packages/gsutil/gslib/commands/config.pyc +0 -0
  887. data/packages/gsutil/gslib/commands/cp.py +0 -1818
  888. data/packages/gsutil/gslib/commands/cp.pyc +0 -0
  889. data/packages/gsutil/gslib/commands/disablelogging.py +0 -101
  890. data/packages/gsutil/gslib/commands/disablelogging.pyc +0 -0
  891. data/packages/gsutil/gslib/commands/enablelogging.py +0 -149
  892. data/packages/gsutil/gslib/commands/enablelogging.pyc +0 -0
  893. data/packages/gsutil/gslib/commands/getacl.py +0 -82
  894. data/packages/gsutil/gslib/commands/getacl.pyc +0 -0
  895. data/packages/gsutil/gslib/commands/getcors.py +0 -121
  896. data/packages/gsutil/gslib/commands/getcors.pyc +0 -0
  897. data/packages/gsutil/gslib/commands/getdefacl.py +0 -86
  898. data/packages/gsutil/gslib/commands/getdefacl.pyc +0 -0
  899. data/packages/gsutil/gslib/commands/getlogging.py +0 -137
  900. data/packages/gsutil/gslib/commands/getlogging.pyc +0 -0
  901. data/packages/gsutil/gslib/commands/getversioning.py +0 -116
  902. data/packages/gsutil/gslib/commands/getversioning.pyc +0 -0
  903. data/packages/gsutil/gslib/commands/getwebcfg.py +0 -122
  904. data/packages/gsutil/gslib/commands/getwebcfg.pyc +0 -0
  905. data/packages/gsutil/gslib/commands/help.py +0 -218
  906. data/packages/gsutil/gslib/commands/help.pyc +0 -0
  907. data/packages/gsutil/gslib/commands/ls.py +0 -578
  908. data/packages/gsutil/gslib/commands/ls.pyc +0 -0
  909. data/packages/gsutil/gslib/commands/mb.py +0 -172
  910. data/packages/gsutil/gslib/commands/mb.pyc +0 -0
  911. data/packages/gsutil/gslib/commands/mv.py +0 -159
  912. data/packages/gsutil/gslib/commands/mv.pyc +0 -0
  913. data/packages/gsutil/gslib/commands/perfdiag.py +0 -903
  914. data/packages/gsutil/gslib/commands/perfdiag.pyc +0 -0
  915. data/packages/gsutil/gslib/commands/rb.py +0 -113
  916. data/packages/gsutil/gslib/commands/rb.pyc +0 -0
  917. data/packages/gsutil/gslib/commands/rm.py +0 -239
  918. data/packages/gsutil/gslib/commands/rm.pyc +0 -0
  919. data/packages/gsutil/gslib/commands/setacl.py +0 -138
  920. data/packages/gsutil/gslib/commands/setacl.pyc +0 -0
  921. data/packages/gsutil/gslib/commands/setcors.py +0 -145
  922. data/packages/gsutil/gslib/commands/setcors.pyc +0 -0
  923. data/packages/gsutil/gslib/commands/setdefacl.py +0 -105
  924. data/packages/gsutil/gslib/commands/setdefacl.pyc +0 -0
  925. data/packages/gsutil/gslib/commands/setmeta.py +0 -428
  926. data/packages/gsutil/gslib/commands/setmeta.pyc +0 -0
  927. data/packages/gsutil/gslib/commands/setversioning.py +0 -114
  928. data/packages/gsutil/gslib/commands/setversioning.pyc +0 -0
  929. data/packages/gsutil/gslib/commands/setwebcfg.py +0 -190
  930. data/packages/gsutil/gslib/commands/setwebcfg.pyc +0 -0
  931. data/packages/gsutil/gslib/commands/test.py +0 -228
  932. data/packages/gsutil/gslib/commands/test.pyc +0 -0
  933. data/packages/gsutil/gslib/commands/update.py +0 -305
  934. data/packages/gsutil/gslib/commands/update.pyc +0 -0
  935. data/packages/gsutil/gslib/commands/version.py +0 -150
  936. data/packages/gsutil/gslib/commands/version.pyc +0 -0
  937. data/packages/gsutil/gslib/exception.py +0 -76
  938. data/packages/gsutil/gslib/exception.pyc +0 -0
  939. data/packages/gsutil/gslib/help_provider.py +0 -81
  940. data/packages/gsutil/gslib/help_provider.pyc +0 -0
  941. data/packages/gsutil/gslib/name_expansion.py +0 -550
  942. data/packages/gsutil/gslib/name_expansion.pyc +0 -0
  943. data/packages/gsutil/gslib/plurality_checkable_iterator.py +0 -56
  944. data/packages/gsutil/gslib/plurality_checkable_iterator.pyc +0 -0
  945. data/packages/gsutil/gslib/project_id.py +0 -67
  946. data/packages/gsutil/gslib/project_id.pyc +0 -0
  947. data/packages/gsutil/gslib/storage_uri_builder.py +0 -56
  948. data/packages/gsutil/gslib/storage_uri_builder.pyc +0 -0
  949. data/packages/gsutil/gslib/tests/__init__.pyc +0 -0
  950. data/packages/gsutil/gslib/tests/test_chacl.py +0 -236
  951. data/packages/gsutil/gslib/tests/test_cp.py +0 -267
  952. data/packages/gsutil/gslib/tests/test_data/test.gif +0 -0
  953. data/packages/gsutil/gslib/tests/test_data/test.mp3 +0 -0
  954. data/packages/gsutil/gslib/tests/test_ls.py +0 -66
  955. data/packages/gsutil/gslib/tests/test_mv.py +0 -69
  956. data/packages/gsutil/gslib/tests/test_naming.py +0 -989
  957. data/packages/gsutil/gslib/tests/test_perfdiag.py +0 -41
  958. data/packages/gsutil/gslib/tests/test_plurality_checkable_iterator.py +0 -67
  959. data/packages/gsutil/gslib/tests/test_rm.py +0 -143
  960. data/packages/gsutil/gslib/tests/test_setacl.py +0 -152
  961. data/packages/gsutil/gslib/tests/test_setcors.py +0 -168
  962. data/packages/gsutil/gslib/tests/test_setmeta.py +0 -91
  963. data/packages/gsutil/gslib/tests/test_setversioning.py +0 -44
  964. data/packages/gsutil/gslib/tests/test_setwebcfg.py +0 -63
  965. data/packages/gsutil/gslib/tests/test_thread_pool.py +0 -92
  966. data/packages/gsutil/gslib/tests/test_wildcard_iterator.py +0 -364
  967. data/packages/gsutil/gslib/tests/testcase/base.py +0 -89
  968. data/packages/gsutil/gslib/tests/testcase/integration_testcase.py +0 -197
  969. data/packages/gsutil/gslib/tests/testcase/unit_testcase.py +0 -230
  970. data/packages/gsutil/gslib/tests/util.py +0 -125
  971. data/packages/gsutil/gslib/tests/util.pyc +0 -0
  972. data/packages/gsutil/gslib/thread_pool.py +0 -79
  973. data/packages/gsutil/gslib/thread_pool.pyc +0 -0
  974. data/packages/gsutil/gslib/util.py +0 -151
  975. data/packages/gsutil/gslib/util.pyc +0 -0
  976. data/packages/gsutil/gslib/wildcard_iterator.py +0 -492
  977. data/packages/gsutil/gslib/wildcard_iterator.pyc +0 -0
  978. data/packages/gsutil/gsutil +0 -377
  979. data/packages/gsutil/gsutil.spec.in +0 -75
  980. data/packages/gsutil/oauth2_plugin/__init__.py +0 -22
  981. data/packages/gsutil/oauth2_plugin/__init__.pyc +0 -0
  982. data/packages/gsutil/oauth2_plugin/oauth2_client.py +0 -642
  983. data/packages/gsutil/oauth2_plugin/oauth2_client.pyc +0 -0
  984. data/packages/gsutil/oauth2_plugin/oauth2_client_test.py +0 -374
  985. data/packages/gsutil/oauth2_plugin/oauth2_helper.py +0 -110
  986. data/packages/gsutil/oauth2_plugin/oauth2_helper.pyc +0 -0
  987. data/packages/gsutil/oauth2_plugin/oauth2_plugin.py +0 -24
  988. data/packages/gsutil/oauth2_plugin/oauth2_plugin.pyc +0 -0
  989. data/packages/gsutil/pkg_gen.sh +0 -54
  990. data/packages/gsutil/pkg_util.py +0 -60
  991. data/packages/gsutil/setup.py +0 -141
  992. data/packages/gsutil/third_party/__init__.py +0 -0
  993. data/packages/gsutil/third_party/__init__.pyc +0 -0
  994. data/packages/gsutil/third_party/fancy_urllib/README +0 -21
  995. data/packages/gsutil/third_party/fancy_urllib/__init__.py +0 -398
  996. data/packages/gsutil/third_party/fancy_urllib/__init__.pyc +0 -0
  997. data/tasks/rubygem.rake +0 -31
  998. metadata.gz.sig +0 -0
@@ -1,3409 +0,0 @@
1
- # Copyright (c) 2006-2012 Mitch Garnaat http://garnaat.org/
2
- # Copyright (c) 2010, Eucalyptus Systems, Inc.
3
- # Copyright (c) 2012 Amazon.com, Inc. or its affiliates. All Rights Reserved
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a
6
- # copy of this software and associated documentation files (the
7
- # "Software"), to deal in the Software without restriction, including
8
- # without limitation the rights to use, copy, modify, merge, publish, dis-
9
- # tribute, sublicense, and/or sell copies of the Software, and to permit
10
- # persons to whom the Software is furnished to do so, subject to the fol-
11
- # lowing conditions:
12
- #
13
- # The above copyright notice and this permission notice shall be included
14
- # in all copies or substantial portions of the Software.
15
- #
16
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17
- # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
18
- # ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
19
- # SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20
- # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
22
- # IN THE SOFTWARE.
23
-
24
- """
25
- Represents a connection to the EC2 service.
26
- """
27
-
28
- import base64
29
- import warnings
30
- from datetime import datetime
31
- from datetime import timedelta
32
-
33
- import boto
34
- from boto.connection import AWSQueryConnection
35
- from boto.resultset import ResultSet
36
- from boto.ec2.image import Image, ImageAttribute
37
- from boto.ec2.instance import Reservation, Instance
38
- from boto.ec2.instance import ConsoleOutput, InstanceAttribute
39
- from boto.ec2.keypair import KeyPair
40
- from boto.ec2.address import Address
41
- from boto.ec2.volume import Volume, VolumeAttribute
42
- from boto.ec2.snapshot import Snapshot
43
- from boto.ec2.snapshot import SnapshotAttribute
44
- from boto.ec2.zone import Zone
45
- from boto.ec2.securitygroup import SecurityGroup
46
- from boto.ec2.regioninfo import RegionInfo
47
- from boto.ec2.instanceinfo import InstanceInfo
48
- from boto.ec2.reservedinstance import ReservedInstancesOffering
49
- from boto.ec2.reservedinstance import ReservedInstance
50
- from boto.ec2.reservedinstance import ReservedInstanceListing
51
- from boto.ec2.spotinstancerequest import SpotInstanceRequest
52
- from boto.ec2.spotpricehistory import SpotPriceHistory
53
- from boto.ec2.spotdatafeedsubscription import SpotDatafeedSubscription
54
- from boto.ec2.bundleinstance import BundleInstanceTask
55
- from boto.ec2.placementgroup import PlacementGroup
56
- from boto.ec2.tag import Tag
57
- from boto.ec2.vmtype import VmType
58
- from boto.ec2.instancestatus import InstanceStatusSet
59
- from boto.ec2.volumestatus import VolumeStatusSet
60
- from boto.ec2.networkinterface import NetworkInterface
61
- from boto.exception import EC2ResponseError
62
-
63
- #boto.set_stream_logger('ec2')
64
-
65
-
66
- class EC2Connection(AWSQueryConnection):
67
-
68
- APIVersion = boto.config.get('Boto', 'ec2_version', '2012-12-01')
69
- DefaultRegionName = boto.config.get('Boto', 'ec2_region_name', 'us-east-1')
70
- DefaultRegionEndpoint = boto.config.get('Boto', 'ec2_region_endpoint',
71
- 'ec2.us-east-1.amazonaws.com')
72
- ResponseError = EC2ResponseError
73
-
74
- def __init__(self, aws_access_key_id=None, aws_secret_access_key=None,
75
- is_secure=True, host=None, port=None,
76
- proxy=None, proxy_port=None,
77
- proxy_user=None, proxy_pass=None, debug=0,
78
- https_connection_factory=None, region=None, path='/',
79
- api_version=None, security_token=None,
80
- validate_certs=True):
81
- """
82
- Init method to create a new connection to EC2.
83
- """
84
- if not region:
85
- region = RegionInfo(self, self.DefaultRegionName,
86
- self.DefaultRegionEndpoint)
87
- self.region = region
88
- AWSQueryConnection.__init__(self, aws_access_key_id,
89
- aws_secret_access_key,
90
- is_secure, port, proxy, proxy_port,
91
- proxy_user, proxy_pass,
92
- self.region.endpoint, debug,
93
- https_connection_factory, path,
94
- security_token,
95
- validate_certs=validate_certs)
96
- if api_version:
97
- self.APIVersion = api_version
98
-
99
- def _required_auth_capability(self):
100
- return ['ec2']
101
-
102
- def get_params(self):
103
- """
104
- Returns a dictionary containing the value of of all of the keyword
105
- arguments passed when constructing this connection.
106
- """
107
- param_names = ['aws_access_key_id', 'aws_secret_access_key',
108
- 'is_secure', 'port', 'proxy', 'proxy_port',
109
- 'proxy_user', 'proxy_pass',
110
- 'debug', 'https_connection_factory']
111
- params = {}
112
- for name in param_names:
113
- params[name] = getattr(self, name)
114
- return params
115
-
116
- def build_filter_params(self, params, filters):
117
- i = 1
118
- for name in filters:
119
- aws_name = name
120
- if not aws_name.startswith('tag:'):
121
- aws_name = name.replace('_', '-')
122
- params['Filter.%d.Name' % i] = aws_name
123
- value = filters[name]
124
- if not isinstance(value, list):
125
- value = [value]
126
- j = 1
127
- for v in value:
128
- params['Filter.%d.Value.%d' % (i, j)] = v
129
- j += 1
130
- i += 1
131
-
132
- # Image methods
133
-
134
- def get_all_images(self, image_ids=None, owners=None,
135
- executable_by=None, filters=None):
136
- """
137
- Retrieve all the EC2 images available on your account.
138
-
139
- :type image_ids: list
140
- :param image_ids: A list of strings with the image IDs wanted
141
-
142
- :type owners: list
143
- :param owners: A list of owner IDs
144
-
145
- :type executable_by: list
146
- :param executable_by: Returns AMIs for which the specified
147
- user ID has explicit launch permissions
148
-
149
- :type filters: dict
150
- :param filters: Optional filters that can be used to limit
151
- the results returned. Filters are provided
152
- in the form of a dictionary consisting of
153
- filter names as the key and filter values
154
- as the value. The set of allowable filter
155
- names/values is dependent on the request
156
- being performed. Check the EC2 API guide
157
- for details.
158
-
159
- :rtype: list
160
- :return: A list of :class:`boto.ec2.image.Image`
161
- """
162
- params = {}
163
- if image_ids:
164
- self.build_list_params(params, image_ids, 'ImageId')
165
- if owners:
166
- self.build_list_params(params, owners, 'Owner')
167
- if executable_by:
168
- self.build_list_params(params, executable_by, 'ExecutableBy')
169
- if filters:
170
- self.build_filter_params(params, filters)
171
- return self.get_list('DescribeImages', params,
172
- [('item', Image)], verb='POST')
173
-
174
- def get_all_kernels(self, kernel_ids=None, owners=None):
175
- """
176
- Retrieve all the EC2 kernels available on your account.
177
- Constructs a filter to allow the processing to happen server side.
178
-
179
- :type kernel_ids: list
180
- :param kernel_ids: A list of strings with the image IDs wanted
181
-
182
- :type owners: list
183
- :param owners: A list of owner IDs
184
-
185
- :rtype: list
186
- :return: A list of :class:`boto.ec2.image.Image`
187
- """
188
- params = {}
189
- if kernel_ids:
190
- self.build_list_params(params, kernel_ids, 'ImageId')
191
- if owners:
192
- self.build_list_params(params, owners, 'Owner')
193
- filter = {'image-type': 'kernel'}
194
- self.build_filter_params(params, filter)
195
- return self.get_list('DescribeImages', params,
196
- [('item', Image)], verb='POST')
197
-
198
- def get_all_ramdisks(self, ramdisk_ids=None, owners=None):
199
- """
200
- Retrieve all the EC2 ramdisks available on your account.
201
- Constructs a filter to allow the processing to happen server side.
202
-
203
- :type ramdisk_ids: list
204
- :param ramdisk_ids: A list of strings with the image IDs wanted
205
-
206
- :type owners: list
207
- :param owners: A list of owner IDs
208
-
209
- :rtype: list
210
- :return: A list of :class:`boto.ec2.image.Image`
211
- """
212
- params = {}
213
- if ramdisk_ids:
214
- self.build_list_params(params, ramdisk_ids, 'ImageId')
215
- if owners:
216
- self.build_list_params(params, owners, 'Owner')
217
- filter = {'image-type': 'ramdisk'}
218
- self.build_filter_params(params, filter)
219
- return self.get_list('DescribeImages', params,
220
- [('item', Image)], verb='POST')
221
-
222
- def get_image(self, image_id):
223
- """
224
- Shortcut method to retrieve a specific image (AMI).
225
-
226
- :type image_id: string
227
- :param image_id: the ID of the Image to retrieve
228
-
229
- :rtype: :class:`boto.ec2.image.Image`
230
- :return: The EC2 Image specified or None if the image is not found
231
- """
232
- try:
233
- return self.get_all_images(image_ids=[image_id])[0]
234
- except IndexError: # None of those images available
235
- return None
236
-
237
- def register_image(self, name=None, description=None, image_location=None,
238
- architecture=None, kernel_id=None, ramdisk_id=None,
239
- root_device_name=None, block_device_map=None):
240
- """
241
- Register an image.
242
-
243
- :type name: string
244
- :param name: The name of the AMI. Valid only for EBS-based images.
245
-
246
- :type description: string
247
- :param description: The description of the AMI.
248
-
249
- :type image_location: string
250
- :param image_location: Full path to your AMI manifest in
251
- Amazon S3 storage. Only used for S3-based AMI's.
252
-
253
- :type architecture: string
254
- :param architecture: The architecture of the AMI. Valid choices are:
255
- * i386
256
- * x86_64
257
-
258
- :type kernel_id: string
259
- :param kernel_id: The ID of the kernel with which to launch
260
- the instances
261
-
262
- :type root_device_name: string
263
- :param root_device_name: The root device name (e.g. /dev/sdh)
264
-
265
- :type block_device_map: :class:`boto.ec2.blockdevicemapping.BlockDeviceMapping`
266
- :param block_device_map: A BlockDeviceMapping data structure
267
- describing the EBS volumes associated with the Image.
268
-
269
- :rtype: string
270
- :return: The new image id
271
- """
272
- params = {}
273
- if name:
274
- params['Name'] = name
275
- if description:
276
- params['Description'] = description
277
- if architecture:
278
- params['Architecture'] = architecture
279
- if kernel_id:
280
- params['KernelId'] = kernel_id
281
- if ramdisk_id:
282
- params['RamdiskId'] = ramdisk_id
283
- if image_location:
284
- params['ImageLocation'] = image_location
285
- if root_device_name:
286
- params['RootDeviceName'] = root_device_name
287
- if block_device_map:
288
- block_device_map.build_list_params(params)
289
- rs = self.get_object('RegisterImage', params, ResultSet, verb='POST')
290
- image_id = getattr(rs, 'imageId', None)
291
- return image_id
292
-
293
- def deregister_image(self, image_id, delete_snapshot=False):
294
- """
295
- Unregister an AMI.
296
-
297
- :type image_id: string
298
- :param image_id: the ID of the Image to unregister
299
-
300
- :type delete_snapshot: bool
301
- :param delete_snapshot: Set to True if we should delete the
302
- snapshot associated with an EBS volume
303
- mounted at /dev/sda1
304
-
305
- :rtype: bool
306
- :return: True if successful
307
- """
308
- snapshot_id = None
309
- if delete_snapshot:
310
- image = self.get_image(image_id)
311
- for key in image.block_device_mapping:
312
- if key == "/dev/sda1":
313
- snapshot_id = image.block_device_mapping[key].snapshot_id
314
- break
315
-
316
- result = self.get_status('DeregisterImage',
317
- {'ImageId':image_id}, verb='POST')
318
- if result and snapshot_id:
319
- return result and self.delete_snapshot(snapshot_id)
320
- return result
321
-
322
- def create_image(self, instance_id, name,
323
- description=None, no_reboot=False):
324
- """
325
- Will create an AMI from the instance in the running or stopped
326
- state.
327
-
328
- :type instance_id: string
329
- :param instance_id: the ID of the instance to image.
330
-
331
- :type name: string
332
- :param name: The name of the new image
333
-
334
- :type description: string
335
- :param description: An optional human-readable string describing
336
- the contents and purpose of the AMI.
337
-
338
- :type no_reboot: bool
339
- :param no_reboot: An optional flag indicating that the bundling process
340
- should not attempt to shutdown the instance before
341
- bundling. If this flag is True, the responsibility
342
- of maintaining file system integrity is left to the
343
- owner of the instance.
344
-
345
- :rtype: string
346
- :return: The new image id
347
- """
348
- params = {'InstanceId': instance_id,
349
- 'Name': name}
350
- if description:
351
- params['Description'] = description
352
- if no_reboot:
353
- params['NoReboot'] = 'true'
354
- img = self.get_object('CreateImage', params, Image, verb='POST')
355
- return img.id
356
-
357
- # ImageAttribute methods
358
-
359
- def get_image_attribute(self, image_id, attribute='launchPermission'):
360
- """
361
- Gets an attribute from an image.
362
-
363
- :type image_id: string
364
- :param image_id: The Amazon image id for which you want info about
365
-
366
- :type attribute: string
367
- :param attribute: The attribute you need information about.
368
- Valid choices are:
369
- * launchPermission
370
- * productCodes
371
- * blockDeviceMapping
372
-
373
- :rtype: :class:`boto.ec2.image.ImageAttribute`
374
- :return: An ImageAttribute object representing the value of the
375
- attribute requested
376
- """
377
- params = {'ImageId': image_id,
378
- 'Attribute': attribute}
379
- return self.get_object('DescribeImageAttribute', params,
380
- ImageAttribute, verb='POST')
381
-
382
- def modify_image_attribute(self, image_id, attribute='launchPermission',
383
- operation='add', user_ids=None, groups=None,
384
- product_codes=None):
385
- """
386
- Changes an attribute of an image.
387
-
388
- :type image_id: string
389
- :param image_id: The image id you wish to change
390
-
391
- :type attribute: string
392
- :param attribute: The attribute you wish to change
393
-
394
- :type operation: string
395
- :param operation: Either add or remove (this is required for changing
396
- launchPermissions)
397
-
398
- :type user_ids: list
399
- :param user_ids: The Amazon IDs of users to add/remove attributes
400
-
401
- :type groups: list
402
- :param groups: The groups to add/remove attributes
403
-
404
- :type product_codes: list
405
- :param product_codes: Amazon DevPay product code. Currently only one
406
- product code can be associated with an AMI. Once
407
- set, the product code cannot be changed or reset.
408
- """
409
- params = {'ImageId': image_id,
410
- 'Attribute': attribute,
411
- 'OperationType': operation}
412
- if user_ids:
413
- self.build_list_params(params, user_ids, 'UserId')
414
- if groups:
415
- self.build_list_params(params, groups, 'UserGroup')
416
- if product_codes:
417
- self.build_list_params(params, product_codes, 'ProductCode')
418
- return self.get_status('ModifyImageAttribute', params, verb='POST')
419
-
420
- def reset_image_attribute(self, image_id, attribute='launchPermission'):
421
- """
422
- Resets an attribute of an AMI to its default value.
423
-
424
- :type image_id: string
425
- :param image_id: ID of the AMI for which an attribute will be described
426
-
427
- :type attribute: string
428
- :param attribute: The attribute to reset
429
-
430
- :rtype: bool
431
- :return: Whether the operation succeeded or not
432
- """
433
- params = {'ImageId': image_id,
434
- 'Attribute': attribute}
435
- return self.get_status('ResetImageAttribute', params, verb='POST')
436
-
437
- # Instance methods
438
-
439
- def get_all_instances(self, instance_ids=None, filters=None):
440
- """
441
- Retrieve all the instances associated with your account.
442
-
443
- :type instance_ids: list
444
- :param instance_ids: A list of strings of instance IDs
445
-
446
- :type filters: dict
447
- :param filters: Optional filters that can be used to limit the
448
- results returned. Filters are provided in the form of a
449
- dictionary consisting of filter names as the key and
450
- filter values as the value. The set of allowable filter
451
- names/values is dependent on the request being performed.
452
- Check the EC2 API guide for details.
453
-
454
- :rtype: list
455
- :return: A list of :class:`boto.ec2.instance.Reservation`
456
- """
457
- params = {}
458
- if instance_ids:
459
- self.build_list_params(params, instance_ids, 'InstanceId')
460
- if filters:
461
- if 'group-id' in filters:
462
- gid = filters.get('group-id')
463
- if not gid.startswith('sg-') or len(gid) != 11:
464
- warnings.warn(
465
- "The group-id filter now requires a security group "
466
- "identifier (sg-*) instead of a group name. To filter "
467
- "by group name use the 'group-name' filter instead.",
468
- UserWarning)
469
- self.build_filter_params(params, filters)
470
- return self.get_list('DescribeInstances', params,
471
- [('item', Reservation)], verb='POST')
472
-
473
- def get_all_instance_status(self, instance_ids=None,
474
- max_results=None, next_token=None,
475
- filters=None):
476
- """
477
- Retrieve all the instances in your account scheduled for maintenance.
478
-
479
- :type instance_ids: list
480
- :param instance_ids: A list of strings of instance IDs
481
-
482
- :type max_results: int
483
- :param max_results: The maximum number of paginated instance
484
- items per response.
485
-
486
- :type next_token: str
487
- :param next_token: A string specifying the next paginated set
488
- of results to return.
489
-
490
- :type filters: dict
491
- :param filters: Optional filters that can be used to limit
492
- the results returned. Filters are provided
493
- in the form of a dictionary consisting of
494
- filter names as the key and filter values
495
- as the value. The set of allowable filter
496
- names/values is dependent on the request
497
- being performed. Check the EC2 API guide
498
- for details.
499
-
500
- :rtype: list
501
- :return: A list of instances that have maintenance scheduled.
502
- """
503
- params = {}
504
- if instance_ids:
505
- self.build_list_params(params, instance_ids, 'InstanceId')
506
- if max_results:
507
- params['MaxResults'] = max_results
508
- if next_token:
509
- params['NextToken'] = next_token
510
- if filters:
511
- self.build_filter_params(params, filters)
512
- return self.get_object('DescribeInstanceStatus', params,
513
- InstanceStatusSet, verb='POST')
514
-
515
- def run_instances(self, image_id, min_count=1, max_count=1,
516
- key_name=None, security_groups=None,
517
- user_data=None, addressing_type=None,
518
- instance_type='m1.small', placement=None,
519
- kernel_id=None, ramdisk_id=None,
520
- monitoring_enabled=False, subnet_id=None,
521
- block_device_map=None,
522
- disable_api_termination=False,
523
- instance_initiated_shutdown_behavior=None,
524
- private_ip_address=None,
525
- placement_group=None, client_token=None,
526
- security_group_ids=None,
527
- additional_info=None, instance_profile_name=None,
528
- instance_profile_arn=None, tenancy=None,
529
- ebs_optimized=False, network_interfaces=None):
530
- """
531
- Runs an image on EC2.
532
-
533
- :type image_id: string
534
- :param image_id: The ID of the image to run.
535
-
536
- :type min_count: int
537
- :param min_count: The minimum number of instances to launch.
538
-
539
- :type max_count: int
540
- :param max_count: The maximum number of instances to launch.
541
-
542
- :type key_name: string
543
- :param key_name: The name of the key pair with which to
544
- launch instances.
545
-
546
- :type security_groups: list of strings
547
- :param security_groups: The names of the security groups with which to
548
- associate instances
549
-
550
- :type user_data: string
551
- :param user_data: The user data passed to the launched instances
552
-
553
- :type instance_type: string
554
- :param instance_type: The type of instance to run:
555
-
556
- * t1.micro
557
- * m1.small
558
- * m1.medium
559
- * m1.large
560
- * m1.xlarge
561
- * c1.medium
562
- * c1.xlarge
563
- * m2.xlarge
564
- * m2.2xlarge
565
- * m2.4xlarge
566
- * cc1.4xlarge
567
- * cg1.4xlarge
568
- * cc2.8xlarge
569
-
570
- :type placement: string
571
- :param placement: The availability zone in which to launch
572
- the instances.
573
-
574
- :type kernel_id: string
575
- :param kernel_id: The ID of the kernel with which to launch the
576
- instances.
577
-
578
- :type ramdisk_id: string
579
- :param ramdisk_id: The ID of the RAM disk with which to launch the
580
- instances.
581
-
582
- :type monitoring_enabled: bool
583
- :param monitoring_enabled: Enable CloudWatch monitoring on
584
- the instance.
585
-
586
- :type subnet_id: string
587
- :param subnet_id: The subnet ID within which to launch the instances
588
- for VPC.
589
-
590
- :type private_ip_address: string
591
- :param private_ip_address: If you're using VPC, you can
592
- optionally use this parameter to assign the instance a
593
- specific available IP address from the subnet (e.g.,
594
- 10.0.0.25).
595
-
596
- :type block_device_map: :class:`boto.ec2.blockdevicemapping.BlockDeviceMapping`
597
- :param block_device_map: A BlockDeviceMapping data structure
598
- describing the EBS volumes associated with the Image.
599
-
600
- :type disable_api_termination: bool
601
- :param disable_api_termination: If True, the instances will be locked
602
- and will not be able to be terminated via the API.
603
-
604
- :type instance_initiated_shutdown_behavior: string
605
- :param instance_initiated_shutdown_behavior: Specifies whether the
606
- instance stops or terminates on instance-initiated shutdown.
607
- Valid values are:
608
-
609
- * stop
610
- * terminate
611
-
612
- :type placement_group: string
613
- :param placement_group: If specified, this is the name of the placement
614
- group in which the instance(s) will be launched.
615
-
616
- :type client_token: string
617
- :param client_token: Unique, case-sensitive identifier you provide
618
- to ensure idempotency of the request. Maximum 64 ASCII characters.
619
-
620
- :type security_group_ids: list of strings
621
- :param security_group_ids: The ID of the VPC security groups with
622
- which to associate instances.
623
-
624
- :type additional_info: string
625
- :param additional_info: Specifies additional information to make
626
- available to the instance(s).
627
-
628
- :type tenancy: string
629
- :param tenancy: The tenancy of the instance you want to
630
- launch. An instance with a tenancy of 'dedicated' runs on
631
- single-tenant hardware and can only be launched into a
632
- VPC. Valid values are:"default" or "dedicated".
633
- NOTE: To use dedicated tenancy you MUST specify a VPC
634
- subnet-ID as well.
635
-
636
- :type instance_profile_arn: string
637
- :param instance_profile_arn: The Amazon resource name (ARN) of
638
- the IAM Instance Profile (IIP) to associate with the instances.
639
-
640
- :type instance_profile_name: string
641
- :param instance_profile_name: The name of
642
- the IAM Instance Profile (IIP) to associate with the instances.
643
-
644
- :type ebs_optimized: bool
645
- :param ebs_optimized: Whether the instance is optimized for
646
- EBS I/O. This optimization provides dedicated throughput
647
- to Amazon EBS and an optimized configuration stack to
648
- provide optimal EBS I/O performance. This optimization
649
- isn't available with all instance types.
650
-
651
- :type network_interfaces: list
652
- :param network_interfaces: A list of
653
- :class:`boto.ec2.networkinterface.NetworkInterfaceSpecification`
654
-
655
- :rtype: Reservation
656
- :return: The :class:`boto.ec2.instance.Reservation` associated with
657
- the request for machines
658
- """
659
- params = {'ImageId': image_id,
660
- 'MinCount': min_count,
661
- 'MaxCount': max_count}
662
- if key_name:
663
- params['KeyName'] = key_name
664
- if security_group_ids:
665
- l = []
666
- for group in security_group_ids:
667
- if isinstance(group, SecurityGroup):
668
- l.append(group.id)
669
- else:
670
- l.append(group)
671
- self.build_list_params(params, l, 'SecurityGroupId')
672
- if security_groups:
673
- l = []
674
- for group in security_groups:
675
- if isinstance(group, SecurityGroup):
676
- l.append(group.name)
677
- else:
678
- l.append(group)
679
- self.build_list_params(params, l, 'SecurityGroup')
680
- if user_data:
681
- params['UserData'] = base64.b64encode(user_data)
682
- if addressing_type:
683
- params['AddressingType'] = addressing_type
684
- if instance_type:
685
- params['InstanceType'] = instance_type
686
- if placement:
687
- params['Placement.AvailabilityZone'] = placement
688
- if placement_group:
689
- params['Placement.GroupName'] = placement_group
690
- if tenancy:
691
- params['Placement.Tenancy'] = tenancy
692
- if kernel_id:
693
- params['KernelId'] = kernel_id
694
- if ramdisk_id:
695
- params['RamdiskId'] = ramdisk_id
696
- if monitoring_enabled:
697
- params['Monitoring.Enabled'] = 'true'
698
- if subnet_id:
699
- params['SubnetId'] = subnet_id
700
- if private_ip_address:
701
- params['PrivateIpAddress'] = private_ip_address
702
- if block_device_map:
703
- block_device_map.build_list_params(params)
704
- if disable_api_termination:
705
- params['DisableApiTermination'] = 'true'
706
- if instance_initiated_shutdown_behavior:
707
- val = instance_initiated_shutdown_behavior
708
- params['InstanceInitiatedShutdownBehavior'] = val
709
- if client_token:
710
- params['ClientToken'] = client_token
711
- if additional_info:
712
- params['AdditionalInfo'] = additional_info
713
- if instance_profile_name:
714
- params['IamInstanceProfile.Name'] = instance_profile_name
715
- if instance_profile_arn:
716
- params['IamInstanceProfile.Arn'] = instance_profile_arn
717
- if ebs_optimized:
718
- params['EbsOptimized'] = 'true'
719
- if network_interfaces:
720
- network_interfaces.build_list_params(params)
721
- return self.get_object('RunInstances', params, Reservation,
722
- verb='POST')
723
-
724
- def terminate_instances(self, instance_ids=None):
725
- """
726
- Terminate the instances specified
727
-
728
- :type instance_ids: list
729
- :param instance_ids: A list of strings of the Instance IDs to terminate
730
-
731
- :rtype: list
732
- :return: A list of the instances terminated
733
- """
734
- params = {}
735
- if instance_ids:
736
- self.build_list_params(params, instance_ids, 'InstanceId')
737
- return self.get_list('TerminateInstances', params,
738
- [('item', Instance)], verb='POST')
739
-
740
- def stop_instances(self, instance_ids=None, force=False):
741
- """
742
- Stop the instances specified
743
-
744
- :type instance_ids: list
745
- :param instance_ids: A list of strings of the Instance IDs to stop
746
-
747
- :type force: bool
748
- :param force: Forces the instance to stop
749
-
750
- :rtype: list
751
- :return: A list of the instances stopped
752
- """
753
- params = {}
754
- if force:
755
- params['Force'] = 'true'
756
- if instance_ids:
757
- self.build_list_params(params, instance_ids, 'InstanceId')
758
- return self.get_list('StopInstances', params,
759
- [('item', Instance)], verb='POST')
760
-
761
- def start_instances(self, instance_ids=None):
762
- """
763
- Start the instances specified
764
-
765
- :type instance_ids: list
766
- :param instance_ids: A list of strings of the Instance IDs to start
767
-
768
- :rtype: list
769
- :return: A list of the instances started
770
- """
771
- params = {}
772
- if instance_ids:
773
- self.build_list_params(params, instance_ids, 'InstanceId')
774
- return self.get_list('StartInstances', params,
775
- [('item', Instance)], verb='POST')
776
-
777
- def get_console_output(self, instance_id):
778
- """
779
- Retrieves the console output for the specified instance.
780
-
781
- :type instance_id: string
782
- :param instance_id: The instance ID of a running instance on the cloud.
783
-
784
- :rtype: :class:`boto.ec2.instance.ConsoleOutput`
785
- :return: The console output as a ConsoleOutput object
786
- """
787
- params = {}
788
- self.build_list_params(params, [instance_id], 'InstanceId')
789
- return self.get_object('GetConsoleOutput', params,
790
- ConsoleOutput, verb='POST')
791
-
792
- def reboot_instances(self, instance_ids=None):
793
- """
794
- Reboot the specified instances.
795
-
796
- :type instance_ids: list
797
- :param instance_ids: The instances to terminate and reboot
798
- """
799
- params = {}
800
- if instance_ids:
801
- self.build_list_params(params, instance_ids, 'InstanceId')
802
- return self.get_status('RebootInstances', params)
803
-
804
- def confirm_product_instance(self, product_code, instance_id):
805
- params = {'ProductCode': product_code,
806
- 'InstanceId': instance_id}
807
- rs = self.get_object('ConfirmProductInstance', params,
808
- ResultSet, verb='POST')
809
- return (rs.status, rs.ownerId)
810
-
811
- # InstanceAttribute methods
812
-
813
- def get_instance_attribute(self, instance_id, attribute):
814
- """
815
- Gets an attribute from an instance.
816
-
817
- :type instance_id: string
818
- :param instance_id: The Amazon id of the instance
819
-
820
- :type attribute: string
821
- :param attribute: The attribute you need information about
822
- Valid choices are:
823
-
824
- * instanceType
825
- * kernel
826
- * ramdisk
827
- * userData
828
- * disableApiTermination
829
- * instanceInitiatedShutdownBehavior
830
- * rootDeviceName
831
- * blockDeviceMapping
832
- * productCodes
833
- * sourceDestCheck
834
- * groupSet
835
- * ebsOptimized
836
-
837
- :rtype: :class:`boto.ec2.image.InstanceAttribute`
838
- :return: An InstanceAttribute object representing the value of the
839
- attribute requested
840
- """
841
- params = {'InstanceId': instance_id}
842
- if attribute:
843
- params['Attribute'] = attribute
844
- return self.get_object('DescribeInstanceAttribute', params,
845
- InstanceAttribute, verb='POST')
846
-
847
- def modify_instance_attribute(self, instance_id, attribute, value):
848
- """
849
- Changes an attribute of an instance
850
-
851
- :type instance_id: string
852
- :param instance_id: The instance id you wish to change
853
-
854
- :type attribute: string
855
- :param attribute: The attribute you wish to change.
856
-
857
- * instanceType - A valid instance type (m1.small)
858
- * kernel - Kernel ID (None)
859
- * ramdisk - Ramdisk ID (None)
860
- * userData - Base64 encoded String (None)
861
- * disableApiTermination - Boolean (true)
862
- * instanceInitiatedShutdownBehavior - stop|terminate
863
- * blockDeviceMapping - List of strings - ie: ['/dev/sda=false']
864
- * sourceDestCheck - Boolean (true)
865
- * groupSet - Set of Security Groups or IDs
866
- * ebsOptimized - Boolean (false)
867
-
868
- :type value: string
869
- :param value: The new value for the attribute
870
-
871
- :rtype: bool
872
- :return: Whether the operation succeeded or not
873
- """
874
- # Allow a bool to be passed in for value of disableApiTermination
875
- bool_reqs = ('disableapitermination',
876
- 'sourcedestcheck',
877
- 'ebsoptimized')
878
- if attribute.lower() in bool_reqs:
879
- if isinstance(value, bool):
880
- if value:
881
- value = 'true'
882
- else:
883
- value = 'false'
884
-
885
- params = {'InstanceId': instance_id}
886
-
887
- # groupSet is handled differently from other arguments
888
- if attribute.lower() == 'groupset':
889
- for idx, sg in enumerate(value):
890
- if isinstance(sg, SecurityGroup):
891
- sg = sg.id
892
- params['GroupId.%s' % (idx + 1)] = sg
893
- elif attribute.lower() == 'blockdevicemapping':
894
- for idx, kv in enumerate(value):
895
- dev_name, _, flag = kv.partition('=')
896
- pre = 'BlockDeviceMapping.%d' % (idx + 1)
897
- params['%s.DeviceName' % pre] = dev_name
898
- params['%s.Ebs.DeleteOnTermination' % pre] = flag or 'true'
899
- else:
900
- # for backwards compatibility handle lowercase first letter
901
- attribute = attribute[0].upper() + attribute[1:]
902
- params['%s.Value' % attribute] = value
903
-
904
- return self.get_status('ModifyInstanceAttribute', params, verb='POST')
905
-
906
- def reset_instance_attribute(self, instance_id, attribute):
907
- """
908
- Resets an attribute of an instance to its default value.
909
-
910
- :type instance_id: string
911
- :param instance_id: ID of the instance
912
-
913
- :type attribute: string
914
- :param attribute: The attribute to reset. Valid values are:
915
- kernel|ramdisk
916
-
917
- :rtype: bool
918
- :return: Whether the operation succeeded or not
919
- """
920
- params = {'InstanceId': instance_id,
921
- 'Attribute': attribute}
922
- return self.get_status('ResetInstanceAttribute', params, verb='POST')
923
-
924
- # Spot Instances
925
-
926
- def get_all_spot_instance_requests(self, request_ids=None,
927
- filters=None):
928
- """
929
- Retrieve all the spot instances requests associated with your account.
930
-
931
- :type request_ids: list
932
- :param request_ids: A list of strings of spot instance request IDs
933
-
934
- :type filters: dict
935
- :param filters: Optional filters that can be used to limit the
936
- results returned. Filters are provided in the form of a
937
- dictionary consisting of filter names as the key and
938
- filter values as the value. The set of allowable filter
939
- names/values is dependent on the request being performed.
940
- Check the EC2 API guide for details.
941
-
942
- :rtype: list
943
- :return: A list of
944
- :class:`boto.ec2.spotinstancerequest.SpotInstanceRequest`
945
- """
946
- params = {}
947
- if request_ids:
948
- self.build_list_params(params, request_ids, 'SpotInstanceRequestId')
949
- if filters:
950
- if 'launch.group-id' in filters:
951
- lgid = filters.get('launch.group-id')
952
- if not lgid.startswith('sg-') or len(lgid) != 11:
953
- warnings.warn(
954
- "The 'launch.group-id' filter now requires a security "
955
- "group id (sg-*) and no longer supports filtering by "
956
- "group name. Please update your filters accordingly.",
957
- UserWarning)
958
- self.build_filter_params(params, filters)
959
- return self.get_list('DescribeSpotInstanceRequests', params,
960
- [('item', SpotInstanceRequest)], verb='POST')
961
-
962
- def get_spot_price_history(self, start_time=None, end_time=None,
963
- instance_type=None, product_description=None,
964
- availability_zone=None):
965
- """
966
- Retrieve the recent history of spot instances pricing.
967
-
968
- :type start_time: str
969
- :param start_time: An indication of how far back to provide price
970
- changes for. An ISO8601 DateTime string.
971
-
972
- :type end_time: str
973
- :param end_time: An indication of how far forward to provide price
974
- changes for. An ISO8601 DateTime string.
975
-
976
- :type instance_type: str
977
- :param instance_type: Filter responses to a particular instance type.
978
-
979
- :type product_description: str
980
- :param product_description: Filter responses to a particular platform.
981
- Valid values are currently:
982
-
983
- * Linux/UNIX
984
- * SUSE Linux
985
- * Windows
986
- * Linux/UNIX (Amazon VPC)
987
- * SUSE Linux (Amazon VPC)
988
- * Windows (Amazon VPC)
989
-
990
- :type availability_zone: str
991
- :param availability_zone: The availability zone for which prices
992
- should be returned. If not specified, data for all
993
- availability zones will be returned.
994
-
995
- :rtype: list
996
- :return: A list tuples containing price and timestamp.
997
- """
998
- params = {}
999
- if start_time:
1000
- params['StartTime'] = start_time
1001
- if end_time:
1002
- params['EndTime'] = end_time
1003
- if instance_type:
1004
- params['InstanceType'] = instance_type
1005
- if product_description:
1006
- params['ProductDescription'] = product_description
1007
- if availability_zone:
1008
- params['AvailabilityZone'] = availability_zone
1009
- return self.get_list('DescribeSpotPriceHistory', params,
1010
- [('item', SpotPriceHistory)], verb='POST')
1011
-
1012
- def request_spot_instances(self, price, image_id, count=1, type='one-time',
1013
- valid_from=None, valid_until=None,
1014
- launch_group=None, availability_zone_group=None,
1015
- key_name=None, security_groups=None,
1016
- user_data=None, addressing_type=None,
1017
- instance_type='m1.small', placement=None,
1018
- kernel_id=None, ramdisk_id=None,
1019
- monitoring_enabled=False, subnet_id=None,
1020
- placement_group=None,
1021
- block_device_map=None,
1022
- instance_profile_arn=None,
1023
- instance_profile_name=None,
1024
- security_group_ids=None,
1025
- ebs_optimized=False,
1026
- network_interfaces=None):
1027
- """
1028
- Request instances on the spot market at a particular price.
1029
-
1030
- :type price: str
1031
- :param price: The maximum price of your bid
1032
-
1033
- :type image_id: string
1034
- :param image_id: The ID of the image to run
1035
-
1036
- :type count: int
1037
- :param count: The of instances to requested
1038
-
1039
- :type type: str
1040
- :param type: Type of request. Can be 'one-time' or 'persistent'.
1041
- Default is one-time.
1042
-
1043
- :type valid_from: str
1044
- :param valid_from: Start date of the request. An ISO8601 time string.
1045
-
1046
- :type valid_until: str
1047
- :param valid_until: End date of the request. An ISO8601 time string.
1048
-
1049
- :type launch_group: str
1050
- :param launch_group: If supplied, all requests will be fulfilled
1051
- as a group.
1052
-
1053
- :type availability_zone_group: str
1054
- :param availability_zone_group: If supplied, all requests will be
1055
- fulfilled within a single availability zone.
1056
-
1057
- :type key_name: string
1058
- :param key_name: The name of the key pair with which to
1059
- launch instances
1060
-
1061
- :type security_groups: list of strings
1062
- :param security_groups: The names of the security groups with which to
1063
- associate instances
1064
-
1065
- :type user_data: string
1066
- :param user_data: The user data passed to the launched instances
1067
-
1068
- :type instance_type: string
1069
- :param instance_type: The type of instance to run:
1070
-
1071
- * m1.small
1072
- * m1.large
1073
- * m1.xlarge
1074
- * c1.medium
1075
- * c1.xlarge
1076
- * m2.xlarge
1077
- * m2.2xlarge
1078
- * m2.4xlarge
1079
- * cc1.4xlarge
1080
- * t1.micro
1081
-
1082
- :type placement: string
1083
- :param placement: The availability zone in which to launch
1084
- the instances
1085
-
1086
- :type kernel_id: string
1087
- :param kernel_id: The ID of the kernel with which to launch the
1088
- instances
1089
-
1090
- :type ramdisk_id: string
1091
- :param ramdisk_id: The ID of the RAM disk with which to launch the
1092
- instances
1093
-
1094
- :type monitoring_enabled: bool
1095
- :param monitoring_enabled: Enable CloudWatch monitoring on
1096
- the instance.
1097
-
1098
- :type subnet_id: string
1099
- :param subnet_id: The subnet ID within which to launch the instances
1100
- for VPC.
1101
-
1102
- :type placement_group: string
1103
- :param placement_group: If specified, this is the name of the placement
1104
- group in which the instance(s) will be launched.
1105
-
1106
- :type block_device_map: :class:`boto.ec2.blockdevicemapping.BlockDeviceMapping`
1107
- :param block_device_map: A BlockDeviceMapping data structure
1108
- describing the EBS volumes associated with the Image.
1109
-
1110
- :type security_group_ids: list of strings
1111
- :param security_group_ids: The ID of the VPC security groups with
1112
- which to associate instances.
1113
-
1114
- :type instance_profile_arn: string
1115
- :param instance_profile_arn: The Amazon resource name (ARN) of
1116
- the IAM Instance Profile (IIP) to associate with the instances.
1117
-
1118
- :type instance_profile_name: string
1119
- :param instance_profile_name: The name of
1120
- the IAM Instance Profile (IIP) to associate with the instances.
1121
-
1122
- :type ebs_optimized: bool
1123
- :param ebs_optimized: Whether the instance is optimized for
1124
- EBS I/O. This optimization provides dedicated throughput
1125
- to Amazon EBS and an optimized configuration stack to
1126
- provide optimal EBS I/O performance. This optimization
1127
- isn't available with all instance types.
1128
-
1129
- :type network_interfaces: list
1130
- :param network_interfaces: A list of
1131
- :class:`boto.ec2.networkinterface.NetworkInterfaceSpecification`
1132
-
1133
- :rtype: Reservation
1134
- :return: The :class:`boto.ec2.spotinstancerequest.SpotInstanceRequest`
1135
- associated with the request for machines
1136
- """
1137
- ls = 'LaunchSpecification'
1138
- params = {'%s.ImageId' % ls: image_id,
1139
- 'Type': type,
1140
- 'SpotPrice': price}
1141
- if count:
1142
- params['InstanceCount'] = count
1143
- if valid_from:
1144
- params['ValidFrom'] = valid_from
1145
- if valid_until:
1146
- params['ValidUntil'] = valid_until
1147
- if launch_group:
1148
- params['LaunchGroup'] = launch_group
1149
- if availability_zone_group:
1150
- params['AvailabilityZoneGroup'] = availability_zone_group
1151
- if key_name:
1152
- params['%s.KeyName' % ls] = key_name
1153
- if security_group_ids:
1154
- l = []
1155
- for group in security_group_ids:
1156
- if isinstance(group, SecurityGroup):
1157
- l.append(group.id)
1158
- else:
1159
- l.append(group)
1160
- self.build_list_params(params, l,
1161
- '%s.SecurityGroupId' % ls)
1162
- if security_groups:
1163
- l = []
1164
- for group in security_groups:
1165
- if isinstance(group, SecurityGroup):
1166
- l.append(group.name)
1167
- else:
1168
- l.append(group)
1169
- self.build_list_params(params, l, '%s.SecurityGroup' % ls)
1170
- if user_data:
1171
- params['%s.UserData' % ls] = base64.b64encode(user_data)
1172
- if addressing_type:
1173
- params['%s.AddressingType' % ls] = addressing_type
1174
- if instance_type:
1175
- params['%s.InstanceType' % ls] = instance_type
1176
- if placement:
1177
- params['%s.Placement.AvailabilityZone' % ls] = placement
1178
- if kernel_id:
1179
- params['%s.KernelId' % ls] = kernel_id
1180
- if ramdisk_id:
1181
- params['%s.RamdiskId' % ls] = ramdisk_id
1182
- if monitoring_enabled:
1183
- params['%s.Monitoring.Enabled' % ls] = 'true'
1184
- if subnet_id:
1185
- params['%s.SubnetId' % ls] = subnet_id
1186
- if placement_group:
1187
- params['%s.Placement.GroupName' % ls] = placement_group
1188
- if block_device_map:
1189
- block_device_map.build_list_params(params, '%s.' % ls)
1190
- if instance_profile_name:
1191
- params['%s.IamInstanceProfile.Name' % ls] = instance_profile_name
1192
- if instance_profile_arn:
1193
- params['%s.IamInstanceProfile.Arn' % ls] = instance_profile_arn
1194
- if ebs_optimized:
1195
- params['%s.EbsOptimized' % ls] = 'true'
1196
- if network_interfaces:
1197
- network_interfaces.build_list_params(params, prefix=ls + '.')
1198
- return self.get_list('RequestSpotInstances', params,
1199
- [('item', SpotInstanceRequest)],
1200
- verb='POST')
1201
-
1202
- def cancel_spot_instance_requests(self, request_ids):
1203
- """
1204
- Cancel the specified Spot Instance Requests.
1205
-
1206
- :type request_ids: list
1207
- :param request_ids: A list of strings of the Request IDs to terminate
1208
-
1209
- :rtype: list
1210
- :return: A list of the instances terminated
1211
- """
1212
- params = {}
1213
- if request_ids:
1214
- self.build_list_params(params, request_ids, 'SpotInstanceRequestId')
1215
- return self.get_list('CancelSpotInstanceRequests', params,
1216
- [('item', Instance)], verb='POST')
1217
-
1218
- def get_spot_datafeed_subscription(self):
1219
- """
1220
- Return the current spot instance data feed subscription
1221
- associated with this account, if any.
1222
-
1223
- :rtype: :class:`boto.ec2.spotdatafeedsubscription.SpotDatafeedSubscription`
1224
- :return: The datafeed subscription object or None
1225
- """
1226
- return self.get_object('DescribeSpotDatafeedSubscription',
1227
- None, SpotDatafeedSubscription, verb='POST')
1228
-
1229
- def create_spot_datafeed_subscription(self, bucket, prefix):
1230
- """
1231
- Create a spot instance datafeed subscription for this account.
1232
-
1233
- :type bucket: str or unicode
1234
- :param bucket: The name of the bucket where spot instance data
1235
- will be written. The account issuing this request
1236
- must have FULL_CONTROL access to the bucket
1237
- specified in the request.
1238
-
1239
- :type prefix: str or unicode
1240
- :param prefix: An optional prefix that will be pre-pended to all
1241
- data files written to the bucket.
1242
-
1243
- :rtype: :class:`boto.ec2.spotdatafeedsubscription.SpotDatafeedSubscription`
1244
- :return: The datafeed subscription object or None
1245
- """
1246
- params = {'Bucket': bucket}
1247
- if prefix:
1248
- params['Prefix'] = prefix
1249
- return self.get_object('CreateSpotDatafeedSubscription',
1250
- params, SpotDatafeedSubscription, verb='POST')
1251
-
1252
- def delete_spot_datafeed_subscription(self):
1253
- """
1254
- Delete the current spot instance data feed subscription
1255
- associated with this account
1256
-
1257
- :rtype: bool
1258
- :return: True if successful
1259
- """
1260
- return self.get_status('DeleteSpotDatafeedSubscription',
1261
- None, verb='POST')
1262
-
1263
- # Zone methods
1264
-
1265
- def get_all_zones(self, zones=None, filters=None):
1266
- """
1267
- Get all Availability Zones associated with the current region.
1268
-
1269
- :type zones: list
1270
- :param zones: Optional list of zones. If this list is present,
1271
- only the Zones associated with these zone names
1272
- will be returned.
1273
-
1274
- :type filters: dict
1275
- :param filters: Optional filters that can be used to limit
1276
- the results returned. Filters are provided
1277
- in the form of a dictionary consisting of
1278
- filter names as the key and filter values
1279
- as the value. The set of allowable filter
1280
- names/values is dependent on the request
1281
- being performed. Check the EC2 API guide
1282
- for details.
1283
-
1284
- :rtype: list of :class:`boto.ec2.zone.Zone`
1285
- :return: The requested Zone objects
1286
- """
1287
- params = {}
1288
- if zones:
1289
- self.build_list_params(params, zones, 'ZoneName')
1290
- if filters:
1291
- self.build_filter_params(params, filters)
1292
- return self.get_list('DescribeAvailabilityZones', params,
1293
- [('item', Zone)], verb='POST')
1294
-
1295
- # Address methods
1296
-
1297
- def get_all_addresses(self, addresses=None, filters=None, allocation_ids=None):
1298
- """
1299
- Get all EIP's associated with the current credentials.
1300
-
1301
- :type addresses: list
1302
- :param addresses: Optional list of addresses. If this list is present,
1303
- only the Addresses associated with these addresses
1304
- will be returned.
1305
-
1306
- :type filters: dict
1307
- :param filters: Optional filters that can be used to limit
1308
- the results returned. Filters are provided
1309
- in the form of a dictionary consisting of
1310
- filter names as the key and filter values
1311
- as the value. The set of allowable filter
1312
- names/values is dependent on the request
1313
- being performed. Check the EC2 API guide
1314
- for details.
1315
-
1316
- :type allocation_ids: list
1317
- :param allocation_ids: Optional list of allocation IDs. If this list is
1318
- present, only the Addresses associated with the given
1319
- allocation IDs will be returned.
1320
-
1321
- :rtype: list of :class:`boto.ec2.address.Address`
1322
- :return: The requested Address objects
1323
- """
1324
- params = {}
1325
- if addresses:
1326
- self.build_list_params(params, addresses, 'PublicIp')
1327
- if allocation_ids:
1328
- self.build_list_params(params, allocation_ids, 'AllocationId')
1329
- if filters:
1330
- self.build_filter_params(params, filters)
1331
- return self.get_list('DescribeAddresses', params, [('item', Address)], verb='POST')
1332
-
1333
- def allocate_address(self, domain=None):
1334
- """
1335
- Allocate a new Elastic IP address and associate it with your account.
1336
-
1337
- :type domain: string
1338
- :param domain: Optional string. If domain is set to "vpc" the address
1339
- will be allocated to VPC . Will return address
1340
- object with allocation_id.
1341
-
1342
- :rtype: :class:`boto.ec2.address.Address`
1343
- :return: The newly allocated Address
1344
- """
1345
- params = {}
1346
-
1347
- if domain is not None:
1348
- params['Domain'] = domain
1349
-
1350
- return self.get_object('AllocateAddress', params, Address, verb='POST')
1351
-
1352
- def assign_private_ip_addresses(self, network_interface_id=None,
1353
- private_ip_addresses=None,
1354
- secondary_private_ip_address_count=None,
1355
- allow_reassignment=False):
1356
- """
1357
- Assigns one or more secondary private IP addresses to a network
1358
- interface in Amazon VPC.
1359
-
1360
- :type network_interface_id: string
1361
- :param network_interface_id: The network interface to which the IP
1362
- address will be assigned.
1363
-
1364
- :type private_ip_addresses: list
1365
- :param private_ip_addresses: Assigns the specified IP addresses as
1366
- secondary IP addresses to the network interface.
1367
-
1368
- :type secondary_private_ip_address_count: int
1369
- :param secondary_private_ip_address_count: The number of secondary IP
1370
- addresses to assign to the network interface. You cannot specify
1371
- this parameter when also specifying private_ip_addresses.
1372
-
1373
- :type allow_reassignment: bool
1374
- :param allow_reassignment: Specifies whether to allow an IP address
1375
- that is already assigned to another network interface or instance
1376
- to be reassigned to the specified network interface.
1377
-
1378
- :rtype: bool
1379
- :return: True if successful
1380
- """
1381
- params = {}
1382
-
1383
- if network_interface_id is not None:
1384
- params['NetworkInterfaceId'] = network_interface_id
1385
-
1386
- if private_ip_addresses is not None:
1387
- self.build_list_params(params, private_ip_addresses,
1388
- 'PrivateIpAddress')
1389
- elif secondary_private_ip_address_count is not None:
1390
- params['SecondaryPrivateIpAddressCount'] = \
1391
- secondary_private_ip_address_count
1392
-
1393
- if allow_reassignment:
1394
- params['AllowReassignment'] = 'true'
1395
-
1396
- return self.get_status('AssignPrivateIpAddresses', params, verb='POST')
1397
-
1398
- def associate_address(self, instance_id=None, public_ip=None,
1399
- allocation_id=None, network_interface_id=None,
1400
- private_ip_address=None, allow_reassociation=False):
1401
- """
1402
- Associate an Elastic IP address with a currently running instance.
1403
- This requires one of ``public_ip`` or ``allocation_id`` depending
1404
- on if you're associating a VPC address or a plain EC2 address.
1405
-
1406
- When using an Allocation ID, make sure to pass ``None`` for ``public_ip``
1407
- as EC2 expects a single parameter and if ``public_ip`` is passed boto
1408
- will preference that instead of ``allocation_id``.
1409
-
1410
- :type instance_id: string
1411
- :param instance_id: The ID of the instance
1412
-
1413
- :type public_ip: string
1414
- :param public_ip: The public IP address for EC2 based allocations.
1415
-
1416
- :type allocation_id: string
1417
- :param allocation_id: The allocation ID for a VPC-based elastic IP.
1418
-
1419
- :type network_interface_id: string
1420
- :param network_interface_id: The network interface ID to which
1421
- elastic IP is to be assigned to
1422
-
1423
- :type private_ip_address: string
1424
- :param private_ip_address: The primary or secondary private IP address
1425
- to associate with the Elastic IP address.
1426
-
1427
- :type allow_reassociation: bool
1428
- :param allow_reassociation: Specify this option to allow an Elastic IP
1429
- address that is already associated with another network interface
1430
- or instance to be re-associated with the specified instance or
1431
- interface.
1432
-
1433
- :rtype: bool
1434
- :return: True if successful
1435
- """
1436
- params = {}
1437
- if instance_id is not None:
1438
- params['InstanceId'] = instance_id
1439
- elif network_interface_id is not None:
1440
- params['NetworkInterfaceId'] = network_interface_id
1441
-
1442
- if public_ip is not None:
1443
- params['PublicIp'] = public_ip
1444
- elif allocation_id is not None:
1445
- params['AllocationId'] = allocation_id
1446
-
1447
- if private_ip_address is not None:
1448
- params['PrivateIpAddress'] = private_ip_address
1449
-
1450
- if allow_reassociation:
1451
- params['AllowReassociation'] = 'true'
1452
-
1453
- return self.get_status('AssociateAddress', params, verb='POST')
1454
-
1455
- def disassociate_address(self, public_ip=None, association_id=None):
1456
- """
1457
- Disassociate an Elastic IP address from a currently running instance.
1458
-
1459
- :type public_ip: string
1460
- :param public_ip: The public IP address for EC2 elastic IPs.
1461
-
1462
- :type association_id: string
1463
- :param association_id: The association ID for a VPC based elastic ip.
1464
-
1465
- :rtype: bool
1466
- :return: True if successful
1467
- """
1468
- params = {}
1469
-
1470
- if public_ip is not None:
1471
- params['PublicIp'] = public_ip
1472
- elif association_id is not None:
1473
- params['AssociationId'] = association_id
1474
-
1475
- return self.get_status('DisassociateAddress', params, verb='POST')
1476
-
1477
- def release_address(self, public_ip=None, allocation_id=None):
1478
- """
1479
- Free up an Elastic IP address. Pass a public IP address to
1480
- release an EC2 Elastic IP address and an AllocationId to
1481
- release a VPC Elastic IP address. You should only pass
1482
- one value.
1483
-
1484
- This requires one of ``public_ip`` or ``allocation_id`` depending
1485
- on if you're associating a VPC address or a plain EC2 address.
1486
-
1487
- When using an Allocation ID, make sure to pass ``None`` for ``public_ip``
1488
- as EC2 expects a single parameter and if ``public_ip`` is passed boto
1489
- will preference that instead of ``allocation_id``.
1490
-
1491
- :type public_ip: string
1492
- :param public_ip: The public IP address for EC2 elastic IPs.
1493
-
1494
- :type allocation_id: string
1495
- :param allocation_id: The Allocation ID for VPC elastic IPs.
1496
-
1497
- :rtype: bool
1498
- :return: True if successful
1499
- """
1500
- params = {}
1501
-
1502
- if public_ip is not None:
1503
- params['PublicIp'] = public_ip
1504
- elif allocation_id is not None:
1505
- params['AllocationId'] = allocation_id
1506
-
1507
- return self.get_status('ReleaseAddress', params, verb='POST')
1508
-
1509
- def unassign_private_ip_addresses(self, network_interface_id=None,
1510
- private_ip_addresses=None):
1511
- """
1512
- Unassigns one or more secondary private IP addresses from a network
1513
- interface in Amazon VPC.
1514
-
1515
- :type network_interface_id: string
1516
- :param network_interface_id: The network interface from which the
1517
- secondary private IP address will be unassigned.
1518
-
1519
- :type private_ip_addresses: list
1520
- :param private_ip_addresses: Specifies the secondary private IP
1521
- addresses that you want to unassign from the network interface.
1522
-
1523
- :rtype: bool
1524
- :return: True if successful
1525
- """
1526
- params = {}
1527
-
1528
- if network_interface_id is not None:
1529
- params['NetworkInterfaceId'] = network_interface_id
1530
-
1531
- if private_ip_addresses is not None:
1532
- self.build_list_params(params, private_ip_addresses,
1533
- 'PrivateIpAddress')
1534
-
1535
- return self.get_status('UnassignPrivateIpAddresses', params,
1536
- verb='POST')
1537
-
1538
- # Volume methods
1539
-
1540
- def get_all_volumes(self, volume_ids=None, filters=None):
1541
- """
1542
- Get all Volumes associated with the current credentials.
1543
-
1544
- :type volume_ids: list
1545
- :param volume_ids: Optional list of volume ids. If this list
1546
- is present, only the volumes associated with
1547
- these volume ids will be returned.
1548
-
1549
- :type filters: dict
1550
- :param filters: Optional filters that can be used to limit
1551
- the results returned. Filters are provided
1552
- in the form of a dictionary consisting of
1553
- filter names as the key and filter values
1554
- as the value. The set of allowable filter
1555
- names/values is dependent on the request
1556
- being performed. Check the EC2 API guide
1557
- for details.
1558
-
1559
- :rtype: list of :class:`boto.ec2.volume.Volume`
1560
- :return: The requested Volume objects
1561
- """
1562
- params = {}
1563
- if volume_ids:
1564
- self.build_list_params(params, volume_ids, 'VolumeId')
1565
- if filters:
1566
- self.build_filter_params(params, filters)
1567
- return self.get_list('DescribeVolumes', params,
1568
- [('item', Volume)], verb='POST')
1569
-
1570
- def get_all_volume_status(self, volume_ids=None,
1571
- max_results=None, next_token=None,
1572
- filters=None):
1573
- """
1574
- Retrieve the status of one or more volumes.
1575
-
1576
- :type volume_ids: list
1577
- :param volume_ids: A list of strings of volume IDs
1578
-
1579
- :type max_results: int
1580
- :param max_results: The maximum number of paginated instance
1581
- items per response.
1582
-
1583
- :type next_token: str
1584
- :param next_token: A string specifying the next paginated set
1585
- of results to return.
1586
-
1587
- :type filters: dict
1588
- :param filters: Optional filters that can be used to limit
1589
- the results returned. Filters are provided
1590
- in the form of a dictionary consisting of
1591
- filter names as the key and filter values
1592
- as the value. The set of allowable filter
1593
- names/values is dependent on the request
1594
- being performed. Check the EC2 API guide
1595
- for details.
1596
-
1597
- :rtype: list
1598
- :return: A list of volume status.
1599
- """
1600
- params = {}
1601
- if volume_ids:
1602
- self.build_list_params(params, volume_ids, 'VolumeId')
1603
- if max_results:
1604
- params['MaxResults'] = max_results
1605
- if next_token:
1606
- params['NextToken'] = next_token
1607
- if filters:
1608
- self.build_filter_params(params, filters)
1609
- return self.get_object('DescribeVolumeStatus', params,
1610
- VolumeStatusSet, verb='POST')
1611
-
1612
- def enable_volume_io(self, volume_id):
1613
- """
1614
- Enables I/O operations for a volume that had I/O operations
1615
- disabled because the data on the volume was potentially inconsistent.
1616
-
1617
- :type volume_id: str
1618
- :param volume_id: The ID of the volume.
1619
-
1620
- :rtype: bool
1621
- :return: True if successful
1622
- """
1623
- params = {'VolumeId': volume_id}
1624
- return self.get_status('EnableVolumeIO', params, verb='POST')
1625
-
1626
- def get_volume_attribute(self, volume_id,
1627
- attribute='autoEnableIO'):
1628
- """
1629
- Describes attribute of the volume.
1630
-
1631
- :type volume_id: str
1632
- :param volume_id: The ID of the volume.
1633
-
1634
- :type attribute: str
1635
- :param attribute: The requested attribute. Valid values are:
1636
-
1637
- * autoEnableIO
1638
-
1639
- :rtype: list of :class:`boto.ec2.volume.VolumeAttribute`
1640
- :return: The requested Volume attribute
1641
- """
1642
- params = {'VolumeId': volume_id, 'Attribute': attribute}
1643
- return self.get_object('DescribeVolumeAttribute', params,
1644
- VolumeAttribute, verb='POST')
1645
-
1646
- def modify_volume_attribute(self, volume_id, attribute, new_value):
1647
- """
1648
- Changes an attribute of an Volume.
1649
-
1650
- :type volume_id: string
1651
- :param volume_id: The volume id you wish to change
1652
-
1653
- :type attribute: string
1654
- :param attribute: The attribute you wish to change. Valid values are:
1655
- AutoEnableIO.
1656
-
1657
- :type new_value: string
1658
- :param new_value: The new value of the attribute.
1659
- """
1660
- params = {'VolumeId': volume_id}
1661
- if attribute == 'AutoEnableIO':
1662
- params['AutoEnableIO.Value'] = new_value
1663
- return self.get_status('ModifyVolumeAttribute', params, verb='POST')
1664
-
1665
- def create_volume(self, size, zone, snapshot=None,
1666
- volume_type=None, iops=None):
1667
- """
1668
- Create a new EBS Volume.
1669
-
1670
- :type size: int
1671
- :param size: The size of the new volume, in GiB
1672
-
1673
- :type zone: string or :class:`boto.ec2.zone.Zone`
1674
- :param zone: The availability zone in which the Volume will be created.
1675
-
1676
- :type snapshot: string or :class:`boto.ec2.snapshot.Snapshot`
1677
- :param snapshot: The snapshot from which the new Volume will be
1678
- created.
1679
-
1680
- :type volume_type: string
1681
- :param volume_type: The type of the volume. (optional). Valid
1682
- values are: standard | io1.
1683
-
1684
- :type iops: int
1685
- :param iops: The provisioned IOPs you want to associate with
1686
- this volume. (optional)
1687
- """
1688
- if isinstance(zone, Zone):
1689
- zone = zone.name
1690
- params = {'AvailabilityZone': zone}
1691
- if size:
1692
- params['Size'] = size
1693
- if snapshot:
1694
- if isinstance(snapshot, Snapshot):
1695
- snapshot = snapshot.id
1696
- params['SnapshotId'] = snapshot
1697
- if volume_type:
1698
- params['VolumeType'] = volume_type
1699
- if iops:
1700
- params['Iops'] = str(iops)
1701
- return self.get_object('CreateVolume', params, Volume, verb='POST')
1702
-
1703
- def delete_volume(self, volume_id):
1704
- """
1705
- Delete an EBS volume.
1706
-
1707
- :type volume_id: str
1708
- :param volume_id: The ID of the volume to be delete.
1709
-
1710
- :rtype: bool
1711
- :return: True if successful
1712
- """
1713
- params = {'VolumeId': volume_id}
1714
- return self.get_status('DeleteVolume', params, verb='POST')
1715
-
1716
- def attach_volume(self, volume_id, instance_id, device):
1717
- """
1718
- Attach an EBS volume to an EC2 instance.
1719
-
1720
- :type volume_id: str
1721
- :param volume_id: The ID of the EBS volume to be attached.
1722
-
1723
- :type instance_id: str
1724
- :param instance_id: The ID of the EC2 instance to which it will
1725
- be attached.
1726
-
1727
- :type device: str
1728
- :param device: The device on the instance through which the
1729
- volume will be exposted (e.g. /dev/sdh)
1730
-
1731
- :rtype: bool
1732
- :return: True if successful
1733
- """
1734
- params = {'InstanceId': instance_id,
1735
- 'VolumeId': volume_id,
1736
- 'Device': device}
1737
- return self.get_status('AttachVolume', params, verb='POST')
1738
-
1739
- def detach_volume(self, volume_id, instance_id=None,
1740
- device=None, force=False):
1741
- """
1742
- Detach an EBS volume from an EC2 instance.
1743
-
1744
- :type volume_id: str
1745
- :param volume_id: The ID of the EBS volume to be attached.
1746
-
1747
- :type instance_id: str
1748
- :param instance_id: The ID of the EC2 instance from which it will
1749
- be detached.
1750
-
1751
- :type device: str
1752
- :param device: The device on the instance through which the
1753
- volume is exposted (e.g. /dev/sdh)
1754
-
1755
- :type force: bool
1756
- :param force: Forces detachment if the previous detachment
1757
- attempt did not occur cleanly. This option can lead to
1758
- data loss or a corrupted file system. Use this option only
1759
- as a last resort to detach a volume from a failed
1760
- instance. The instance will not have an opportunity to
1761
- flush file system caches nor file system meta data. If you
1762
- use this option, you must perform file system check and
1763
- repair procedures.
1764
-
1765
- :rtype: bool
1766
- :return: True if successful
1767
- """
1768
- params = {'VolumeId': volume_id}
1769
- if instance_id:
1770
- params['InstanceId'] = instance_id
1771
- if device:
1772
- params['Device'] = device
1773
- if force:
1774
- params['Force'] = 'true'
1775
- return self.get_status('DetachVolume', params, verb='POST')
1776
-
1777
- # Snapshot methods
1778
-
1779
- def get_all_snapshots(self, snapshot_ids=None,
1780
- owner=None, restorable_by=None,
1781
- filters=None):
1782
- """
1783
- Get all EBS Snapshots associated with the current credentials.
1784
-
1785
- :type snapshot_ids: list
1786
- :param snapshot_ids: Optional list of snapshot ids. If this list is
1787
- present, only the Snapshots associated with
1788
- these snapshot ids will be returned.
1789
-
1790
- :type owner: str
1791
- :param owner: If present, only the snapshots owned by the specified user
1792
- will be returned. Valid values are:
1793
-
1794
- * self
1795
- * amazon
1796
- * AWS Account ID
1797
-
1798
- :type restorable_by: str
1799
- :param restorable_by: If present, only the snapshots that are restorable
1800
- by the specified account id will be returned.
1801
-
1802
- :type filters: dict
1803
- :param filters: Optional filters that can be used to limit
1804
- the results returned. Filters are provided
1805
- in the form of a dictionary consisting of
1806
- filter names as the key and filter values
1807
- as the value. The set of allowable filter
1808
- names/values is dependent on the request
1809
- being performed. Check the EC2 API guide
1810
- for details.
1811
-
1812
- :rtype: list of :class:`boto.ec2.snapshot.Snapshot`
1813
- :return: The requested Snapshot objects
1814
- """
1815
- params = {}
1816
- if snapshot_ids:
1817
- self.build_list_params(params, snapshot_ids, 'SnapshotId')
1818
- if owner:
1819
- params['Owner'] = owner
1820
- if restorable_by:
1821
- params['RestorableBy'] = restorable_by
1822
- if filters:
1823
- self.build_filter_params(params, filters)
1824
- return self.get_list('DescribeSnapshots', params,
1825
- [('item', Snapshot)], verb='POST')
1826
-
1827
- def create_snapshot(self, volume_id, description=None):
1828
- """
1829
- Create a snapshot of an existing EBS Volume.
1830
-
1831
- :type volume_id: str
1832
- :param volume_id: The ID of the volume to be snapshot'ed
1833
-
1834
- :type description: str
1835
- :param description: A description of the snapshot.
1836
- Limited to 255 characters.
1837
-
1838
- :rtype: :class:`boto.ec2.snapshot.Snapshot`
1839
- :return: The created Snapshot object
1840
- """
1841
- params = {'VolumeId': volume_id}
1842
- if description:
1843
- params['Description'] = description[0:255]
1844
- snapshot = self.get_object('CreateSnapshot', params,
1845
- Snapshot, verb='POST')
1846
- volume = self.get_all_volumes([volume_id])[0]
1847
- volume_name = volume.tags.get('Name')
1848
- if volume_name:
1849
- snapshot.add_tag('Name', volume_name)
1850
- return snapshot
1851
-
1852
- def delete_snapshot(self, snapshot_id):
1853
- params = {'SnapshotId': snapshot_id}
1854
- return self.get_status('DeleteSnapshot', params, verb='POST')
1855
-
1856
- def copy_snapshot(self, source_region, source_snapshot_id,
1857
- description=None):
1858
- """
1859
- Copies a point-in-time snapshot of an Amazon Elastic Block Store
1860
- (Amazon EBS) volume and stores it in Amazon Simple Storage Service
1861
- (Amazon S3). You can copy the snapshot within the same region or from
1862
- one region to another. You can use the snapshot to create new Amazon
1863
- EBS volumes or Amazon Machine Images (AMIs).
1864
-
1865
-
1866
- :type source_region: str
1867
- :param source_region: The ID of the AWS region that contains the
1868
- snapshot to be copied (e.g 'us-east-1', 'us-west-2', etc.).
1869
-
1870
- :type source_snapshot_id: str
1871
- :param source_snapshot_id: The ID of the Amazon EBS snapshot to copy
1872
-
1873
- :type description: str
1874
- :param description: A description of the new Amazon EBS snapshot.
1875
-
1876
- :rtype: str
1877
- :return: The snapshot ID
1878
-
1879
- """
1880
- params = {
1881
- 'SourceRegion': source_region,
1882
- 'SourceSnapshotId': source_snapshot_id,
1883
- }
1884
- if description is not None:
1885
- params['Description'] = description
1886
- snapshot = self.get_object('CopySnapshot', params, Snapshot,
1887
- verb='POST')
1888
- return snapshot.id
1889
-
1890
- def trim_snapshots(self, hourly_backups=8, daily_backups=7,
1891
- weekly_backups=4):
1892
- """
1893
- Trim excess snapshots, based on when they were taken. More current
1894
- snapshots are retained, with the number retained decreasing as you
1895
- move back in time.
1896
-
1897
- If ebs volumes have a 'Name' tag with a value, their snapshots
1898
- will be assigned the same tag when they are created. The values
1899
- of the 'Name' tags for snapshots are used by this function to
1900
- group snapshots taken from the same volume (or from a series
1901
- of like-named volumes over time) for trimming.
1902
-
1903
- For every group of like-named snapshots, this function retains
1904
- the newest and oldest snapshots, as well as, by default, the
1905
- first snapshots taken in each of the last eight hours, the first
1906
- snapshots taken in each of the last seven days, the first snapshots
1907
- taken in the last 4 weeks (counting Midnight Sunday morning as
1908
- the start of the week), and the first snapshot from the first
1909
- Sunday of each month forever.
1910
-
1911
- :type hourly_backups: int
1912
- :param hourly_backups: How many recent hourly backups should be saved.
1913
-
1914
- :type daily_backups: int
1915
- :param daily_backups: How many recent daily backups should be saved.
1916
-
1917
- :type weekly_backups: int
1918
- :param weekly_backups: How many recent weekly backups should be saved.
1919
- """
1920
-
1921
- # This function first builds up an ordered list of target times
1922
- # that snapshots should be saved for (last 8 hours, last 7 days, etc.).
1923
- # Then a map of snapshots is constructed, with the keys being
1924
- # the snapshot / volume names and the values being arrays of
1925
- # chronologically sorted snapshots.
1926
- # Finally, for each array in the map, we go through the snapshot
1927
- # array and the target time array in an interleaved fashion,
1928
- # deleting snapshots whose start_times don't immediately follow a
1929
- # target time (we delete a snapshot if there's another snapshot
1930
- # that was made closer to the preceding target time).
1931
-
1932
- now = datetime.utcnow()
1933
- last_hour = datetime(now.year, now.month, now.day, now.hour)
1934
- last_midnight = datetime(now.year, now.month, now.day)
1935
- last_sunday = datetime(now.year, now.month, now.day) - timedelta(days = (now.weekday() + 1) % 7)
1936
- start_of_month = datetime(now.year, now.month, 1)
1937
-
1938
- target_backup_times = []
1939
-
1940
- # there are no snapshots older than 1/1/2007
1941
- oldest_snapshot_date = datetime(2007, 1, 1)
1942
-
1943
- for hour in range(0, hourly_backups):
1944
- target_backup_times.append(last_hour - timedelta(hours = hour))
1945
-
1946
- for day in range(0, daily_backups):
1947
- target_backup_times.append(last_midnight - timedelta(days = day))
1948
-
1949
- for week in range(0, weekly_backups):
1950
- target_backup_times.append(last_sunday - timedelta(weeks = week))
1951
-
1952
- one_day = timedelta(days = 1)
1953
- while start_of_month > oldest_snapshot_date:
1954
- # append the start of the month to the list of
1955
- # snapshot dates to save:
1956
- target_backup_times.append(start_of_month)
1957
- # there's no timedelta setting for one month, so instead:
1958
- # decrement the day by one, so we go to the final day of
1959
- # the previous month...
1960
- start_of_month -= one_day
1961
- # ... and then go to the first day of that previous month:
1962
- start_of_month = datetime(start_of_month.year,
1963
- start_of_month.month, 1)
1964
-
1965
- temp = []
1966
-
1967
- for t in target_backup_times:
1968
- if temp.__contains__(t) == False:
1969
- temp.append(t)
1970
-
1971
- # sort to make the oldest dates first, and make sure the month start
1972
- # and last four week's start are in the proper order
1973
- target_backup_times = sorted(temp)
1974
-
1975
- # get all the snapshots, sort them by date and time, and
1976
- # organize them into one array for each volume:
1977
- all_snapshots = self.get_all_snapshots(owner = 'self')
1978
- all_snapshots.sort(cmp = lambda x, y: cmp(x.start_time, y.start_time))
1979
- snaps_for_each_volume = {}
1980
- for snap in all_snapshots:
1981
- # the snapshot name and the volume name are the same.
1982
- # The snapshot name is set from the volume
1983
- # name at the time the snapshot is taken
1984
- volume_name = snap.tags.get('Name')
1985
- if volume_name:
1986
- # only examine snapshots that have a volume name
1987
- snaps_for_volume = snaps_for_each_volume.get(volume_name)
1988
- if not snaps_for_volume:
1989
- snaps_for_volume = []
1990
- snaps_for_each_volume[volume_name] = snaps_for_volume
1991
- snaps_for_volume.append(snap)
1992
-
1993
- # Do a running comparison of snapshot dates to desired time
1994
- #periods, keeping the oldest snapshot in each
1995
- # time period and deleting the rest:
1996
- for volume_name in snaps_for_each_volume:
1997
- snaps = snaps_for_each_volume[volume_name]
1998
- snaps = snaps[:-1] # never delete the newest snapshot
1999
- time_period_number = 0
2000
- snap_found_for_this_time_period = False
2001
- for snap in snaps:
2002
- check_this_snap = True
2003
- while check_this_snap and time_period_number < target_backup_times.__len__():
2004
- snap_date = datetime.strptime(snap.start_time,
2005
- '%Y-%m-%dT%H:%M:%S.000Z')
2006
- if snap_date < target_backup_times[time_period_number]:
2007
- # the snap date is before the cutoff date.
2008
- # Figure out if it's the first snap in this
2009
- # date range and act accordingly (since both
2010
- #date the date ranges and the snapshots
2011
- # are sorted chronologically, we know this
2012
- #snapshot isn't in an earlier date range):
2013
- if snap_found_for_this_time_period == True:
2014
- if not snap.tags.get('preserve_snapshot'):
2015
- # as long as the snapshot wasn't marked
2016
- # with the 'preserve_snapshot' tag, delete it:
2017
- try:
2018
- self.delete_snapshot(snap.id)
2019
- boto.log.info('Trimmed snapshot %s (%s)' % (snap.tags['Name'], snap.start_time))
2020
- except EC2ResponseError:
2021
- boto.log.error('Attempt to trim snapshot %s (%s) failed. Possible result of a race condition with trimming on another server?' % (snap.tags['Name'], snap.start_time))
2022
- # go on and look at the next snapshot,
2023
- #leaving the time period alone
2024
- else:
2025
- # this was the first snapshot found for this
2026
- #time period. Leave it alone and look at the
2027
- # next snapshot:
2028
- snap_found_for_this_time_period = True
2029
- check_this_snap = False
2030
- else:
2031
- # the snap is after the cutoff date. Check it
2032
- # against the next cutoff date
2033
- time_period_number += 1
2034
- snap_found_for_this_time_period = False
2035
-
2036
- def get_snapshot_attribute(self, snapshot_id,
2037
- attribute='createVolumePermission'):
2038
- """
2039
- Get information about an attribute of a snapshot. Only one attribute
2040
- can be specified per call.
2041
-
2042
- :type snapshot_id: str
2043
- :param snapshot_id: The ID of the snapshot.
2044
-
2045
- :type attribute: str
2046
- :param attribute: The requested attribute. Valid values are:
2047
-
2048
- * createVolumePermission
2049
-
2050
- :rtype: list of :class:`boto.ec2.snapshotattribute.SnapshotAttribute`
2051
- :return: The requested Snapshot attribute
2052
- """
2053
- params = {'Attribute': attribute}
2054
- if snapshot_id:
2055
- params['SnapshotId'] = snapshot_id
2056
- return self.get_object('DescribeSnapshotAttribute', params,
2057
- SnapshotAttribute, verb='POST')
2058
-
2059
- def modify_snapshot_attribute(self, snapshot_id,
2060
- attribute='createVolumePermission',
2061
- operation='add', user_ids=None, groups=None):
2062
- """
2063
- Changes an attribute of an image.
2064
-
2065
- :type snapshot_id: string
2066
- :param snapshot_id: The snapshot id you wish to change
2067
-
2068
- :type attribute: string
2069
- :param attribute: The attribute you wish to change. Valid values are:
2070
- createVolumePermission
2071
-
2072
- :type operation: string
2073
- :param operation: Either add or remove (this is required for changing
2074
- snapshot ermissions)
2075
-
2076
- :type user_ids: list
2077
- :param user_ids: The Amazon IDs of users to add/remove attributes
2078
-
2079
- :type groups: list
2080
- :param groups: The groups to add/remove attributes. The only valid
2081
- value at this time is 'all'.
2082
-
2083
- """
2084
- params = {'SnapshotId': snapshot_id,
2085
- 'Attribute': attribute,
2086
- 'OperationType': operation}
2087
- if user_ids:
2088
- self.build_list_params(params, user_ids, 'UserId')
2089
- if groups:
2090
- self.build_list_params(params, groups, 'UserGroup')
2091
- return self.get_status('ModifySnapshotAttribute', params, verb='POST')
2092
-
2093
- def reset_snapshot_attribute(self, snapshot_id,
2094
- attribute='createVolumePermission'):
2095
- """
2096
- Resets an attribute of a snapshot to its default value.
2097
-
2098
- :type snapshot_id: string
2099
- :param snapshot_id: ID of the snapshot
2100
-
2101
- :type attribute: string
2102
- :param attribute: The attribute to reset
2103
-
2104
- :rtype: bool
2105
- :return: Whether the operation succeeded or not
2106
- """
2107
- params = {'SnapshotId': snapshot_id,
2108
- 'Attribute': attribute}
2109
- return self.get_status('ResetSnapshotAttribute', params, verb='POST')
2110
-
2111
- # Keypair methods
2112
-
2113
- def get_all_key_pairs(self, keynames=None, filters=None):
2114
- """
2115
- Get all key pairs associated with your account.
2116
-
2117
- :type keynames: list
2118
- :param keynames: A list of the names of keypairs to retrieve.
2119
- If not provided, all key pairs will be returned.
2120
-
2121
- :type filters: dict
2122
- :param filters: Optional filters that can be used to limit the
2123
- results returned. Filters are provided in the form of a
2124
- dictionary consisting of filter names as the key and
2125
- filter values as the value. The set of allowable filter
2126
- names/values is dependent on the request being performed.
2127
- Check the EC2 API guide for details.
2128
-
2129
- :rtype: list
2130
- :return: A list of :class:`boto.ec2.keypair.KeyPair`
2131
- """
2132
- params = {}
2133
- if keynames:
2134
- self.build_list_params(params, keynames, 'KeyName')
2135
- if filters:
2136
- self.build_filter_params(params, filters)
2137
- return self.get_list('DescribeKeyPairs', params,
2138
- [('item', KeyPair)], verb='POST')
2139
-
2140
- def get_key_pair(self, keyname):
2141
- """
2142
- Convenience method to retrieve a specific keypair (KeyPair).
2143
-
2144
- :type image_id: string
2145
- :param image_id: the ID of the Image to retrieve
2146
-
2147
- :rtype: :class:`boto.ec2.keypair.KeyPair`
2148
- :return: The KeyPair specified or None if it is not found
2149
- """
2150
- try:
2151
- return self.get_all_key_pairs(keynames=[keyname])[0]
2152
- except self.ResponseError, e:
2153
- if e.code == 'InvalidKeyPair.NotFound':
2154
- return None
2155
- else:
2156
- raise
2157
-
2158
- def create_key_pair(self, key_name):
2159
- """
2160
- Create a new key pair for your account.
2161
- This will create the key pair within the region you
2162
- are currently connected to.
2163
-
2164
- :type key_name: string
2165
- :param key_name: The name of the new keypair
2166
-
2167
- :rtype: :class:`boto.ec2.keypair.KeyPair`
2168
- :return: The newly created :class:`boto.ec2.keypair.KeyPair`.
2169
- The material attribute of the new KeyPair object
2170
- will contain the the unencrypted PEM encoded RSA private key.
2171
- """
2172
- params = {'KeyName': key_name}
2173
- return self.get_object('CreateKeyPair', params, KeyPair, verb='POST')
2174
-
2175
- def delete_key_pair(self, key_name):
2176
- """
2177
- Delete a key pair from your account.
2178
-
2179
- :type key_name: string
2180
- :param key_name: The name of the keypair to delete
2181
- """
2182
- params = {'KeyName': key_name}
2183
- return self.get_status('DeleteKeyPair', params, verb='POST')
2184
-
2185
- def import_key_pair(self, key_name, public_key_material):
2186
- """
2187
- mports the public key from an RSA key pair that you created
2188
- with a third-party tool.
2189
-
2190
- Supported formats:
2191
-
2192
- * OpenSSH public key format (e.g., the format
2193
- in ~/.ssh/authorized_keys)
2194
-
2195
- * Base64 encoded DER format
2196
-
2197
- * SSH public key file format as specified in RFC4716
2198
-
2199
- DSA keys are not supported. Make sure your key generator is
2200
- set up to create RSA keys.
2201
-
2202
- Supported lengths: 1024, 2048, and 4096.
2203
-
2204
- :type key_name: string
2205
- :param key_name: The name of the new keypair
2206
-
2207
- :type public_key_material: string
2208
- :param public_key_material: The public key. You must base64 encode
2209
- the public key material before sending
2210
- it to AWS.
2211
-
2212
- :rtype: :class:`boto.ec2.keypair.KeyPair`
2213
- :return: The newly created :class:`boto.ec2.keypair.KeyPair`.
2214
- The material attribute of the new KeyPair object
2215
- will contain the the unencrypted PEM encoded RSA private key.
2216
- """
2217
- public_key_material = base64.b64encode(public_key_material)
2218
- params = {'KeyName': key_name,
2219
- 'PublicKeyMaterial': public_key_material}
2220
- return self.get_object('ImportKeyPair', params, KeyPair, verb='POST')
2221
-
2222
- # SecurityGroup methods
2223
-
2224
- def get_all_security_groups(self, groupnames=None, group_ids=None,
2225
- filters=None):
2226
- """
2227
- Get all security groups associated with your account in a region.
2228
-
2229
- :type groupnames: list
2230
- :param groupnames: A list of the names of security groups to retrieve.
2231
- If not provided, all security groups will be
2232
- returned.
2233
-
2234
- :type group_ids: list
2235
- :param group_ids: A list of IDs of security groups to retrieve for
2236
- security groups within a VPC.
2237
-
2238
- :type filters: dict
2239
- :param filters: Optional filters that can be used to limit
2240
- the results returned. Filters are provided
2241
- in the form of a dictionary consisting of
2242
- filter names as the key and filter values
2243
- as the value. The set of allowable filter
2244
- names/values is dependent on the request
2245
- being performed. Check the EC2 API guide
2246
- for details.
2247
-
2248
- :rtype: list
2249
- :return: A list of :class:`boto.ec2.securitygroup.SecurityGroup`
2250
- """
2251
- params = {}
2252
- if groupnames is not None:
2253
- self.build_list_params(params, groupnames, 'GroupName')
2254
- if group_ids is not None:
2255
- self.build_list_params(params, group_ids, 'GroupId')
2256
- if filters is not None:
2257
- self.build_filter_params(params, filters)
2258
-
2259
- return self.get_list('DescribeSecurityGroups', params,
2260
- [('item', SecurityGroup)], verb='POST')
2261
-
2262
- def create_security_group(self, name, description, vpc_id=None):
2263
- """
2264
- Create a new security group for your account.
2265
- This will create the security group within the region you
2266
- are currently connected to.
2267
-
2268
- :type name: string
2269
- :param name: The name of the new security group
2270
-
2271
- :type description: string
2272
- :param description: The description of the new security group
2273
-
2274
- :type vpc_id: string
2275
- :param vpc_id: The ID of the VPC to create the security group in,
2276
- if any.
2277
-
2278
- :rtype: :class:`boto.ec2.securitygroup.SecurityGroup`
2279
- :return: The newly created :class:`boto.ec2.securitygroup.SecurityGroup`.
2280
- """
2281
- params = {'GroupName': name,
2282
- 'GroupDescription': description}
2283
-
2284
- if vpc_id is not None:
2285
- params['VpcId'] = vpc_id
2286
-
2287
- group = self.get_object('CreateSecurityGroup', params,
2288
- SecurityGroup, verb='POST')
2289
- group.name = name
2290
- group.description = description
2291
- if vpc_id is not None:
2292
- group.vpc_id = vpc_id
2293
- return group
2294
-
2295
- def delete_security_group(self, name=None, group_id=None):
2296
- """
2297
- Delete a security group from your account.
2298
-
2299
- :type name: string
2300
- :param name: The name of the security group to delete.
2301
-
2302
- :type group_id: string
2303
- :param group_id: The ID of the security group to delete within
2304
- a VPC.
2305
-
2306
- :rtype: bool
2307
- :return: True if successful.
2308
- """
2309
- params = {}
2310
-
2311
- if name is not None:
2312
- params['GroupName'] = name
2313
- elif group_id is not None:
2314
- params['GroupId'] = group_id
2315
-
2316
- return self.get_status('DeleteSecurityGroup', params, verb='POST')
2317
-
2318
- def authorize_security_group_deprecated(self, group_name,
2319
- src_security_group_name=None,
2320
- src_security_group_owner_id=None,
2321
- ip_protocol=None,
2322
- from_port=None, to_port=None,
2323
- cidr_ip=None):
2324
- """
2325
- NOTE: This method uses the old-style request parameters
2326
- that did not allow a port to be specified when
2327
- authorizing a group.
2328
-
2329
- :type group_name: string
2330
- :param group_name: The name of the security group you are adding
2331
- the rule to.
2332
-
2333
- :type src_security_group_name: string
2334
- :param src_security_group_name: The name of the security group you are
2335
- granting access to.
2336
-
2337
- :type src_security_group_owner_id: string
2338
- :param src_security_group_owner_id: The ID of the owner of the security
2339
- group you are granting access to.
2340
-
2341
- :type ip_protocol: string
2342
- :param ip_protocol: Either tcp | udp | icmp
2343
-
2344
- :type from_port: int
2345
- :param from_port: The beginning port number you are enabling
2346
-
2347
- :type to_port: int
2348
- :param to_port: The ending port number you are enabling
2349
-
2350
- :type to_port: string
2351
- :param to_port: The CIDR block you are providing access to.
2352
- See http://goo.gl/Yj5QC
2353
-
2354
- :rtype: bool
2355
- :return: True if successful.
2356
- """
2357
- params = {'GroupName':group_name}
2358
- if src_security_group_name:
2359
- params['SourceSecurityGroupName'] = src_security_group_name
2360
- if src_security_group_owner_id:
2361
- params['SourceSecurityGroupOwnerId'] = src_security_group_owner_id
2362
- if ip_protocol:
2363
- params['IpProtocol'] = ip_protocol
2364
- if from_port:
2365
- params['FromPort'] = from_port
2366
- if to_port:
2367
- params['ToPort'] = to_port
2368
- if cidr_ip:
2369
- params['CidrIp'] = cidr_ip
2370
- return self.get_status('AuthorizeSecurityGroupIngress', params)
2371
-
2372
- def authorize_security_group(self, group_name=None,
2373
- src_security_group_name=None,
2374
- src_security_group_owner_id=None,
2375
- ip_protocol=None,
2376
- from_port=None, to_port=None,
2377
- cidr_ip=None, group_id=None,
2378
- src_security_group_group_id=None):
2379
- """
2380
- Add a new rule to an existing security group.
2381
- You need to pass in either src_security_group_name and
2382
- src_security_group_owner_id OR ip_protocol, from_port, to_port,
2383
- and cidr_ip. In other words, either you are authorizing another
2384
- group or you are authorizing some ip-based rule.
2385
-
2386
- :type group_name: string
2387
- :param group_name: The name of the security group you are adding
2388
- the rule to.
2389
-
2390
- :type src_security_group_name: string
2391
- :param src_security_group_name: The name of the security group you are
2392
- granting access to.
2393
-
2394
- :type src_security_group_owner_id: string
2395
- :param src_security_group_owner_id: The ID of the owner of the security
2396
- group you are granting access to.
2397
-
2398
- :type ip_protocol: string
2399
- :param ip_protocol: Either tcp | udp | icmp
2400
-
2401
- :type from_port: int
2402
- :param from_port: The beginning port number you are enabling
2403
-
2404
- :type to_port: int
2405
- :param to_port: The ending port number you are enabling
2406
-
2407
- :type cidr_ip: string or list of strings
2408
- :param cidr_ip: The CIDR block you are providing access to.
2409
- See http://goo.gl/Yj5QC
2410
-
2411
- :type group_id: string
2412
- :param group_id: ID of the EC2 or VPC security group to
2413
- modify. This is required for VPC security groups and can
2414
- be used instead of group_name for EC2 security groups.
2415
-
2416
- :type src_security_group_group_id: string
2417
- :param src_security_group_group_id: The ID of the security
2418
- group you are granting access to. Can be used instead of
2419
- src_security_group_name
2420
-
2421
- :rtype: bool
2422
- :return: True if successful.
2423
- """
2424
- if src_security_group_name:
2425
- if from_port is None and to_port is None and ip_protocol is None:
2426
- return self.authorize_security_group_deprecated(
2427
- group_name, src_security_group_name,
2428
- src_security_group_owner_id)
2429
-
2430
- params = {}
2431
-
2432
- if group_name:
2433
- params['GroupName'] = group_name
2434
- if group_id:
2435
- params['GroupId'] = group_id
2436
- if src_security_group_name:
2437
- param_name = 'IpPermissions.1.Groups.1.GroupName'
2438
- params[param_name] = src_security_group_name
2439
- if src_security_group_owner_id:
2440
- param_name = 'IpPermissions.1.Groups.1.UserId'
2441
- params[param_name] = src_security_group_owner_id
2442
- if src_security_group_group_id:
2443
- param_name = 'IpPermissions.1.Groups.1.GroupId'
2444
- params[param_name] = src_security_group_group_id
2445
- if ip_protocol:
2446
- params['IpPermissions.1.IpProtocol'] = ip_protocol
2447
- if from_port is not None:
2448
- params['IpPermissions.1.FromPort'] = from_port
2449
- if to_port is not None:
2450
- params['IpPermissions.1.ToPort'] = to_port
2451
- if cidr_ip:
2452
- if not isinstance(cidr_ip, list):
2453
- cidr_ip = [cidr_ip]
2454
- for i, single_cidr_ip in enumerate(cidr_ip):
2455
- params['IpPermissions.1.IpRanges.%d.CidrIp' % (i+1)] = \
2456
- single_cidr_ip
2457
-
2458
- return self.get_status('AuthorizeSecurityGroupIngress',
2459
- params, verb='POST')
2460
-
2461
- def authorize_security_group_egress(self,
2462
- group_id,
2463
- ip_protocol,
2464
- from_port=None,
2465
- to_port=None,
2466
- src_group_id=None,
2467
- cidr_ip=None):
2468
- """
2469
- The action adds one or more egress rules to a VPC security
2470
- group. Specifically, this action permits instances in a
2471
- security group to send traffic to one or more destination
2472
- CIDR IP address ranges, or to one or more destination
2473
- security groups in the same VPC.
2474
- """
2475
- params = {
2476
- 'GroupId': group_id,
2477
- 'IpPermissions.1.IpProtocol': ip_protocol
2478
- }
2479
-
2480
- if from_port is not None:
2481
- params['IpPermissions.1.FromPort'] = from_port
2482
- if to_port is not None:
2483
- params['IpPermissions.1.ToPort'] = to_port
2484
- if src_group_id is not None:
2485
- params['IpPermissions.1.Groups.1.GroupId'] = src_group_id
2486
- if cidr_ip is not None:
2487
- params['IpPermissions.1.IpRanges.1.CidrIp'] = cidr_ip
2488
-
2489
- return self.get_status('AuthorizeSecurityGroupEgress',
2490
- params, verb='POST')
2491
-
2492
- def revoke_security_group_deprecated(self, group_name,
2493
- src_security_group_name=None,
2494
- src_security_group_owner_id=None,
2495
- ip_protocol=None,
2496
- from_port=None, to_port=None,
2497
- cidr_ip=None):
2498
- """
2499
- NOTE: This method uses the old-style request parameters
2500
- that did not allow a port to be specified when
2501
- authorizing a group.
2502
-
2503
- Remove an existing rule from an existing security group.
2504
- You need to pass in either src_security_group_name and
2505
- src_security_group_owner_id OR ip_protocol, from_port, to_port,
2506
- and cidr_ip. In other words, either you are revoking another
2507
- group or you are revoking some ip-based rule.
2508
-
2509
- :type group_name: string
2510
- :param group_name: The name of the security group you are removing
2511
- the rule from.
2512
-
2513
- :type src_security_group_name: string
2514
- :param src_security_group_name: The name of the security group you are
2515
- revoking access to.
2516
-
2517
- :type src_security_group_owner_id: string
2518
- :param src_security_group_owner_id: The ID of the owner of the security
2519
- group you are revoking access to.
2520
-
2521
- :type ip_protocol: string
2522
- :param ip_protocol: Either tcp | udp | icmp
2523
-
2524
- :type from_port: int
2525
- :param from_port: The beginning port number you are disabling
2526
-
2527
- :type to_port: int
2528
- :param to_port: The ending port number you are disabling
2529
-
2530
- :type to_port: string
2531
- :param to_port: The CIDR block you are revoking access to.
2532
- http://goo.gl/Yj5QC
2533
-
2534
- :rtype: bool
2535
- :return: True if successful.
2536
- """
2537
- params = {'GroupName':group_name}
2538
- if src_security_group_name:
2539
- params['SourceSecurityGroupName'] = src_security_group_name
2540
- if src_security_group_owner_id:
2541
- params['SourceSecurityGroupOwnerId'] = src_security_group_owner_id
2542
- if ip_protocol:
2543
- params['IpProtocol'] = ip_protocol
2544
- if from_port:
2545
- params['FromPort'] = from_port
2546
- if to_port:
2547
- params['ToPort'] = to_port
2548
- if cidr_ip:
2549
- params['CidrIp'] = cidr_ip
2550
- return self.get_status('RevokeSecurityGroupIngress', params)
2551
-
2552
- def revoke_security_group(self, group_name=None,
2553
- src_security_group_name=None,
2554
- src_security_group_owner_id=None,
2555
- ip_protocol=None, from_port=None, to_port=None,
2556
- cidr_ip=None, group_id=None,
2557
- src_security_group_group_id=None):
2558
- """
2559
- Remove an existing rule from an existing security group.
2560
- You need to pass in either src_security_group_name and
2561
- src_security_group_owner_id OR ip_protocol, from_port, to_port,
2562
- and cidr_ip. In other words, either you are revoking another
2563
- group or you are revoking some ip-based rule.
2564
-
2565
- :type group_name: string
2566
- :param group_name: The name of the security group you are removing
2567
- the rule from.
2568
-
2569
- :type src_security_group_name: string
2570
- :param src_security_group_name: The name of the security group you are
2571
- revoking access to.
2572
-
2573
- :type src_security_group_owner_id: string
2574
- :param src_security_group_owner_id: The ID of the owner of the security
2575
- group you are revoking access to.
2576
-
2577
- :type ip_protocol: string
2578
- :param ip_protocol: Either tcp | udp | icmp
2579
-
2580
- :type from_port: int
2581
- :param from_port: The beginning port number you are disabling
2582
-
2583
- :type to_port: int
2584
- :param to_port: The ending port number you are disabling
2585
-
2586
- :type cidr_ip: string
2587
- :param cidr_ip: The CIDR block you are revoking access to.
2588
- See http://goo.gl/Yj5QC
2589
-
2590
- :type group_id: string
2591
- :param group_id: ID of the EC2 or VPC security group to
2592
- modify. This is required for VPC security groups and can
2593
- be used instead of group_name for EC2 security groups.
2594
-
2595
- :type src_security_group_group_id: string
2596
- :param src_security_group_group_id: The ID of the security group
2597
- for which you are revoking access. Can be used instead
2598
- of src_security_group_name
2599
-
2600
- :rtype: bool
2601
- :return: True if successful.
2602
- """
2603
- if src_security_group_name:
2604
- if from_port is None and to_port is None and ip_protocol is None:
2605
- return self.revoke_security_group_deprecated(
2606
- group_name, src_security_group_name,
2607
- src_security_group_owner_id)
2608
- params = {}
2609
- if group_name is not None:
2610
- params['GroupName'] = group_name
2611
- if group_id is not None:
2612
- params['GroupId'] = group_id
2613
- if src_security_group_name:
2614
- param_name = 'IpPermissions.1.Groups.1.GroupName'
2615
- params[param_name] = src_security_group_name
2616
- if src_security_group_group_id:
2617
- param_name = 'IpPermissions.1.Groups.1.GroupId'
2618
- params[param_name] = src_security_group_group_id
2619
- if src_security_group_owner_id:
2620
- param_name = 'IpPermissions.1.Groups.1.UserId'
2621
- params[param_name] = src_security_group_owner_id
2622
- if ip_protocol:
2623
- params['IpPermissions.1.IpProtocol'] = ip_protocol
2624
- if from_port is not None:
2625
- params['IpPermissions.1.FromPort'] = from_port
2626
- if to_port is not None:
2627
- params['IpPermissions.1.ToPort'] = to_port
2628
- if cidr_ip:
2629
- params['IpPermissions.1.IpRanges.1.CidrIp'] = cidr_ip
2630
- return self.get_status('RevokeSecurityGroupIngress',
2631
- params, verb='POST')
2632
-
2633
- def revoke_security_group_egress(self,
2634
- group_id,
2635
- ip_protocol,
2636
- from_port=None,
2637
- to_port=None,
2638
- src_group_id=None,
2639
- cidr_ip=None):
2640
- """
2641
- Remove an existing egress rule from an existing VPC security
2642
- group. You need to pass in an ip_protocol, from_port and
2643
- to_port range only if the protocol you are using is
2644
- port-based. You also need to pass in either a src_group_id or
2645
- cidr_ip.
2646
-
2647
- :type group_name: string
2648
- :param group_id: The name of the security group you are removing
2649
- the rule from.
2650
-
2651
- :type ip_protocol: string
2652
- :param ip_protocol: Either tcp | udp | icmp | -1
2653
-
2654
- :type from_port: int
2655
- :param from_port: The beginning port number you are disabling
2656
-
2657
- :type to_port: int
2658
- :param to_port: The ending port number you are disabling
2659
-
2660
- :type src_group_id: src_group_id
2661
- :param src_group_id: The source security group you are
2662
- revoking access to.
2663
-
2664
- :type cidr_ip: string
2665
- :param cidr_ip: The CIDR block you are revoking access to.
2666
- See http://goo.gl/Yj5QC
2667
-
2668
- :rtype: bool
2669
- :return: True if successful.
2670
- """
2671
-
2672
- params = {}
2673
- if group_id:
2674
- params['GroupId'] = group_id
2675
- if ip_protocol:
2676
- params['IpPermissions.1.IpProtocol'] = ip_protocol
2677
- if from_port is not None:
2678
- params['IpPermissions.1.FromPort'] = from_port
2679
- if to_port is not None:
2680
- params['IpPermissions.1.ToPort'] = to_port
2681
- if src_group_id is not None:
2682
- params['IpPermissions.1.Groups.1.GroupId'] = src_group_id
2683
- if cidr_ip:
2684
- params['IpPermissions.1.IpRanges.1.CidrIp'] = cidr_ip
2685
- return self.get_status('RevokeSecurityGroupEgress',
2686
- params, verb='POST')
2687
-
2688
- #
2689
- # Regions
2690
- #
2691
-
2692
- def get_all_regions(self, region_names=None, filters=None):
2693
- """
2694
- Get all available regions for the EC2 service.
2695
-
2696
- :type region_names: list of str
2697
- :param region_names: Names of regions to limit output
2698
-
2699
- :type filters: dict
2700
- :param filters: Optional filters that can be used to limit
2701
- the results returned. Filters are provided
2702
- in the form of a dictionary consisting of
2703
- filter names as the key and filter values
2704
- as the value. The set of allowable filter
2705
- names/values is dependent on the request
2706
- being performed. Check the EC2 API guide
2707
- for details.
2708
-
2709
- :rtype: list
2710
- :return: A list of :class:`boto.ec2.regioninfo.RegionInfo`
2711
- """
2712
- params = {}
2713
- if region_names:
2714
- self.build_list_params(params, region_names, 'RegionName')
2715
- if filters:
2716
- self.build_filter_params(params, filters)
2717
- regions = self.get_list('DescribeRegions', params,
2718
- [('item', RegionInfo)], verb='POST')
2719
- for region in regions:
2720
- region.connection_cls = EC2Connection
2721
- return regions
2722
-
2723
- #
2724
- # Reservation methods
2725
- #
2726
-
2727
- def get_all_reserved_instances_offerings(self,
2728
- reserved_instances_offering_ids=None,
2729
- instance_type=None,
2730
- availability_zone=None,
2731
- product_description=None,
2732
- filters=None,
2733
- instance_tenancy=None,
2734
- offering_type=None,
2735
- include_marketplace=None,
2736
- min_duration=None,
2737
- max_duration=None,
2738
- max_instance_count=None,
2739
- next_token=None,
2740
- max_results=None):
2741
- """
2742
- Describes Reserved Instance offerings that are available for purchase.
2743
-
2744
- :type reserved_instances_offering_ids: list
2745
- :param reserved_instances_id: One or more Reserved Instances
2746
- offering IDs.
2747
-
2748
- :type instance_type: str
2749
- :param instance_type: Displays Reserved Instances of the specified
2750
- instance type.
2751
-
2752
- :type availability_zone: str
2753
- :param availability_zone: Displays Reserved Instances within the
2754
- specified Availability Zone.
2755
-
2756
- :type product_description: str
2757
- :param product_description: Displays Reserved Instances with the
2758
- specified product description.
2759
-
2760
- :type filters: dict
2761
- :param filters: Optional filters that can be used to limit
2762
- the results returned. Filters are provided
2763
- in the form of a dictionary consisting of
2764
- filter names as the key and filter values
2765
- as the value. The set of allowable filter
2766
- names/values is dependent on the request
2767
- being performed. Check the EC2 API guide
2768
- for details.
2769
-
2770
- :type instance_tenancy: string
2771
- :param instance_tenancy: The tenancy of the Reserved Instance offering.
2772
- A Reserved Instance with tenancy of dedicated will run on
2773
- single-tenant hardware and can only be launched within a VPC.
2774
-
2775
- :type offering_type: string
2776
- :param offering_type: The Reserved Instance offering type. Valid
2777
- Values: `"Heavy Utilization" | "Medium Utilization" | "Light
2778
- Utilization"`
2779
-
2780
- :type include_marketplace: bool
2781
- :param include_marketplace: Include Marketplace offerings in the
2782
- response.
2783
-
2784
- :type min_duration: int :param min_duration: Minimum duration (in
2785
- seconds) to filter when searching for offerings.
2786
-
2787
- :type max_duration: int
2788
- :param max_duration: Maximum duration (in seconds) to filter when
2789
- searching for offerings.
2790
-
2791
- :type max_instance_count: int
2792
- :param max_instance_count: Maximum number of instances to filter when
2793
- searching for offerings.
2794
-
2795
- :type next_token: string
2796
- :param next_token: Token to use when requesting the next paginated set
2797
- of offerings.
2798
-
2799
- :type max_results: int
2800
- :param max_results: Maximum number of offerings to return per call.
2801
-
2802
- :rtype: list
2803
- :return: A list of
2804
- :class:`boto.ec2.reservedinstance.ReservedInstancesOffering`.
2805
-
2806
- """
2807
- params = {}
2808
- if reserved_instances_offering_ids is not None:
2809
- self.build_list_params(params, reserved_instances_offering_ids,
2810
- 'ReservedInstancesOfferingId')
2811
- if instance_type:
2812
- params['InstanceType'] = instance_type
2813
- if availability_zone:
2814
- params['AvailabilityZone'] = availability_zone
2815
- if product_description:
2816
- params['ProductDescription'] = product_description
2817
- if filters:
2818
- self.build_filter_params(params, filters)
2819
- if instance_tenancy is not None:
2820
- params['InstanceTenancy'] = instance_tenancy
2821
- if offering_type is not None:
2822
- params['OfferingType'] = offering_type
2823
- if include_marketplace is not None:
2824
- if include_marketplace:
2825
- params['IncludeMarketplace'] = 'true'
2826
- else:
2827
- params['IncludeMarketplace'] = 'false'
2828
- if min_duration is not None:
2829
- params['MinDuration'] = str(min_duration)
2830
- if max_duration is not None:
2831
- params['MaxDuration'] = str(max_duration)
2832
- if max_instance_count is not None:
2833
- params['MaxInstanceCount'] = str(max_instance_count)
2834
- if next_token is not None:
2835
- params['NextToken'] = next_token
2836
- if max_results is not None:
2837
- params['MaxResults'] = str(max_results)
2838
-
2839
- return self.get_list('DescribeReservedInstancesOfferings',
2840
- params, [('item', ReservedInstancesOffering)],
2841
- verb='POST')
2842
-
2843
- def get_all_reserved_instances(self, reserved_instances_id=None,
2844
- filters=None):
2845
- """
2846
- Describes one or more of the Reserved Instances that you purchased.
2847
-
2848
- :type reserved_instance_ids: list
2849
- :param reserved_instance_ids: A list of the reserved instance ids that
2850
- will be returned. If not provided, all reserved instances
2851
- will be returned.
2852
-
2853
- :type filters: dict
2854
- :param filters: Optional filters that can be used to limit the
2855
- results returned. Filters are provided in the form of a
2856
- dictionary consisting of filter names as the key and
2857
- filter values as the value. The set of allowable filter
2858
- names/values is dependent on the request being performed.
2859
- Check the EC2 API guide for details.
2860
-
2861
- :rtype: list
2862
- :return: A list of :class:`boto.ec2.reservedinstance.ReservedInstance`
2863
- """
2864
- params = {}
2865
- if reserved_instances_id:
2866
- self.build_list_params(params, reserved_instances_id,
2867
- 'ReservedInstancesId')
2868
- if filters:
2869
- self.build_filter_params(params, filters)
2870
- return self.get_list('DescribeReservedInstances',
2871
- params, [('item', ReservedInstance)], verb='POST')
2872
-
2873
- def purchase_reserved_instance_offering(self,
2874
- reserved_instances_offering_id,
2875
- instance_count=1, limit_price=None):
2876
- """
2877
- Purchase a Reserved Instance for use with your account.
2878
- ** CAUTION **
2879
- This request can result in large amounts of money being charged to your
2880
- AWS account. Use with caution!
2881
-
2882
- :type reserved_instances_offering_id: string
2883
- :param reserved_instances_offering_id: The offering ID of the Reserved
2884
- Instance to purchase
2885
-
2886
- :type instance_count: int
2887
- :param instance_count: The number of Reserved Instances to purchase.
2888
- Default value is 1.
2889
-
2890
- :type limit_price: tuple
2891
- :param instance_count: Limit the price on the total order.
2892
- Must be a tuple of (amount, currency_code), for example:
2893
- (100.0, 'USD').
2894
-
2895
- :rtype: :class:`boto.ec2.reservedinstance.ReservedInstance`
2896
- :return: The newly created Reserved Instance
2897
- """
2898
- params = {
2899
- 'ReservedInstancesOfferingId': reserved_instances_offering_id,
2900
- 'InstanceCount': instance_count}
2901
- if limit_price is not None:
2902
- params['LimitPrice.Amount'] = str(limit_price[0])
2903
- params['LimitPrice.CurrencyCode'] = str(limit_price[1])
2904
- return self.get_object('PurchaseReservedInstancesOffering', params,
2905
- ReservedInstance, verb='POST')
2906
-
2907
- def create_reserved_instances_listing(self, reserved_instances_id, instance_count,
2908
- price_schedules, client_token):
2909
- """Creates a new listing for Reserved Instances.
2910
-
2911
- Creates a new listing for Amazon EC2 Reserved Instances that will be
2912
- sold in the Reserved Instance Marketplace. You can submit one Reserved
2913
- Instance listing at a time.
2914
-
2915
- The Reserved Instance Marketplace matches sellers who want to resell
2916
- Reserved Instance capacity that they no longer need with buyers who
2917
- want to purchase additional capacity. Reserved Instances bought and
2918
- sold through the Reserved Instance Marketplace work like any other
2919
- Reserved Instances.
2920
-
2921
- If you want to sell your Reserved Instances, you must first register as
2922
- a Seller in the Reserved Instance Marketplace. After completing the
2923
- registration process, you can create a Reserved Instance Marketplace
2924
- listing of some or all of your Reserved Instances, and specify the
2925
- upfront price you want to receive for them. Your Reserved Instance
2926
- listings then become available for purchase.
2927
-
2928
- :type reserved_instances_id: string
2929
- :param reserved_instances_id: The ID of the Reserved Instance that
2930
- will be listed.
2931
-
2932
- :type instance_count: int
2933
- :param instance_count: The number of instances that are a part of a
2934
- Reserved Instance account that will be listed in the Reserved
2935
- Instance Marketplace. This number should be less than or equal to
2936
- the instance count associated with the Reserved Instance ID
2937
- specified in this call.
2938
-
2939
- :type price_schedules: List of tuples
2940
- :param price_schedules: A list specifying the price of the Reserved
2941
- Instance for each month remaining in the Reserved Instance term.
2942
- Each tuple contains two elements, the price and the term. For
2943
- example, for an instance that 11 months remaining in its term,
2944
- we can have a price schedule with an upfront price of $2.50.
2945
- At 8 months remaining we can drop the price down to $2.00.
2946
- This would be expressed as::
2947
-
2948
- price_schedules=[('2.50', 11), ('2.00', 8)]
2949
-
2950
- :type client_token: string
2951
- :param client_token: Unique, case-sensitive identifier you provide
2952
- to ensure idempotency of the request. Maximum 64 ASCII characters.
2953
-
2954
- :rtype: list
2955
- :return: A list of
2956
- :class:`boto.ec2.reservedinstance.ReservedInstanceListing`
2957
-
2958
- """
2959
- params = {
2960
- 'ReservedInstancesId': reserved_instances_id,
2961
- 'InstanceCount': str(instance_count),
2962
- 'ClientToken': client_token,
2963
- }
2964
- for i, schedule in enumerate(price_schedules):
2965
- price, term = schedule
2966
- params['PriceSchedules.%s.Price' % i] = str(price)
2967
- params['PriceSchedules.%s.Term' % i] = str(term)
2968
- return self.get_list('CreateReservedInstancesListing',
2969
- params, [('item', ReservedInstanceListing)], verb='POST')
2970
-
2971
- def cancel_reserved_instances_listing(
2972
- self, reserved_instances_listing_ids=None):
2973
- """Cancels the specified Reserved Instance listing.
2974
-
2975
- :type reserved_instances_listing_ids: List of strings
2976
- :param reserved_instances_listing_ids: The ID of the
2977
- Reserved Instance listing to be cancelled.
2978
-
2979
- :rtype: list
2980
- :return: A list of
2981
- :class:`boto.ec2.reservedinstance.ReservedInstanceListing`
2982
-
2983
- """
2984
- params = {}
2985
- if reserved_instances_listing_ids is not None:
2986
- self.build_list_params(params, reserved_instances_listing_ids,
2987
- 'ReservedInstancesListingId')
2988
- return self.get_list('CancelReservedInstancesListing',
2989
- params, [('item', ReservedInstanceListing)], verb='POST')
2990
-
2991
- #
2992
- # Monitoring
2993
- #
2994
-
2995
- def monitor_instances(self, instance_ids):
2996
- """
2997
- Enable CloudWatch monitoring for the supplied instances.
2998
-
2999
- :type instance_id: list of strings
3000
- :param instance_id: The instance ids
3001
-
3002
- :rtype: list
3003
- :return: A list of :class:`boto.ec2.instanceinfo.InstanceInfo`
3004
- """
3005
- params = {}
3006
- self.build_list_params(params, instance_ids, 'InstanceId')
3007
- return self.get_list('MonitorInstances', params,
3008
- [('item', InstanceInfo)], verb='POST')
3009
-
3010
- def monitor_instance(self, instance_id):
3011
- """
3012
- Deprecated Version, maintained for backward compatibility.
3013
- Enable CloudWatch monitoring for the supplied instance.
3014
-
3015
- :type instance_id: string
3016
- :param instance_id: The instance id
3017
-
3018
- :rtype: list
3019
- :return: A list of :class:`boto.ec2.instanceinfo.InstanceInfo`
3020
- """
3021
- return self.monitor_instances([instance_id])
3022
-
3023
- def unmonitor_instances(self, instance_ids):
3024
- """
3025
- Disable CloudWatch monitoring for the supplied instance.
3026
-
3027
- :type instance_id: list of string
3028
- :param instance_id: The instance id
3029
-
3030
- :rtype: list
3031
- :return: A list of :class:`boto.ec2.instanceinfo.InstanceInfo`
3032
- """
3033
- params = {}
3034
- self.build_list_params(params, instance_ids, 'InstanceId')
3035
- return self.get_list('UnmonitorInstances', params,
3036
- [('item', InstanceInfo)], verb='POST')
3037
-
3038
- def unmonitor_instance(self, instance_id):
3039
- """
3040
- Deprecated Version, maintained for backward compatibility.
3041
- Disable CloudWatch monitoring for the supplied instance.
3042
-
3043
- :type instance_id: string
3044
- :param instance_id: The instance id
3045
-
3046
- :rtype: list
3047
- :return: A list of :class:`boto.ec2.instanceinfo.InstanceInfo`
3048
- """
3049
- return self.unmonitor_instances([instance_id])
3050
-
3051
- #
3052
- # Bundle Windows Instances
3053
- #
3054
-
3055
- def bundle_instance(self, instance_id,
3056
- s3_bucket,
3057
- s3_prefix,
3058
- s3_upload_policy):
3059
- """
3060
- Bundle Windows instance.
3061
-
3062
- :type instance_id: string
3063
- :param instance_id: The instance id
3064
-
3065
- :type s3_bucket: string
3066
- :param s3_bucket: The bucket in which the AMI should be stored.
3067
-
3068
- :type s3_prefix: string
3069
- :param s3_prefix: The beginning of the file name for the AMI.
3070
-
3071
- :type s3_upload_policy: string
3072
- :param s3_upload_policy: Base64 encoded policy that specifies condition
3073
- and permissions for Amazon EC2 to upload the
3074
- user's image into Amazon S3.
3075
- """
3076
-
3077
- params = {'InstanceId': instance_id,
3078
- 'Storage.S3.Bucket': s3_bucket,
3079
- 'Storage.S3.Prefix': s3_prefix,
3080
- 'Storage.S3.UploadPolicy': s3_upload_policy}
3081
- s3auth = boto.auth.get_auth_handler(None, boto.config,
3082
- self.provider, ['s3'])
3083
- params['Storage.S3.AWSAccessKeyId'] = self.aws_access_key_id
3084
- signature = s3auth.sign_string(s3_upload_policy)
3085
- params['Storage.S3.UploadPolicySignature'] = signature
3086
- return self.get_object('BundleInstance', params,
3087
- BundleInstanceTask, verb='POST')
3088
-
3089
- def get_all_bundle_tasks(self, bundle_ids=None, filters=None):
3090
- """
3091
- Retrieve current bundling tasks. If no bundle id is specified, all
3092
- tasks are retrieved.
3093
-
3094
- :type bundle_ids: list
3095
- :param bundle_ids: A list of strings containing identifiers for
3096
- previously created bundling tasks.
3097
-
3098
- :type filters: dict
3099
- :param filters: Optional filters that can be used to limit
3100
- the results returned. Filters are provided
3101
- in the form of a dictionary consisting of
3102
- filter names as the key and filter values
3103
- as the value. The set of allowable filter
3104
- names/values is dependent on the request
3105
- being performed. Check the EC2 API guide
3106
- for details.
3107
-
3108
- """
3109
-
3110
- params = {}
3111
- if bundle_ids:
3112
- self.build_list_params(params, bundle_ids, 'BundleId')
3113
- if filters:
3114
- self.build_filter_params(params, filters)
3115
- return self.get_list('DescribeBundleTasks', params,
3116
- [('item', BundleInstanceTask)], verb='POST')
3117
-
3118
- def cancel_bundle_task(self, bundle_id):
3119
- """
3120
- Cancel a previously submitted bundle task
3121
-
3122
- :type bundle_id: string
3123
- :param bundle_id: The identifier of the bundle task to cancel.
3124
- """
3125
-
3126
- params = {'BundleId': bundle_id}
3127
- return self.get_object('CancelBundleTask', params,
3128
- BundleInstanceTask, verb='POST')
3129
-
3130
- def get_password_data(self, instance_id):
3131
- """
3132
- Get encrypted administrator password for a Windows instance.
3133
-
3134
- :type instance_id: string
3135
- :param instance_id: The identifier of the instance to retrieve the
3136
- password for.
3137
- """
3138
-
3139
- params = {'InstanceId': instance_id}
3140
- rs = self.get_object('GetPasswordData', params, ResultSet, verb='POST')
3141
- return rs.passwordData
3142
-
3143
- #
3144
- # Cluster Placement Groups
3145
- #
3146
-
3147
- def get_all_placement_groups(self, groupnames=None, filters=None):
3148
- """
3149
- Get all placement groups associated with your account in a region.
3150
-
3151
- :type groupnames: list
3152
- :param groupnames: A list of the names of placement groups to retrieve.
3153
- If not provided, all placement groups will be
3154
- returned.
3155
-
3156
- :type filters: dict
3157
- :param filters: Optional filters that can be used to limit
3158
- the results returned. Filters are provided
3159
- in the form of a dictionary consisting of
3160
- filter names as the key and filter values
3161
- as the value. The set of allowable filter
3162
- names/values is dependent on the request
3163
- being performed. Check the EC2 API guide
3164
- for details.
3165
-
3166
- :rtype: list
3167
- :return: A list of :class:`boto.ec2.placementgroup.PlacementGroup`
3168
- """
3169
- params = {}
3170
- if groupnames:
3171
- self.build_list_params(params, groupnames, 'GroupName')
3172
- if filters:
3173
- self.build_filter_params(params, filters)
3174
- return self.get_list('DescribePlacementGroups', params,
3175
- [('item', PlacementGroup)], verb='POST')
3176
-
3177
- def create_placement_group(self, name, strategy='cluster'):
3178
- """
3179
- Create a new placement group for your account.
3180
- This will create the placement group within the region you
3181
- are currently connected to.
3182
-
3183
- :type name: string
3184
- :param name: The name of the new placement group
3185
-
3186
- :type strategy: string
3187
- :param strategy: The placement strategy of the new placement group.
3188
- Currently, the only acceptable value is "cluster".
3189
-
3190
- :rtype: bool
3191
- :return: True if successful
3192
- """
3193
- params = {'GroupName':name, 'Strategy':strategy}
3194
- group = self.get_status('CreatePlacementGroup', params, verb='POST')
3195
- return group
3196
-
3197
- def delete_placement_group(self, name):
3198
- """
3199
- Delete a placement group from your account.
3200
-
3201
- :type key_name: string
3202
- :param key_name: The name of the keypair to delete
3203
- """
3204
- params = {'GroupName':name}
3205
- return self.get_status('DeletePlacementGroup', params, verb='POST')
3206
-
3207
- # Tag methods
3208
-
3209
- def build_tag_param_list(self, params, tags):
3210
- keys = sorted(tags.keys())
3211
- i = 1
3212
- for key in keys:
3213
- value = tags[key]
3214
- params['Tag.%d.Key'%i] = key
3215
- if value is not None:
3216
- params['Tag.%d.Value'%i] = value
3217
- i += 1
3218
-
3219
- def get_all_tags(self, filters=None):
3220
- """
3221
- Retrieve all the metadata tags associated with your account.
3222
-
3223
- :type filters: dict
3224
- :param filters: Optional filters that can be used to limit
3225
- the results returned. Filters are provided
3226
- in the form of a dictionary consisting of
3227
- filter names as the key and filter values
3228
- as the value. The set of allowable filter
3229
- names/values is dependent on the request
3230
- being performed. Check the EC2 API guide
3231
- for details.
3232
-
3233
- :rtype: dict
3234
- :return: A dictionary containing metadata tags
3235
- """
3236
- params = {}
3237
- if filters:
3238
- self.build_filter_params(params, filters)
3239
- return self.get_list('DescribeTags', params,
3240
- [('item', Tag)], verb='POST')
3241
-
3242
- def create_tags(self, resource_ids, tags):
3243
- """
3244
- Create new metadata tags for the specified resource ids.
3245
-
3246
- :type resource_ids: list
3247
- :param resource_ids: List of strings
3248
-
3249
- :type tags: dict
3250
- :param tags: A dictionary containing the name/value pairs.
3251
- If you want to create only a tag name, the
3252
- value for that tag should be the empty string
3253
- (e.g. '').
3254
-
3255
- """
3256
- params = {}
3257
- self.build_list_params(params, resource_ids, 'ResourceId')
3258
- self.build_tag_param_list(params, tags)
3259
- return self.get_status('CreateTags', params, verb='POST')
3260
-
3261
- def delete_tags(self, resource_ids, tags):
3262
- """
3263
- Delete metadata tags for the specified resource ids.
3264
-
3265
- :type resource_ids: list
3266
- :param resource_ids: List of strings
3267
-
3268
- :type tags: dict or list
3269
- :param tags: Either a dictionary containing name/value pairs
3270
- or a list containing just tag names.
3271
- If you pass in a dictionary, the values must
3272
- match the actual tag values or the tag will
3273
- not be deleted. If you pass in a value of None
3274
- for the tag value, all tags with that name will
3275
- be deleted.
3276
-
3277
- """
3278
- if isinstance(tags, list):
3279
- tags = {}.fromkeys(tags, None)
3280
- params = {}
3281
- self.build_list_params(params, resource_ids, 'ResourceId')
3282
- self.build_tag_param_list(params, tags)
3283
- return self.get_status('DeleteTags', params, verb='POST')
3284
-
3285
- # Network Interface methods
3286
-
3287
- def get_all_network_interfaces(self, filters=None):
3288
- """
3289
- Retrieve all of the Elastic Network Interfaces (ENI's)
3290
- associated with your account.
3291
-
3292
- :type filters: dict
3293
- :param filters: Optional filters that can be used to limit
3294
- the results returned. Filters are provided
3295
- in the form of a dictionary consisting of
3296
- filter names as the key and filter values
3297
- as the value. The set of allowable filter
3298
- names/values is dependent on the request
3299
- being performed. Check the EC2 API guide
3300
- for details.
3301
-
3302
- :rtype: list
3303
- :return: A list of :class:`boto.ec2.networkinterface.NetworkInterface`
3304
- """
3305
- params = {}
3306
- if filters:
3307
- self.build_filter_params(params, filters)
3308
- return self.get_list('DescribeNetworkInterfaces', params,
3309
- [('item', NetworkInterface)], verb='POST')
3310
-
3311
- def create_network_interface(self, subnet_id, private_ip_address=None,
3312
- description=None, groups=None):
3313
- """
3314
- Creates a network interface in the specified subnet.
3315
-
3316
- :type subnet_id: str
3317
- :param subnet_id: The ID of the subnet to associate with the
3318
- network interface.
3319
-
3320
- :type private_ip_address: str
3321
- :param private_ip_address: The private IP address of the
3322
- network interface. If not supplied, one will be chosen
3323
- for you.
3324
-
3325
- :type description: str
3326
- :param description: The description of the network interface.
3327
-
3328
- :type groups: list
3329
- :param groups: Lists the groups for use by the network interface.
3330
- This can be either a list of group ID's or a list of
3331
- :class:`boto.ec2.securitygroup.SecurityGroup` objects.
3332
-
3333
- :rtype: :class:`boto.ec2.networkinterface.NetworkInterface`
3334
- :return: The newly created network interface.
3335
- """
3336
- params = {'SubnetId': subnet_id}
3337
- if private_ip_address:
3338
- params['PrivateIpAddress'] = private_ip_address
3339
- if description:
3340
- params['Description'] = description
3341
- if groups:
3342
- ids = []
3343
- for group in groups:
3344
- if isinstance(group, SecurityGroup):
3345
- ids.append(group.id)
3346
- else:
3347
- ids.append(group)
3348
- self.build_list_params(params, ids, 'SecurityGroupId')
3349
- return self.get_object('CreateNetworkInterface', params,
3350
- NetworkInterface, verb='POST')
3351
-
3352
- def attach_network_interface(self, network_interface_id,
3353
- instance_id, device_index):
3354
- """
3355
- Attaches a network interface to an instance.
3356
-
3357
- :type network_interface_id: str
3358
- :param network_interface_id: The ID of the network interface to attach.
3359
-
3360
- :type instance_id: str
3361
- :param instance_id: The ID of the instance that will be attached
3362
- to the network interface.
3363
-
3364
- :type device_index: int
3365
- :param device_index: The index of the device for the network
3366
- interface attachment on the instance.
3367
- """
3368
- params = {'NetworkInterfaceId': network_interface_id,
3369
- 'InstanceId': instance_id,
3370
- 'DeviceIndex': device_index}
3371
- return self.get_status('AttachNetworkInterface', params, verb='POST')
3372
-
3373
- def detach_network_interface(self, attachement_id, force=False):
3374
- """
3375
- Detaches a network interface from an instance.
3376
-
3377
- :type attachment_id: str
3378
- :param attachment_id: The ID of the attachment.
3379
-
3380
- :type force: bool
3381
- :param force: Set to true to force a detachment.
3382
-
3383
- """
3384
- params = {'AttachmentId': network_interface_id}
3385
- if force:
3386
- params['Force'] = 'true'
3387
- return self.get_status('DetachNetworkInterface', params, verb='POST')
3388
-
3389
- def delete_network_interface(self, network_interface_id):
3390
- """
3391
- Delete the specified network interface.
3392
-
3393
- :type network_interface_id: str
3394
- :param network_interface_id: The ID of the network interface to delete.
3395
-
3396
- """
3397
- params = {'NetworkInterfaceId': network_interface_id}
3398
- return self.get_status('DeleteNetworkInterface', params, verb='POST')
3399
-
3400
- def get_all_vmtypes(self):
3401
- """
3402
- Get all vmtypes available on this cloud (eucalyptus specific)
3403
-
3404
- :rtype: list of :class:`boto.ec2.vmtype.VmType`
3405
- :return: The requested VmType objects
3406
- """
3407
- params = {}
3408
- return self.get_list('DescribeVmTypes', params, [('euca:item', VmType)], verb='POST')
3409
-