observability.svc.plus/cache.yml
2026-02-01 20:53:55 +08:00

137 lines
5.2 KiB
YAML
Executable File

#!/usr/bin/env ansible-playbook
---
#==============================================================#
# File : cache.yml
# Desc : Create offline package cache from infra nodes
# Ctime : 2024-08-22
# Mtime : 2024-12-31
# Path : cache.yml
# Docs : https://pigsty.io/docs/setup/offline
# License : Apache-2.0 @ https://pigsty.io/docs/about/license/
# Copyright : 2018-2026 Ruohang Feng / Vonng (rh@vonng.com)
#==============================================================#
# This playbook creates an offline package tarball from an
# existing local repository on infra nodes. The tarball can be
# used for air-gapped/offline installations.
#
# Prerequisites:
# - Pigsty must be installed on the target node with repo_enabled
# - Local repo must exist at /www/pigsty (run infra.yml first)
#
# Output:
# dist/${version}/pigsty-pkg-${version}.${os}.${arch}.tgz
#
# Example:
# ./cache.yml -l infra # from infra group
# ./cache.yml -l 10.10.10.10 # from specific node
#==============================================================#
#--------------------------------------------------------------#
# PLAY 1: Create local directory for cache tarball [cache_dir]
#--------------------------------------------------------------#
- name: CREATE LOCAL DIST DIR
hosts: localhost
become: false
gather_facts: no
tags: cache_dir
tasks:
- name: create local dist directory
file:
path: "{{ cache_pkg_dir | default('dist/${version}') | replace('${version}', version | default('v4.0.0')) }}"
state: directory
mode: '0755'
#--------------------------------------------------------------#
# PLAY 2: Make offline package from target node [id,cache]
#--------------------------------------------------------------#
# This play runs on the target infra node to:
# 1. Detect node identity (OS, version, architecture)
# 2. Clean dirty packages and recreate repo metadata
# 3. Create compressed tarball at /tmp/pkg.tgz
# 4. Fetch tarball back to control node
#--------------------------------------------------------------#
- name: MAKE OFFLINE PACKAGE
hosts: all
become: true
gather_facts: no
vars:
#version: v4.0.0
#cache_repo: pigsty # target repo(s) to be cached, use `,` to separate multiple repos
#cache_pkg_dir: 'dist/${version}' # where to store the cached package? dist/${version} by default
#cache_pkg_name: 'pigsty-pkg-${version}.${os}.${arch}.tgz' # cache offline package filename pattern
roles:
- { role: node_id, tags: id } # detect node identity
- { role: cache, tags: cache } # create and fetch cache tarball
#--------------------------------------------------------------#
# PLAY 3: Calculate checksums and display info [cache_info]
#--------------------------------------------------------------#
- name: SHOW CACHE TARBALL INFO
hosts: localhost
become: false
gather_facts: no
tags: cache_info
tasks:
- name: ensure cache directory exists
file:
path: "{{ cache_pkg_dir | default('dist/${version}') | replace('${version}', version | default('v4.0.0')) }}"
state: directory
mode: '0755'
- name: calculate cache tarball checksums
shell: |
cd "{{ cache_pkg_dir|default('dist/${version}') | replace('${version}', version|default('v4.0.0')) }}"
md5sum *.tgz > checksums
cat checksums
ls -lh *.tgz
register: cache_result
- name: display cache information
debug:
msg: "{{ cache_result.stdout_lines }}"
#==============================================================#
# Usage Examples
#==============================================================#
#
# ./cache.yml -l infra # create cache from infra group
# ./cache.yml -l 10.10.10.10 # create cache from specific node
# ./cache.yml -l infra -t cache_dir # create local dist dir only
#
# # Override version
# ./cache.yml -l infra -e version=v4.0.0
#
# # Cache multiple repos
# ./cache.yml -l infra -e cache_repo=pigsty,minio
#
#==============================================================#
# Tag Reference
#==============================================================#
#
# cache_dir : create local dist directory (localhost)
# id : detect node identity (OS, version, arch)
# cache : full cache role execution
# cache_id : calculate cache tarball filename
# cache_check : verify repo directories exist and not empty
# cache_create : clean dirty packages, recreate repo metadata
# cache_tgz : create /tmp/pkg.tgz tarball on target
# cache_fetch : fetch tarball from target to control node
# cache_info : calculate md5sum and display file sizes
#
#==============================================================#
# Workflow
#==============================================================#
#
# 1. Ensure Pigsty is installed: ./deploy.yml
# 2. Create offline package: ./cache.yml -l infra
# 3. Transfer to air-gapped env: scp dist/v4.0.0/*.tgz target:/tmp/
# 4. Bootstrap with package: ./bootstrap -p /tmp/pigsty-pkg-*.tgz
# 5. Configure and install: ./configure && ./deploy.yml
#
#==============================================================#
...