4. Pure Storage Ansible模块概览

Pure Storage 官方为 Ansible 提供了两个独立的集合(Collection):purestorage.flasharray 面向 FlashArray 块存储与统一存储阵列,purestorage.flashblade 面向 FlashBlade 文件与对象存储平台。二者都通过 REST API 与阵列通信,把创建卷、主机、保护组、快照、复制链路、网络接口等操作封装成幂等模块。理解这两个集合的边界、安装方式、inventory 组织与认证参数,是后续所有自动化任务的基础。

两个集合的定位与模块命名

集合是 Ansible 2.9 之后的标准分发单元,模块名采用 命名空间.集合名.模块名 的三段式写法。FlashArray 的模块前缀是 purestorage.flasharray,例如 purefa_volume、purefa_host、purefa_pgsnap、purefa_info;FlashBlade 的模块前缀是 purestorage.flashblade,例如 purefb_fs、purefb_bucket、purefb_info。命名规律上,FlashArray 模块以 purefa_ 开头,FlashBlade 模块以 purefb_ 开头,看到前缀即可判断目标平台,避免把 purefa_volume 用在 FlashBlade 上。

两个集合都依赖 Python 的 purestorage SDK(FlashArray 用 py-pure-client,FlashBlade 用 purity_fb 或新版 py-pure-client),因此安装集合后还需在控制节点安装对应 Python 库。集合本身只包含模块、插件与文档,不含 SDK。

安装集合与依赖

推荐用 ansible-galaxy 从 Galaxy 或官方仓库安装。以下命令在控制节点执行,示例版本号仅作演示,实际以 Galaxy 上最新稳定版为准:

# 安装两个集合
ansible-galaxy collection install purestorage.flasharray
ansible-galaxy collection install purestorage.flashblade

# 指定版本安装(示例)
ansible-galaxy collection install purestorage.flasharray:1.30.0

# 安装 Python 依赖
pip install py-pure-client purity_fb

# 查看已安装集合
ansible-galaxy collection list | grep purestorage

若企业内网无法访问 Galaxy,可把集合打包为 tar.gz 后离线安装:ansible-galaxy collection install purestorage-flasharray-1.30.0.tar.gz。安装完成后,在 playbook 中既可以用完整三段式模块名,也可以在 collections: 关键字中声明后使用短名。

Inventory 组织与认证参数

Pure Storage 模块的认证参数主要有四个:fa_url(FlashArray 管理地址,如 10.21.200.10)、api_token(API 令牌)、fb_url(FlashBlade 管理地址)、fb_api_token(FlashBlade 令牌)。这些参数不应硬编码在 playbook 里,而应放在 inventory 的 group_vars 或 host_vars 中,并用 Ansible Vault 加密令牌。

一种清晰的做法是按平台分组,把连接信息放在组变量中:

# inventory/hosts.ini
[flasharray]
fa-prod-01 ansible_host=10.21.200.10

[flashblade]
fb-prod-01 ansible_host=10.21.201.20

# inventory/group_vars/flasharray.yml
fa_url: "https://{{ ansible_host }}"
api_token: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          66386439653...

# inventory/group_vars/flashblade.yml
fb_url: "https://{{ ansible_host }}"
fb_api_token: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          31323334353...

令牌通过 FlashArray GUI 的 Settings → Access → API Tokens 或 FlashBlade 的 Settings → API Clients 创建,创建时选择角色(如 storage_admin、array_admin)。令牌只在创建时显示一次,务必立即保存。用 ansible-vault encrypt_string 生成加密串后粘贴到变量文件,运行时用 --ask-vault-pass 或 --vault-password-file 提供密码。

如果不想用 inventory 变量,也可以在 playbook 的 module_defaults 中统一指定认证参数,减少每个任务的重复:

- hosts: flasharray
  module_defaults:
    group/purestorage.flasharray:
      fa_url: "{{ fa_url }}"
      api_token: "{{ api_token }}"
  tasks:
    - name: 获取阵列信息
      purestorage.flasharray.purefa_info:
        gather_subset:
          - minimum
      register: fa_info

