通过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))} 台服务器。")
相关推荐
Otto_10278 天前
Rocky版本中安装Networking-SFC插件
openstack
询问QQ:1808095110 天前
Simulink微电网分布式储能下垂控制 SOC均衡(三电池组)
openstack
FGGIT11 天前
openEuler集群下OpenStack Keystone认证系统的安装配置、集成与高可用实践
openstack
chian-ocean11 天前
基于openEuler集群的OpenStack云计算平台基础部署实战指南
服务器·云计算·openstack
xy1230622 天前
OpenStack Train 部署实战(一):双节点基础环境搭建
openstack
别多香了22 天前
OpenStack 核心服务与实操
openstack
哈里谢顿1 个月前
devstack重启恢复方案
openstack
哈里谢顿1 个月前
openstack 中的二层网络跟三层网络范围对比
openstack
哈里谢顿1 个月前
devstack中的systemd管理介绍
openstack
哈里谢顿1 个月前
在远程服务器上部署 DevStack 后如何访问 Horizon Dashboard?
openstack