This Python script is designed for beginners who want to upload files from their computers to Oracle Cloud Infrastructure Object Storage. The script uses the OCI library to connect to the cloud and upload files to a bucket. It includes functions for checking if a bucket exists, creating a new bucket if necessary, and uploading files from a specified directory to the cloud. The script is easy to use and can be run with a simple command in a command prompt or terminal window. This makes it a great tool for anyone who wants a simple and efficient way to store and access files in the OCI cloud.
What The Script is Doing
Libraries
The program uses some built-in Python libraries to work with files and directories, as well as a library called “oci” which lets the program talk to the Oracle Cloud.
Creating an Object Storage client
The program starts by creating an “Object Storage client” object. This object is like a special tool that helps the program talk to the Oracle Cloud and do things like storing files.
Checking if a bucket exists
The program checks if a “bucket” already exists in the Oracle Cloud. A bucket is like a special folder in the cloud where files can be stored. If the bucket already exists, the program won’t create a new one.
Creating a bucket
If the bucket doesn’t exist, the program creates it. This is like creating a new folder in the cloud to store files. The program also sets some rules to make sure that nobody can see the files in the bucket without permission.
Uploading files to the bucket
The program then looks for files in a directory on your computer. It uploads each file to the bucket in the cloud. This is like putting your toys in a box and sending the box to the cloud, so you can play with your toys from anywhere in the world.
Putting it all together
The program puts all of these steps together into a “main” function, which is like a big recipe for the computer to follow. It also uses some special commands to let you choose which directory on your computer to upload files from, and which bucket in the cloud to upload files to.
Python Script to Upload The Directory to OCI Object Storage Bucket
import oci
import os
import sys
import argparse
# Check if bucket exists
def create_bucket_if_not_exists(object_storage, namespace, compartment_id, bucket_name):
try:
object_storage.get_bucket(namespace, bucket_name)
print(f"Bucket {bucket_name} already exists")
except oci.exceptions.ServiceError as e:
if e.status == 404:
# Create bucket if it doesn't exist
print(f"Creating bucket {bucket_name}")
create_bucket_details = oci.object_storage.models.CreateBucketDetails(
name=bucket_name,
compartment_id=compartment_id,
public_access_type="NoPublicAccess"
)
object_storage.create_bucket(namespace, create_bucket_details)
else:
raise
# Upload contents of directory
def upload_directory_contents(bucket_name, object_storage, namespace, directory_path):
# Create Upload Manager
upload_manager = oci.object_storage.UploadManager(object_storage, max_parallel_uploads=10)
for root, dirs, files in os.walk(directory_path):
for file in files:
file_path = os.path.join(root, file)
print(f"Uploading {file_path}")
upload_manager.upload_file(namespace, bucket_name, file, file_path)
def main():
# Create Object Storage client
config = oci.config.from_file("~/.oci/config", "DEFAULT")
object_storage = oci.object_storage.ObjectStorageClient(config)
# Set up compartment and bucket details
compartment_id = "<compartment_id>"
parser = argparse.ArgumentParser()
parser.add_argument('--dir', required=True)
parser.add_argument('--bucket_name', required=True)
args = parser.parse_args()
bucket_name = args.bucket_name
directory_path = args.dir
namespace = object_storage.get_namespace().data
create_bucket_if_not_exists(object_storage, namespace, compartment_id, bucket_name)
upload_directory_contents(bucket_name, object_storage, namespace, directory_path)
if __name__ == "__main__":
main()
In the script you need to replace compartment_id with your compartment_id where the bucket will be stored.
Set Everything To Run The Script
Installation of OCI
Python should be already installed on your PC, I will not cover that. First, we need to install the oci tool. To do this, open a command prompt or terminal and type the following command:
pip install oci
This command will install oci so that our Python script can use it.
Other option is to install with Yum, for Linux 7 is:
sudo yum install python36-oci-cli
More on Working With CLI
Creating the Configuration File
Next, we need a secret file called config that tells the script how to access our toy box in OCI. The file should look like this:
[DEFAULT]
user=ocid1.user...
fingerprint=...
key_file=path/to/your/oci_api_key.pem
tenancy=ocid1.tenancy...
region=us-ashburn-1
The script will look for this file when it runs. You should configure the file with your details, the OCI documentation will help you do that. The files is checked in the script under the line:
config = oci.config.from_file("~/.oci/config", "DEFAULT")
Running the Script
To run the script,open a command prompt or terminal and type the following command:
python script.py --dir /path/to/your/folder --bucket_name your_bucket_name
Replace /path/to/your/folder with the path to the folder with the toys (files) you want to store, and your_bucket_name with the name you want to give to your toy box (bucket).
What Happens When the Script Runs
When the script runs, it does the following things:
- It reads the secret config file.
- It checks if our tbucket exists or creates a new one if needed.
- It takes all files from the folder we chose and puts them into our bucket in OCI.
That’s it! Now you know how the script works and how to use it to store your files safely in OCI.