7

I want to create a google bucket if it doesn't exist. Otherwise, I want to reuse the bucket name. How to do it? Its equivalent of the unix command

mkdir -p dir_name

I used the command but my shell script crashes when I run this next time.

gsutil mb -l ASIA gs://my_bucket_name_blah_blah

nizam.sp
  • 4,002
  • 5
  • 39
  • 63

3 Answers3

15

You could check for the existence of the bucket first. I think something like this would work:

gsutil ls -b gs://my_bucket_name_blah_blah || gsutil mb -l ASIA gs://my_bucket_name_blah_blah

Since the first command will return a 0 error code if the bucket already exists, the second command will only be executed if the bucket does not exist.

Note however that the first command will also return a non-zero exit code in the case of errors (transient error or permission denied). So you might need a more robust way of creating buckets.

jterrace
  • 64,866
  • 22
  • 157
  • 202
2

Following BoHuang answer I could came up with this:

# This function create a bucket
function create_bucket {

#PROJECT=$1
#BUCKET=$2
#REGION=$3
echo "Creating bucket [$2] in region [$3] for project [$1]"

if ! gsutil ls -p $1 gs://$2 &> /dev/null;
    then
        echo creating gs://$2 ... ;
        gsutil mb -p $1 -c regional -l $3 gs://$2;
        sleep 5;
    else
        echo "Bucket $2 already exists!"
        echo "Please revise the bucket and delete manually or rerun the code"
        exit 1
fi

}

nenetto
  • 354
  • 2
  • 6
1

After six years ....

I found this GitLab script can use as reference to solve this problem

The key part is

if ! gsutil ls -p ${GCP_PROJECT_ID} gs://${BUCKET} &> /dev/null; \
    then \
        echo creating gs://${BUCKET} ... ; \
        gsutil mb -p ${GCP_PROJECT_ID} -c regional -l ${GCP_REGION} gs://${BUCKET}; \
        sleep 10; \
    fi

That's a block of Makefile, but it's almost same as a shell script

BoHuang
  • 109
  • 4