Index: third_party/gsutil/boto/bin/glacier |
diff --git a/third_party/gsutil/boto/bin/glacier b/third_party/gsutil/boto/bin/glacier |
new file mode 100755 |
index 0000000000000000000000000000000000000000..bd28adf61550a20842c8035f2d8eba4abafb851f |
--- /dev/null |
+++ b/third_party/gsutil/boto/bin/glacier |
@@ -0,0 +1,154 @@ |
+#!/usr/bin/env python |
+# -*- coding: utf-8 -*- |
+# Copyright (c) 2012 Miguel Olivares http://moliware.com/ |
+# |
+# Permission is hereby granted, free of charge, to any person obtaining a |
+# copy of this software and associated documentation files (the |
+# "Software"), to deal in the Software without restriction, including |
+# without limitation the rights to use, copy, modify, merge, publish, dis- |
+# tribute, sublicense, and/or sell copies of the Software, and to permit |
+# persons to whom the Software is furnished to do so, subject to the fol- |
+# lowing conditions: |
+# |
+# The above copyright notice and this permission notice shall be included |
+# in all copies or substantial portions of the Software. |
+# |
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
+# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- |
+# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT |
+# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, |
+# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
+# IN THE SOFTWARE. |
+# |
+""" |
+ glacier |
+ ~~~~~~~ |
+ |
+ Amazon Glacier tool built on top of boto. Look at the usage method to see |
+ how to use it. |
+ |
+ Author: Miguel Olivares <miguel@moliware.com> |
+""" |
+import sys |
+ |
+from boto.glacier import connect_to_region |
+from getopt import getopt, GetoptError |
+from os.path import isfile |
+ |
+ |
+COMMANDS = ('vaults', 'jobs', 'upload') |
+ |
+ |
+def usage(): |
+ print """ |
+glacier <command> [args] |
+ |
+ Commands |
+ vaults - Operations with vaults |
+ jobs - Operations with jobs |
+ upload - Upload files to a vault. If the vault doesn't exits, it is |
+ created |
+ |
+ Common args: |
+ --access_key - Your AWS Access Key ID. If not supplied, boto will |
+ use the value of the environment variable |
+ AWS_ACCESS_KEY_ID |
+ --secret_key - Your AWS Secret Access Key. If not supplied, boto |
+ will use the value of the environment variable |
+ AWS_SECRET_ACCESS_KEY |
+ --region - AWS region to use. Possible values: us-east-1, us-west-1, |
+ us-west-2, ap-northeast-1, eu-west-1. |
+ Default: us-east-1 |
+ |
+ Vaults operations: |
+ |
+ List vaults: |
+ glacier vaults |
+ |
+ Jobs operations: |
+ |
+ List jobs: |
+ glacier jobs <vault name> |
+ |
+ Uploading files: |
+ |
+ glacier upload <vault name> <files> |
+ |
+ Examples : |
+ glacier upload pics *.jpg |
+ glacier upload pics a.jpg b.jpg |
+""" |
+ sys.exit() |
+ |
+ |
+def connect(region, debug_level=0, access_key=None, secret_key=None): |
+ """ Connect to a specific region """ |
+ return connect_to_region(region, |
+ aws_access_key_id=access_key, |
+ aws_secret_access_key=secret_key, |
+ debug=debug_level) |
+ |
+ |
+def list_vaults(region, access_key=None, secret_key=None): |
+ layer2 = connect(region, access_key = access_key, secret_key = secret_key) |
+ for vault in layer2.list_vaults(): |
+ print vault.arn |
+ |
+ |
+def list_jobs(vault_name, region, access_key=None, secret_key=None): |
+ layer2 = connect(region, access_key = access_key, secret_key = secret_key) |
+ print layer2.layer1.list_jobs(vault_name) |
+ |
+ |
+def upload_files(vault_name, filenames, region, access_key=None, secret_key=None): |
+ layer2 = connect(region, access_key = access_key, secret_key = secret_key) |
+ layer2.create_vault(vault_name) |
+ glacier_vault = layer2.get_vault(vault_name) |
+ for filename in filenames: |
+ if isfile(filename): |
+ print 'Uploading %s to %s' % (filename, vault_name) |
+ glacier_vault.upload_archive(filename) |
+ |
+ |
+def main(): |
+ if len(sys.argv) < 2: |
+ usage() |
+ |
+ command = sys.argv[1] |
+ if command not in COMMANDS: |
+ usage() |
+ |
+ argv = sys.argv[2:] |
+ options = 'a:s:r:' |
+ long_options = ['access_key=', 'secret_key=', 'region='] |
+ try: |
+ opts, args = getopt(argv, options, long_options) |
+ except GetoptError, e: |
+ usage() |
+ |
+ # Parse agument |
+ access_key = secret_key = None |
+ region = 'us-east-1' |
+ for option, value in opts: |
+ if option in ('-a', '--access_key'): |
+ access_key = value |
+ elif option in ('-s', '--secret_key'): |
+ secret_key = value |
+ elif option in ('-r', '--region'): |
+ region = value |
+ # handle each command |
+ if command == 'vaults': |
+ list_vaults(region, access_key, secret_key) |
+ elif command == 'jobs': |
+ if len(args) != 1: |
+ usage() |
+ list_jobs(args[0], region, access_key, secret_key) |
+ elif command == 'upload': |
+ if len(args) < 2: |
+ usage() |
+ upload_files(args[0], args[1:], region, access_key, secret_key) |
+ |
+ |
+if __name__ == '__main__': |
+ main() |