# 使用 PostgreSQL 作为 Ansible 配置清单 CMDB

> 使用 Pigsty v2.7 自带的清单脚本，在静态 YAML 清单与 PostgreSQL CMDB 之间切换。
---

Pigsty v2.7 默认从 `pigsty.yml` 读取 Ansible 配置清单。该版本同时提供了
三个脚本，可以将清单载入 `meta` 数据库的 `pigsty` 模式，并让 Ansible
改用动态生成的清单。

本文严格对应 v2.7.0 标签中的
[`bin/inventory_load`](https://github.com/Vonng/pigsty/blob/v2.7.0/bin/inventory_load)、
[`bin/inventory_cmdb`](https://github.com/Vonng/pigsty/blob/v2.7.0/bin/inventory_cmdb)
与 [`bin/inventory_conf`](https://github.com/Vonng/pigsty/blob/v2.7.0/bin/inventory_conf)。

## 前置条件

默认 `pg-meta` 集群会通过
[`files/cmdb.sql`](https://github.com/Vonng/pigsty/blob/v2.7.0/files/cmdb.sql)
创建 CMDB 模式。请先完成 `infra.yml` 与 `pg-meta` 数据库初始化，并确认
`meta` 服务可访问。

默认的 [`ansible.cfg`](https://github.com/Vonng/pigsty/blob/v2.7.0/ansible.cfg)
包含：

```ini
[defaults]
inventory = pigsty.yml
```

## 载入 YAML 清单

`bin/inventory_load` 会读取 YAML 清单，并替换 `pigsty.group`、
`pigsty.host`、`pigsty.group_var`、`pigsty.host_var` 与
`pigsty.global_var` 中的记录。载入新清单前，应先检查或备份目标 CMDB。

```bash
bin/inventory_load                                      # 使用 $PIGSTY_HOME/pigsty.yml 与 $METADB_URL
bin/inventory_load -p files/pigsty/demo.yml             # 载入另一个 v2.7 清单
bin/inventory_load -p pigsty.yml \
  -d postgresql://dbuser_meta:DBUser.Meta@10.10.10.10:5432/meta
```

脚本使用 `-p|--path` 指定 YAML 文件，使用 `-d|--data` 指定 PostgreSQL
连接串；默认值来自 `PIGSTY_HOME` 与 `METADB_URL`。

## 切换配置源

将 Ansible 切换到 CMDB 驱动的 `inventory.sh`：

```bash
bin/inventory_cmdb
ansible-inventory --list
```

`bin/inventory_cmdb` 会写入可执行的 `inventory.sh`，并修改
`ansible.cfg` 中的 `inventory`。生成的脚本通过 PostgreSQL `meta` 服务
查询 `pigsty.inventory`。

切回静态 `pigsty.yml` 清单：

```bash
bin/inventory_conf
ansible-inventory --list
```

这三个脚本只负责载入与切换配置源，并不会在 YAML 与 CMDB 之间提供自动
双向同步。后续修改仍应明确选择权威配置源并重新校验。
