2017-02-22 67 views
0

斗错误我用下面的代码来检查桶的存在:S3 API创建SOFTLAYER

def check_bucket_existed(bucket_name, public_auth_endpoint): 

    endpoint = 'https://' + public_auth_endpoint 
    s3 = boto3.resource('s3', endpoint_url=endpoint) 

    try: 
     s3.meta.client.head_bucket(Bucket=bucket_name) 
     exists = True 
    except botocore.exceptions.ClientError as e: 
     error_code = int(e.response['Error']['Code']) 
     if error_code == 404: 
      exists = False 
     else: 
      exists = True 
    return exists 

如果桶不存在,然后开始用下面的代码创建斗:

def create_bucket(bucket_name, public_auth_endpoint): 
    endpoint = 'https://' + public_auth_endpoint 
    s3 = boto3.resource('s3', endpoint_url=endpoint) 

    if check_bucket_existed(bucket_name, public_auth_endpoint): 
     print("Bucket {} existed , skip bucket creation process".format(bucket_name)) 
     return True 
    else: 
     print("Bucket {} doesn't exist, start bucket creation process.".format(bucket_name)) 
     try: 
      s3.create_bucket(Bucket=bucket_name) 
      if check_bucket_existed(bucket_name, public_auth_endpoint): 
       print("Bucket {} created successsfully.".format(bucket_name)) 
       return True 
     except botocore.exceptions.ClientError as e: 
      print("Error: Unable to create the bucket : %s" % e) 
      return False 

我对以下日志迷茫运行create_bucket代码时,得到:

Bucket td.cos.s1 doesn't exist, start bucket creation process. 
Error: Unable to create the bucket : An error occurred (BucketAlreadyExists) when calling the CreateBucket operation: The requested bucket name is not available. The bucket namespace is shared by all users of the system. Please select a different name and try again. 

在日志中,首先它翔要使用的ws桶名称不存在,但是当开始使用该名称创建桶时,会提示ERROR信息显示此桶名称无法使用。

我多次使用此存储桶名称,并且可以使用此存储桶名称。

我的代码有什么问题?谢谢!

+0

这桶名称前使用。但在运行此create_bucket代码之前它已被删除。 – Hengguo

回答

0

例外:

“的请求斗名称不可用桶命名空间是 通过该系统的所有用户共享请选择一个不同的名称和 再试一次。”

存储桶是唯一的,所以这意味着另一个客户(可以来自其他帐户)已经创建了一个与您尝试的名称相同的存储桶。所以我建议用不同的名称


更新的创建桶

你的脚本能正常工作,我必须成功创建斗:td.cos.s1(我已经删除了,为您的测试)。你可以做双重检查吗?

在这里,我得到的结果:

False 
Bucket td.cos.s1 doesn't exist, start bucket creation process. 
Bucket td.cos.s1 created successsfully. 
True 
+0

但是通过check_bucket_existed方法,它显示具有该名称的存储桶不存在。如何解释这一点? – Hengguo

+0

我的歉意,我已经验证你的脚本,请查看我的回答中的** Updated **部分 –

+0

在循环中运行以下代码10次时发生此问题:1。创建云对象存储。 2.创建桶。 3.删除桶。 4.删除云对象存储。然后会有几次这个问题发生。 – Hengguo