137 lines
5.2 KiB
YAML
Executable File
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
|
|
#
|
|
#==============================================================#
|
|
... |