Reputation: 4062
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
Upvotes: 7
Views: 4530
Reputation: 3201
You can relay on gcloud
also
function ensure_gcp_bucket_exists {
echo "Running "ensure_gcp_bucket_exists
BUCKET_NAME="gs://test-bucket"
if gcloud storage buckets describe "${BUCKET_NAME}" &> /dev/null ; then
"GCP Bucket ${BUCKET_NAME} already exists"
else
echo "Creating GCP Bucket ${BUCKET_NAME}"
gcloud storage buckets create "${BUCKET_NAME}"
fi
}
Upvotes: 0
Reputation: 441
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
}
Upvotes: 2
Reputation: 129
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
Upvotes: 1
Reputation: 67063
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.
Upvotes: 15