通过openstacksdk库来调用openstack各个接口

0 介绍

OpenStack SDK 是一个旨在简化与 OpenStack 云平台交互的 Python 库。它提供了一个统一、高级、面向对象的接口,无需直接处理底层的 REST API、认证、版本协商等复杂细节。以上是ai回答,所以想了解了下如何使用该sdk来调用openstack各个组件的接口

1. 核心组件与架构-ai整理

  • openstack.connection.Connection: 核心类。创建一个 Connection 实例是所有操作的起点。它封装了认证、会话、服务发现等。
  • 服务客户端 (Service Clients): 每个 OpenStack 服务对应一个客户端,通过 Connection 的属性访问:
    • conn.compute -> Nova (计算)
    • conn.image -> Glance (镜像)
    • conn.network -> Neutron (网络)
    • conn.volume -> Cinder (块存储)
    • conn.object_store -> Swift (对象存储)
    • conn.identity -> Keystone (身份认证)
    • conn.baremetal -> Ironic (裸金属)
    • conn.dns -> Designate (DNS)
    • conn.orchestration -> Heat (编排)
    • conn.octavia -> Octavia (负载均衡)
  • 资源 (Resources): 表示具体的云资源,如 Server, Image, Network, Volume 等。它们通常是服务客户端方法的返回值。

2. 测试demo

  • 设置环境变量 将认证信息导出为环境变量

    bash 复制代码
    export OS_AUTH_URL=https://your-openstack-auth-url:5000/v3
    export OS_PROJECT_NAME=your_project_name
    export OS_PROJECT_DOMAIN_NAME=Default
    export OS_USERNAME=your_username
    export OS_USER_DOMAIN_NAME=Default
    export OS_PASSWORD=your_password
    export OS_REGION_NAME=RegionOne
    export OS_INTERFACE=public
    export OS_IDENTITY_API_VERSION=3
  • **或者在代码中直接指定 **

    python 复制代码
    from openstack import connect
    
    conn = connect(
        auth_url="https://your-openstack-auth-url:5000/v3",
        project_name="your_project_name",
        username="your_username",
        password="your_password",
        user_domain_name="Default",
        project_domain_name="Default",
        region_name="RegionOne"
    )

最关键的一步:编写测试demo

创建一个 Python 文件

python 复制代码
# -*- coding: utf-8 -*-
"""
使用 OpenStack SDK 列出所有虚拟机 (服务器)
"""

# 导入 openstack 模块
import openstack

# 创建连接 (会自动从 clouds.yaml 或环境变量读取配置)
# 如果使用 clouds.yaml 中名为 'mycloud' 的配置,传入 cloud='mycloud'
conn = openstack.connect(cloud='mycloud') # 如果只有一个默认配置,可以省略 cloud 参数

# 获取计算服务客户端
compute = conn.compute

# 列出所有服务器
print("正在获取服务器列表...")
servers = compute.servers()

# 遍历并打印服务器信息
for server in servers:
    print(f"服务器名: {server.name}")
    print(f"  ID: {server.id}")
    print(f"  状态: {server.status}")
    print(f"  镜像 ID: {server.image_id}")
    print(f"  Flavor ID: {server.flavor_id}")
    # 注意: 获取 Flavor 名称和 IP 地址需要额外的 API 调用
    try:
        flavor = compute.get_flavor(server.flavor_id)
        print(f"  Flavor 名称: {flavor.name}")
    except Exception as e:
        print(f"  获取 Flavor 信息失败: {e}")

    # 打印 IP 地址
    for address_list in server.addresses.values():
        for address in address_list:
            print(f"  IP: {address['addr']} ({address['OS-EXT-IPS:type']})")
    print("-" * 40)

print(f"共找到 {len(list(servers))} 台服务器。")
相关推荐
oMcLin2 天前
如何在 Ubuntu 22.04 LTS 上部署并优化 OpenStack 云计算平台,实现多租户虚拟化与弹性伸缩?
ubuntu·云计算·openstack
last demo4 天前
openstack基础
linux·运维·openstack
Font Tian10 天前
【云计算2025年度总结】汇总和反思
容器·云计算·k8s·openstack·虚拟化
G_H_S_3_13 天前
【网络运维】OpenStack镜像管理:Glance篇
linux·运维·openstack
无泪无花月隐星沉14 天前
续写云计算的前世今生
kubernetes·云计算·openstack
iconball16 天前
个人用云计算学习笔记 --26 OpenStack 核心服务
运维·笔记·学习·云计算·openstack
神秘面具男0317 天前
OpenStack 核心组件管理
openstack
G_H_S_3_17 天前
【网络运维】OpenStack 块存储与对象存储:Cinder 与 Swift 篇
linux·运维·网络·openstack
2301_8000509917 天前
OpenStack 管理
运维·openstack
阎*水17 天前
OpenStack 核心知识点总结
openstack