Guest User

Untitled

a guest
Jan 21st, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.30 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- config:utf-8 -*-
  3. """
  4. $ ./add_s3_tag.py --help
  5. usage: add_s3_tag.py [-h] [--profile PROFILE] [--tag-value TAG_VALUE]
  6. [--tag-key TAG_KEY] [--query QUERY] [--dry-run]
  7.  
  8. optional arguments:
  9. -h, --help show this help message and exit
  10. --profile PROFILE
  11. --tag-value TAG_VALUE
  12. --tag-key TAG_KEY
  13. --query QUERY
  14. --dry-run
  15. """
  16. import argparse
  17. import copy
  18. import boto3
  19. from boto3.session import Session
  20. from botocore.exceptions import ClientError
  21.  
  22.  
  23. def get_args():
  24. """ コマンド引数のパースを行う
  25. """
  26. psr = argparse.ArgumentParser()
  27. psr.add_argument('--profile', default='default')
  28. psr.add_argument('--tag-value', default='')
  29. psr.add_argument('--tag-key', default='')
  30. psr.add_argument('--query', default='')
  31. psr.add_argument('--dry-run', action='store_true')
  32. return psr.parse_args()
  33.  
  34.  
  35. def dict_list_uniquify(target_list):
  36. """ 辞書の配列から重複要素を排除する
  37. """
  38.  
  39. list_tuppled = [tuple(d.items()) for d in target_list]
  40. list_tuppled_unique = list(set(list_tuppled))
  41. list_unique = [dict(t) for t in list_tuppled_unique]
  42.  
  43. return list_unique
  44.  
  45.  
  46. def add_tag(s3, bucket_name, tag_key, tag_value, dry_run):
  47. """ バケットにタグ付けする
  48. """
  49.  
  50. print(bucket_name)
  51.  
  52. try:
  53. bucket_tagging = s3.BucketTagging(bucket_name)
  54. tags = bucket_tagging.tag_set
  55. tags.append({'Key': tag_key, 'Value': tag_value})
  56. add_tags = dict_list_uniquify(tags)
  57. except ClientError as e:
  58. if e.response['Error']['Code'] == 'NoSuchTagSet':
  59. add_tags = [{'Key': tag_key, 'Value': tag_value}]
  60. else:
  61. print("Unexpected error: %s" % e)
  62.  
  63. print(add_tags)
  64. if not dry_run:
  65. print('Add tags...')
  66. bucket_tagging.put(Tagging={'TagSet': add_tags})
  67.  
  68.  
  69. def main():
  70. args = get_args()
  71.  
  72. session = Session(profile_name=args.profile)
  73.  
  74. s3 = session.client('s3')
  75. s3_resource = session.resource('s3')
  76. resp = s3.list_buckets()
  77. bucket_names = [
  78. bucket['Name'] for bucket in resp['Buckets']
  79. if bucket['Name'].find(args.query) >= 0
  80. ]
  81. _ = list(
  82. map(
  83. lambda b: add_tag(s3_resource, b, args.tag_key, args.tag_value, args.dry_run),
  84. bucket_names))
  85.  
  86.  
  87. if __name__ == '__main__': main()
Add Comment
Please, Sign In to add comment