Đoạn code này là ví dụ để sử dụng để tương tác với OpenStack Swift Storage, một dịch vụ lưu trữ đối tượng phân tán.
Dưới đây là một số hàm chính trong đoạn code Python này:
create_connection
: Tạo một kết nối đến OpenStack bằng cách sử dụng thông tin xác thực được cung cấp.create_container
: Tạo một container mới trong Swift Storage.list_containers
: Liệt kê tất cả các container trong Swift Storage.delete_container
: Xóa một container từ Swift Storage.upload_object
: Tải một file lên một container trong Swift Storage.upload_folder
: Tải tất cả các file trong một thư mục lên một container trong Swift Storage.delete_all_objects
: Xóa tất cả các file từ một container trong Swift Storage.get_file
: Lấy một file từ một container trong Swift Storage.list_objects
: Liệt kê tất cả các file trong một container trong Swift Storage.get_object_public_url
: Lấy URL công khai của một file trong Swift Storage.
import os, glob, logging
from openstack import connection
logging.basicConfig(level=logging.ERROR)
def create_connection(auth_url, region, project_name, username, password, user_domain_name, project_domain_name):
return connection.Connection(
auth_url=auth_url,
project_name=project_name,
username=username,
password=password,
user_domain_name=user_domain_name,
project_domain_name=project_domain_name,
)
def create_container(conn, container_name):
return conn.object_store.create_container(name=container_name)
def list_containers(conn):
for container in conn.object_store.containers():
print(container.name)
def delete_container(conn, container_name):
return conn.object_store.delete_container(container=container_name)
def upload_object(conn, container_name, file_path, base_path):
if os.path.isfile(file_path):
with open(file_path, 'rb') as data:
object_name = os.path.relpath(file_path, base_path)
conn.object_store.upload_object(container=container_name, name=object_name, data=data)
def upload_folder(conn, container_name, folder_path):
for file_path in glob.glob(folder_path + '/**', recursive=True):
upload_object(conn, container_name, file_path, folder_path)
def delete_all_objects(conn, container_name):
for obj in conn.object_store.objects(container_name):
conn.object_store.delete_object(container=container_name, obj=obj.name)
def get_file(conn, container_name, file_name):
try:
file = conn.object_store.get_object(container=container_name, obj=file_name)
return file
except Exception as e:
print(f"An error occurred: {e}")
return None
def list_objects(conn, container_name):
return list(conn.object_store.objects(container_name))
def get_object_public_url(conn, container_name, object_name):
swift_endpoint = conn.object_store.get_endpoint()
public_url = f"{swift_endpoint}/{container_name}/{object_name}"
return public_url
auth_url = os.getenv('OS_AUTH_URL')
region = os.getenv('OS_REGION')
project_name = os.getenv('OS_PROJECT_NAME')
username = os.getenv('OS_USERNAME')
password = os.getenv('OS_PASSWORD')
project_domain_name = os.getenv('OS_PROJECT_DOMAIN_NAME')
user_domain_name = os.getenv('OS_USER_DOMAIN_NAME')
file_path = "/home/openrc.sh"
folder_path = "/home/swift"
container_name = "swift_repo"
conn = create_connection(auth_url, region, project_name, username, password, user_domain_name, project_domain_name)
create_container(conn, container_name)
list_containers(conn)
upload_folder(conn, container_name, folder_path)
delete_all_objects(conn, container_name)
delete_container(conn, container_name)
# List all object from container
objects = list_objects(conn, container_name)
for obj in objects:
print(obj.name)
# Use it to get the public URL of an object
public_url = get_object_public_url(conn, container_name, 'tools/playbooks/saio_single_node_setup/add_s3api.yaml')
print(public_url)
Như vậy tổng kết lại là đoạn code Python này sẽ tạo một kết nối đến OpenStack, tạo một container, tải tất cả các file trong một thư mục lên container đó, sau đó xóa tất cả các file và container. Nó cũng liệt kê tất cả các file trong container và in ra URL công khai của một file cụ thể.