运行第一个 Playbook:获取阵列状态

最稳妥的入门任务是只读的信息采集,不会改动阵列配置。purefa_info 与 purefb_info 通过 gather_subset 控制返回内容,常用子集包括 minimum(阵列名、版本、容量)、volumes、hosts、network、all。下面是一个完整示例:

# fa_status.yml
- name: 获取 FlashArray 阵列状态
  hosts: flasharray
  gather_facts: false
  module_defaults:
    group/purestorage.flasharray:
      fa_url: "{{ fa_url }}"
      api_token: "{{ api_token }}"
  tasks:
    - name: 采集阵列最小信息集
      purestorage.flasharray.purefa_info:
        gather_subset:
          - minimum
      register: result

    - name: 打印阵列名称与 Purity 版本
      ansible.builtin.debug:
        msg: >
          阵列 {{ result.purefa_info.default.array_name }}
          运行 Purity {{ result.purefa_info.default.version }},
          可用容量 {{ result.purefa_info.default.capacity }} 字节

执行命令:ansible-playbook -i inventory/hosts.ini fa_status.yml --ask-vault-pass。若认证成功,debug 会输出阵列名、Purity 版本与容量;若令牌错误,模块会返回 HTTP 401 并提示 Invalid API token;若地址不可达,则报连接超时。首次运行建议加 -v 查看详细请求,确认 fa_url 是否带上了 https:// 前缀——这是最常见的配置疏漏。

只读的 purefa_info / purefb_info 是验证认证与连通性的最佳起点。在编写任何写操作 playbook 之前,先用它确认 inventory、Vault 与网络都正确,可以避免后续排障时把认证问题和业务逻辑问题混在一起。
Pure Storage Ansible 集合安装与首个 Playbook 数据流 控制节点 ansible-galaxy 安装集合 pip 安装 py-pure-client ansible-playbook 执行 Inventory 与认证 hosts.ini 分组 flasharray group_vars: fa_url Vault 加密 api_token 目标阵列 FlashArray REST API FlashBlade REST API 返回 JSON 状态 模块前缀与平台映射 purestorage.flasharray.purefa_info purestorage.flashblade.purefb_info 首个 Playbook 输出判读 ✓ 成功:array_name / version / capacity ✗ 401 令牌错误 ✗ 超时地址不可达

认证参数管理与常见排障

认证参数的管理有三个要点。第一,令牌必须加密存储,ansible-vault 是最直接的手段;若使用 AWX/Tower 或 AAP,则改用凭据(Credential)类型 Pure Storage FlashArray,由平台托管令牌。第二,fa_url 必须包含协议前缀,模块内部不会自动补全 https://,写成裸 IP 会直接连接失败。第三,若阵列使用自签名证书,需要在模块参数中加 fa_verify_ssl: false(FlashBlade 对应 fb_verify_ssl),生产环境更推荐把 CA 证书导入控制节点信任库,而不是关闭校验。

常见报错与判断依据可以归纳为:Invalid API token 说明令牌错误或已过期,需重新生成;Connection refused / timed out 说明地址、端口或防火墙有问题,FlashArray 管理 API 默认走 443;ModuleNotFoundError: py_pure_client 说明 Python SDK 未安装;collection not found 说明集合未安装或 playbook 中未声明 collections:。把这四类错误与上面的数据流对应起来,排障时就能快速定位是控制节点、inventory 还是阵列侧的问题。

不要在 playbook 或版本库中明文写入 api_token。令牌一旦泄露,持有者可以按令牌角色对阵列执行管理操作。建议为自动化单独创建最小权限的 API 令牌,并定期轮换。

完成本节后,你已经具备运行 Pure Storage Ansible 任务的最小闭环:安装集合与 SDK、用 inventory 与 Vault 组织认证、用 purefa_info 验证连通性并读取阵列状态。后续的卷管理、主机映射、快照与复制等任务,都会复用这套认证与 inventory 结构,只是把 purefa_info 换成对应的写操作模块。