#!/usr/bin/env ansible-playbook
---
#==============================================================#
# File      :   deploy
# Desc      :   deploy everything on all nodes
# Ctime     :   2021-01-19
# Mtime     :   2025-12-28
# Path      :   deploy.yml
# Docs      :   https://pigsty.io/docs/infra/playbook
# License   :   Apache-2.0 @ https://pigsty.io/docs/about/license/
# Copyright :   2018-2026  Ruohang Feng / Vonng (rh@vonng.com)
#==============================================================#


#==============================================================#
# deploy will interleave infra.yml & node.yml in following
# orders to set up everything in one pass
# - id            : generate node & pgsql identity
# - ca            : create self-signed CA on localhost
# - repo          : create local yum repo on infra nodes
# - node-init     : init node, haproxy & docker
# - infra         : init nginx, dns, victoria, grafana
# - node-monitor  : init node-exporter vector
# - etcd          : init etcd (required for pgsql HA)
# - minio         : init minio (optional)
# - pgsql         : init pgsql
# - pgsql-monitor : init pgsql
#
# Which is equivalent to the following 4 playbooks altogether:
# - infra.yml -l infra   deploy infrastructure on group 'infra'
# - node.yml  -l all     init all nodes
# - etcd.yml  -l etcd    init etcd on group 'etcd' for pg ha
# - minio.yml -l minio   init minio on group 'minio' for pg backup
# - pgsql.yml -l all     init pgsql database clusters on all nodes
#==============================================================#


#---------------------------------------------------------------
# setup node & pgsql identity
#---------------------------------------------------------------
- name: IDENTITY
  hosts: all
  gather_facts: no
  tags: id
  roles:
    - { role: node_id ,tags: node-id }
    - { role: pg_id   ,tags: pg-id   ,when: pg_cluster is defined }


#---------------------------------------------------------------
# Setup local CA
#---------------------------------------------------------------
- name: CA
  become: true
  hosts: localhost
  gather_facts: no
  tags: ca
  roles: [ { role: ca } ]


#---------------------------------------------------------------
# bootstrap a local yum repo
#---------------------------------------------------------------
- name: REPO
  become: true
  hosts: infra
  gather_facts: no
  tags: repo
  roles: [ { role: repo } ]


#---------------------------------------------------------------
# init node , ca, docker
#---------------------------------------------------------------
- name: NODE INIT
  become: true
  hosts: all
  gather_facts: no
  tags: node-init
  roles:
    - { role: node    ,tags: node    }  # prepare node for pigsty
    - { role: haproxy ,tags: haproxy }  # init haproxy if enabled


#---------------------------------------------------------------
# init dns, nginx, victoria, grafana
#---------------------------------------------------------------
- name: INFRA INIT
  become: true
  hosts: infra
  gather_facts: no
  tags: infra
  roles: [ { role: infra } ]


#---------------------------------------------------------------
# init insight workbench
#---------------------------------------------------------------
- name: INSIGHT INIT
  become: true
  hosts: infra
  gather_facts: no
  tags: insight
  roles: [ { role: insight } ]


#---------------------------------------------------------------
# Node Monitor
#---------------------------------------------------------------
- name: NODE MONITOR
  become: true
  hosts: all
  gather_facts: no
  tags: [ monitor, node-monitor ]
  roles: [ { role: node_monitor } ]


#---------------------------------------------------------------
# ETCD INIT
#---------------------------------------------------------------
- name: ETCD INIT
  become: true
  hosts: etcd
  gather_facts: no
  tags: etcd
  roles: [ { role: etcd } ]   # init etcd on fixed group 'etcd'


#---------------------------------------------------------------
# MINIO INIT
#---------------------------------------------------------------
- name: MINIO INIT
  become: true
  hosts: minio
  gather_facts: no
  tags: minio
  roles: [ { role: minio } ]  # init minio on fixed group 'minio'


#---------------------------------------------------------------
# PGSQL INIT
#---------------------------------------------------------------
- name: PGSQL INIT            # init pgsql on all nodes
  become: true                 # with pg_cluster defined
  hosts: all
  gather_facts: no
  tags: pgsql
  roles:
    - { role: pgsql      ,when: pg_cluster is defined }
    - { role: pg_monitor ,when: pg_cluster is defined }

...