通过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))} 台服务器。")
相关推荐
2301_787328494 天前
28.OpenStack块存储管理-cinder
云计算·openstack
key_Go4 天前
06.OpenStack网络管理
网络·openstack
key_Go9 天前
0.基于Centos-Stream8 搭建Openstack环境
linux·运维·centos·openstack
Q飞了10 天前
分布式存储Ceph与OpenStack、RAID的关系
分布式·ceph·openstack
求知若渴,虚心若愚。12 天前
OpenStack 计算节点的 “主机映射” 注册
openstack
刘某的Cloud18 天前
ceph设置标志位
linux·运维·ceph·openstack
howard200519 天前
2.1 欧拉集群安装Keystone认证服务
openstack·欧拉集群·keystone认证服务
努力打怪升级1 个月前
云计算介绍
云计算·openstack
哈里谢顿1 个月前
Nova parse_args 函数详解
openstack