88 lines
3.2 KiB
YAML
88 lines
3.2 KiB
YAML
---
|
|
# 单独 HAProxy 实例复用 VyOS 的二进制与 HA 承载,避免修改发行版生成的全局模板。
|
|
- name: 发布已经有唯一可写主库的生产入口
|
|
hosts: pg_proxy
|
|
become: true
|
|
gather_facts: false
|
|
vars:
|
|
pg_proxy_bind: 192.168.10.2:5432
|
|
pg_proxy_members:
|
|
- {name: laptop, address: '192.168.10.127', port: 5432, api_port: 8008}
|
|
- {name: pve1, address: '10.60.0.20', port: 5432, api_port: 8008}
|
|
tasks:
|
|
- name: 前置核对角色端点,不为未就绪实例发布入口
|
|
ansible.builtin.uri:
|
|
url: "http://{{ item.address }}:{{ item.api_port }}/primary"
|
|
status_code: [200, 503]
|
|
loop: "{{ pg_proxy_members }}"
|
|
register: pg_proxy_primary
|
|
check_mode: false
|
|
- name: 必须有且只有一个 primary
|
|
ansible.builtin.assert:
|
|
that: pg_proxy_primary.results | selectattr('status', 'equalto', 200) | list | length == 1
|
|
- name: 创建跨 VyOS 镜像升级保留的配置目录
|
|
ansible.builtin.file:
|
|
path: /config/homelab-pg
|
|
state: directory
|
|
owner: root
|
|
group: root
|
|
mode: '0755'
|
|
- name: 写入并校验角色感知 HAProxy 配置
|
|
ansible.builtin.template:
|
|
src: roles/pg_instance/templates/haproxy.cfg.j2
|
|
dest: /config/homelab-pg/haproxy.cfg
|
|
mode: '0644'
|
|
validate: /usr/sbin/haproxy -c -f %s
|
|
notify: 重载数据库代理
|
|
- name: 保存独立服务定义
|
|
ansible.builtin.copy:
|
|
dest: /config/homelab-pg/homelab-pg-proxy.service
|
|
mode: '0644'
|
|
content: |
|
|
[Unit]
|
|
Description=Shared PostgreSQL role-aware TCP entry point
|
|
After=network-online.target
|
|
Wants=network-online.target
|
|
[Service]
|
|
Type=simple
|
|
DynamicUser=true
|
|
ExecStart=/usr/sbin/haproxy -W -db -f /config/homelab-pg/haproxy.cfg
|
|
ExecReload=/bin/kill -USR2 $MAINPID
|
|
Restart=on-failure
|
|
RestartSec=3
|
|
MemoryMax=64M
|
|
LimitNOFILE=2048
|
|
NoNewPrivileges=true
|
|
PrivateTmp=true
|
|
ProtectSystem=strict
|
|
ProtectHome=true
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
notify: 重载数据库代理
|
|
- name: 安装服务链接
|
|
ansible.builtin.file:
|
|
src: /config/homelab-pg/homelab-pg-proxy.service
|
|
dest: /etc/systemd/system/homelab-pg-proxy.service
|
|
state: link
|
|
- name: 通过既有 postconfig hook 在系统升级后恢复服务链接
|
|
ansible.builtin.blockinfile:
|
|
path: /config/scripts/vyos-postconfig-bootup.script
|
|
marker: '# {mark} ANSIBLE HOMELAB PG PROXY'
|
|
insertbefore: '^exit 0'
|
|
block: |
|
|
ln -sfn /config/homelab-pg/homelab-pg-proxy.service /etc/systemd/system/homelab-pg-proxy.service
|
|
systemctl daemon-reload
|
|
systemctl enable --now homelab-pg-proxy.service
|
|
- name: 启动独立入口
|
|
ansible.builtin.systemd_service:
|
|
name: homelab-pg-proxy
|
|
daemon_reload: true
|
|
enabled: true
|
|
state: started
|
|
handlers:
|
|
- name: 重载数据库代理
|
|
ansible.builtin.systemd_service:
|
|
name: homelab-pg-proxy
|
|
daemon_reload: true
|
|
state: reloaded
|