Как проверить ведро S3 есть теги или нет - PullRequest
0 голосов
/ 16 мая 2018

Я пытался проверить, есть ли в существующих корзинах s3 теги или нет, если в корзине нет тегов, я добавлю теги, я попробовал ниже код

for region in region_list:
    s3 = boto3.resource('s3', region)
    s3_client = boto3.client('s3', region)
        for bucket in s3.buckets.all():
            s3_bucket = bucket
            s3_bucket_name = s3_bucket.name
            response = s3_client.get_bucket_tagging(Bucket=s3_bucket_name)
            tagset = response['TagSet']
                if len(response['TagSet'])==0:
                    print "s3 bucket not have tags, adding tags"
                else:
                    pass

но получается ошибка ниже

Traceback (most recent call last):
File "C:\Python27\ec2info.py", line 235, in <module>
response = s3_client.get_bucket_tagging(Bucket=s3_bucket_name)
File "C:\Python27\lib\site-packages\botocore\client.py", line 314, in 
_api_call
return self._make_api_call(operation_name, kwargs)
File "C:\Python27\lib\site-packages\botocore\client.py", line 612, in 
_make_api_call
raise error_class(parsed_response, operation_name)
ClientError: An error occurred (NoSuchTagSet) when calling the 
GetBucketTagging operation: The TagSet does not exist

где я делаю что-то не так, как правильно проверить, есть ли в корзине s3 теги или нет

Заранее спасибо за помощь

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Вот полный код, как вы будете это делать

import boto3
from botocore.exceptions import ClientError

s3 = boto3.client('s3')
s3_re = boto3.resource('s3')

for bucket in s3_re.buckets.all():
    s3_bucket = bucket
    s3_bucket_name = s3_bucket.name
    bucket_tagging = s3_re.BucketTagging(s3_bucket_name)
    try:
        response = s3.get_bucket_tagging(Bucket=s3_bucket_name)
    except ClientError:
        print (bucket+ ",does not have tags, add tag")
        print("give key : ")
        inp_key = input()
        print("give value : ")
        inp_val = input()
        response = bucket_tagging.put(
            Tagging={
                'TagSet': [
                    {
                        'Key': inp_key, 
                        'Value': inp_val
                    },
                ]
            }
        )
0 голосов
/ 16 мая 2018

Потому что get_bucket_tagging выдает NoSuchTagSet, когда нет тегов. Поймай исключение и создай теги. Кроме того, не проходите по регионам, вы получите все сегменты независимо от конечной точки региона, к которой вы подключаетесь.

См .: NoSuchTagSet при вызове операции GetBucketTagging

from botocore.exceptions import ClientError

for bucket in s3.buckets.all():
    s3_bucket = bucket
    s3_bucket_name = s3_bucket.name
    try:
        response = s3_client.get_bucket_tagging(Bucket=s3_bucket_name)
        #print response
        #tagset = response['TagSet']
    except ClientError:
        print s3_bucket_name, "does not have tags, adding tags"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...