通过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))} 台服务器。")
相关推荐
努力打怪升级10 天前
云计算介绍
云计算·openstack
哈里谢顿15 天前
Nova parse_args 函数详解
openstack
哈里谢顿17 天前
OpenStack 中的 nova-conductor 与 ironic-conductor 及其分布式锁机制详解
openstack
哈里谢顿21 天前
OpenStack oslo-config 详解
openstack
感哥1 个月前
OpenStack Cinder 创建卷
openstack
感哥1 个月前
OpenStack Cinder 架构
openstack
感哥1 个月前
OpenStack Nova Scheduler 计算节点选择机制
openstack
感哥1 个月前
OpenStack Nova 创建虚拟机
openstack
感哥1 个月前
OpenStack Glance(镜像)
openstack