杰瑞科技汇

Python如何安装Openstack?

你并不是在安装 OpenStack 本身(比如控制节点、计算节点等),而是在安装 Python 的客户端库,以便用 Python 脚本来与已经部署好的 OpenStack 云进行交互。

Python如何安装Openstack?-图1
(图片来源网络,侵删)

这就像用 Python 的 requests 库来调用一个 Web API 一样,OpenStack 也提供了标准的 API,而 Python 客户端库就是与这些 API 通信的桥梁。

核心工具:OpenStack Client

OpenStack 官方提供了一个统一的命令行工具叫做 openstack,它本身也是一个 Python 包,安装它通常是第一步,因为它不仅提供了命令行接口,也包含了底层的 Python 库。


推荐使用虚拟环境 (最佳实践)

为了避免与系统中的 Python 包产生冲突,强烈建议你先创建一个虚拟环境。

创建并激活虚拟环境

# 创建一个名为 openstack-env 的虚拟环境
python3 -m venv openstack-env
# 激活虚拟环境 (Linux/macOS)
source openstack-env/bin/activate
# 激活虚拟环境 (Windows)
# .\openstack-env\Scripts\activate

激活后,你的命令行提示符前面会出现 (openstack-env),表示你已处于虚拟环境中。

Python如何安装Openstack?-图2
(图片来源网络,侵删)

安装 OpenStack 客户端

在激活的虚拟环境中,使用 pip 安装官方客户端。

# 安装 OpenStack 客户端
pip install python-openstackclient

这个包会自动安装它所依赖的其他核心库,

  • keystoneauth1: 用于身份验证。
  • novaclient: 用于与计算服务交互。
  • glanceclient: 用于与镜像服务交互。
  • neutronclient: 用于与网络服务交互。
  • 等等...

安装完成后,你就可以在命令行中使用 openstack 命令了。

# 验证安装
openstack --version

直接安装到系统环境 (不推荐)

如果你不使用虚拟环境,可以直接用 pip 安装,但这可能会与系统自带的 Python 包产生冲突,导致不可预知的问题。

Python如何安装Openstack?-图3
(图片来源网络,侵删)
# 可能需要使用 sudo
sudo pip3 install python-openstackclient

如何配置 OpenStack 客户端

安装好库只是第一步,客户端需要知道如何连接到你的 OpenStack 云,包括认证信息、API 地址等,有几种方式可以提供这些信息:

使用云配置文件 (最常用)

OpenStack 的一个标准做法是提供一个名为 clouds.yaml 的配置文件,你从 OpenStack 管理员那里通常会得到这个文件。

clouds.yaml 文件示例:

clouds:
  my_openstack_cloud:
    auth:
      auth_url: http://keystone.example.com:5000/v3
      project_name: my_project
      project_domain_name: Default
      username: my_username
      user_domain_name: Default
      password: my_secret_password
      # 对于某些云,可能需要指定项目ID而不是项目名
      # project_id: "a123b456c789d012e345f678a901b23c"
    region_name: RegionOne
    identity_api_version: 3

你需要将这个文件放在以下位置之一,客户端会自动加载它:

  • ~/.config/openstack/clouds.yaml (用户级配置)
  • /etc/openstack/clouds.yaml (系统级配置)

使用环境变量

你也可以直接在终端中设置环境变量,这种方式适合临时使用或自动化脚本。

export OS_AUTH_URL=http://keystone.example.com:5000/v3
export OS_PROJECT_ID=a123b456c789d012e345f678a901b23c
export OS_PROJECT_NAME="my_project"
export OS_USER_DOMAIN_NAME="Default"
export OS_USERNAME="my_username"
export OS_PASSWORD="my_secret_password"
export OS_REGION_NAME="RegionOne"
export OS_INTERFACE=public
export OS_IDENTITY_API_VERSION=3

使用命令行参数

在执行 openstack 命令时,可以直接通过参数传递所有信息,但这非常繁琐,通常只用于测试。

openstack server list --os-auth-url http://... --os-project-name ... --os-username ...

如何在 Python 代码中使用

现在你已经安装了库并配置好了认证信息,可以在 Python 脚本中进行编程了。

示例:列出所有虚拟机 (Nova)

import openstack
# 1. 创建一个连接对象
# 这会自动从 clouds.yaml 或环境变量中加载配置
conn = openstack.connect()
# 2. 使用连接对象调用 OpenStack 服务
print("Listing servers:")
for server in conn.compute.servers():
    print(f"{server.id} : {server.name}")
# 3. 也可以按名称查找
server_name_to_find = "my-test-vm"
server = conn.compute.find_server(server_name_to_find)
if server:
    print(f"\nFound server by name '{server_name_to_find}':")
    print(f"ID: {server.id}")
    print(f"Status: {server.status}")
    print(f"Image: {server.image['name']}")
    print(f"Flavor: {server.flavor['name']}")
else:
    print(f"\nServer with name '{server_name_to_find}' not found.")
# 4. 断开连接 (conn 对象支持上下文管理器,推荐使用)
conn.close()

更推荐的方式:使用上下文管理器

为了确保连接在使用后被正确关闭,推荐使用 with 语句。

import openstack
# clouds.yaml 中的云名称
cloud_name = "my_openstack_cloud" 
try:
    # with 语句会自动处理连接的创建和关闭
    with openstack.connect(cloud=cloud_name) as conn:
        print(f"Connected to cloud: {cloud_name}")
        # 创建一个新虚拟机
        print("Creating a new server...")
        image = conn.compute.find_image("ubuntu-20.04")
        flavor = conn.compute.find_flavor("m1.small")
        network = conn.network.find_network("private-net")
        server = conn.compute.create_server(
            name="my-python-created-server",
            image=image,
            flavor=flavor,
            networks=[{"uuid": network.id}],
        )
        # 获取服务器,并等待其变为 'ACTIVE' 状态
        server = conn.compute.wait_for_server(server)
        print(f"Server created successfully with ID: {server.id} and Status: {server.status}")
except openstack.exceptions.SDKException as e:
    print(f"An error occurred: {e}")
  1. 明确目标:你是在安装 Python 客户端库,用来调用 OpenStack API,而不是部署 OpenStack。
  2. 首选虚拟环境:使用 venv 创建隔离的 Python 环境。
  3. 安装核心库pip install python-openstackclient
  4. 配置认证:获取并放置 clouds.yaml 文件,这是最标准、最方便的方式。
  5. 开始编码:使用 import openstackopenstack.connect() 来建立连接,然后通过 conn 对象调用各种服务(如 conn.compute, conn.network 等)。

通过以上步骤,你就可以在 Python 中自如地与 OpenStack 云进行交互了。

分享:
扫描分享到社交APP
上一篇
下一篇