mirror of
https://github.com/cloudnative-pg/plugin-barman-cloud.git
synced 2026-07-08 18:52:20 +02:00
Compare commits
12 Commits
56d4765d71
...
f858bfefbc
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f858bfefbc | ||
|
|
139afeefae | ||
|
|
1cd26c9286 | ||
|
|
99e5de906b | ||
|
|
aa1ef41245 | ||
|
|
5c8ddf3750 | ||
|
|
a3819c9aae | ||
|
|
8c9373e074 | ||
|
|
787d2b35ad | ||
|
|
2ae62d2214 | ||
|
|
bb7845dd62 | ||
|
|
eefb45ca5a |
2
.github/workflows/ci.yml
vendored
2
.github/workflows/ci.yml
vendored
@ -44,7 +44,7 @@ jobs:
|
|||||||
- name: Install Dagger
|
- name: Install Dagger
|
||||||
env:
|
env:
|
||||||
# renovate: datasource=github-tags depName=dagger/dagger versioning=semver
|
# renovate: datasource=github-tags depName=dagger/dagger versioning=semver
|
||||||
DAGGER_VERSION: 0.21.4
|
DAGGER_VERSION: 0.21.5
|
||||||
run: |
|
run: |
|
||||||
curl -L https://dl.dagger.io/dagger/install.sh | BIN_DIR=$HOME/.local/bin sh
|
curl -L https://dl.dagger.io/dagger/install.sh | BIN_DIR=$HOME/.local/bin sh
|
||||||
- name: Run CI task
|
- name: Run CI task
|
||||||
|
|||||||
2
.github/workflows/release-please.yml
vendored
2
.github/workflows/release-please.yml
vendored
@ -31,7 +31,7 @@ jobs:
|
|||||||
- name: Install Dagger
|
- name: Install Dagger
|
||||||
env:
|
env:
|
||||||
# renovate: datasource=github-tags depName=dagger/dagger versioning=semver
|
# renovate: datasource=github-tags depName=dagger/dagger versioning=semver
|
||||||
DAGGER_VERSION: 0.21.4
|
DAGGER_VERSION: 0.21.5
|
||||||
run: |
|
run: |
|
||||||
curl -L https://dl.dagger.io/dagger/install.sh | BIN_DIR=$HOME/.local/bin sh
|
curl -L https://dl.dagger.io/dagger/install.sh | BIN_DIR=$HOME/.local/bin sh
|
||||||
- name: Create image and manifest
|
- name: Create image and manifest
|
||||||
|
|||||||
2
.github/workflows/release-publish.yml
vendored
2
.github/workflows/release-publish.yml
vendored
@ -21,7 +21,7 @@ jobs:
|
|||||||
- name: Install Dagger
|
- name: Install Dagger
|
||||||
env:
|
env:
|
||||||
# renovate: datasource=github-tags depName=dagger/dagger versioning=semver
|
# renovate: datasource=github-tags depName=dagger/dagger versioning=semver
|
||||||
DAGGER_VERSION: 0.21.4
|
DAGGER_VERSION: 0.21.5
|
||||||
run: |
|
run: |
|
||||||
curl -L https://dl.dagger.io/dagger/install.sh | BIN_DIR=$HOME/.local/bin sh
|
curl -L https://dl.dagger.io/dagger/install.sh | BIN_DIR=$HOME/.local/bin sh
|
||||||
- name: Create image and manifest
|
- name: Create image and manifest
|
||||||
|
|||||||
@ -1,3 +1,3 @@
|
|||||||
{
|
{
|
||||||
".": "0.12.0"
|
".": "0.13.0"
|
||||||
}
|
}
|
||||||
|
|||||||
31
CHANGELOG.md
31
CHANGELOG.md
@ -1,5 +1,36 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## [0.13.0](https://github.com/cloudnative-pg/plugin-barman-cloud/compare/v0.12.0...v0.13.0) (2026-06-10)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* Configure k8s recommended labels on subresources ([#865](https://github.com/cloudnative-pg/plugin-barman-cloud/issues/865)) ([4bbaf18](https://github.com/cloudnative-pg/plugin-barman-cloud/commit/4bbaf18cd30174229d98e23151d2d257c90b561a)), closes [#545](https://github.com/cloudnative-pg/plugin-barman-cloud/issues/545)
|
||||||
|
* Pass additionalCommandArgs to barman-cloud-restore ([#914](https://github.com/cloudnative-pg/plugin-barman-cloud/issues/914)) ([c5f149b](https://github.com/cloudnative-pg/plugin-barman-cloud/commit/c5f149b86a38fd2af33045d785c2e9a69a7e340a)), closes [#821](https://github.com/cloudnative-pg/plugin-barman-cloud/issues/821)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* Add lz4 compression support for base backups ([#868](https://github.com/cloudnative-pg/plugin-barman-cloud/issues/868)) ([e30154b](https://github.com/cloudnative-pg/plugin-barman-cloud/commit/e30154b938b053f688b5ab520000233e164df6b6)), closes [#867](https://github.com/cloudnative-pg/plugin-barman-cloud/issues/867)
|
||||||
|
* Classify WAL restore errors with precise gRPC statuses ([#927](https://github.com/cloudnative-pg/plugin-barman-cloud/issues/927)) ([aaf6120](https://github.com/cloudnative-pg/plugin-barman-cloud/commit/aaf6120eaaf96d805d26fe4550b1f9c14dd8e02f))
|
||||||
|
* **deps:** Update all non-major go dependencies ([#877](https://github.com/cloudnative-pg/plugin-barman-cloud/issues/877)) ([a81f6e3](https://github.com/cloudnative-pg/plugin-barman-cloud/commit/a81f6e3d73ee348df22439f2daf062f4be598910))
|
||||||
|
* **deps:** Update all non-major go dependencies ([#898](https://github.com/cloudnative-pg/plugin-barman-cloud/issues/898)) ([acdbfb8](https://github.com/cloudnative-pg/plugin-barman-cloud/commit/acdbfb8b10f93cf52f874ec893905709d9bcaa8b))
|
||||||
|
* **deps:** Update all non-major go dependencies to 5d46599 ([#940](https://github.com/cloudnative-pg/plugin-barman-cloud/issues/940)) ([40aa4b2](https://github.com/cloudnative-pg/plugin-barman-cloud/commit/40aa4b21b88e2e323226c391078240d365653de9))
|
||||||
|
* **deps:** Update all non-major go dependencies to 8e1642e ([#939](https://github.com/cloudnative-pg/plugin-barman-cloud/issues/939)) ([f708825](https://github.com/cloudnative-pg/plugin-barman-cloud/commit/f7088258fd0ca1bca2e7dc15753be495d7dcc022))
|
||||||
|
* **deps:** Update all non-major go dependencies to bd68198 ([#950](https://github.com/cloudnative-pg/plugin-barman-cloud/issues/950)) ([787d2b3](https://github.com/cloudnative-pg/plugin-barman-cloud/commit/787d2b35ad4f86a0c125e4996194ec8fe7957de7))
|
||||||
|
* **deps:** Update documentation dependencies to v3.10.1 ([#878](https://github.com/cloudnative-pg/plugin-barman-cloud/issues/878)) ([6cf473d](https://github.com/cloudnative-pg/plugin-barman-cloud/commit/6cf473d5e8a16e204364b53bb0718d541c8c99ac))
|
||||||
|
* **deps:** Update k8s.io/utils digest to ff6756f ([#894](https://github.com/cloudnative-pg/plugin-barman-cloud/issues/894)) ([b7389e1](https://github.com/cloudnative-pg/plugin-barman-cloud/commit/b7389e18e5ec216a601722bb6686b11c49745b03))
|
||||||
|
* **deps:** Update kubernetes monorepo to v0.35.4 ([#853](https://github.com/cloudnative-pg/plugin-barman-cloud/issues/853)) ([21f811a](https://github.com/cloudnative-pg/plugin-barman-cloud/commit/21f811a3f22b8f87ca9230a131f57f832c086fcf))
|
||||||
|
* **deps:** Update kubernetes monorepo to v0.36.1 ([#909](https://github.com/cloudnative-pg/plugin-barman-cloud/issues/909)) ([99eb4a3](https://github.com/cloudnative-pg/plugin-barman-cloud/commit/99eb4a3fe5f4503c76f9afea08164d8e511c4f5b))
|
||||||
|
* **deps:** Update module github.com/cloudnative-pg/cloudnative-pg to v1.29.1 [security] ([#902](https://github.com/cloudnative-pg/plugin-barman-cloud/issues/902)) ([ba5063f](https://github.com/cloudnative-pg/plugin-barman-cloud/commit/ba5063f01393309459e02c30078c34b429f8f21b))
|
||||||
|
* **deps:** Update module github.com/cloudnative-pg/machinery to v0.5.0 ([#925](https://github.com/cloudnative-pg/plugin-barman-cloud/issues/925)) ([ef4b711](https://github.com/cloudnative-pg/plugin-barman-cloud/commit/ef4b7111372877eed087b9178d157dd0d1084bf8))
|
||||||
|
* **deps:** Update module github.com/onsi/ginkgo/v2 to v2.28.2 ([#874](https://github.com/cloudnative-pg/plugin-barman-cloud/issues/874)) ([8cb32e5](https://github.com/cloudnative-pg/plugin-barman-cloud/commit/8cb32e5a5153347a6b05bf63816bcbc9d94f4d67))
|
||||||
|
* **deps:** Update module google.golang.org/grpc to v1.81.0 ([#884](https://github.com/cloudnative-pg/plugin-barman-cloud/issues/884)) ([6fdecfd](https://github.com/cloudnative-pg/plugin-barman-cloud/commit/6fdecfde21b7a5cd05bc3f53895243fbf8537770))
|
||||||
|
* **deps:** Update module sigs.k8s.io/controller-runtime to v0.24.0 ([#880](https://github.com/cloudnative-pg/plugin-barman-cloud/issues/880)) ([58f4fed](https://github.com/cloudnative-pg/plugin-barman-cloud/commit/58f4fed40ba788f76f706e148bebf1892a2dd609))
|
||||||
|
* **deps:** Update module sigs.k8s.io/controller-runtime to v0.24.1 ([#910](https://github.com/cloudnative-pg/plugin-barman-cloud/issues/910)) ([9be87b0](https://github.com/cloudnative-pg/plugin-barman-cloud/commit/9be87b0d9c87c0df7f1f72caa33bf848fbc16582))
|
||||||
|
* **docs:** Update broken link to CloudNativePG documentation ([#904](https://github.com/cloudnative-pg/plugin-barman-cloud/issues/904)) ([43f92fb](https://github.com/cloudnative-pg/plugin-barman-cloud/commit/43f92fbcf1f57d95bbca22cb63c9697d75fc0dbc)), closes [#729](https://github.com/cloudnative-pg/plugin-barman-cloud/issues/729)
|
||||||
|
* **scheme:** Register meta types for CNPG scheme group version ([#943](https://github.com/cloudnative-pg/plugin-barman-cloud/issues/943)) ([bb7845d](https://github.com/cloudnative-pg/plugin-barman-cloud/commit/bb7845dd621115026744c9f1b32cb2fd0cb4a729)), closes [#942](https://github.com/cloudnative-pg/plugin-barman-cloud/issues/942)
|
||||||
|
|
||||||
## [0.12.0](https://github.com/cloudnative-pg/plugin-barman-cloud/compare/v0.11.0...v0.12.0) (2026-04-13)
|
## [0.12.0](https://github.com/cloudnative-pg/plugin-barman-cloud/compare/v0.11.0...v0.12.0) (2026-04-13)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -206,7 +206,7 @@ tasks:
|
|||||||
- start-build-network
|
- start-build-network
|
||||||
vars:
|
vars:
|
||||||
# renovate: datasource=github-tags depName=dagger/dagger versioning=semver
|
# renovate: datasource=github-tags depName=dagger/dagger versioning=semver
|
||||||
DAGGER_VERSION: 0.21.4
|
DAGGER_VERSION: 0.21.5
|
||||||
DAGGER_ENGINE_IMAGE: registry.dagger.io/engine:v{{ .DAGGER_VERSION }}
|
DAGGER_ENGINE_IMAGE: registry.dagger.io/engine:v{{ .DAGGER_VERSION }}
|
||||||
cmds:
|
cmds:
|
||||||
- >
|
- >
|
||||||
|
|||||||
@ -14,21 +14,21 @@ azure-identity==1.25.3 \
|
|||||||
--hash=sha256:ab23c0d63015f50b630ef6c6cf395e7262f439ce06e5d07a64e874c724f8d9e6 \
|
--hash=sha256:ab23c0d63015f50b630ef6c6cf395e7262f439ce06e5d07a64e874c724f8d9e6 \
|
||||||
--hash=sha256:f4d0b956a8146f30333e071374171f3cfa7bdb8073adb8c3814b65567aa7447c
|
--hash=sha256:f4d0b956a8146f30333e071374171f3cfa7bdb8073adb8c3814b65567aa7447c
|
||||||
# via barman
|
# via barman
|
||||||
azure-storage-blob==12.29.0 \
|
azure-storage-blob==12.30.0 \
|
||||||
--hash=sha256:2824ddd7ebc9056034ebc76b17971a38e9aa5835abb0d565b9700493f2a6c657 \
|
--hash=sha256:2cd74d4d5731e5eb6b8d5c5056ee115a5e88f8fdf22517b739836fda685018be \
|
||||||
--hash=sha256:ccf8a1bcd5e49df83ab85aab793b579e5ba2eeea2ad8900b2f62ca3a37dc391f
|
--hash=sha256:d415ac50b67a8da6b3ae7e9f1014b1b55cd7aafa0b8d4ca9b380568dc7360423
|
||||||
# via barman
|
# via barman
|
||||||
barman==3.19.1 \
|
barman==3.19.1 \
|
||||||
--hash=sha256:0a6a9e1babf97687732d8b2a3eb79ea95d55246a5257b9433865cb6e755221c0 \
|
--hash=sha256:0a6a9e1babf97687732d8b2a3eb79ea95d55246a5257b9433865cb6e755221c0 \
|
||||||
--hash=sha256:2f71c4a1f1ba53f694cbdf838bb9906d8ba02b97d1fd3041196e8999bec7a1ee
|
--hash=sha256:2f71c4a1f1ba53f694cbdf838bb9906d8ba02b97d1fd3041196e8999bec7a1ee
|
||||||
# via -r sidecar-requirements.in
|
# via -r sidecar-requirements.in
|
||||||
boto3==1.43.18 \
|
boto3==1.43.26 \
|
||||||
--hash=sha256:33138883e984eb1937d1553da699182c8ad2099138091e885b65c9accbccea16 \
|
--hash=sha256:33f027b7911dffe84f4896b66024c228eb856f4cf8c1ff3465be0eae1f413731 \
|
||||||
--hash=sha256:7b62ce5c0a51428d692aa4f2adc9dc2a4a4c2989bf65a0a12834eeffa99b0b84
|
--hash=sha256:7c88bfbde6abcf062d04ac410a1cf4eaf8675f025f35f3ad9accc9b0224ce6b9
|
||||||
# via barman
|
# via barman
|
||||||
botocore==1.43.18 \
|
botocore==1.43.26 \
|
||||||
--hash=sha256:dc8c105351b49688c667065cd5a45fc5b9db982657cefc9e3fbfb9417a55c7df \
|
--hash=sha256:eeb92265bae289555182a46341c998a656ab49c0dbdb762c65b30fe354fcc9e8 \
|
||||||
--hash=sha256:e2610fce16df9f89deab5f3c163430a814e6804034eb95bef8957c8db60b7dbc
|
--hash=sha256:fd9280ac868194afcee59c7def62e0031fb4b599f7ef85360d30c7e42357c1dc
|
||||||
# via
|
# via
|
||||||
# boto3
|
# boto3
|
||||||
# s3transfer
|
# s3transfer
|
||||||
@ -390,65 +390,65 @@ cramjam==2.11.0 \
|
|||||||
# via
|
# via
|
||||||
# barman
|
# barman
|
||||||
# python-snappy
|
# python-snappy
|
||||||
cryptography==48.0.0 \
|
cryptography==48.0.1 \
|
||||||
--hash=sha256:0890f502ddf7d9c6426129c3f49f5c0a39278ed7cd6322c8755ffca6ee675a13 \
|
--hash=sha256:08a597acce1ff37f347400087776599e2348a3a8bc53b44120e463cd274efe4a \
|
||||||
--hash=sha256:0c558d2cdffd8f4bbb30fc7134c74d2ca9a476f830bb053074498fbc86f41ed6 \
|
--hash=sha256:09f73a725d582cef64b91281a322cd798d14a33b2b6f2b7ad9531dc336d84c02 \
|
||||||
--hash=sha256:16cd65b9330583e4619939b3a3843eec1e6e789744bb01e7c7e2e62e33c239c8 \
|
--hash=sha256:0df56b056bc17c1b7d6821dfa65216e62bd232d8ab05eb3db44e71d235651471 \
|
||||||
--hash=sha256:18349bbc56f4743c8b12dc32e2bccb2cf83ee8b69a3bba74ef8ae857e26b3d25 \
|
--hash=sha256:0ee6ea481db1ab889cba043ec1eda17bb9c1ea79db6722f779c3667f9f70322f \
|
||||||
--hash=sha256:1e2d54c8be6152856a36f0882ab231e70f8ec7f14e93cf87db8a2ed056bf160c \
|
--hash=sha256:15254441469dd6bf027039453288e2072124f8b6603563f5d759e1c9b69273fa \
|
||||||
--hash=sha256:22a5cb272895dce158b2cacdfdc3debd299019659f42947dbdac6f32d68fe832 \
|
--hash=sha256:266f4ee051abb2f725b74ef8072b521ce1feacf685a3364fa6a6b45548db791a \
|
||||||
--hash=sha256:27241b1dc9962e056062a8eef1991d02c3a24569c95975bd2322a8a52c6e5e12 \
|
--hash=sha256:2c37f2461406063b417837f5f3daab668652acd82423efcd7f0a9f04be972de1 \
|
||||||
--hash=sha256:2b4d59804e8408e2fea7d1fbaf218e5ec984325221db76e6a241a9abd6cdd95c \
|
--hash=sha256:32143b24adb918f078134e1e230f1eb8cc04886b92c28b5f0041aaf3e5699225 \
|
||||||
--hash=sha256:2eb992bbd4661238c5a397594c83f5b4dc2bc5b848c365c8f991b6780efcc5c7 \
|
--hash=sha256:33842cf0888951cef5bc7ac724ab844a42044c1727b967b7f8997289a0464f92 \
|
||||||
--hash=sha256:369a6348999f94bbd53435c894377b20ab95f25a9065c283570e70150d8abc3c \
|
--hash=sha256:3752f2dbc8f07a30aad2932c986cea495b03bb554887828225da104f732852b6 \
|
||||||
--hash=sha256:3cb07a3ed6431663cd321ea8a000a1314c74211f823e4177fefa2255e057d1ec \
|
--hash=sha256:39489bfca54c7a1f6b297efcd8bc608ab92d16c4ca631b0cad4da46724588b24 \
|
||||||
--hash=sha256:40ba1f85eaa6959837b1d51c9767e230e14612eea4ef110ee8854ada22da1bf5 \
|
--hash=sha256:3e4a1a3232eef2e6c732827d5722db29a0cc8b27af2a4d865b094cf954be9ca1 \
|
||||||
--hash=sha256:4defde8685ae324a9eb9d818717e93b4638ef67070ac9bc15b8ca85f63048355 \
|
--hash=sha256:3fd2ca57062b241c856670b073487d2e86c4637937ca5601e48f97bf8e11fc8f \
|
||||||
--hash=sha256:55b7718303bf06a5753dcdccf2f3945cf18ad7bffde41b61226e4db31ab89a9c \
|
--hash=sha256:42fcd8e26fe555d9b3577a135f5091fefa0aa4e99129c23fb56787a1bd4ada72 \
|
||||||
--hash=sha256:561215ea3879cb1cbbf272867e2efda62476f240fb58c64de6b393ae19246741 \
|
--hash=sha256:43c5835e2cb98c8733d86f57d6fc879b613f5c3478607281c3e36daffc6dd8a6 \
|
||||||
--hash=sha256:58d00498e8933e4a194f3076aee1b4a97dfec1a6da444535755822fe5d8b0b86 \
|
--hash=sha256:48fe40804d4caa2288f24e70ca8c64c42dd826da0ad7e4f1b41b2128d679e6c8 \
|
||||||
--hash=sha256:59baa2cb386c4f0b9905bd6eb4c2a79a69a128408fd31d32ca4d7102d4156321 \
|
--hash=sha256:4ab0a343c807bbcd90c971cd1ecf072937cd01847a9e002bef88fb47ac6be577 \
|
||||||
--hash=sha256:5a5ed8fde7a1d09376ca0b40e68cd59c69fe23b1f9768bd5824f54681626032a \
|
--hash=sha256:4fdc69f8e4316bcf0c8c8ec1f26f285d12e8142d88d96c876a59a03be3f6ae67 \
|
||||||
--hash=sha256:5b012212e08b8dd5edc78ef54da83dd9892fd9105323b3993eff6bea65dc21d7 \
|
--hash=sha256:6184ca7b174f28d7c703f1290d4b297217c45355f77a98f67e9b7f14549ac54a \
|
||||||
--hash=sha256:5c3932f4436d1cccb036cb0eaef46e6e2db91035166f1ad6505c3c9d5a635920 \
|
--hash=sha256:66fd0771e7b9c6dcd44cf1120690d2338d16d72795cf40cae2786a39eba65429 \
|
||||||
--hash=sha256:614d0949f4790582d2cc25553abd09dd723025f0c0e7c67376a1d77196743d6e \
|
--hash=sha256:6b2c0c3e6ccf3ade7750f836ef3ee36eea250cc467d45c256895573ac08cc6f1 \
|
||||||
--hash=sha256:76341972e1eff8b4bea859f09c0d3e64b96ce931b084f9b9b7db8ef364c30eff \
|
--hash=sha256:735824ec41b7f74a7c45fb1591349333e4c696cb6c044e5f46356e560143e4cd \
|
||||||
--hash=sha256:77a2ccbbe917f6710e05ba9adaa25fb5075620bf3ea6fb751997875aff4ae4bd \
|
--hash=sha256:7e234ac052af99f2700826a5c29ea99d9c1b1f80341cde62d11c8154dc8e0bd9 \
|
||||||
--hash=sha256:7995ef305d7165c3f11ae07f2517e5a4f1d5c18da1376a0a9ed496336b69e5f3 \
|
--hash=sha256:869c3b8a53bfe27147832df48b32adadf558249d50e76cb3769d40e986b13265 \
|
||||||
--hash=sha256:7ce4bfae76319a532a2dc68f82cc32f5676ee792a983187dac07183690e5c66f \
|
--hash=sha256:86be3b1b0b6bf09482fb50a979c508d2950ed95f5621ec77f4e385962006b83a \
|
||||||
--hash=sha256:7e8eac43dfca5c4cccc6dad9a80504436fca53bb9bc3100a2386d730fbe6b602 \
|
--hash=sha256:86fe77abb1bd87afb251d4d02ada7ecf53a32cee9b67d976abb2e45a13297475 \
|
||||||
--hash=sha256:84cf79f0dc8b36ac5da873481716e87aef31fcfa0444f9e1d8b4b2cece142855 \
|
--hash=sha256:88c852a0ae366e262e5a1744b685e6a433dc8788dd2a277e418bf4904203609d \
|
||||||
--hash=sha256:8c7378637d7d88016fa6791c159f698b3d3eed28ebf844ac36b9dc04a14dae18 \
|
--hash=sha256:8ace4507d1e6533c125f4fac754f8bb8b6a74c08e92179dabd7e16571a3efbf3 \
|
||||||
--hash=sha256:8cd666227ef7af430aa5914a9910e0ddd703e75f039cef0825cd0da71b6b711a \
|
--hash=sha256:92a46e1d638daa264ba2971c0b0489c9409787943efae4d60ffda3d091ef832c \
|
||||||
--hash=sha256:906cbf0670286c6e0044156bc7d4af9cbb0ef6db9f73e52c3ec56ba6bdde5336 \
|
--hash=sha256:9621de99d2da096006b629979efd8ae7eb2d8b822488d0c89ee4000c306c59b1 \
|
||||||
--hash=sha256:9071196d81abc88b3516ac8cdfad32e2b66dd4a5393a8e68a961e9161ddc6239 \
|
--hash=sha256:9a49ca6c81417f6a5edb50375a60cccdd70fa0a91a5211829dbea74eba94d2ac \
|
||||||
--hash=sha256:9249e3cd978541d665967ac2cb2787fd6a62bddf1e75b3e347a594d7dacf4f74 \
|
--hash=sha256:9bd3f92d76217892b15df84ca256c2c113d386fdda7a7d8691aeeced976507c6 \
|
||||||
--hash=sha256:984a20b0f62a26f48a3396c72e4bc34c66e356d356bf370053066b3b6d54634a \
|
--hash=sha256:9de21387aa95e2a895823d0745b430bed4f33503ba9ab5e0b5311f33e37d66d2 \
|
||||||
--hash=sha256:9be5aafa5736574f8f15f262adc81b2a9869e2cfe9014d52a44633905b40d52c \
|
--hash=sha256:b024e784ad6c077ee0147b35ea9cbfc1e34e1fd4c1dcca214c2794d73a12df08 \
|
||||||
--hash=sha256:9c459db21422be75e2809370b829a87eb37f74cd785fc4aa9ea1e5f43b47cda4 \
|
--hash=sha256:b4e391975f038e66432328639620a4aff2d307513b004f1ca06d6225bced815c \
|
||||||
--hash=sha256:9ccdac7d40688ecb5a3b4a604b8a88c8002e3442d6c60aead1db2a89a041560c \
|
--hash=sha256:b74ca3b8e5ecdd833bf6a002ca41b4793bb27fb8f1c06ffaf2643c9e9140e31b \
|
||||||
--hash=sha256:a0e692c683f4df67815a2d258b324e66f4738bd7a96a218c826dce4f4bd05d8f \
|
--hash=sha256:b7a2d1a937a738a881737cec135a38bb61470589b17515b9f73f571d0ae10401 \
|
||||||
--hash=sha256:a5da777e32ffed6f85a7b2b3f7c5cbc88c146bfcd0a1d7baf5fcc6c52ee35dd4 \
|
--hash=sha256:b9a32b876490d66c8bcc9963ef220199569748434ab01a9d6aaeabf88e7f5158 \
|
||||||
--hash=sha256:a64697c641c7b1b2178e573cbc31c7c6684cd56883a478d75143dbb7118036db \
|
--hash=sha256:bd81490cd5801d755cf97bb68ac191f14b708470b1c7cf4580f669b9c9264cd8 \
|
||||||
--hash=sha256:ad64688338ed4bc1a6618076ba75fd7194a5f1797ac60b47afe926285adb3166 \
|
--hash=sha256:c1400da5e32a43253392277eac7490a60e497d810a63dd5608d71bbd7af507c9 \
|
||||||
--hash=sha256:bd72e68b06bb1e96913f97dd4901119bc17f39d4586a5adf2d3e47bc2b9d58b5 \
|
--hash=sha256:d069066deead00ac7f090be101be875a06855908f7ec004c27b8fefb4acfb411 \
|
||||||
--hash=sha256:c17dfe85494deaeddc5ce251aebd1d60bbe6afc8b62071bb0b469431a000124f \
|
--hash=sha256:d5d30989c6917b478b5817902e85fddaea2261efa8648383d965381ccb9e1ac4 \
|
||||||
--hash=sha256:c18684a7f0cc9a3cb60328f496b8e3372def7c5d2df39ac267878b05565aaaae \
|
--hash=sha256:df637c05205ea7c1d7fbcbe54bbfea648a52951155f997af13d895d0ecc96991 \
|
||||||
--hash=sha256:cc90c0b39b2e3c65ef52c804b72e3c58f8a04ab2a1871272798e5f9572c17d20 \
|
--hash=sha256:e361afba8918070d376df76f408a4f67fec0ee9cff81a99e48fe9a233ef59e17 \
|
||||||
--hash=sha256:db63bf618e5dea46c07de12e900fe1cdd2541e6dc9dbae772a70b7d4d4765f6a \
|
--hash=sha256:eb86ce1af36fe65041b6db9a8bb064ee621a7e5fded0f80d475ec243477cd242 \
|
||||||
--hash=sha256:ea8990436d914540a40ab24b6a77c0969695ed52f4a4874c5137ccf7045a7057 \
|
--hash=sha256:f0d27a5696721ef7a672b8c810f6aded391058e0b9486e63e6d93baf765da691 \
|
||||||
--hash=sha256:ecde28a596bead48b0cfd2a1b4416c3d43074c2d785e3a398d7ec1fc4d0f7fbb \
|
--hash=sha256:f2ceef93cb096aa3c4cc4b5c94ca6131f9196d28c64d6111533402a9b2054d41 \
|
||||||
--hash=sha256:f5333311663ea94f75dd408665686aaf426563556bb5283554a3539177e03b8c \
|
--hash=sha256:f817adc181390bd54f2f700107a7419040fb7c1bdf2fc26f36551a06a68c3345 \
|
||||||
--hash=sha256:fdfef35d751d510fcef5252703621574364fec16418c4a1e5e1055248401054b
|
--hash=sha256:fe0180af5bf9236518a087e35bf2d9a347d5f5f51e63c579d683ddff424e3d46
|
||||||
# via
|
# via
|
||||||
# azure-identity
|
# azure-identity
|
||||||
# azure-storage-blob
|
# azure-storage-blob
|
||||||
# google-auth
|
# google-auth
|
||||||
# msal
|
# msal
|
||||||
# pyjwt
|
# pyjwt
|
||||||
google-api-core==2.30.3 \
|
google-api-core==2.31.0 \
|
||||||
--hash=sha256:a85761ba72c444dad5d611c2220633480b2b6be2521eca69cca2dbb3ffd6bfe8 \
|
--hash=sha256:2be84ee0f584c48e6bde1b36766e23348b361fb7e55e56135fc76ce1c397f9c2 \
|
||||||
--hash=sha256:e601a37f148585319b26db36e219df68c5d07b6382cff2d580e83404e44d641b
|
--hash=sha256:ef79fb3784c71cbac89cbd03301ba0c8fb8ad2aa95d7f9204dd9628f7adf59ab
|
||||||
# via
|
# via
|
||||||
# google-cloud-core
|
# google-cloud-core
|
||||||
# google-cloud-storage
|
# google-cloud-storage
|
||||||
@ -463,9 +463,9 @@ google-cloud-core==2.6.0 \
|
|||||||
--hash=sha256:6d63ac8e5eca6d9e4319d0a1e2265fadcd7f1049904378caecfa01cf52dd869e \
|
--hash=sha256:6d63ac8e5eca6d9e4319d0a1e2265fadcd7f1049904378caecfa01cf52dd869e \
|
||||||
--hash=sha256:e76149739f90fac1fc6757c09f47eaccb3145b54adbd7759b0f7c4b235f46c83
|
--hash=sha256:e76149739f90fac1fc6757c09f47eaccb3145b54adbd7759b0f7c4b235f46c83
|
||||||
# via google-cloud-storage
|
# via google-cloud-storage
|
||||||
google-cloud-storage==3.10.1 \
|
google-cloud-storage==3.11.0 \
|
||||||
--hash=sha256:97db9aa4460727982040edd2bd13ff3d5e2260b5331ad22895802da1fc2a5286 \
|
--hash=sha256:498bf37c999028f69a245f586b5e50d89f59df1fafc0e3a93783ac56be2a456b \
|
||||||
--hash=sha256:a72f656759b7b99bda700f901adcb3425a828d4a29f911bc26b3ea79c5b1217f
|
--hash=sha256:cfcc33aa6b899ec9dd1771286f8e79fbed5c35c1c174718071b079aa827f37c2
|
||||||
# via barman
|
# via barman
|
||||||
google-crc32c==1.8.0 \
|
google-crc32c==1.8.0 \
|
||||||
--hash=sha256:014a7e68d623e9a4222d663931febc3033c5c7c9730785727de2a81f87d5bab8 \
|
--hash=sha256:014a7e68d623e9a4222d663931febc3033c5c7c9730785727de2a81f87d5bab8 \
|
||||||
@ -504,17 +504,17 @@ google-crc32c==1.8.0 \
|
|||||||
# via
|
# via
|
||||||
# google-cloud-storage
|
# google-cloud-storage
|
||||||
# google-resumable-media
|
# google-resumable-media
|
||||||
google-resumable-media==2.9.0 \
|
google-resumable-media==2.10.0 \
|
||||||
--hash=sha256:c8901e88e389af8bed64d9696c74d8bad961865eb2236e13e0bfca9bb0a65ca3 \
|
--hash=sha256:88152884bee37b2bf36a0ab81ad8c7fd12212c9803dd981d77c1b35b02d34e7c \
|
||||||
--hash=sha256:f7cfb224846a9dd444d125115dfbe8ef02a2b893e78f087762fe716a255a734b
|
--hash=sha256:e324bc9d0fdae4c52a08ae90456edc4e71ece858399e1217ac0eb3a51d6bc6ee
|
||||||
# via google-cloud-storage
|
# via google-cloud-storage
|
||||||
googleapis-common-protos==1.75.0 \
|
googleapis-common-protos==1.75.0 \
|
||||||
--hash=sha256:53a062ff3c32552fbd62c11fe23768b78e4ddf0494d5e5fd97d3f4689c75fbbd \
|
--hash=sha256:53a062ff3c32552fbd62c11fe23768b78e4ddf0494d5e5fd97d3f4689c75fbbd \
|
||||||
--hash=sha256:961ed60399c457ceb0ee8f285a84c870aabc9c6a832b9d37bb281b5bebde43ed
|
--hash=sha256:961ed60399c457ceb0ee8f285a84c870aabc9c6a832b9d37bb281b5bebde43ed
|
||||||
# via google-api-core
|
# via google-api-core
|
||||||
idna==3.17 \
|
idna==3.18 \
|
||||||
--hash=sha256:466e48829084efe2548012b855df21540b96f2e20e51bd124c851536556a592c \
|
--hash=sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2 \
|
||||||
--hash=sha256:5eb0cb53bc467c12eadcf6de83163ad8527cec9416f44b9b61b19caedad2b87f
|
--hash=sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848
|
||||||
# via requests
|
# via requests
|
||||||
isodate==0.7.2 \
|
isodate==0.7.2 \
|
||||||
--hash=sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15 \
|
--hash=sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15 \
|
||||||
|
|||||||
4
go.mod
4
go.mod
@ -5,7 +5,7 @@ go 1.26.3
|
|||||||
require (
|
require (
|
||||||
github.com/cert-manager/cert-manager v1.20.2
|
github.com/cert-manager/cert-manager v1.20.2
|
||||||
github.com/cloudnative-pg/api v1.29.1
|
github.com/cloudnative-pg/api v1.29.1
|
||||||
github.com/cloudnative-pg/barman-cloud v0.5.2-0.20260604074245-5d4659922a82
|
github.com/cloudnative-pg/barman-cloud v0.5.2-0.20260609065833-bd68198c31dc
|
||||||
github.com/cloudnative-pg/cloudnative-pg v1.29.1
|
github.com/cloudnative-pg/cloudnative-pg v1.29.1
|
||||||
github.com/cloudnative-pg/cnpg-i v0.5.0
|
github.com/cloudnative-pg/cnpg-i v0.5.0
|
||||||
github.com/cloudnative-pg/cnpg-i-machinery v0.4.2
|
github.com/cloudnative-pg/cnpg-i-machinery v0.4.2
|
||||||
@ -114,7 +114,7 @@ require (
|
|||||||
golang.org/x/net v0.53.0 // indirect
|
golang.org/x/net v0.53.0 // indirect
|
||||||
golang.org/x/oauth2 v0.36.0 // indirect
|
golang.org/x/oauth2 v0.36.0 // indirect
|
||||||
golang.org/x/sync v0.20.0 // indirect
|
golang.org/x/sync v0.20.0 // indirect
|
||||||
golang.org/x/sys v0.45.0 // indirect
|
golang.org/x/sys v0.46.0 // indirect
|
||||||
golang.org/x/term v0.42.0 // indirect
|
golang.org/x/term v0.42.0 // indirect
|
||||||
golang.org/x/text v0.36.0 // indirect
|
golang.org/x/text v0.36.0 // indirect
|
||||||
golang.org/x/time v0.15.0 // indirect
|
golang.org/x/time v0.15.0 // indirect
|
||||||
|
|||||||
8
go.sum
8
go.sum
@ -20,8 +20,8 @@ github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UF
|
|||||||
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||||
github.com/cloudnative-pg/api v1.29.1 h1:FWr8S7EQeOfdhYXyr2cof8wUXLARZiiQt5Qa6ltED7w=
|
github.com/cloudnative-pg/api v1.29.1 h1:FWr8S7EQeOfdhYXyr2cof8wUXLARZiiQt5Qa6ltED7w=
|
||||||
github.com/cloudnative-pg/api v1.29.1/go.mod h1:QtWF3yzSvIfORMHaSkPAk/o3bhCJwEHJgN3riyRiz3o=
|
github.com/cloudnative-pg/api v1.29.1/go.mod h1:QtWF3yzSvIfORMHaSkPAk/o3bhCJwEHJgN3riyRiz3o=
|
||||||
github.com/cloudnative-pg/barman-cloud v0.5.2-0.20260604074245-5d4659922a82 h1:XKuLJWTREfjUHAw97LHA1qTcuv93oMu7ILASUYNFjpc=
|
github.com/cloudnative-pg/barman-cloud v0.5.2-0.20260609065833-bd68198c31dc h1:EWlG0LDO3XxVEG/HGDzRZPG0pgULkA8KmYWOSsbBDD0=
|
||||||
github.com/cloudnative-pg/barman-cloud v0.5.2-0.20260604074245-5d4659922a82/go.mod h1:jCaMsQwJJ0f/49TIdSad1Ayjv52IoJXMZBhozqilY/g=
|
github.com/cloudnative-pg/barman-cloud v0.5.2-0.20260609065833-bd68198c31dc/go.mod h1:UAjYZ7LaVswcdi9Kg8mbTtf5MhG6FCP5RlrmqUmZ+VY=
|
||||||
github.com/cloudnative-pg/cloudnative-pg v1.29.1 h1:ZNEt1TMlnQKXI1kho2UqQuqdfvIvjGln4kN7C1lsmGA=
|
github.com/cloudnative-pg/cloudnative-pg v1.29.1 h1:ZNEt1TMlnQKXI1kho2UqQuqdfvIvjGln4kN7C1lsmGA=
|
||||||
github.com/cloudnative-pg/cloudnative-pg v1.29.1/go.mod h1:Sbgx9jVmkle4/gR2U5JHrzDd74sRPOBHDtPkvncg5v8=
|
github.com/cloudnative-pg/cloudnative-pg v1.29.1/go.mod h1:Sbgx9jVmkle4/gR2U5JHrzDd74sRPOBHDtPkvncg5v8=
|
||||||
github.com/cloudnative-pg/cnpg-i v0.5.0 h1:/TOzpNT6cwNgrpftTtrnLKdoHgMwd+88vZgXjlVgXeE=
|
github.com/cloudnative-pg/cnpg-i v0.5.0 h1:/TOzpNT6cwNgrpftTtrnLKdoHgMwd+88vZgXjlVgXeE=
|
||||||
@ -275,8 +275,8 @@ golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs=
|
|||||||
golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q=
|
golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q=
|
||||||
golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4=
|
golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4=
|
||||||
golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
|
golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
|
||||||
golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY=
|
golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw=
|
||||||
golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
|
golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
|
||||||
golang.org/x/term v0.42.0 h1:UiKe+zDFmJobeJ5ggPwOshJIVt6/Ft0rcfrXZDLWAWY=
|
golang.org/x/term v0.42.0 h1:UiKe+zDFmJobeJ5ggPwOshJIVt6/Ft0rcfrXZDLWAWY=
|
||||||
golang.org/x/term v0.42.0/go.mod h1:Dq/D+snpsbazcBG5+F9Q1n2rXV8Ma+71xEjTRufARgY=
|
golang.org/x/term v0.42.0/go.mod h1:Dq/D+snpsbazcBG5+F9Q1n2rXV8Ma+71xEjTRufARgY=
|
||||||
golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg=
|
golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg=
|
||||||
|
|||||||
@ -25,6 +25,7 @@ import (
|
|||||||
cnpgv1 "github.com/cloudnative-pg/cloudnative-pg/api/v1"
|
cnpgv1 "github.com/cloudnative-pg/cloudnative-pg/api/v1"
|
||||||
"github.com/cloudnative-pg/machinery/pkg/log"
|
"github.com/cloudnative-pg/machinery/pkg/log"
|
||||||
"github.com/spf13/viper"
|
"github.com/spf13/viper"
|
||||||
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
||||||
@ -58,6 +59,7 @@ func GenerateScheme(ctx context.Context) *runtime.Scheme {
|
|||||||
&cnpgv1.Backup{}, &cnpgv1.BackupList{},
|
&cnpgv1.Backup{}, &cnpgv1.BackupList{},
|
||||||
&cnpgv1.ScheduledBackup{}, &cnpgv1.ScheduledBackupList{},
|
&cnpgv1.ScheduledBackup{}, &cnpgv1.ScheduledBackupList{},
|
||||||
)
|
)
|
||||||
|
metav1.AddToGroupVersion(result, schemeGroupVersion)
|
||||||
|
|
||||||
schemeLog := log.FromContext(ctx)
|
schemeLog := log.FromContext(ctx)
|
||||||
schemeLog.Info("CNPG types registration", "schemeGroupVersion", schemeGroupVersion)
|
schemeLog.Info("CNPG types registration", "schemeGroupVersion", schemeGroupVersion)
|
||||||
|
|||||||
@ -33,7 +33,8 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// updateRecoveryWindow updates the recovery window inside the object
|
// updateRecoveryWindow updates the recovery window inside the object
|
||||||
// store status subresource
|
// store status subresource. It uses retry logic to handle concurrent
|
||||||
|
// updates from backup completion and retention policy enforcement.
|
||||||
func updateRecoveryWindow(
|
func updateRecoveryWindow(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
c client.Client,
|
c client.Client,
|
||||||
@ -41,6 +42,14 @@ func updateRecoveryWindow(
|
|||||||
objectStore *barmancloudv1.ObjectStore,
|
objectStore *barmancloudv1.ObjectStore,
|
||||||
serverName string,
|
serverName string,
|
||||||
) error {
|
) error {
|
||||||
|
objectStoreKey := client.ObjectKeyFromObject(objectStore)
|
||||||
|
|
||||||
|
return retry.RetryOnConflict(retry.DefaultBackoff, func() error {
|
||||||
|
var freshObjectStore barmancloudv1.ObjectStore
|
||||||
|
if err := c.Get(ctx, objectStoreKey, &freshObjectStore); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// Set the recovery window inside the barman object store object
|
// Set the recovery window inside the barman object store object
|
||||||
convertTime := func(t *time.Time) *metav1.Time {
|
convertTime := func(t *time.Time) *metav1.Time {
|
||||||
if t == nil {
|
if t == nil {
|
||||||
@ -49,16 +58,17 @@ func updateRecoveryWindow(
|
|||||||
return ptr.To(metav1.NewTime(*t))
|
return ptr.To(metav1.NewTime(*t))
|
||||||
}
|
}
|
||||||
|
|
||||||
recoveryWindow := objectStore.Status.ServerRecoveryWindow[serverName]
|
recoveryWindow := freshObjectStore.Status.ServerRecoveryWindow[serverName]
|
||||||
recoveryWindow.FirstRecoverabilityPoint = convertTime(backupList.GetFirstRecoverabilityPoint())
|
recoveryWindow.FirstRecoverabilityPoint = convertTime(backupList.GetFirstRecoverabilityPoint())
|
||||||
recoveryWindow.LastSuccessfulBackupTime = convertTime(backupList.GetLastSuccessfulBackupTime())
|
recoveryWindow.LastSuccessfulBackupTime = convertTime(backupList.GetLastSuccessfulBackupTime())
|
||||||
|
|
||||||
if objectStore.Status.ServerRecoveryWindow == nil {
|
if freshObjectStore.Status.ServerRecoveryWindow == nil {
|
||||||
objectStore.Status.ServerRecoveryWindow = make(map[string]barmancloudv1.RecoveryWindow)
|
freshObjectStore.Status.ServerRecoveryWindow = make(map[string]barmancloudv1.RecoveryWindow)
|
||||||
}
|
}
|
||||||
objectStore.Status.ServerRecoveryWindow[serverName] = recoveryWindow
|
freshObjectStore.Status.ServerRecoveryWindow[serverName] = recoveryWindow
|
||||||
|
|
||||||
return c.Status().Update(ctx, objectStore)
|
return c.Status().Update(ctx, &freshObjectStore)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// setLastFailedBackupTime sets the last failed backup time in the
|
// setLastFailedBackupTime sets the last failed backup time in the
|
||||||
|
|||||||
@ -63,7 +63,7 @@ const (
|
|||||||
// Data is the metadata of this plugin.
|
// Data is the metadata of this plugin.
|
||||||
var Data = identity.GetPluginMetadataResponse{
|
var Data = identity.GetPluginMetadataResponse{
|
||||||
Name: PluginName,
|
Name: PluginName,
|
||||||
Version: "0.12.0", // x-release-please-version
|
Version: "0.13.0", // x-release-please-version
|
||||||
DisplayName: "BarmanCloudInstance",
|
DisplayName: "BarmanCloudInstance",
|
||||||
ProjectUrl: "https://github.com/cloudnative-pg/plugin-barman-cloud",
|
ProjectUrl: "https://github.com/cloudnative-pg/plugin-barman-cloud",
|
||||||
RepositoryUrl: "https://github.com/cloudnative-pg/plugin-barman-cloud",
|
RepositoryUrl: "https://github.com/cloudnative-pg/plugin-barman-cloud",
|
||||||
|
|||||||
@ -25,6 +25,7 @@ import (
|
|||||||
cnpgv1 "github.com/cloudnative-pg/cloudnative-pg/api/v1"
|
cnpgv1 "github.com/cloudnative-pg/cloudnative-pg/api/v1"
|
||||||
"github.com/cloudnative-pg/machinery/pkg/log"
|
"github.com/cloudnative-pg/machinery/pkg/log"
|
||||||
"github.com/spf13/viper"
|
"github.com/spf13/viper"
|
||||||
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
)
|
)
|
||||||
@ -49,6 +50,7 @@ func AddCNPGToScheme(ctx context.Context, s *runtime.Scheme) {
|
|||||||
&cnpgv1.Backup{}, &cnpgv1.BackupList{},
|
&cnpgv1.Backup{}, &cnpgv1.BackupList{},
|
||||||
&cnpgv1.ScheduledBackup{}, &cnpgv1.ScheduledBackupList{},
|
&cnpgv1.ScheduledBackup{}, &cnpgv1.ScheduledBackupList{},
|
||||||
)
|
)
|
||||||
|
metav1.AddToGroupVersion(s, schemeGroupVersion)
|
||||||
|
|
||||||
log.FromContext(ctx).Info("CNPG types registration", "schemeGroupVersion", schemeGroupVersion)
|
log.FromContext(ctx).Info("CNPG types registration", "schemeGroupVersion", schemeGroupVersion)
|
||||||
}
|
}
|
||||||
|
|||||||
45
web/versioned_docs/version-0.13.0/compression.md
Normal file
45
web/versioned_docs/version-0.13.0/compression.md
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 80
|
||||||
|
---
|
||||||
|
|
||||||
|
# Compression
|
||||||
|
|
||||||
|
<!-- SPDX-License-Identifier: CC-BY-4.0 -->
|
||||||
|
|
||||||
|
By default, backups and WAL files are archived **uncompressed**. However, the
|
||||||
|
Barman Cloud Plugin supports multiple compression algorithms via
|
||||||
|
`barman-cloud-backup` and `barman-cloud-wal-archive`, allowing you to optimize
|
||||||
|
for space, speed, or a balance of both.
|
||||||
|
|
||||||
|
### Supported Compression Algorithms
|
||||||
|
|
||||||
|
- `bzip2`
|
||||||
|
- `gzip`
|
||||||
|
- `lz4`
|
||||||
|
- `snappy`
|
||||||
|
- `xz` (WAL only)
|
||||||
|
- `zstd` (WAL only)
|
||||||
|
|
||||||
|
Compression settings for base backups and WAL archives are configured
|
||||||
|
independently. For implementation details, refer to the corresponding API
|
||||||
|
definitions:
|
||||||
|
|
||||||
|
- [`DataBackupConfiguration`](https://pkg.go.dev/github.com/cloudnative-pg/barman-cloud/pkg/api#DataBackupConfiguration)
|
||||||
|
- [`WALBackupConfiguration`](https://pkg.go.dev/github.com/cloudnative-pg/barman-cloud/pkg/api#WalBackupConfiguration)
|
||||||
|
|
||||||
|
:::important
|
||||||
|
Compression impacts both performance and storage efficiency. Choose the right
|
||||||
|
algorithm based on your recovery time objectives (RTO), storage capacity, and
|
||||||
|
network throughput.
|
||||||
|
:::
|
||||||
|
|
||||||
|
## Compression Benchmark (on MinIO)
|
||||||
|
|
||||||
|
| Compression | Backup Time (ms) | Restore Time (ms) | Uncompressed Size (MB) | Compressed Size (MB) | Ratio |
|
||||||
|
| ----------- | ---------------- | ----------------- | ---------------------- | -------------------- | ----- |
|
||||||
|
| None | 10,927 | 7,553 | 395 | 395 | 1.0:1 |
|
||||||
|
| bzip2 | 25,404 | 13,886 | 395 | 67 | 5.9:1 |
|
||||||
|
| gzip | 116,281 | 3,077 | 395 | 91 | 4.3:1 |
|
||||||
|
| snappy | 8,134 | 8,341 | 395 | 166 | 2.4:1 |
|
||||||
|
|
||||||
|
Numbers come from a 2021 Barman proof of concept ([EnterpriseDB/barman#344](https://github.com/EnterpriseDB/barman/issues/344#issuecomment-992547396)), which predates `lz4` support for base backups. `lz4` is not yet benchmarked.
|
||||||
177
web/versioned_docs/version-0.13.0/concepts.md
Normal file
177
web/versioned_docs/version-0.13.0/concepts.md
Normal file
@ -0,0 +1,177 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 10
|
||||||
|
---
|
||||||
|
|
||||||
|
# Main Concepts
|
||||||
|
|
||||||
|
<!-- SPDX-License-Identifier: CC-BY-4.0 -->
|
||||||
|
|
||||||
|
:::important
|
||||||
|
Before proceeding, make sure to review the following sections of the
|
||||||
|
CloudNativePG documentation:
|
||||||
|
|
||||||
|
- [**Backup**](https://cloudnative-pg.io/documentation/current/backup/)
|
||||||
|
- [**WAL Archiving**](https://cloudnative-pg.io/documentation/current/wal_archiving/)
|
||||||
|
- [**Recovery**](https://cloudnative-pg.io/documentation/current/recovery/)
|
||||||
|
:::
|
||||||
|
|
||||||
|
The **Barman Cloud Plugin** enables **hot (online) backups** of PostgreSQL
|
||||||
|
clusters in CloudNativePG through [`barman-cloud`](https://pgbarman.org),
|
||||||
|
supporting continuous physical backups and WAL archiving to an **object
|
||||||
|
store**—without interrupting write operations.
|
||||||
|
|
||||||
|
It also supports both **full recovery** and **Point-in-Time Recovery (PITR)**
|
||||||
|
of a PostgreSQL cluster.
|
||||||
|
|
||||||
|
## The Object Store
|
||||||
|
|
||||||
|
At the core is the [`ObjectStore` custom resource (CRD)](plugin-barman-cloud.v1.md#objectstorespec),
|
||||||
|
which acts as the interface between the PostgreSQL cluster and the target
|
||||||
|
object storage system. It allows you to configure:
|
||||||
|
|
||||||
|
- **Authentication and bucket location** via the `.spec.configuration` section
|
||||||
|
- **WAL archiving** settings—such as compression type, parallelism, and
|
||||||
|
server-side encryption—under `.spec.configuration.wal`
|
||||||
|
- **Base backup options**—with similar settings for compression, concurrency,
|
||||||
|
and encryption—under `.spec.configuration.data`
|
||||||
|
- **Retention policies** to manage the life-cycle of archived WALs and backups
|
||||||
|
via `.spec.configuration.retentionPolicy`
|
||||||
|
|
||||||
|
WAL files are archived in the `wals` directory, while base backups are stored
|
||||||
|
as **tarballs** in the `base` directory, following the
|
||||||
|
[Barman Cloud convention](https://docs.pgbarman.org/cloud/latest/usage/#object-store-layout).
|
||||||
|
|
||||||
|
The plugin also offers advanced capabilities, including
|
||||||
|
[backup tagging](misc.md#backup-object-tagging) and
|
||||||
|
[extra options for backups and WAL archiving](misc.md#extra-options-for-backup-and-wal-archiving).
|
||||||
|
|
||||||
|
:::tip
|
||||||
|
For details, refer to the
|
||||||
|
[API reference for the `ObjectStore` resource](plugin-barman-cloud.v1.md#objectstorespec).
|
||||||
|
:::
|
||||||
|
|
||||||
|
## Integration with a CloudNativePG Cluster
|
||||||
|
|
||||||
|
CloudNativePG can delegate continuous backup and recovery responsibilities to
|
||||||
|
the **Barman Cloud Plugin** by configuring the `.spec.plugins` section of a
|
||||||
|
`Cluster` resource. This setup requires a corresponding `ObjectStore` resource
|
||||||
|
to be defined.
|
||||||
|
|
||||||
|
:::important
|
||||||
|
While it is technically possible to reuse the same `ObjectStore` for multiple
|
||||||
|
`Cluster` resources within the same namespace, it is strongly recommended to
|
||||||
|
dedicate one object store per PostgreSQL cluster to ensure data isolation and
|
||||||
|
operational clarity.
|
||||||
|
:::
|
||||||
|
|
||||||
|
The following example demonstrates how to configure a CloudNativePG cluster
|
||||||
|
named `cluster-example` to use a previously defined `ObjectStore` (also named
|
||||||
|
`cluster-example`) in the same namespace. Setting `isWALArchiver: true` enables
|
||||||
|
WAL archiving through the plugin:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: postgresql.cnpg.io/v1
|
||||||
|
kind: Cluster
|
||||||
|
metadata:
|
||||||
|
name: cluster-example
|
||||||
|
spec:
|
||||||
|
# Other cluster settings...
|
||||||
|
plugins:
|
||||||
|
- name: barman-cloud.cloudnative-pg.io
|
||||||
|
isWALArchiver: true
|
||||||
|
parameters:
|
||||||
|
barmanObjectName: cluster-example
|
||||||
|
```
|
||||||
|
|
||||||
|
## Backup of a Postgres Cluster
|
||||||
|
|
||||||
|
Once the object store is defined and the `Cluster` is configured to use the
|
||||||
|
Barman Cloud Plugin, **WAL archiving is activated immediately** on the
|
||||||
|
PostgreSQL primary.
|
||||||
|
|
||||||
|
Physical base backups are seamlessly managed by CloudNativePG using the
|
||||||
|
`Backup` and `ScheduledBackup` resources, respectively for
|
||||||
|
[on-demand](https://cloudnative-pg.io/documentation/current/backup/#on-demand-backups)
|
||||||
|
and
|
||||||
|
[scheduled](https://cloudnative-pg.io/documentation/current/backup/#scheduled-backups)
|
||||||
|
backups.
|
||||||
|
|
||||||
|
To use the Barman Cloud Plugin, you must set the `method` to `plugin` and
|
||||||
|
configure the `pluginConfiguration` section as shown:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
[...]
|
||||||
|
spec:
|
||||||
|
method: plugin
|
||||||
|
pluginConfiguration:
|
||||||
|
name: barman-cloud.cloudnative-pg.io
|
||||||
|
[...]
|
||||||
|
```
|
||||||
|
|
||||||
|
With this configuration, CloudNativePG supports:
|
||||||
|
|
||||||
|
- Backups from both **primary** and **standby** instances
|
||||||
|
- Backups from **designated primaries** in a distributed topology using
|
||||||
|
[replica clusters](https://cloudnative-pg.io/documentation/current/replica_cluster/)
|
||||||
|
|
||||||
|
:::tip
|
||||||
|
For details on how to back up from a standby, refer to the official documentation:
|
||||||
|
[Backup from a standby](https://cloudnative-pg.io/documentation/current/backup/#backup-from-a-standby).
|
||||||
|
:::
|
||||||
|
|
||||||
|
:::important
|
||||||
|
Both backup and WAL archiving operations are executed by sidecar containers
|
||||||
|
running in the same pod as the PostgreSQL `Cluster` primary instance—except
|
||||||
|
when backups are taken from a standby, in which case the sidecar runs alongside
|
||||||
|
the standby pod.
|
||||||
|
The sidecar containers use a [dedicated container image](images.md) that
|
||||||
|
includes only the supported version of Barman Cloud.
|
||||||
|
:::
|
||||||
|
|
||||||
|
## Recovery of a Postgres Cluster
|
||||||
|
|
||||||
|
In PostgreSQL, *recovery* refers to the process of starting a database instance
|
||||||
|
from an existing backup. The Barman Cloud Plugin integrates with CloudNativePG
|
||||||
|
to support both **full recovery** and **Point-in-Time Recovery (PITR)** from an
|
||||||
|
object store.
|
||||||
|
|
||||||
|
Recovery in this context is *not in-place*: it bootstraps a brand-new
|
||||||
|
PostgreSQL cluster from a backup and replays the necessary WAL files to reach
|
||||||
|
the desired recovery target.
|
||||||
|
|
||||||
|
To perform a recovery, define an *external cluster* that references the
|
||||||
|
appropriate `ObjectStore`, and use it as the source in the `bootstrap` section
|
||||||
|
of the target cluster:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
[...]
|
||||||
|
spec:
|
||||||
|
[...]
|
||||||
|
bootstrap:
|
||||||
|
recovery:
|
||||||
|
source: source
|
||||||
|
externalClusters:
|
||||||
|
- name: source
|
||||||
|
plugin:
|
||||||
|
name: barman-cloud.cloudnative-pg.io
|
||||||
|
parameters:
|
||||||
|
barmanObjectName: cluster-example
|
||||||
|
serverName: cluster-example
|
||||||
|
[...]
|
||||||
|
```
|
||||||
|
|
||||||
|
The critical element here is the `externalClusters` section of the `Cluster`
|
||||||
|
resource, where the `plugin` stanza instructs CloudNativePG to use the Barman
|
||||||
|
Cloud Plugin to access the object store for recovery.
|
||||||
|
|
||||||
|
This same mechanism can be used for a variety of scenarios enabled by the
|
||||||
|
CloudNativePG API, including:
|
||||||
|
|
||||||
|
* **Full cluster recovery** from the latest backup
|
||||||
|
* **Point-in-Time Recovery (PITR)**
|
||||||
|
* Bootstrapping **replica clusters** in a distributed topology
|
||||||
|
|
||||||
|
:::tip
|
||||||
|
For complete instructions and advanced use cases, refer to the official
|
||||||
|
[Recovery documentation](https://cloudnative-pg.io/documentation/current/recovery/).
|
||||||
|
:::
|
||||||
37
web/versioned_docs/version-0.13.0/images.md
Normal file
37
web/versioned_docs/version-0.13.0/images.md
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 99
|
||||||
|
---
|
||||||
|
|
||||||
|
# Container Images
|
||||||
|
|
||||||
|
<!-- SPDX-License-Identifier: CC-BY-4.0 -->
|
||||||
|
|
||||||
|
The Barman Cloud Plugin is distributed using two container images:
|
||||||
|
|
||||||
|
- One for deploying the plugin components
|
||||||
|
- One for the sidecar that runs alongside each PostgreSQL instance in a
|
||||||
|
CloudNativePG `Cluster` using the plugin
|
||||||
|
|
||||||
|
## Plugin Container Image
|
||||||
|
|
||||||
|
The plugin image contains the logic required to operate the Barman Cloud Plugin
|
||||||
|
within your Kubernetes environment with CloudNativePG. It is published on the
|
||||||
|
GitHub Container Registry at `ghcr.io/cloudnative-pg/plugin-barman-cloud`.
|
||||||
|
|
||||||
|
This image is built from the
|
||||||
|
[`Dockerfile.plugin`](https://github.com/cloudnative-pg/plugin-barman-cloud/blob/main/containers/Dockerfile.plugin)
|
||||||
|
in the plugin repository.
|
||||||
|
|
||||||
|
## Sidecar Container Image
|
||||||
|
|
||||||
|
The sidecar image is used within each PostgreSQL pod in the cluster. It
|
||||||
|
includes the latest supported version of Barman Cloud and is responsible for
|
||||||
|
performing WAL archiving and backups on behalf of CloudNativePG.
|
||||||
|
|
||||||
|
It is available at `ghcr.io/cloudnative-pg/plugin-barman-cloud-sidecar` and is
|
||||||
|
built from the
|
||||||
|
[`Dockerfile.sidecar`](https://github.com/cloudnative-pg/plugin-barman-cloud/blob/main/containers/Dockerfile.sidecar).
|
||||||
|
|
||||||
|
These sidecar images are designed to work seamlessly with the
|
||||||
|
[`minimal` PostgreSQL container images](https://github.com/cloudnative-pg/postgres-containers?tab=readme-ov-file#minimal-images)
|
||||||
|
maintained by the CloudNativePG Community.
|
||||||
109
web/versioned_docs/version-0.13.0/installation.mdx
Normal file
109
web/versioned_docs/version-0.13.0/installation.mdx
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 20
|
||||||
|
---
|
||||||
|
|
||||||
|
# Installation
|
||||||
|
|
||||||
|
:::important
|
||||||
|
1. The plugin **must** be installed in the same namespace as the CloudNativePG
|
||||||
|
operator (typically `cnpg-system`).
|
||||||
|
|
||||||
|
2. Keep in mind that the operator's **listening namespaces** may differ from its
|
||||||
|
installation namespace. Double-check this to avoid configuration issues.
|
||||||
|
:::
|
||||||
|
|
||||||
|
## Verifying the Requirements
|
||||||
|
|
||||||
|
Before installing the plugin, make sure the [requirements](intro.md#requirements) are met.
|
||||||
|
|
||||||
|
### CloudNativePG Version
|
||||||
|
|
||||||
|
Ensure you're running a version of CloudNativePG that is compatible with the
|
||||||
|
plugin. If installed in the default `cnpg-system` namespace, you can verify the
|
||||||
|
version with:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
kubectl get deployment -n cnpg-system cnpg-controller-manager \
|
||||||
|
-o jsonpath="{.spec.template.spec.containers[*].image}"
|
||||||
|
```
|
||||||
|
|
||||||
|
Example output:
|
||||||
|
|
||||||
|
```output
|
||||||
|
ghcr.io/cloudnative-pg/cloudnative-pg:1.26.0
|
||||||
|
```
|
||||||
|
|
||||||
|
The version **must be 1.26 or newer**.
|
||||||
|
|
||||||
|
### cert-manager
|
||||||
|
|
||||||
|
Use the [cmctl](https://cert-manager.io/docs/reference/cmctl/#installation)
|
||||||
|
tool to confirm that `cert-manager` is installed and available:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cmctl check api
|
||||||
|
```
|
||||||
|
|
||||||
|
Example output:
|
||||||
|
|
||||||
|
```output
|
||||||
|
The cert-manager API is ready
|
||||||
|
```
|
||||||
|
|
||||||
|
Both checks are required before proceeding with the installation.
|
||||||
|
|
||||||
|
## Installing the Barman Cloud Plugin
|
||||||
|
|
||||||
|
import { InstallationSnippet } from '@site/src/components/Installation';
|
||||||
|
|
||||||
|
Install the plugin using `kubectl` by applying the manifest for the latest
|
||||||
|
release:
|
||||||
|
|
||||||
|
<InstallationSnippet />
|
||||||
|
|
||||||
|
Example output:
|
||||||
|
|
||||||
|
```output
|
||||||
|
customresourcedefinition.apiextensions.k8s.io/objectstores.barmancloud.cnpg.io created
|
||||||
|
serviceaccount/plugin-barman-cloud created
|
||||||
|
role.rbac.authorization.k8s.io/leader-election-role created
|
||||||
|
clusterrole.rbac.authorization.k8s.io/metrics-auth-role created
|
||||||
|
clusterrole.rbac.authorization.k8s.io/metrics-reader created
|
||||||
|
clusterrole.rbac.authorization.k8s.io/objectstore-editor-role created
|
||||||
|
clusterrole.rbac.authorization.k8s.io/objectstore-viewer-role created
|
||||||
|
clusterrole.rbac.authorization.k8s.io/plugin-barman-cloud created
|
||||||
|
rolebinding.rbac.authorization.k8s.io/leader-election-rolebinding created
|
||||||
|
clusterrolebinding.rbac.authorization.k8s.io/metrics-auth-rolebinding created
|
||||||
|
clusterrolebinding.rbac.authorization.k8s.io/plugin-barman-cloud-binding created
|
||||||
|
secret/plugin-barman-cloud-8tfddg42gf created
|
||||||
|
service/barman-cloud created
|
||||||
|
deployment.apps/barman-cloud configured
|
||||||
|
certificate.cert-manager.io/barman-cloud-client created
|
||||||
|
certificate.cert-manager.io/barman-cloud-server created
|
||||||
|
issuer.cert-manager.io/selfsigned-issuer created
|
||||||
|
```
|
||||||
|
|
||||||
|
Finally, check that the deployment is up and running:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
kubectl rollout status deployment \
|
||||||
|
-n cnpg-system barman-cloud
|
||||||
|
```
|
||||||
|
|
||||||
|
Example output:
|
||||||
|
|
||||||
|
```output
|
||||||
|
deployment "barman-cloud" successfully rolled out
|
||||||
|
```
|
||||||
|
|
||||||
|
This confirms that the plugin is deployed and ready to use.
|
||||||
|
|
||||||
|
## Testing the latest development snapshot
|
||||||
|
|
||||||
|
You can also test the latest development snapshot of the plugin with the
|
||||||
|
following command:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
kubectl apply -f \
|
||||||
|
https://raw.githubusercontent.com/cloudnative-pg/plugin-barman-cloud/refs/heads/main/manifest.yaml
|
||||||
|
```
|
||||||
86
web/versioned_docs/version-0.13.0/intro.md
Normal file
86
web/versioned_docs/version-0.13.0/intro.md
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 1
|
||||||
|
sidebar_label: "Introduction"
|
||||||
|
---
|
||||||
|
|
||||||
|
# Barman Cloud Plugin
|
||||||
|
|
||||||
|
<!-- SPDX-License-Identifier: CC-BY-4.0 -->
|
||||||
|
|
||||||
|
The **Barman Cloud Plugin** for [CloudNativePG](https://cloudnative-pg.io/)
|
||||||
|
enables online continuous physical backups of PostgreSQL clusters to object storage
|
||||||
|
using the `barman-cloud` suite from the [Barman](https://docs.pgbarman.org/release/latest/)
|
||||||
|
project.
|
||||||
|
|
||||||
|
:::important
|
||||||
|
If you plan to migrate your existing CloudNativePG cluster to the new
|
||||||
|
plugin-based approach using the Barman Cloud Plugin, see
|
||||||
|
["Migrating from Built-in CloudNativePG Backup"](migration.md)
|
||||||
|
for detailed instructions.
|
||||||
|
:::
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
Before using the Barman Cloud Plugin, ensure that the following components are
|
||||||
|
installed and properly configured:
|
||||||
|
|
||||||
|
- [CloudNativePG](https://cloudnative-pg.io) version 1.26 or later
|
||||||
|
|
||||||
|
- We strongly recommend version 1.27.0 or later, which includes improved
|
||||||
|
error handling and status reporting for the plugin.
|
||||||
|
- If you are running an earlier release, refer to the
|
||||||
|
[upgrade guide](https://cloudnative-pg.io/documentation/current/installation_upgrade).
|
||||||
|
|
||||||
|
- [cert-manager](https://cert-manager.io/)
|
||||||
|
|
||||||
|
- The recommended way to enable secure TLS communication between the plugin
|
||||||
|
and the operator.
|
||||||
|
- Alternatively, you can provide your own certificate bundles. See the
|
||||||
|
[CloudNativePG documentation on TLS configuration](https://cloudnative-pg.io/documentation/current/cnpg_i/#configuring-tls-certificates).
|
||||||
|
|
||||||
|
- [`kubectl-cnpg`](https://cloudnative-pg.io/documentation/current/kubectl-plugin/)
|
||||||
|
plugin (optional but recommended)
|
||||||
|
|
||||||
|
- Simplifies debugging and monitoring with additional status and inspection
|
||||||
|
commands.
|
||||||
|
- Multiple installation options are available in the
|
||||||
|
[installation guide](https://cloudnative-pg.io/documentation/current/kubectl-plugin/#install).
|
||||||
|
|
||||||
|
## Key Features
|
||||||
|
|
||||||
|
This plugin provides the following capabilities:
|
||||||
|
|
||||||
|
- Physical online backup of the data directory
|
||||||
|
- Physical restore of the data directory
|
||||||
|
- Write-Ahead Log (WAL) archiving
|
||||||
|
- WAL restore
|
||||||
|
- Full cluster recovery
|
||||||
|
- Point-in-Time Recovery (PITR)
|
||||||
|
- Seamless integration with replica clusters for bootstrap and WAL restore from archive
|
||||||
|
|
||||||
|
:::important
|
||||||
|
The Barman Cloud Plugin is designed to **replace the in-tree object storage support**
|
||||||
|
previously provided via the `.spec.backup.barmanObjectStore` section in the
|
||||||
|
`Cluster` resource.
|
||||||
|
Backups created using the in-tree approach are fully supported and compatible
|
||||||
|
with this plugin.
|
||||||
|
:::
|
||||||
|
|
||||||
|
## Supported Object Storage Providers
|
||||||
|
|
||||||
|
The plugin works with all storage backends supported by `barman-cloud`, including:
|
||||||
|
|
||||||
|
- **Amazon S3**
|
||||||
|
- **Google Cloud Storage**
|
||||||
|
- **Microsoft Azure Blob Storage**
|
||||||
|
|
||||||
|
In addition, the following S3-compatible and simulator solutions have been
|
||||||
|
tested and verified:
|
||||||
|
|
||||||
|
- [MinIO](https://min.io/) – An S3-compatible storage solution
|
||||||
|
- [Azurite](https://github.com/Azure/Azurite) – A simulator for Azure Blob Storage
|
||||||
|
- [fake-gcs-server](https://github.com/fsouza/fake-gcs-server) – A simulator for Google Cloud Storage
|
||||||
|
|
||||||
|
:::tip
|
||||||
|
For more details, refer to [Object Store Providers](object_stores.md).
|
||||||
|
:::
|
||||||
274
web/versioned_docs/version-0.13.0/migration.md
Normal file
274
web/versioned_docs/version-0.13.0/migration.md
Normal file
@ -0,0 +1,274 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 40
|
||||||
|
---
|
||||||
|
|
||||||
|
# Migrating from Built-in CloudNativePG Backup
|
||||||
|
|
||||||
|
<!-- SPDX-License-Identifier: CC-BY-4.0 -->
|
||||||
|
|
||||||
|
The in-tree support for Barman Cloud in CloudNativePG is **deprecated starting
|
||||||
|
from version 1.26** and will be removed in a future release.
|
||||||
|
|
||||||
|
If you're currently relying on the built-in Barman Cloud integration, you can
|
||||||
|
migrate seamlessly to the new **plugin-based architecture** using the Barman
|
||||||
|
Cloud Plugin, without data loss. Follow these steps:
|
||||||
|
|
||||||
|
- [Install the Barman Cloud Plugin](installation.mdx)
|
||||||
|
- Create an `ObjectStore` resource by translating the contents of the
|
||||||
|
`.spec.backup.barmanObjectStore` section from your existing `Cluster`
|
||||||
|
definition
|
||||||
|
- Modify the `Cluster` resource in a single atomic change to switch from
|
||||||
|
in-tree backup to the plugin
|
||||||
|
- Update any `ScheduledBackup` resources to use the plugin
|
||||||
|
- Update the `externalClusters` configuration, where applicable
|
||||||
|
|
||||||
|
:::tip
|
||||||
|
For a working example, refer to [this commit](https://github.com/cloudnative-pg/cnpg-playground/commit/596f30e252896edf8f734991c3538df87630f6f7)
|
||||||
|
from the [CloudNativePG Playground project](https://github.com/cloudnative-pg/cnpg-playground),
|
||||||
|
which demonstrates a full migration.
|
||||||
|
:::
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Step 1: Define the `ObjectStore`
|
||||||
|
|
||||||
|
Begin by creating an `ObjectStore` resource in the same namespace as your
|
||||||
|
PostgreSQL `Cluster`.
|
||||||
|
|
||||||
|
There is a **direct mapping** between the `.spec.backup.barmanObjectStore`
|
||||||
|
section in CloudNativePG and the `.spec.configuration` field in the
|
||||||
|
`ObjectStore` CR. The conversion is mostly mechanical, with one key difference:
|
||||||
|
|
||||||
|
:::warning
|
||||||
|
In the plugin architecture, retention policies are defined as part of the `ObjectStore`.
|
||||||
|
In contrast, the in-tree implementation defined them at the `Cluster` level.
|
||||||
|
:::
|
||||||
|
|
||||||
|
If your `Cluster` used `.spec.backup.retentionPolicy`, move that configuration
|
||||||
|
to `.spec.retentionPolicy` in the `ObjectStore`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Example
|
||||||
|
|
||||||
|
Here’s an excerpt from a traditional in-tree CloudNativePG backup configuration
|
||||||
|
taken from the CloudNativePG Playground project:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: postgresql.cnpg.io/v1
|
||||||
|
kind: Cluster
|
||||||
|
metadata:
|
||||||
|
name: pg-eu
|
||||||
|
spec:
|
||||||
|
# [...]
|
||||||
|
backup:
|
||||||
|
barmanObjectStore:
|
||||||
|
destinationPath: s3://backups/
|
||||||
|
endpointURL: http://minio-eu:9000
|
||||||
|
s3Credentials:
|
||||||
|
accessKeyId:
|
||||||
|
name: minio-eu
|
||||||
|
key: ACCESS_KEY_ID
|
||||||
|
secretAccessKey:
|
||||||
|
name: minio-eu
|
||||||
|
key: ACCESS_SECRET_KEY
|
||||||
|
wal:
|
||||||
|
compression: gzip
|
||||||
|
```
|
||||||
|
|
||||||
|
This configuration translates to the following `ObjectStore` resource for the
|
||||||
|
plugin:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: barmancloud.cnpg.io/v1
|
||||||
|
kind: ObjectStore
|
||||||
|
metadata:
|
||||||
|
name: minio-eu
|
||||||
|
spec:
|
||||||
|
configuration:
|
||||||
|
destinationPath: s3://backups/
|
||||||
|
endpointURL: http://minio-eu:9000
|
||||||
|
s3Credentials:
|
||||||
|
accessKeyId:
|
||||||
|
name: minio-eu
|
||||||
|
key: ACCESS_KEY_ID
|
||||||
|
secretAccessKey:
|
||||||
|
name: minio-eu
|
||||||
|
key: ACCESS_SECRET_KEY
|
||||||
|
wal:
|
||||||
|
compression: gzip
|
||||||
|
```
|
||||||
|
|
||||||
|
As you can see, the contents of `barmanObjectStore` have been copied directly
|
||||||
|
under the `configuration` field of the `ObjectStore` resource, using the same
|
||||||
|
secret references.
|
||||||
|
|
||||||
|
## Step 2: Update the `Cluster` for plugin WAL archiving
|
||||||
|
|
||||||
|
Once the `ObjectStore` resource is in place, update the `Cluster` resource as
|
||||||
|
follows in a single atomic change:
|
||||||
|
|
||||||
|
- Remove the `.spec.backup.barmanObjectStore` section
|
||||||
|
- Remove `.spec.backup.retentionPolicy` if it was defined (as it is now in the
|
||||||
|
`ObjectStore`)
|
||||||
|
- Remove the entire `spec.backup` section if it is now empty
|
||||||
|
- Add `barman-cloud.cloudnative-pg.io` to the `plugins` list, as described in
|
||||||
|
[Configuring WAL archiving](usage.md#configuring-wal-archiving)
|
||||||
|
|
||||||
|
This will trigger a rolling update of the `Cluster`, switching continuous
|
||||||
|
backup from the in-tree implementation to the plugin-based approach.
|
||||||
|
|
||||||
|
### Example
|
||||||
|
|
||||||
|
The updated `pg-eu` cluster will have this configuration instead of the
|
||||||
|
previous `backup` section:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
plugins:
|
||||||
|
- name: barman-cloud.cloudnative-pg.io
|
||||||
|
isWALArchiver: true
|
||||||
|
parameters:
|
||||||
|
barmanObjectName: minio-eu
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Step 3: Update the `ScheduledBackup`
|
||||||
|
|
||||||
|
After switching the `Cluster` to use the plugin, update your `ScheduledBackup`
|
||||||
|
resources to match.
|
||||||
|
|
||||||
|
Set the backup `method` to `plugin` and reference the plugin name via
|
||||||
|
`pluginConfiguration`, as shown in ["Performing a base backup"](usage.md#performing-a-base-backup).
|
||||||
|
|
||||||
|
### Example
|
||||||
|
|
||||||
|
Original in-tree `ScheduledBackup`:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: postgresql.cnpg.io/v1
|
||||||
|
kind: ScheduledBackup
|
||||||
|
metadata:
|
||||||
|
name: pg-eu-backup
|
||||||
|
spec:
|
||||||
|
cluster:
|
||||||
|
name: pg-eu
|
||||||
|
schedule: '0 0 0 * * *'
|
||||||
|
backupOwnerReference: self
|
||||||
|
```
|
||||||
|
|
||||||
|
Updated version using the plugin:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: postgresql.cnpg.io/v1
|
||||||
|
kind: ScheduledBackup
|
||||||
|
metadata:
|
||||||
|
name: pg-eu-backup
|
||||||
|
spec:
|
||||||
|
cluster:
|
||||||
|
name: pg-eu
|
||||||
|
schedule: '0 0 0 * * *'
|
||||||
|
backupOwnerReference: self
|
||||||
|
method: plugin
|
||||||
|
pluginConfiguration:
|
||||||
|
name: barman-cloud.cloudnative-pg.io
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Step 4: Update the `externalClusters` configuration
|
||||||
|
|
||||||
|
If your `Cluster` relies on one or more external clusters that use the in-tree
|
||||||
|
Barman Cloud integration, you need to update those configurations to use the
|
||||||
|
plugin-based architecture.
|
||||||
|
|
||||||
|
When a replica cluster fetches WAL files or base backups from an external
|
||||||
|
source that used the built-in backup method, follow these steps:
|
||||||
|
|
||||||
|
1. Create a corresponding `ObjectStore` resource for the external cluster, as
|
||||||
|
shown in [Step 1](#step-1-define-the-objectstore)
|
||||||
|
2. Update the `externalClusters` section of your replica cluster to use the
|
||||||
|
plugin instead of the in-tree `barmanObjectStore` field
|
||||||
|
|
||||||
|
### Example
|
||||||
|
|
||||||
|
Consider the original configuration using in-tree Barman Cloud:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: postgresql.cnpg.io/v1
|
||||||
|
kind: Cluster
|
||||||
|
metadata:
|
||||||
|
name: pg-us
|
||||||
|
spec:
|
||||||
|
# [...]
|
||||||
|
externalClusters:
|
||||||
|
- name: pg-eu
|
||||||
|
barmanObjectStore:
|
||||||
|
destinationPath: s3://backups/
|
||||||
|
endpointURL: http://minio-eu:9000
|
||||||
|
serverName: pg-eu
|
||||||
|
s3Credentials:
|
||||||
|
accessKeyId:
|
||||||
|
name: minio-eu
|
||||||
|
key: ACCESS_KEY_ID
|
||||||
|
secretAccessKey:
|
||||||
|
name: minio-eu
|
||||||
|
key: ACCESS_SECRET_KEY
|
||||||
|
wal:
|
||||||
|
compression: gzip
|
||||||
|
```
|
||||||
|
|
||||||
|
Create the `ObjectStore` resource for the external cluster:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: barmancloud.cnpg.io/v1
|
||||||
|
kind: ObjectStore
|
||||||
|
metadata:
|
||||||
|
name: minio-eu
|
||||||
|
spec:
|
||||||
|
configuration:
|
||||||
|
destinationPath: s3://backups/
|
||||||
|
endpointURL: http://minio-eu:9000
|
||||||
|
s3Credentials:
|
||||||
|
accessKeyId:
|
||||||
|
name: minio-eu
|
||||||
|
key: ACCESS_KEY_ID
|
||||||
|
secretAccessKey:
|
||||||
|
name: minio-eu
|
||||||
|
key: ACCESS_SECRET_KEY
|
||||||
|
wal:
|
||||||
|
compression: gzip
|
||||||
|
```
|
||||||
|
|
||||||
|
Update the external cluster configuration to use the plugin:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: postgresql.cnpg.io/v1
|
||||||
|
kind: Cluster
|
||||||
|
metadata:
|
||||||
|
name: pg-us
|
||||||
|
spec:
|
||||||
|
# [...]
|
||||||
|
externalClusters:
|
||||||
|
- name: pg-eu
|
||||||
|
plugin:
|
||||||
|
name: barman-cloud.cloudnative-pg.io
|
||||||
|
parameters:
|
||||||
|
barmanObjectName: minio-eu
|
||||||
|
serverName: pg-eu
|
||||||
|
```
|
||||||
|
|
||||||
|
## Step 5: Verify your metrics
|
||||||
|
|
||||||
|
When migrating from the in-core solution to the plugin-based approach, you need
|
||||||
|
to monitor a different set of metrics, as described in the
|
||||||
|
["Observability"](observability.md) section.
|
||||||
|
|
||||||
|
The table below summarizes the name changes between the old in-core metrics and
|
||||||
|
the new plugin-based ones:
|
||||||
|
|
||||||
|
| Old metric name | New metric name |
|
||||||
|
| ------------------------------------------------ | ---------------------------------------------------------------- |
|
||||||
|
| `cnpg_collector_last_failed_backup_timestamp` | `barman_cloud_cloudnative_pg_io_last_failed_backup_timestamp` |
|
||||||
|
| `cnpg_collector_last_available_backup_timestamp` | `barman_cloud_cloudnative_pg_io_last_available_backup_timestamp` |
|
||||||
|
| `cnpg_collector_first_recoverability_point` | `barman_cloud_cloudnative_pg_io_first_recoverability_point` |
|
||||||
126
web/versioned_docs/version-0.13.0/misc.md
Normal file
126
web/versioned_docs/version-0.13.0/misc.md
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 90
|
||||||
|
---
|
||||||
|
|
||||||
|
# Miscellaneous
|
||||||
|
|
||||||
|
<!-- SPDX-License-Identifier: CC-BY-4.0 -->
|
||||||
|
|
||||||
|
## Backup Object Tagging
|
||||||
|
|
||||||
|
You can attach key-value metadata tags to backup artifacts—such as base
|
||||||
|
backups, WAL files, and history files—via the `.spec.configuration` section of
|
||||||
|
the `ObjectStore` resource.
|
||||||
|
|
||||||
|
- `tags`: applied to base backups and WAL files
|
||||||
|
- `historyTags`: applied to history files only
|
||||||
|
|
||||||
|
### Example
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: barmancloud.cnpg.io/v1
|
||||||
|
kind: ObjectStore
|
||||||
|
metadata:
|
||||||
|
name: my-store
|
||||||
|
spec:
|
||||||
|
configuration:
|
||||||
|
[...]
|
||||||
|
tags:
|
||||||
|
backupRetentionPolicy: "expire"
|
||||||
|
historyTags:
|
||||||
|
backupRetentionPolicy: "keep"
|
||||||
|
[...]
|
||||||
|
```
|
||||||
|
|
||||||
|
## Extra Options for Backup, WAL Archiving, and Restore
|
||||||
|
|
||||||
|
You can pass additional command-line arguments to the underlying
|
||||||
|
`barman-cloud-*` commands using the corresponding fields in the `ObjectStore`
|
||||||
|
configuration.
|
||||||
|
|
||||||
|
- `.spec.configuration.data.additionalCommandArgs`: for `barman-cloud-backup`
|
||||||
|
- `.spec.configuration.data.restoreAdditionalCommandArgs`: for `barman-cloud-restore`
|
||||||
|
- `.spec.configuration.wal.archiveAdditionalCommandArgs`: for `barman-cloud-wal-archive`
|
||||||
|
- `.spec.configuration.wal.restoreAdditionalCommandArgs`: for `barman-cloud-wal-restore`
|
||||||
|
|
||||||
|
Each field accepts a list of string arguments. If an argument conflicts with
|
||||||
|
one already set by the plugin, the user-provided value will be ignored. These
|
||||||
|
fields are intended to pass options the plugin does not configure automatically.
|
||||||
|
|
||||||
|
### Example: Extra Backup Options
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
kind: ObjectStore
|
||||||
|
metadata:
|
||||||
|
name: my-store
|
||||||
|
spec:
|
||||||
|
configuration:
|
||||||
|
data:
|
||||||
|
additionalCommandArgs:
|
||||||
|
- "--min-chunk-size=5MB"
|
||||||
|
- "--read-timeout=60"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Example: Extra Restore Options
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
kind: ObjectStore
|
||||||
|
metadata:
|
||||||
|
name: my-store
|
||||||
|
spec:
|
||||||
|
configuration:
|
||||||
|
data:
|
||||||
|
restoreAdditionalCommandArgs:
|
||||||
|
- "--read-timeout=900"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Example: Extra WAL Archive Options
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
kind: ObjectStore
|
||||||
|
metadata:
|
||||||
|
name: my-store
|
||||||
|
spec:
|
||||||
|
configuration:
|
||||||
|
wal:
|
||||||
|
archiveAdditionalCommandArgs:
|
||||||
|
- "--max-concurrency=1"
|
||||||
|
- "--read-timeout=60"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Example: Extra WAL Restore Options
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
kind: ObjectStore
|
||||||
|
metadata:
|
||||||
|
name: my-store
|
||||||
|
spec:
|
||||||
|
configuration:
|
||||||
|
wal:
|
||||||
|
restoreAdditionalCommandArgs:
|
||||||
|
- "--read-timeout=60"
|
||||||
|
```
|
||||||
|
|
||||||
|
For a complete list of supported options, refer to the
|
||||||
|
[official Barman Cloud documentation](https://docs.pgbarman.org/release/latest/).
|
||||||
|
|
||||||
|
## Enable the pprof debug server for the sidecar
|
||||||
|
|
||||||
|
You can enable the instance sidecar's pprof debug HTTP server by adding the `--pprof-server=<address>` flag to the container's
|
||||||
|
arguments via `.spec.instanceSidecarConfiguration.additionalContainerArgs`.
|
||||||
|
|
||||||
|
Pass a bind address in the form `<host>:<port>` (for example, `0.0.0.0:6061`).
|
||||||
|
An empty value disables the server (disabled by default).
|
||||||
|
|
||||||
|
### Example
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: barmancloud.cnpg.io/v1
|
||||||
|
kind: ObjectStore
|
||||||
|
metadata:
|
||||||
|
name: my-store
|
||||||
|
spec:
|
||||||
|
instanceSidecarConfiguration:
|
||||||
|
additionalContainerArgs:
|
||||||
|
- "--pprof-server=0.0.0.0:6061"
|
||||||
|
```
|
||||||
497
web/versioned_docs/version-0.13.0/object_stores.md
Normal file
497
web/versioned_docs/version-0.13.0/object_stores.md
Normal file
@ -0,0 +1,497 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 50
|
||||||
|
---
|
||||||
|
|
||||||
|
# Object Store Providers
|
||||||
|
|
||||||
|
<!-- SPDX-License-Identifier: CC-BY-4.0 -->
|
||||||
|
|
||||||
|
The Barman Cloud Plugin enables the storage of PostgreSQL cluster backup files
|
||||||
|
in any object storage service supported by the
|
||||||
|
[Barman Cloud infrastructure](https://docs.pgbarman.org/release/latest/).
|
||||||
|
|
||||||
|
Currently, Barman Cloud supports the following providers:
|
||||||
|
|
||||||
|
- [Amazon S3](#aws-s3)
|
||||||
|
- [Microsoft Azure Blob Storage](#azure-blob-storage)
|
||||||
|
- [Google Cloud Storage](#google-cloud-storage)
|
||||||
|
|
||||||
|
You may also use any S3- or Azure-compatible implementation of the above
|
||||||
|
services.
|
||||||
|
|
||||||
|
To configure object storage with Barman Cloud, you must define an
|
||||||
|
[`ObjectStore` object](plugin-barman-cloud.v1.md#objectstore), which
|
||||||
|
establishes the connection between your PostgreSQL cluster and the object
|
||||||
|
storage backend.
|
||||||
|
|
||||||
|
Configuration details — particularly around authentication — will vary depending on
|
||||||
|
the specific object storage provider you are using.
|
||||||
|
|
||||||
|
The following sections detail the setup for each.
|
||||||
|
|
||||||
|
:::note Authentication Methods
|
||||||
|
The Barman Cloud Plugin does not independently test all authentication methods
|
||||||
|
supported by `barman-cloud`. The plugin's responsibility is limited to passing
|
||||||
|
the provided credentials to `barman-cloud`, which then handles authentication
|
||||||
|
according to its own implementation. Users should refer to the
|
||||||
|
[Barman Cloud documentation](https://docs.pgbarman.org/release/latest/) to
|
||||||
|
verify that their chosen authentication method is supported and properly
|
||||||
|
configured.
|
||||||
|
:::
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## AWS S3
|
||||||
|
|
||||||
|
[AWS Simple Storage Service (S3)](https://aws.amazon.com/s3/) is one of the
|
||||||
|
most widely adopted object storage solutions.
|
||||||
|
|
||||||
|
The Barman Cloud plugin for CloudNativePG integrates with S3 through two
|
||||||
|
primary authentication mechanisms:
|
||||||
|
|
||||||
|
- [IAM Roles for Service Accounts (IRSA)](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html) —
|
||||||
|
recommended for clusters running on EKS
|
||||||
|
- Access keys — using `ACCESS_KEY_ID` and `ACCESS_SECRET_KEY` credentials
|
||||||
|
|
||||||
|
### Access Keys
|
||||||
|
|
||||||
|
To authenticate using access keys, you’ll need:
|
||||||
|
|
||||||
|
- `ACCESS_KEY_ID`: the public key used to authenticate to S3
|
||||||
|
- `ACCESS_SECRET_KEY`: the corresponding secret key
|
||||||
|
- `ACCESS_SESSION_TOKEN`: (optional) a temporary session token, if required
|
||||||
|
|
||||||
|
These credentials must be stored securely in a Kubernetes secret:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
kubectl create secret generic aws-creds \
|
||||||
|
--from-literal=ACCESS_KEY_ID=<access key here> \
|
||||||
|
--from-literal=ACCESS_SECRET_KEY=<secret key here>
|
||||||
|
# --from-literal=ACCESS_SESSION_TOKEN=<session token here> # if required
|
||||||
|
```
|
||||||
|
|
||||||
|
The credentials will be encrypted at rest if your Kubernetes environment
|
||||||
|
supports it.
|
||||||
|
|
||||||
|
You can then reference the secret in your `ObjectStore` definition:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: barmancloud.cnpg.io/v1
|
||||||
|
kind: ObjectStore
|
||||||
|
metadata:
|
||||||
|
name: aws-store
|
||||||
|
spec:
|
||||||
|
configuration:
|
||||||
|
destinationPath: "s3://BUCKET_NAME/path/to/folder"
|
||||||
|
s3Credentials:
|
||||||
|
accessKeyId:
|
||||||
|
name: aws-creds
|
||||||
|
key: ACCESS_KEY_ID
|
||||||
|
secretAccessKey:
|
||||||
|
name: aws-creds
|
||||||
|
key: ACCESS_SECRET_KEY
|
||||||
|
[...]
|
||||||
|
```
|
||||||
|
|
||||||
|
### IAM Role for Service Account (IRSA)
|
||||||
|
|
||||||
|
To use IRSA with EKS, configure the service account of the PostgreSQL cluster
|
||||||
|
with the appropriate annotation:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: postgresql.cnpg.io/v1
|
||||||
|
kind: Cluster
|
||||||
|
metadata:
|
||||||
|
[...]
|
||||||
|
spec:
|
||||||
|
serviceAccountTemplate:
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
eks.amazonaws.com/role-arn: arn:[...]
|
||||||
|
[...]
|
||||||
|
```
|
||||||
|
|
||||||
|
### S3 Lifecycle Policy
|
||||||
|
|
||||||
|
Barman Cloud uploads backup files to S3 but does not modify them afterward.
|
||||||
|
To enhance data durability and protect against accidental or malicious loss,
|
||||||
|
it's recommended to implement the following best practices:
|
||||||
|
|
||||||
|
- Enable object versioning
|
||||||
|
- Enable object locking to prevent objects from being deleted or overwritten
|
||||||
|
for a defined period or indefinitely (this provides an additional layer of
|
||||||
|
protection against accidental deletion and ransomware attacks)
|
||||||
|
- Set lifecycle rules to expire current versions a few days after your Barman
|
||||||
|
retention window
|
||||||
|
- Expire non-current versions after a longer period
|
||||||
|
|
||||||
|
These strategies help you safeguard backups without requiring broad delete
|
||||||
|
permissions, ensuring both security and compliance with minimal operational
|
||||||
|
overhead.
|
||||||
|
|
||||||
|
### S3-Compatible Storage Providers
|
||||||
|
|
||||||
|
You can use S3-compatible services like **MinIO**, **Linode (Akamai) Object Storage**,
|
||||||
|
or **DigitalOcean Spaces** by specifying a custom `endpointURL`.
|
||||||
|
|
||||||
|
Example with Linode (Akamai) Object Storage (`us-east1`):
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: barmancloud.cnpg.io/v1
|
||||||
|
kind: ObjectStore
|
||||||
|
metadata:
|
||||||
|
name: linode-store
|
||||||
|
spec:
|
||||||
|
configuration:
|
||||||
|
destinationPath: "s3://BUCKET_NAME/"
|
||||||
|
endpointURL: "https://us-east1.linodeobjects.com"
|
||||||
|
s3Credentials:
|
||||||
|
[...]
|
||||||
|
[...]
|
||||||
|
```
|
||||||
|
|
||||||
|
Recent changes to the [boto3 implementation](https://github.com/boto/boto3/issues/4392)
|
||||||
|
of [Amazon S3 Data Integrity Protections](https://docs.aws.amazon.com/sdkref/latest/guide/feature-dataintegrity.html)
|
||||||
|
may lead to the `x-amz-content-sha256` error when using the Barman Cloud
|
||||||
|
Plugin.
|
||||||
|
|
||||||
|
If you encounter this issue (see [GitHub issue #393](https://github.com/cloudnative-pg/plugin-barman-cloud/issues/393)),
|
||||||
|
you can apply the following workaround by setting specific environment
|
||||||
|
variables in the `ObjectStore` resource:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: barmancloud.cnpg.io/v1
|
||||||
|
kind: ObjectStore
|
||||||
|
metadata:
|
||||||
|
name: linode-store
|
||||||
|
spec:
|
||||||
|
instanceSidecarConfiguration:
|
||||||
|
env:
|
||||||
|
- name: AWS_REQUEST_CHECKSUM_CALCULATION
|
||||||
|
value: when_required
|
||||||
|
- name: AWS_RESPONSE_CHECKSUM_VALIDATION
|
||||||
|
value: when_required
|
||||||
|
[...]
|
||||||
|
```
|
||||||
|
|
||||||
|
These settings ensure that checksum calculations and validations are only
|
||||||
|
applied when explicitly required, avoiding compatibility issues with certain
|
||||||
|
S3-compatible storage providers.
|
||||||
|
|
||||||
|
Example with DigitalOcean Spaces (SFO3, path-style):
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: barmancloud.cnpg.io/v1
|
||||||
|
kind: ObjectStore
|
||||||
|
metadata:
|
||||||
|
name: digitalocean-store
|
||||||
|
spec:
|
||||||
|
configuration:
|
||||||
|
destinationPath: "s3://BUCKET_NAME/path/to/folder"
|
||||||
|
endpointURL: "https://sfo3.digitaloceanspaces.com"
|
||||||
|
s3Credentials:
|
||||||
|
[...]
|
||||||
|
[...]
|
||||||
|
```
|
||||||
|
|
||||||
|
### Using Object Storage with a Private CA
|
||||||
|
|
||||||
|
For object storage services (e.g., MinIO) that use HTTPS with certificates
|
||||||
|
signed by a private CA, set the `endpointCA` field in the `ObjectStore`
|
||||||
|
definition. Unless you already have it, create a Kubernetes `Secret` with the
|
||||||
|
CA bundle:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
kubectl create secret generic my-ca-secret --from-file=ca.crt
|
||||||
|
```
|
||||||
|
|
||||||
|
Then reference it:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: barmancloud.cnpg.io/v1
|
||||||
|
kind: ObjectStore
|
||||||
|
metadata:
|
||||||
|
name: minio-store
|
||||||
|
spec:
|
||||||
|
configuration:
|
||||||
|
endpointURL: <myEndpointURL>
|
||||||
|
endpointCA:
|
||||||
|
name: my-ca-secret
|
||||||
|
key: ca.crt
|
||||||
|
[...]
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- TODO: does this also apply to the plugin? -->
|
||||||
|
:::note
|
||||||
|
If you want `ConfigMaps` and `Secrets` to be **automatically** reloaded by
|
||||||
|
instances, you can add a label with the key `cnpg.io/reload` to the
|
||||||
|
`Secrets`/`ConfigMaps`. Otherwise, you will have to reload the instances using the
|
||||||
|
`kubectl cnpg reload` subcommand.
|
||||||
|
:::
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Azure Blob Storage
|
||||||
|
|
||||||
|
[Azure Blob Storage](https://azure.microsoft.com/en-us/services/storage/blobs/)
|
||||||
|
is Microsoft’s cloud-based object storage solution.
|
||||||
|
|
||||||
|
Barman Cloud supports the following authentication methods:
|
||||||
|
|
||||||
|
- [Connection String](https://learn.microsoft.com/en-us/azure/storage/common/storage-configure-connection-string)
|
||||||
|
- Storage Account Name + [Storage Account Access Key](https://learn.microsoft.com/en-us/azure/storage/common/storage-account-keys-manage)
|
||||||
|
- Storage Account Name + [Storage Account SAS Token](https://learn.microsoft.com/en-us/azure/storage/blobs/sas-service-create)
|
||||||
|
- [Azure AD Managed Identity](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/overview)
|
||||||
|
- [Default Azure Credentials](https://learn.microsoft.com/en-us/dotnet/api/azure.identity.defaultazurecredential?view=azure-dotnet)
|
||||||
|
|
||||||
|
### Azure AD Managed Identity
|
||||||
|
|
||||||
|
This method avoids storing credentials in Kubernetes by enabling the
|
||||||
|
usage of [Azure Managed Identities](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/overview) authentication mechanism.
|
||||||
|
This can be enabled by setting the `inheritFromAzureAD` option to `true`.
|
||||||
|
Managed Identity can be configured for the AKS Cluster by following
|
||||||
|
the [Azure documentation](https://learn.microsoft.com/en-us/azure/aks/use-managed-identity?pivots=system-assigned).
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: barmancloud.cnpg.io/v1
|
||||||
|
kind: ObjectStore
|
||||||
|
metadata:
|
||||||
|
name: azure-store
|
||||||
|
spec:
|
||||||
|
configuration:
|
||||||
|
destinationPath: "<destination path here>"
|
||||||
|
azureCredentials:
|
||||||
|
inheritFromAzureAD: true
|
||||||
|
[...]
|
||||||
|
```
|
||||||
|
|
||||||
|
### Default Azure Credentials
|
||||||
|
|
||||||
|
The `useDefaultAzureCredentials` option enables the default Azure credentials
|
||||||
|
flow, which uses [`DefaultAzureCredential`](https://learn.microsoft.com/en-us/python/api/azure-identity/azure.identity.defaultazurecredential)
|
||||||
|
to automatically discover and use available credentials in the following order:
|
||||||
|
|
||||||
|
1. **Environment Variables** — `AZURE_CLIENT_ID`, `AZURE_CLIENT_SECRET`, and `AZURE_TENANT_ID` for Service Principal authentication
|
||||||
|
2. **Managed Identity** — Uses the managed identity assigned to the pod
|
||||||
|
3. **Azure CLI** — Uses credentials from the Azure CLI if available
|
||||||
|
4. **Azure PowerShell** — Uses credentials from Azure PowerShell if available
|
||||||
|
|
||||||
|
This approach is particularly useful for getting started with development and testing; it allows
|
||||||
|
the SDK to attempt multiple authentication mechanisms seamlessly across different environments.
|
||||||
|
However, this is not recommended for production. Please refer to the
|
||||||
|
[official Azure guidance](https://learn.microsoft.com/en-us/dotnet/azure/sdk/authentication/credential-chains?tabs=dac#usage-guidance-for-defaultazurecredential)
|
||||||
|
for a comprehensive understanding of `DefaultAzureCredential`.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: barmancloud.cnpg.io/v1
|
||||||
|
kind: ObjectStore
|
||||||
|
metadata:
|
||||||
|
name: azure-store
|
||||||
|
spec:
|
||||||
|
configuration:
|
||||||
|
destinationPath: "<destination path here>"
|
||||||
|
azureCredentials:
|
||||||
|
useDefaultAzureCredentials: true
|
||||||
|
[...]
|
||||||
|
```
|
||||||
|
|
||||||
|
### Access Key, SAS Token, or Connection String
|
||||||
|
|
||||||
|
Store credentials in a Kubernetes secret:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
kubectl create secret generic azure-creds \
|
||||||
|
--from-literal=AZURE_STORAGE_ACCOUNT=<storage account name> \
|
||||||
|
--from-literal=AZURE_STORAGE_KEY=<storage account key> \
|
||||||
|
--from-literal=AZURE_STORAGE_SAS_TOKEN=<SAS token> \
|
||||||
|
--from-literal=AZURE_STORAGE_CONNECTION_STRING=<connection string>
|
||||||
|
```
|
||||||
|
|
||||||
|
Then reference the required keys in your `ObjectStore`:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: barmancloud.cnpg.io/v1
|
||||||
|
kind: ObjectStore
|
||||||
|
metadata:
|
||||||
|
name: azure-store
|
||||||
|
spec:
|
||||||
|
configuration:
|
||||||
|
destinationPath: "<destination path here>"
|
||||||
|
azureCredentials:
|
||||||
|
connectionString:
|
||||||
|
name: azure-creds
|
||||||
|
key: AZURE_CONNECTION_STRING
|
||||||
|
storageAccount:
|
||||||
|
name: azure-creds
|
||||||
|
key: AZURE_STORAGE_ACCOUNT
|
||||||
|
storageKey:
|
||||||
|
name: azure-creds
|
||||||
|
key: AZURE_STORAGE_KEY
|
||||||
|
storageSasToken:
|
||||||
|
name: azure-creds
|
||||||
|
key: AZURE_STORAGE_SAS_TOKEN
|
||||||
|
[...]
|
||||||
|
```
|
||||||
|
|
||||||
|
For Azure Blob, the destination path format is:
|
||||||
|
|
||||||
|
```
|
||||||
|
<http|https>://<account-name>.<service-name>.core.windows.net/<container>/<blob>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Azure-Compatible Providers
|
||||||
|
|
||||||
|
If you're using a different implementation (e.g., Azurite or emulator):
|
||||||
|
|
||||||
|
```
|
||||||
|
<http|https>://<local-machine-address>:<port>/<account-name>/<container>/<blob>
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Google Cloud Storage
|
||||||
|
|
||||||
|
[Google Cloud Storage](https://cloud.google.com/storage/) is supported with two
|
||||||
|
authentication modes:
|
||||||
|
|
||||||
|
- **GKE Workload Identity** (recommended inside Google Kubernetes Engine)
|
||||||
|
- **Service Account JSON key** via the `GOOGLE_APPLICATION_CREDENTIALS` environment variable
|
||||||
|
|
||||||
|
### GKE Workload Identity
|
||||||
|
|
||||||
|
Use the [Workload Identity authentication](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity)
|
||||||
|
when running in GKE:
|
||||||
|
|
||||||
|
1. Set `googleCredentials.gkeEnvironment` to `true` in the `ObjectStore`
|
||||||
|
resource
|
||||||
|
2. Annotate the `serviceAccountTemplate` in the `Cluster` resource with the GCP
|
||||||
|
service account
|
||||||
|
|
||||||
|
For example, in the `ObjectStore` resource:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: barmancloud.cnpg.io/v1
|
||||||
|
kind: ObjectStore
|
||||||
|
metadata:
|
||||||
|
name: google-store
|
||||||
|
spec:
|
||||||
|
configuration:
|
||||||
|
destinationPath: "gs://<bucket>/<folder>"
|
||||||
|
googleCredentials:
|
||||||
|
gkeEnvironment: true
|
||||||
|
```
|
||||||
|
|
||||||
|
And in the `Cluster` resource:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: postgresql.cnpg.io/v1
|
||||||
|
kind: Cluster
|
||||||
|
spec:
|
||||||
|
serviceAccountTemplate:
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
iam.gke.io/gcp-service-account: [...].iam.gserviceaccount.com
|
||||||
|
```
|
||||||
|
|
||||||
|
### Service Account JSON Key
|
||||||
|
|
||||||
|
Follow Google’s [authentication setup](https://cloud.google.com/docs/authentication/getting-started),
|
||||||
|
then:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
kubectl create secret generic backup-creds --from-file=gcsCredentials=gcs_credentials_file.json
|
||||||
|
```
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: barmancloud.cnpg.io/v1
|
||||||
|
kind: ObjectStore
|
||||||
|
metadata:
|
||||||
|
name: google-store
|
||||||
|
spec:
|
||||||
|
configuration:
|
||||||
|
destinationPath: "gs://<bucket>/<folder>"
|
||||||
|
googleCredentials:
|
||||||
|
applicationCredentials:
|
||||||
|
name: backup-creds
|
||||||
|
key: gcsCredentials
|
||||||
|
[...]
|
||||||
|
```
|
||||||
|
|
||||||
|
:::important
|
||||||
|
This authentication method generates a JSON file within the container
|
||||||
|
with all the credentials required to access your Google Cloud Storage
|
||||||
|
bucket. As a result, if someone gains access to the `Pod`, they will also have
|
||||||
|
write permissions to the bucket.
|
||||||
|
:::
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
## MinIO Object Store
|
||||||
|
|
||||||
|
In order to use the Tenant resource you first need to deploy the
|
||||||
|
[MinIO operator](https://docs.min.io/community/minio-object-store/operations/deployments/installation.html).
|
||||||
|
For the latest documentation of MinIO, please refer to the
|
||||||
|
[MinIO official documentation](https://docs.min.io/community/minio-object-store/).
|
||||||
|
|
||||||
|
MinIO Object Store's API is compatible with S3, and the default configuration of the Tenant
|
||||||
|
will create these services:
|
||||||
|
- `<tenant>-console` on port 9090 (with autocert) or 9443 (without autocert)
|
||||||
|
- `<tenant>-hl` on port 9000
|
||||||
|
Where `<tenant>` is the `metadata.name` you assigned to your Tenant resource.
|
||||||
|
|
||||||
|
:::note
|
||||||
|
The `<tenant>-console` service will only be available if you have enabled the
|
||||||
|
[MinIO Console](https://docs.min.io/community/minio-object-store/administration/minio-console.html).
|
||||||
|
|
||||||
|
For example, the following Tenant:
|
||||||
|
```yml
|
||||||
|
apiVersion: minio.min.io/v2
|
||||||
|
kind: Tenant
|
||||||
|
metadata:
|
||||||
|
name: cnpg-backups
|
||||||
|
spec:
|
||||||
|
[...]
|
||||||
|
```
|
||||||
|
would have services called `cnpg-backups-console` and `cnpg-backups-hl` respectively.
|
||||||
|
|
||||||
|
The `console` service is for managing the tenant, while the `hl` service exposes the S3
|
||||||
|
compatible API. If your tenant is configured with `requestAutoCert` you will communicate
|
||||||
|
to these services over HTTPS, if not you will use HTTP.
|
||||||
|
|
||||||
|
For authentication you can use your username and password, or create an access key.
|
||||||
|
Whichever method you choose, it has to be stored as a secret.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
kubectl create secret generic minio-creds \
|
||||||
|
--from-literal=MINIO_ACCESS_KEY=<minio access key or username> \
|
||||||
|
--from-literal=MINIO_SECRET_KEY=<minio secret key or password>
|
||||||
|
```
|
||||||
|
|
||||||
|
Finally, create the Barman ObjectStore:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: barmancloud.cnpg.io/v1
|
||||||
|
kind: ObjectStore
|
||||||
|
metadata:
|
||||||
|
name: minio-store
|
||||||
|
spec:
|
||||||
|
configuration:
|
||||||
|
destinationPath: s3://BUCKET_NAME/
|
||||||
|
endpointURL: http://<tenant>-hl:9000
|
||||||
|
s3Credentials:
|
||||||
|
accessKeyId:
|
||||||
|
name: minio-creds
|
||||||
|
key: MINIO_ACCESS_KEY
|
||||||
|
secretAccessKey:
|
||||||
|
name: minio-creds
|
||||||
|
key: MINIO_SECRET_KEY
|
||||||
|
[...]
|
||||||
|
```
|
||||||
|
|
||||||
|
:::important
|
||||||
|
Verify on `s3://BUCKET_NAME/` the presence of archived WAL files before
|
||||||
|
proceeding with a backup.
|
||||||
|
:::
|
||||||
|
|
||||||
|
---
|
||||||
24
web/versioned_docs/version-0.13.0/observability.md
Normal file
24
web/versioned_docs/version-0.13.0/observability.md
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 55
|
||||||
|
---
|
||||||
|
|
||||||
|
# Observability
|
||||||
|
|
||||||
|
<!-- SPDX-License-Identifier: CC-BY-4.0 -->
|
||||||
|
|
||||||
|
The Barman Cloud Plugin exposes the following metrics through the native
|
||||||
|
Prometheus exporter of the instance manager:
|
||||||
|
|
||||||
|
- `barman_cloud_cloudnative_pg_io_last_failed_backup_timestamp`:
|
||||||
|
the UNIX timestamp of the most recent failed backup.
|
||||||
|
|
||||||
|
- `barman_cloud_cloudnative_pg_io_last_available_backup_timestamp`:
|
||||||
|
the UNIX timestamp of the most recent successfully available backup.
|
||||||
|
|
||||||
|
- `barman_cloud_cloudnative_pg_io_first_recoverability_point`:
|
||||||
|
the UNIX timestamp representing the earliest point in time from which the
|
||||||
|
cluster can be recovered.
|
||||||
|
|
||||||
|
These metrics supersede the previously available in-core metrics that used the
|
||||||
|
`cnpg_collector` prefix. The new metrics are exposed under the
|
||||||
|
`barman_cloud_cloudnative_pg_io` prefix instead.
|
||||||
19
web/versioned_docs/version-0.13.0/parameters.md
Normal file
19
web/versioned_docs/version-0.13.0/parameters.md
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 100
|
||||||
|
---
|
||||||
|
|
||||||
|
# Parameters
|
||||||
|
|
||||||
|
<!-- SPDX-License-Identifier: CC-BY-4.0 -->
|
||||||
|
|
||||||
|
The following parameters are available for the Barman Cloud Plugin:
|
||||||
|
|
||||||
|
- `barmanObjectName`: references the `ObjectStore` resource to be used by the
|
||||||
|
plugin.
|
||||||
|
- `serverName`: Specifies the server name in the object store.
|
||||||
|
|
||||||
|
:::important
|
||||||
|
The `serverName` parameter in the `ObjectStore` resource is retained solely for
|
||||||
|
API compatibility with the in-tree `barmanObjectStore` and must always be left empty.
|
||||||
|
When needed, use the `serverName` plugin parameter in the Cluster configuration instead.
|
||||||
|
:::
|
||||||
108
web/versioned_docs/version-0.13.0/plugin-barman-cloud.v1.md
Normal file
108
web/versioned_docs/version-0.13.0/plugin-barman-cloud.v1.md
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
# API Reference
|
||||||
|
|
||||||
|
## Packages
|
||||||
|
- [barmancloud.cnpg.io/v1](#barmancloudcnpgiov1)
|
||||||
|
|
||||||
|
|
||||||
|
## barmancloud.cnpg.io/v1
|
||||||
|
|
||||||
|
Package v1 contains API Schema definitions for the barmancloud v1 API group
|
||||||
|
|
||||||
|
### Resource Types
|
||||||
|
- [ObjectStore](#objectstore)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### InstanceSidecarConfiguration
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
InstanceSidecarConfiguration defines the configuration for the sidecar that runs in the instance pods.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
_Appears in:_
|
||||||
|
- [ObjectStoreSpec](#objectstorespec)
|
||||||
|
|
||||||
|
| Field | Description | Required | Default | Validation |
|
||||||
|
| --- | --- | --- | --- | --- |
|
||||||
|
| `env` _[EnvVar](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#envvar-v1-core) array_ | The environment to be explicitly passed to the sidecar | | | |
|
||||||
|
| `retentionPolicyIntervalSeconds` _integer_ | The retentionCheckInterval defines the frequency at which the<br />system checks and enforces retention policies. | | 1800 | |
|
||||||
|
| `resources` _[ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcerequirements-v1-core)_ | Resources define cpu/memory requests and limits for the sidecar that runs in the instance pods. | | | |
|
||||||
|
| `additionalContainerArgs` _string array_ | AdditionalContainerArgs is an optional list of command-line arguments<br />to be passed to the sidecar container when it starts.<br />The provided arguments are appended to the container’s default arguments. | | | |
|
||||||
|
| `logLevel` _string_ | The log level for PostgreSQL instances. Valid values are: `error`, `warning`, `info` (default), `debug`, `trace` | | info | Enum: [error warning info debug trace] <br /> |
|
||||||
|
|
||||||
|
|
||||||
|
#### ObjectStore
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ObjectStore is the Schema for the objectstores API.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
| Field | Description | Required | Default | Validation |
|
||||||
|
| --- | --- | --- | --- | --- |
|
||||||
|
| `apiVersion` _string_ | `barmancloud.cnpg.io/v1` | True | | |
|
||||||
|
| `kind` _string_ | `ObjectStore` | True | | |
|
||||||
|
| `metadata` _[ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#objectmeta-v1-meta)_ | Refer to Kubernetes API documentation for fields of `metadata`. | True | | |
|
||||||
|
| `spec` _[ObjectStoreSpec](#objectstorespec)_ | Specification of the desired behavior of the ObjectStore.<br />More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status | True | | |
|
||||||
|
| `status` _[ObjectStoreStatus](#objectstorestatus)_ | Most recently observed status of the ObjectStore. This data may not be up to<br />date. Populated by the system. Read-only.<br />More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status | | | |
|
||||||
|
|
||||||
|
|
||||||
|
#### ObjectStoreSpec
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ObjectStoreSpec defines the desired state of ObjectStore.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
_Appears in:_
|
||||||
|
- [ObjectStore](#objectstore)
|
||||||
|
|
||||||
|
| Field | Description | Required | Default | Validation |
|
||||||
|
| --- | --- | --- | --- | --- |
|
||||||
|
| `configuration` _[BarmanObjectStoreConfiguration](https://pkg.go.dev/github.com/cloudnative-pg/barman-cloud/pkg/api#BarmanObjectStoreConfiguration)_ | The configuration for the barman-cloud tool suite | True | | |
|
||||||
|
| `retentionPolicy` _string_ | RetentionPolicy is the retention policy to be used for backups<br />and WALs (i.e. '60d'). The retention policy is expressed in the form<br />of `XXu` where `XX` is a positive integer and `u` is in `[dwm]` -<br />days, weeks, months. | | | Pattern: `^[1-9][0-9]*[dwm]$` <br /> |
|
||||||
|
| `instanceSidecarConfiguration` _[InstanceSidecarConfiguration](#instancesidecarconfiguration)_ | The configuration for the sidecar that runs in the instance pods | | | |
|
||||||
|
|
||||||
|
|
||||||
|
#### ObjectStoreStatus
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ObjectStoreStatus defines the observed state of ObjectStore.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
_Appears in:_
|
||||||
|
- [ObjectStore](#objectstore)
|
||||||
|
|
||||||
|
| Field | Description | Required | Default | Validation |
|
||||||
|
| --- | --- | --- | --- | --- |
|
||||||
|
| `serverRecoveryWindow` _object (keys:string, values:[RecoveryWindow](#recoverywindow))_ | ServerRecoveryWindow maps each server to its recovery window | True | | |
|
||||||
|
|
||||||
|
|
||||||
|
#### RecoveryWindow
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
RecoveryWindow represents the time span between the first
|
||||||
|
recoverability point and the last successful backup of a PostgreSQL
|
||||||
|
server, defining the period during which data can be restored.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
_Appears in:_
|
||||||
|
- [ObjectStoreStatus](#objectstorestatus)
|
||||||
|
|
||||||
|
| Field | Description | Required | Default | Validation |
|
||||||
|
| --- | --- | --- | --- | --- |
|
||||||
|
| `firstRecoverabilityPoint` _[Time](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#time-v1-meta)_ | The first recoverability point in a PostgreSQL server refers to<br />the earliest point in time to which the database can be<br />restored. | True | | |
|
||||||
|
| `lastSuccessfulBackupTime` _[Time](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#time-v1-meta)_ | The last successful backup time | True | | |
|
||||||
|
| `lastFailedBackupTime` _[Time](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#time-v1-meta)_ | The last failed backup time | True | | |
|
||||||
|
|
||||||
|
|
||||||
219
web/versioned_docs/version-0.13.0/resource-name-migration.md
Normal file
219
web/versioned_docs/version-0.13.0/resource-name-migration.md
Normal file
@ -0,0 +1,219 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 90
|
||||||
|
---
|
||||||
|
|
||||||
|
# Resource name migration guide
|
||||||
|
|
||||||
|
<!-- SPDX-License-Identifier: CC-BY-4.0 -->
|
||||||
|
|
||||||
|
:::warning
|
||||||
|
Before proceeding with the migration process, please:
|
||||||
|
1. **Read this guide in its entirety** to understand what changes will be made
|
||||||
|
2. **Test in a non-production environment** first if possible
|
||||||
|
3. **Ensure you have proper backups** of your cluster configuration
|
||||||
|
|
||||||
|
This migration will delete old RBAC resources only after the
|
||||||
|
`plugin-barman-cloud` upgrade. While the operation is designed to be safe, you
|
||||||
|
should review and understand the changes before proceeding. The maintainers of
|
||||||
|
this project are not responsible for any issues that may arise during
|
||||||
|
migration.
|
||||||
|
|
||||||
|
**Note:** This guide assumes you are using the default `cnpg-system` namespace.
|
||||||
|
:::
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Starting from version **0.8.0**, the `plugin-barman-cloud` deployment manifests
|
||||||
|
use more specific, prefixed resource names to avoid conflicts with other
|
||||||
|
components deployed in the same Kubernetes cluster.
|
||||||
|
|
||||||
|
## What Changed
|
||||||
|
|
||||||
|
The following resources have been renamed to use proper prefixes.
|
||||||
|
|
||||||
|
### Cluster-scoped Resources
|
||||||
|
|
||||||
|
| Old Name | New Name |
|
||||||
|
|----------------------------|------------------------------------------|
|
||||||
|
| `metrics-auth-role` | `barman-plugin-metrics-auth-role` |
|
||||||
|
| `metrics-auth-rolebinding` | `barman-plugin-metrics-auth-rolebinding` |
|
||||||
|
| `metrics-reader` | `barman-plugin-metrics-reader` |
|
||||||
|
| `objectstore-viewer-role` | `barman-plugin-objectstore-viewer-role` |
|
||||||
|
| `objectstore-editor-role` | `barman-plugin-objectstore-editor-role` |
|
||||||
|
|
||||||
|
### Namespace-scoped Resources
|
||||||
|
|
||||||
|
| Old Name | New Name | Namespace |
|
||||||
|
|-------------------------------|---------------------------------------------|---------------|
|
||||||
|
| `leader-election-role` | `barman-plugin-leader-election-role` | `cnpg-system` |
|
||||||
|
| `leader-election-rolebinding` | `barman-plugin-leader-election-rolebinding` | `cnpg-system` |
|
||||||
|
|
||||||
|
## Why This Change?
|
||||||
|
|
||||||
|
Using generic names for cluster-wide resources is discouraged as they may
|
||||||
|
conflict with other components deployed in the same cluster. The new names make
|
||||||
|
it clear that these resources belong to the Barman Cloud plugin and help avoid
|
||||||
|
naming collisions.
|
||||||
|
|
||||||
|
## Migration Instructions
|
||||||
|
|
||||||
|
This three steps migration process is straightforward and can be completed with
|
||||||
|
a few `kubectl` commands.
|
||||||
|
|
||||||
|
### Step 1: Upgrade plugin-barman-cloud
|
||||||
|
|
||||||
|
Please refer to the [Installation](installation.mdx) section to deploy the new
|
||||||
|
`plugin-barman-cloud` release.
|
||||||
|
|
||||||
|
### Step 2: Delete Old Cluster-scoped Resources
|
||||||
|
|
||||||
|
:::danger Verify Resources Before Deletion
|
||||||
|
**IMPORTANT**: The old resource names are generic and could potentially belong
|
||||||
|
to other components in your cluster.
|
||||||
|
|
||||||
|
**Before deleting each resource, verify it belongs to the Barman Cloud plugin
|
||||||
|
by checking:**
|
||||||
|
- For `objectstore-*` roles: Look for `barmancloud.cnpg.io` in the API groups
|
||||||
|
- For `metrics-*` roles: Check if they reference the `plugin-barman-cloud`
|
||||||
|
ServiceAccount in `cnpg-system` namespace
|
||||||
|
- For other roles: Look for labels like `app.kubernetes.io/name: plugin-barman-cloud`
|
||||||
|
|
||||||
|
If a resource doesn't have these indicators, **DO NOT DELETE IT** as it may
|
||||||
|
belong to another application.
|
||||||
|
|
||||||
|
Carefully review the output of each verification command before proceeding with
|
||||||
|
the `delete`.
|
||||||
|
:::
|
||||||
|
|
||||||
|
:::tip Dry Run First
|
||||||
|
You can add `--dry-run=client` to any `kubectl delete` command to preview what
|
||||||
|
would be deleted without actually removing anything.
|
||||||
|
:::
|
||||||
|
|
||||||
|
**Only proceed if you've verified these resources belong to the Barman Cloud
|
||||||
|
plugin (see warning above).**
|
||||||
|
|
||||||
|
For each resource below, first verify it belongs to Barman Cloud, then delete
|
||||||
|
it:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. Check metrics-auth-rolebinding FIRST (we'll check the role after)
|
||||||
|
# Look for references to plugin-barman-cloud ServiceAccount
|
||||||
|
kubectl describe clusterrolebinding metrics-auth-rolebinding
|
||||||
|
# If it references plugin-barman-cloud ServiceAccount in cnpg-system namespace,
|
||||||
|
# delete it:
|
||||||
|
kubectl delete clusterrolebinding metrics-auth-rolebinding
|
||||||
|
|
||||||
|
# 2. Check metrics-auth-role
|
||||||
|
# Look for references to authentication.k8s.io and authorization.k8s.io
|
||||||
|
kubectl describe clusterrole metrics-auth-role
|
||||||
|
# Verify it's not being used by any other rolebindings:
|
||||||
|
kubectl get clusterrolebinding -o json \
|
||||||
|
| jq -r '.items[] | select(.roleRef.name=="metrics-auth-role") \
|
||||||
|
| .metadata.name'
|
||||||
|
# If the above returns nothing (role is not in use) and the role looks like the
|
||||||
|
# Barman Cloud one, delete it (see warnings section):
|
||||||
|
kubectl delete clusterrole metrics-auth-role
|
||||||
|
|
||||||
|
# 3. Check objectstore-viewer-role
|
||||||
|
# Look for barmancloud.cnpg.io API group or
|
||||||
|
# for `app.kubernetes.io/name: plugin-barman-cloud` label
|
||||||
|
kubectl describe clusterrole objectstore-viewer-role
|
||||||
|
# If it shows barmancloud.cnpg.io in API groups, delete it:
|
||||||
|
kubectl delete clusterrole objectstore-viewer-role
|
||||||
|
|
||||||
|
# 4. Check objectstore-editor-role
|
||||||
|
# Look for barmancloud.cnpg.io API group or
|
||||||
|
# for `app.kubernetes.io/name: plugin-barman-cloud` label
|
||||||
|
kubectl describe clusterrole objectstore-editor-role
|
||||||
|
# If it shows barmancloud.cnpg.io in API groups, delete it:
|
||||||
|
kubectl delete clusterrole objectstore-editor-role
|
||||||
|
|
||||||
|
# 5. Check metrics-reader (MOST DANGEROUS - very generic name)
|
||||||
|
# First, check if it's being used by any rolebindings OTHER than barman's:
|
||||||
|
kubectl get clusterrolebinding -o json | jq -r '.items[] \
|
||||||
|
| select(.roleRef.name=="metrics-reader") \
|
||||||
|
| "\(.metadata.name) -> \(.subjects[0].name) in \(.subjects[0].namespace)"'
|
||||||
|
# If this shows ANY rolebindings, review them carefully. Only proceed if
|
||||||
|
# they're all Barman-related. Then check the role itself:
|
||||||
|
kubectl describe clusterrole metrics-reader
|
||||||
|
# If it ONLY has nonResourceURLs: /metrics and NO other rolebindings use it,
|
||||||
|
# delete it:
|
||||||
|
kubectl delete clusterrole metrics-reader
|
||||||
|
```
|
||||||
|
|
||||||
|
:::warning
|
||||||
|
The `metrics-reader` role is particularly dangerous to delete blindly. Many
|
||||||
|
monitoring systems use this exact name. Only delete it if:
|
||||||
|
|
||||||
|
1. You've verified it ONLY grants access to `/metrics`
|
||||||
|
2. No other rolebindings reference it (checked with the jq command above)
|
||||||
|
3. You're certain it was created by the Barman Cloud plugin
|
||||||
|
|
||||||
|
If you're unsure, it's safer to leave it and let the new
|
||||||
|
`barman-plugin-metrics-reader` role coexist with it.
|
||||||
|
:::
|
||||||
|
|
||||||
|
If any resource is not found during the `describe` command, that's okay - it
|
||||||
|
means it was never created or already deleted. Simply skip the delete command
|
||||||
|
for that resource.
|
||||||
|
|
||||||
|
### Step 3: Delete Old Namespace-scoped Resources
|
||||||
|
|
||||||
|
Delete the old namespace-scoped resources in the `cnpg-system` namespace:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Delete the old leader-election resources
|
||||||
|
kubectl delete role leader-election-role -n cnpg-system
|
||||||
|
kubectl delete rolebinding leader-election-rolebinding -n cnpg-system
|
||||||
|
```
|
||||||
|
|
||||||
|
If any resource is not found, that's okay - it means it was never created or
|
||||||
|
already deleted.
|
||||||
|
|
||||||
|
## Impact
|
||||||
|
|
||||||
|
- **Permissions:** If you have custom RBAC rules or tools that reference the
|
||||||
|
old resource names, they will need to be updated.
|
||||||
|
- **External Users:** If end users have been granted the
|
||||||
|
`objectstore-viewer-role` or `objectstore-editor-role`, they will need to be
|
||||||
|
re-granted the new role names (`barman-plugin-objectstore-viewer-role` and
|
||||||
|
`barman-plugin-objectstore-editor-role`).
|
||||||
|
|
||||||
|
## Verification
|
||||||
|
|
||||||
|
After migration, verify that the new resources are created:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Check cluster-scoped resources
|
||||||
|
kubectl get clusterrole | grep barman
|
||||||
|
kubectl get clusterrolebinding | grep barman
|
||||||
|
|
||||||
|
# Check namespace-scoped resources
|
||||||
|
kubectl get role,rolebinding -n cnpg-system | grep barman
|
||||||
|
```
|
||||||
|
|
||||||
|
You should see the new prefixed resource names.
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### Plugin Not Starting After Migration
|
||||||
|
|
||||||
|
If the plugin fails to start after migration, check:
|
||||||
|
|
||||||
|
1. **ServiceAccount permissions:** Ensure the `plugin-barman-cloud` ServiceAccount is bound to the new roles:
|
||||||
|
```bash
|
||||||
|
kubectl get clusterrolebinding barman-plugin-metrics-auth-rolebinding -o yaml
|
||||||
|
kubectl get rolebinding barman-plugin-leader-election-rolebinding -n cnpg-system -o yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Role references:** Verify that the rolebindings reference the correct role names:
|
||||||
|
```bash
|
||||||
|
kubectl describe rolebinding barman-plugin-leader-election-rolebinding -n cnpg-system
|
||||||
|
kubectl describe clusterrolebinding barman-plugin-metrics-auth-rolebinding
|
||||||
|
```
|
||||||
|
|
||||||
|
## Support
|
||||||
|
|
||||||
|
If you encounter issues during migration, please open an issue on the [GitHub
|
||||||
|
repository](https://github.com/cloudnative-pg/plugin-barman-cloud/issues).
|
||||||
38
web/versioned_docs/version-0.13.0/retention.md
Normal file
38
web/versioned_docs/version-0.13.0/retention.md
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 60
|
||||||
|
---
|
||||||
|
|
||||||
|
# Retention Policies
|
||||||
|
|
||||||
|
<!-- SPDX-License-Identifier: CC-BY-4.0 -->
|
||||||
|
|
||||||
|
The Barman Cloud Plugin supports **automated cleanup of obsolete backups** via
|
||||||
|
retention policies, configured in the `.spec.retentionPolicy` field of the
|
||||||
|
`ObjectStore` resource.
|
||||||
|
|
||||||
|
:::note
|
||||||
|
This feature uses the `barman-cloud-backup-delete` command with the
|
||||||
|
`--retention-policy "RECOVERY WINDOW OF {{ value }} {{ unit }}"` syntax.
|
||||||
|
:::
|
||||||
|
|
||||||
|
#### Example: 30-Day Retention Policy
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: barmancloud.cnpg.io/v1
|
||||||
|
kind: ObjectStore
|
||||||
|
metadata:
|
||||||
|
name: my-store
|
||||||
|
spec:
|
||||||
|
[...]
|
||||||
|
retentionPolicy: "30d"
|
||||||
|
````
|
||||||
|
|
||||||
|
:::note
|
||||||
|
A **recovery window retention policy** ensures the cluster can be restored to
|
||||||
|
any point in time between the calculated *Point of Recoverability* (PoR) and
|
||||||
|
the latest WAL archive. The PoR is defined as `current time - recovery window`.
|
||||||
|
The **first valid backup** is the most recent backup completed before the PoR.
|
||||||
|
Backups older than that are marked as *obsolete* and deleted after the next
|
||||||
|
backup completes.
|
||||||
|
:::
|
||||||
|
|
||||||
591
web/versioned_docs/version-0.13.0/troubleshooting.md
Normal file
591
web/versioned_docs/version-0.13.0/troubleshooting.md
Normal file
@ -0,0 +1,591 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 90
|
||||||
|
---
|
||||||
|
|
||||||
|
# Troubleshooting
|
||||||
|
|
||||||
|
<!-- SPDX-License-Identifier: CC-BY-4.0 -->
|
||||||
|
|
||||||
|
This guide helps you diagnose and resolve common issues with the Barman Cloud
|
||||||
|
plugin.
|
||||||
|
|
||||||
|
:::important
|
||||||
|
We are continuously improving the integration between CloudNativePG and the
|
||||||
|
Barman Cloud plugin as it moves toward greater stability and maturity. For this
|
||||||
|
reason, we recommend using the latest available version of both components.
|
||||||
|
See the [*Requirements* section](intro.md#requirements) for details.
|
||||||
|
:::
|
||||||
|
|
||||||
|
:::note
|
||||||
|
The following commands assume you installed the CloudNativePG operator in
|
||||||
|
the default `cnpg-system` namespace. If you installed it in a different
|
||||||
|
namespace, adjust the commands accordingly.
|
||||||
|
:::
|
||||||
|
|
||||||
|
## Viewing Logs
|
||||||
|
|
||||||
|
To troubleshoot effectively, you’ll often need to review logs from multiple
|
||||||
|
sources:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# View operator logs (includes plugin interaction logs)
|
||||||
|
kubectl logs -n cnpg-system deployment/cnpg-controller-manager -f
|
||||||
|
|
||||||
|
# View plugin manager logs
|
||||||
|
kubectl logs -n cnpg-system deployment/barman-cloud -f
|
||||||
|
|
||||||
|
# View sidecar container logs (Barman Cloud operations)
|
||||||
|
kubectl logs -n <namespace> <cluster-pod-name> -c plugin-barman-cloud -f
|
||||||
|
|
||||||
|
# View all containers in a pod
|
||||||
|
kubectl logs -n <namespace> <cluster-pod-name> --all-containers=true
|
||||||
|
|
||||||
|
# View previous container logs (if container restarted)
|
||||||
|
kubectl logs -n <namespace> <cluster-pod-name> -c plugin-barman-cloud --previous
|
||||||
|
```
|
||||||
|
|
||||||
|
## Common Issues
|
||||||
|
|
||||||
|
### Plugin Installation Issues
|
||||||
|
|
||||||
|
#### Plugin pods not starting
|
||||||
|
|
||||||
|
**Symptoms:**
|
||||||
|
|
||||||
|
- Plugin pods stuck in `CrashLoopBackOff` or `Error`
|
||||||
|
- Plugin deployment not ready
|
||||||
|
|
||||||
|
**Possible causes and solutions:**
|
||||||
|
|
||||||
|
1. **Certificate issues**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# Check if cert-manager is installed and running
|
||||||
|
kubectl get pods -n cert-manager
|
||||||
|
|
||||||
|
# Check if the plugin certificate is created
|
||||||
|
kubectl get certificates -n cnpg-system
|
||||||
|
```
|
||||||
|
|
||||||
|
If cert-manager is not installed, install it first:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# Note: other installation methods for cert-manager are available
|
||||||
|
kubectl apply -f \
|
||||||
|
https://github.com/cert-manager/cert-manager/releases/latest/download/cert-manager.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
If you are using your own certificates without cert-manager, you will need
|
||||||
|
to verify the entire certificate chain yourself.
|
||||||
|
|
||||||
|
|
||||||
|
2. **Image pull errors**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# Check pod events for image pull errors
|
||||||
|
kubectl describe pod -n cnpg-system -l app=barman-cloud
|
||||||
|
```
|
||||||
|
|
||||||
|
Verify the image exists and you have proper credentials if using a private
|
||||||
|
registry.
|
||||||
|
|
||||||
|
|
||||||
|
3. **Resource constraints**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# Check node resources
|
||||||
|
kubectl top nodes
|
||||||
|
kubectl describe nodes
|
||||||
|
```
|
||||||
|
|
||||||
|
Make sure your cluster has sufficient CPU and memory resources.
|
||||||
|
|
||||||
|
### Backup Failures
|
||||||
|
|
||||||
|
#### Quick Backup Troubleshooting Checklist
|
||||||
|
|
||||||
|
When a backup fails, follow these steps in order:
|
||||||
|
|
||||||
|
1. **Check backup status**:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
kubectl get backups.postgresql.cnpg.io -n <namespace>
|
||||||
|
```
|
||||||
|
2. **Get error details and target pod**:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
kubectl describe backups.postgresql.cnpg.io \
|
||||||
|
-n <namespace> <backup-name>
|
||||||
|
|
||||||
|
kubectl get backups.postgresql.cnpg.io \
|
||||||
|
-n <namespace> <backup-name> \
|
||||||
|
-o jsonpath='{.status.instanceID.podName}'
|
||||||
|
```
|
||||||
|
3. **Check the target pod’s sidecar logs**:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
TARGET_POD=$(kubectl get backups.postgresql.cnpg.io \
|
||||||
|
-n <namespace> <backup-name> \
|
||||||
|
-o jsonpath='{.status.instanceID.podName}')
|
||||||
|
|
||||||
|
kubectl logs \
|
||||||
|
-n <namespace> $TARGET_POD -c plugin-barman-cloud \
|
||||||
|
--tail=100 | grep -E "ERROR|FATAL|panic"
|
||||||
|
```
|
||||||
|
4. **Check cluster events**:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
kubectl get events -n <namespace> \
|
||||||
|
--field-selector involvedObject.name=<cluster-name> \
|
||||||
|
--sort-by='.lastTimestamp'
|
||||||
|
```
|
||||||
|
5. **Verify plugin is running**:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
kubectl get pods \
|
||||||
|
-n cnpg-system -l app=barman-cloud
|
||||||
|
```
|
||||||
|
6. **Check operator logs**:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
kubectl logs \
|
||||||
|
-n cnpg-system deployment/cnpg-controller-manager \
|
||||||
|
--tail=100 | grep -i "backup\|plugin"
|
||||||
|
```
|
||||||
|
7. **Check plugin manager logs**:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
kubectl logs \
|
||||||
|
-n cnpg-system deployment/barman-cloud --tail=100
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Backup job fails immediately
|
||||||
|
|
||||||
|
**Symptoms:**
|
||||||
|
|
||||||
|
- Backup pods terminate with error
|
||||||
|
- No backup files appear in object storage
|
||||||
|
- Backup shows `failed` phase with various error messages
|
||||||
|
|
||||||
|
**Common failure modes and solutions:**
|
||||||
|
|
||||||
|
1. **"requested plugin is not available" errors**
|
||||||
|
|
||||||
|
```
|
||||||
|
requested plugin is not available: barman
|
||||||
|
requested plugin is not available: barman-cloud
|
||||||
|
requested plugin is not available: barman-cloud.cloudnative-pg.io
|
||||||
|
```
|
||||||
|
|
||||||
|
**Cause:** The plugin name in the Cluster configuration doesn’t match the
|
||||||
|
deployed plugin, or the plugin isn’t registered.
|
||||||
|
|
||||||
|
**Solution:**
|
||||||
|
|
||||||
|
a. **Check plugin registration:**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# If you have the `cnpg` plugin installed (v1.27.0+)
|
||||||
|
kubectl cnpg status -n <namespace> <cluster-name>
|
||||||
|
```
|
||||||
|
|
||||||
|
Look for the "Plugins status" section:
|
||||||
|
```
|
||||||
|
Plugins status
|
||||||
|
Name Version Status Reported Operator Capabilities
|
||||||
|
---- ------- ------ ------------------------------
|
||||||
|
barman-cloud.cloudnative-pg.io 0.6.0 N/A Reconciler Hooks, Lifecycle Service
|
||||||
|
```
|
||||||
|
|
||||||
|
b. **Verify plugin name in `Cluster` spec**:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: postgresql.cnpg.io/v1
|
||||||
|
kind: Cluster
|
||||||
|
spec:
|
||||||
|
plugins:
|
||||||
|
- name: barman-cloud.cloudnative-pg.io
|
||||||
|
parameters:
|
||||||
|
barmanObjectName: <your-objectstore-name>
|
||||||
|
```
|
||||||
|
|
||||||
|
c. **Check plugin deployment is running**:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
kubectl get deployment -n cnpg-system barman-cloud
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **"rpc error: code = Unknown desc = panic caught: assignment to entry in nil map" errors**
|
||||||
|
|
||||||
|
**Cause:** Misconfiguration in the `ObjectStore` (e.g., typo or missing field).
|
||||||
|
|
||||||
|
**Solution:**
|
||||||
|
|
||||||
|
- Review sidecar logs for details
|
||||||
|
- Verify `ObjectStore` configuration and secrets
|
||||||
|
- Common issues include:
|
||||||
|
- Missing or incorrect secret references
|
||||||
|
- Typos in configuration parameters
|
||||||
|
- Missing required environment variables in secrets
|
||||||
|
|
||||||
|
#### Backup performance issues
|
||||||
|
|
||||||
|
**Symptoms:**
|
||||||
|
|
||||||
|
- Backups take extremely long
|
||||||
|
- Backups timeout
|
||||||
|
|
||||||
|
**Plugin-specific considerations:**
|
||||||
|
|
||||||
|
1. **Check `ObjectStore` parallelism settings**
|
||||||
|
- Adjust `maxParallel` in `ObjectStore` configuration
|
||||||
|
- Monitor sidecar container resource usage during backups
|
||||||
|
|
||||||
|
2. **Verify plugin resource allocation**
|
||||||
|
- Check if the sidecar container has sufficient CPU/memory
|
||||||
|
- Review plugin container logs for resource-related warnings
|
||||||
|
|
||||||
|
:::tip
|
||||||
|
For Barman-specific features like compression, encryption, and performance
|
||||||
|
tuning, refer to the [Barman documentation](https://docs.pgbarman.org/latest/).
|
||||||
|
:::
|
||||||
|
|
||||||
|
### WAL Archiving Issues
|
||||||
|
|
||||||
|
#### WAL archiving stops
|
||||||
|
|
||||||
|
**Symptoms:**
|
||||||
|
|
||||||
|
- WAL files accumulate on the primary
|
||||||
|
- Cluster shows WAL archiving warnings
|
||||||
|
- Sidecar logs show WAL errors
|
||||||
|
|
||||||
|
**Debugging steps:**
|
||||||
|
|
||||||
|
1. **Check plugin sidecar logs for WAL archiving errors**
|
||||||
|
```sh
|
||||||
|
# Check recent WAL archive operations in sidecar
|
||||||
|
kubectl logs -n <namespace> <primary-pod> -c plugin-barman-cloud \
|
||||||
|
--tail=50 | grep -i wal
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Check ObjectStore configuration for WAL settings**
|
||||||
|
- Ensure ObjectStore has proper WAL retention settings
|
||||||
|
- Verify credentials have permissions for WAL operations
|
||||||
|
|
||||||
|
### Restore Issues
|
||||||
|
|
||||||
|
#### Restore fails during recovery
|
||||||
|
|
||||||
|
**Symptoms:**
|
||||||
|
|
||||||
|
- New cluster stuck in recovery
|
||||||
|
- Plugin sidecar shows restore errors
|
||||||
|
- PostgreSQL won’t start
|
||||||
|
|
||||||
|
**Debugging steps:**
|
||||||
|
|
||||||
|
1. **Check plugin sidecar logs during restore**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# Check the sidecar logs on the recovering cluster pods
|
||||||
|
kubectl logs -n <namespace> <cluster-pod-name> \
|
||||||
|
-c plugin-barman-cloud --tail=100
|
||||||
|
|
||||||
|
# Look for restore-related errors
|
||||||
|
kubectl logs -n <namespace> <cluster-pod-name> \
|
||||||
|
-c plugin-barman-cloud | grep -E "restore|recovery|ERROR"
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Verify plugin can access backups**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# Check if `ObjectStore` is properly configured for restore
|
||||||
|
kubectl get objectstores.barmancloud.cnpg.io \
|
||||||
|
-n <namespace> <objectstore-name> -o yaml
|
||||||
|
|
||||||
|
# Check PostgreSQL recovery logs
|
||||||
|
kubectl logs -n <namespace> <cluster-pod> \
|
||||||
|
-c postgres | grep -i recovery
|
||||||
|
```
|
||||||
|
|
||||||
|
:::tip
|
||||||
|
For detailed Barman restore operations and troubleshooting, refer to the
|
||||||
|
[Barman documentation](https://docs.pgbarman.org/latest/barman-cloud-restore.html).
|
||||||
|
:::
|
||||||
|
|
||||||
|
#### Point-in-time recovery (PITR) configuration issues
|
||||||
|
|
||||||
|
**Symptoms:**
|
||||||
|
|
||||||
|
- PITR doesn’t reach target time
|
||||||
|
- WAL access errors
|
||||||
|
- Recovery halts early
|
||||||
|
|
||||||
|
**Debugging steps:**
|
||||||
|
|
||||||
|
1. **Verify PITR configuration in the `Cluster` spec**
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: postgresql.cnpg.io/v1
|
||||||
|
kind: Cluster
|
||||||
|
metadata:
|
||||||
|
name: <cluster-restore-name>
|
||||||
|
spec:
|
||||||
|
storage:
|
||||||
|
size: 1Gi
|
||||||
|
|
||||||
|
bootstrap:
|
||||||
|
recovery:
|
||||||
|
source: origin
|
||||||
|
recoveryTarget:
|
||||||
|
targetTime: "2024-01-15T10:30:00Z"
|
||||||
|
|
||||||
|
externalClusters:
|
||||||
|
- name: origin
|
||||||
|
plugin:
|
||||||
|
enabled: true
|
||||||
|
name: barman-cloud.cloudnative-pg.io
|
||||||
|
parameters:
|
||||||
|
barmanObjectName: <object-store-name>
|
||||||
|
serverName: <source-cluster-name>
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Check sidecar logs for WAL-related errors**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
kubectl logs -n <namespace> <cluster-pod> \
|
||||||
|
-c plugin-barman-cloud | grep -i wal
|
||||||
|
```
|
||||||
|
|
||||||
|
:::note
|
||||||
|
Timestamps without an explicit timezone suffix
|
||||||
|
(e.g., `2024-01-15 10:30:00`) are interpreted as UTC.
|
||||||
|
:::
|
||||||
|
|
||||||
|
:::warning
|
||||||
|
Always specify an explicit timezone in your timestamp to avoid ambiguity.
|
||||||
|
For example, use `2024-01-15T10:30:00Z` or `2024-01-15T10:30:00+02:00`
|
||||||
|
instead of `2024-01-15 10:30:00`.
|
||||||
|
:::
|
||||||
|
|
||||||
|
:::note
|
||||||
|
For detailed PITR configuration and WAL management, see the
|
||||||
|
[Barman PITR documentation](https://docs.pgbarman.org/latest/).
|
||||||
|
:::
|
||||||
|
|
||||||
|
### Plugin Configuration Issues
|
||||||
|
|
||||||
|
#### Plugin cannot connect to object storage
|
||||||
|
|
||||||
|
**Symptoms:**
|
||||||
|
|
||||||
|
- Sidecar logs show connection errors
|
||||||
|
- Backups fail with authentication or network errors
|
||||||
|
- `ObjectStore` resource reports errors
|
||||||
|
|
||||||
|
**Solution:**
|
||||||
|
|
||||||
|
1. **Verify `ObjectStore` CRD configuration and secrets**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# Check ObjectStore resource status
|
||||||
|
kubectl get objectstores.barmancloud.cnpg.io \
|
||||||
|
-n <namespace> <objectstore-name> -o yaml
|
||||||
|
|
||||||
|
# Verify the secret exists and has correct keys for your provider
|
||||||
|
kubectl get secret -n <namespace> <secret-name> \
|
||||||
|
-o jsonpath='{.data}' | jq 'keys'
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Check sidecar logs for connectivity issues**
|
||||||
|
```sh
|
||||||
|
kubectl logs -n <namespace> <cluster-pod> \
|
||||||
|
-c plugin-barman-cloud | grep -E "connect|timeout|SSL|cert"
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Adjust provider-specific settings (endpoint, path style, etc.)**
|
||||||
|
- See [Object Store Configuration](object_stores.md) for provider-specific settings
|
||||||
|
- Ensure `endpointURL` is set correctly for your storage provider
|
||||||
|
- Verify network policies allow egress to your storage provider
|
||||||
|
|
||||||
|
## Diagnostic Commands
|
||||||
|
|
||||||
|
### Using the `cnpg` plugin for `kubectl`
|
||||||
|
|
||||||
|
The `cnpg` plugin for `kubectl` provides extended debugging capabilities.
|
||||||
|
Keep it updated:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# Install or update the `cnpg` plugin
|
||||||
|
kubectl krew install cnpg
|
||||||
|
# Or using an alternative method: https://cloudnative-pg.io/documentation/current/kubectl-plugin/#install
|
||||||
|
|
||||||
|
# Check plugin status (requires CNPG 1.27.0+)
|
||||||
|
kubectl cnpg status <cluster-name> -n <namespace>
|
||||||
|
|
||||||
|
# View cluster status in detail
|
||||||
|
kubectl cnpg status <cluster-name> -n <namespace> --verbose
|
||||||
|
```
|
||||||
|
|
||||||
|
## Getting Help
|
||||||
|
|
||||||
|
If problems persist:
|
||||||
|
|
||||||
|
1. **Check the documentation**
|
||||||
|
|
||||||
|
- [Installation Guide](installation.mdx)
|
||||||
|
- [Object Store Configuration](object_stores.md) (for provider-specific settings)
|
||||||
|
- [Usage Examples](usage.md)
|
||||||
|
|
||||||
|
|
||||||
|
2. **Gather diagnostic information**
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# Create a diagnostic bundle (⚠️ sanitize these before sharing!)
|
||||||
|
kubectl get objectstores.barmancloud.cnpg.io -A -o yaml > /tmp/objectstores.yaml
|
||||||
|
kubectl get clusters.postgresql.cnpg.io -A -o yaml > /tmp/clusters.yaml
|
||||||
|
kubectl logs -n cnpg-system deployment/barman-cloud --tail=1000 > /tmp/plugin.log
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
3. **Community support**
|
||||||
|
|
||||||
|
- CloudNativePG Slack: [#cloudnativepg-users](https://cloud-native.slack.com/messages/cloudnativepg-users)
|
||||||
|
- GitHub Issues: [plugin-barman-cloud](https://github.com/cloudnative-pg/plugin-barman-cloud/issues)
|
||||||
|
|
||||||
|
|
||||||
|
4. **Include when reporting**
|
||||||
|
|
||||||
|
- CloudNativePG version
|
||||||
|
- Plugin version
|
||||||
|
- Kubernetes version
|
||||||
|
- Cloud provider and region
|
||||||
|
- Relevant configuration (⚠️ sanitize/redact sensitive information)
|
||||||
|
- Error messages and logs
|
||||||
|
- Steps to reproduce
|
||||||
|
|
||||||
|
## Known Issues and Limitations
|
||||||
|
|
||||||
|
### Current Known Issues
|
||||||
|
|
||||||
|
1. **Migration compatibility**: After migrating from in-tree backup to the
|
||||||
|
plugin, the `kubectl cnpg backup` command syntax has changed
|
||||||
|
([#353](https://github.com/cloudnative-pg/plugin-barman-cloud/issues/353)):
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# Old command (in-tree, no longer works after migration)
|
||||||
|
kubectl cnpg backup -n <namespace> <cluster-name> \
|
||||||
|
--method=barmanObjectStore
|
||||||
|
|
||||||
|
# New command (plugin-based)
|
||||||
|
kubectl cnpg backup -n <namespace> <cluster-name> \
|
||||||
|
--method=plugin --plugin-name=barman-cloud.cloudnative-pg.io
|
||||||
|
```
|
||||||
|
|
||||||
|
### Plugin Limitations
|
||||||
|
|
||||||
|
1. **Installation method**: Currently only supports manifest and Kustomize
|
||||||
|
installation ([#351](https://github.com/cloudnative-pg/plugin-barman-cloud/issues/351) -
|
||||||
|
Helm chart requested)
|
||||||
|
|
||||||
|
2. **Sidecar resource sharing**: The plugin sidecar container shares pod
|
||||||
|
resources with PostgreSQL
|
||||||
|
|
||||||
|
3. **Plugin restart behavior**: Restarting the sidecar container requires
|
||||||
|
restarting the entire PostgreSQL pod
|
||||||
|
|
||||||
|
## Recap of General Debugging Steps
|
||||||
|
|
||||||
|
### Check Backup Status and Identify the Target Instance
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# List all backups and their status
|
||||||
|
kubectl get backups.postgresql.cnpg.io -n <namespace>
|
||||||
|
|
||||||
|
# Get detailed backup information including error messages and target instance
|
||||||
|
kubectl describe backups.postgresql.cnpg.io \
|
||||||
|
-n <namespace> <backup-name>
|
||||||
|
|
||||||
|
# Extract the target pod name from a failed backup
|
||||||
|
kubectl get backups.postgresql.cnpg.io \
|
||||||
|
-n <namespace> <backup-name> \
|
||||||
|
-o jsonpath='{.status.instanceID.podName}'
|
||||||
|
|
||||||
|
# Get more details including the target pod, method, phase, and error
|
||||||
|
kubectl get backups.postgresql.cnpg.io \
|
||||||
|
-n <namespace> <backup-name> \
|
||||||
|
-o jsonpath='Pod: {.status.instanceID.podName}{"\n"}Method: {.status.method}{"\n"}Phase: {.status.phase}{"\n"}Error: {.status.error}{"\n"}'
|
||||||
|
|
||||||
|
# Check the cluster status for backup-related information
|
||||||
|
kubectl cnpg status <cluster-name> -n <namespace> --verbose
|
||||||
|
```
|
||||||
|
|
||||||
|
### Check Sidecar Logs on the Backup Target Pod
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# Identify which pod was the backup target (from the previous step)
|
||||||
|
TARGET_POD=$(kubectl get backups.postgresql.cnpg.io \
|
||||||
|
-n <namespace> <backup-name> \
|
||||||
|
-o jsonpath='{.status.instanceID.podName}')
|
||||||
|
echo "Backup target pod: $TARGET_POD"
|
||||||
|
|
||||||
|
# Check the sidecar logs on the specific target pod
|
||||||
|
kubectl logs -n <namespace> $TARGET_POD \
|
||||||
|
-c plugin-barman-cloud --tail=100
|
||||||
|
|
||||||
|
# Follow the logs in real time
|
||||||
|
kubectl logs -n <namespace> $TARGET_POD \
|
||||||
|
-c plugin-barman-cloud -f
|
||||||
|
|
||||||
|
# Check for specific errors in the target pod around the backup time
|
||||||
|
kubectl logs -n <namespace> $TARGET_POD \
|
||||||
|
-c plugin-barman-cloud --since=10m | grep -E "ERROR|FATAL|panic|failed"
|
||||||
|
|
||||||
|
# Alternative: List all cluster pods and their roles
|
||||||
|
kubectl get pods -n <namespace> -l cnpg.io/cluster=<cluster-name> \
|
||||||
|
-o custom-columns=NAME:.metadata.name,ROLE:.metadata.labels.cnpg\\.io/instanceRole,INSTANCE:.metadata.labels.cnpg\\.io/instanceName
|
||||||
|
|
||||||
|
# Check sidecar logs on ALL cluster pods (if the target is unclear)
|
||||||
|
for pod in $(kubectl get pods -n <namespace> -l cnpg.io/cluster=<cluster-name> -o name); do
|
||||||
|
echo "=== Checking $pod ==="
|
||||||
|
kubectl logs -n <namespace> $pod -c plugin-barman-cloud \
|
||||||
|
--tail=20 | grep -i error || echo "No errors found"
|
||||||
|
done
|
||||||
|
```
|
||||||
|
|
||||||
|
### Check Events for Backup-Related Issues
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# Check events for the cluster
|
||||||
|
kubectl get events -n <namespace> \
|
||||||
|
--field-selector involvedObject.name=<cluster-name>
|
||||||
|
|
||||||
|
# Check events for failed backups
|
||||||
|
kubectl get events -n <namespace> \
|
||||||
|
--field-selector involvedObject.kind=Backup
|
||||||
|
|
||||||
|
# Get all recent events in the namespace
|
||||||
|
kubectl get events -n <namespace> --sort-by='.lastTimestamp' | tail -20
|
||||||
|
```
|
||||||
|
|
||||||
|
### Verify `ObjectStore` Configuration
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# Check the ObjectStore resource
|
||||||
|
kubectl get objectstores.barmancloud.cnpg.io \
|
||||||
|
-n <namespace> <objectstore-name> -o yaml
|
||||||
|
|
||||||
|
# Verify the secret exists and has the correct keys
|
||||||
|
kubectl get secret -n <namespace> <secret-name> -o yaml
|
||||||
|
# Alternatively
|
||||||
|
kubectl get secret -n <namespace> <secret-name> -o jsonpath='{.data}' | jq 'keys'
|
||||||
|
```
|
||||||
|
|
||||||
|
### Common Error Messages and Solutions
|
||||||
|
|
||||||
|
* **"AccessDenied" or "403 Forbidden"** — Check cloud credentials and bucket permissions.
|
||||||
|
* **"NoSuchBucket"** — Verify the bucket exists and the endpoint URL is correct.
|
||||||
|
* **"Connection timeout"** — Check network connectivity and firewall rules.
|
||||||
|
* **"SSL certificate problem"** — For self-signed certificates, verify the CA bundle configuration.
|
||||||
|
|
||||||
16
web/versioned_docs/version-0.13.0/upgrades.mdx
Normal file
16
web/versioned_docs/version-0.13.0/upgrades.mdx
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 25
|
||||||
|
---
|
||||||
|
|
||||||
|
# Upgrades
|
||||||
|
|
||||||
|
<!-- SPDX-License-Identifier: CC-BY-4.0 -->
|
||||||
|
|
||||||
|
You can upgrade the plugin simply by installing the new version. Unless
|
||||||
|
explicitly stated below or in the release notes, no special steps are required.
|
||||||
|
|
||||||
|
## Upgrading to version 0.8.x from previous versions
|
||||||
|
|
||||||
|
Version **0.8.0** introduces breaking changes to resource naming.
|
||||||
|
To complete the upgrade successfully, follow the instructions in the
|
||||||
|
["Resource name migration guide"](resource-name-migration.md).
|
||||||
283
web/versioned_docs/version-0.13.0/usage.md
Normal file
283
web/versioned_docs/version-0.13.0/usage.md
Normal file
@ -0,0 +1,283 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 30
|
||||||
|
---
|
||||||
|
|
||||||
|
# Using the Barman Cloud Plugin
|
||||||
|
|
||||||
|
<!-- SPDX-License-Identifier: CC-BY-4.0 -->
|
||||||
|
|
||||||
|
After [installing the plugin](installation.mdx) in the same namespace as the
|
||||||
|
CloudNativePG operator, enabling your PostgreSQL cluster to use the Barman
|
||||||
|
Cloud Plugin involves just a few steps:
|
||||||
|
|
||||||
|
- Defining the object store containing your WAL archive and base backups, using
|
||||||
|
your preferred [provider](object_stores.md)
|
||||||
|
- Instructing the Postgres cluster to use the Barman Cloud Plugin
|
||||||
|
|
||||||
|
From that moment, you’ll be able to issue on-demand backups or define a backup
|
||||||
|
schedule, as well as rely on the object store for recovery operations.
|
||||||
|
|
||||||
|
The rest of this page details each step, using MinIO as object store provider.
|
||||||
|
|
||||||
|
## Defining the `ObjectStore`
|
||||||
|
|
||||||
|
An `ObjectStore` resource must be created for each object store used in your
|
||||||
|
PostgreSQL architecture. Here's an example configuration using MinIO:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: barmancloud.cnpg.io/v1
|
||||||
|
kind: ObjectStore
|
||||||
|
metadata:
|
||||||
|
name: minio-store
|
||||||
|
spec:
|
||||||
|
configuration:
|
||||||
|
destinationPath: s3://backups/
|
||||||
|
endpointURL: http://minio:9000
|
||||||
|
s3Credentials:
|
||||||
|
accessKeyId:
|
||||||
|
name: minio
|
||||||
|
key: ACCESS_KEY_ID
|
||||||
|
secretAccessKey:
|
||||||
|
name: minio
|
||||||
|
key: ACCESS_SECRET_KEY
|
||||||
|
wal:
|
||||||
|
compression: gzip
|
||||||
|
```
|
||||||
|
|
||||||
|
The `.spec.configuration` schema follows the same format as the
|
||||||
|
[in-tree barman-cloud support](https://pkg.go.dev/github.com/cloudnative-pg/barman-cloud/pkg/api#BarmanObjectStoreConfiguration).
|
||||||
|
Refer to [the CloudNativePG documentation](https://cloudnative-pg.io/documentation/current/appendixes/backup_barmanobjectstore/)
|
||||||
|
for additional details.
|
||||||
|
|
||||||
|
:::important
|
||||||
|
The `serverName` parameter in the `ObjectStore` resource is retained solely for
|
||||||
|
API compatibility with the in-tree `barmanObjectStore` and must always be left empty.
|
||||||
|
When needed, use the `serverName` plugin parameter in the Cluster configuration instead.
|
||||||
|
:::
|
||||||
|
|
||||||
|
## Configuring WAL Archiving
|
||||||
|
|
||||||
|
Once the `ObjectStore` is defined, you can configure your PostgreSQL cluster
|
||||||
|
to archive WALs by referencing the store in the `.spec.plugins` section:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: postgresql.cnpg.io/v1
|
||||||
|
kind: Cluster
|
||||||
|
metadata:
|
||||||
|
name: cluster-example
|
||||||
|
spec:
|
||||||
|
instances: 3
|
||||||
|
imagePullPolicy: Always
|
||||||
|
plugins:
|
||||||
|
- name: barman-cloud.cloudnative-pg.io
|
||||||
|
isWALArchiver: true
|
||||||
|
parameters:
|
||||||
|
barmanObjectName: minio-store
|
||||||
|
storage:
|
||||||
|
size: 1Gi
|
||||||
|
```
|
||||||
|
|
||||||
|
This configuration enables both WAL archiving and data directory backups.
|
||||||
|
|
||||||
|
## Performing a Base Backup
|
||||||
|
|
||||||
|
Once WAL archiving is enabled, the cluster is ready for backups. Backups can be
|
||||||
|
created either declaratively (with YAML manifests) or imperatively (with the
|
||||||
|
`cnpg` plugin).
|
||||||
|
|
||||||
|
### Declarative approach (YAML manifest)
|
||||||
|
|
||||||
|
Create a backup resource by applying a YAML manifest:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: postgresql.cnpg.io/v1
|
||||||
|
kind: Backup
|
||||||
|
metadata:
|
||||||
|
name: backup-example
|
||||||
|
spec:
|
||||||
|
cluster:
|
||||||
|
name: cluster-example
|
||||||
|
method: plugin
|
||||||
|
pluginConfiguration:
|
||||||
|
name: barman-cloud.cloudnative-pg.io
|
||||||
|
```
|
||||||
|
|
||||||
|
### Imperative approach (using the `cnpg` plugin)
|
||||||
|
|
||||||
|
The quickest way to trigger an on-demand backup is with the `cnpg` plugin:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
kubectl cnpg backup -n <namespace> <cluster-name> \
|
||||||
|
--method=plugin \
|
||||||
|
--plugin-name=barman-cloud.cloudnative-pg.io
|
||||||
|
```
|
||||||
|
|
||||||
|
:::note Migration from in-tree backups
|
||||||
|
If you are migrating from the in-tree backup system, note the change in syntax:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Old command (in-tree backup)
|
||||||
|
kubectl cnpg backup -n <namespace> <cluster-name> --method=barmanObjectStore
|
||||||
|
|
||||||
|
# New command (plugin-based backup)
|
||||||
|
kubectl cnpg backup -n <namespace> <cluster-name> \
|
||||||
|
--method=plugin \
|
||||||
|
--plugin-name=barman-cloud.cloudnative-pg.io
|
||||||
|
```
|
||||||
|
:::
|
||||||
|
|
||||||
|
## Restoring a Cluster
|
||||||
|
|
||||||
|
To restore a cluster from an object store, create a new `Cluster` resource that
|
||||||
|
references the store containing the backup. Below is an example configuration:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: postgresql.cnpg.io/v1
|
||||||
|
kind: Cluster
|
||||||
|
metadata:
|
||||||
|
name: cluster-restore
|
||||||
|
spec:
|
||||||
|
instances: 3
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
bootstrap:
|
||||||
|
recovery:
|
||||||
|
source: source
|
||||||
|
externalClusters:
|
||||||
|
- name: source
|
||||||
|
plugin:
|
||||||
|
name: barman-cloud.cloudnative-pg.io
|
||||||
|
parameters:
|
||||||
|
barmanObjectName: minio-store
|
||||||
|
serverName: cluster-example
|
||||||
|
storage:
|
||||||
|
size: 1Gi
|
||||||
|
```
|
||||||
|
|
||||||
|
:::important
|
||||||
|
The above configuration does **not** enable WAL archiving for the restored cluster.
|
||||||
|
:::
|
||||||
|
|
||||||
|
To enable WAL archiving for the restored cluster, include the `.spec.plugins`
|
||||||
|
section alongside the `externalClusters.plugin` section, as shown below:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: postgresql.cnpg.io/v1
|
||||||
|
kind: Cluster
|
||||||
|
metadata:
|
||||||
|
name: cluster-restore
|
||||||
|
spec:
|
||||||
|
instances: 3
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
bootstrap:
|
||||||
|
recovery:
|
||||||
|
source: source
|
||||||
|
plugins:
|
||||||
|
- name: barman-cloud.cloudnative-pg.io
|
||||||
|
isWALArchiver: true
|
||||||
|
parameters:
|
||||||
|
# Backup Object Store (push, read-write)
|
||||||
|
barmanObjectName: minio-store-bis
|
||||||
|
externalClusters:
|
||||||
|
- name: source
|
||||||
|
plugin:
|
||||||
|
name: barman-cloud.cloudnative-pg.io
|
||||||
|
parameters:
|
||||||
|
# Recovery Object Store (pull, read-only)
|
||||||
|
barmanObjectName: minio-store
|
||||||
|
serverName: cluster-example
|
||||||
|
storage:
|
||||||
|
size: 1Gi
|
||||||
|
```
|
||||||
|
|
||||||
|
The same object store may be used for both transaction log archiving and
|
||||||
|
restoring a cluster, or you can configure separate stores for these purposes.
|
||||||
|
|
||||||
|
## Configuring Replica Clusters
|
||||||
|
|
||||||
|
You can set up a distributed topology by combining the previously defined
|
||||||
|
configurations with the `.spec.replica` section. Below is an example of how to
|
||||||
|
define a replica cluster:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: postgresql.cnpg.io/v1
|
||||||
|
kind: Cluster
|
||||||
|
metadata:
|
||||||
|
name: cluster-dc-a
|
||||||
|
spec:
|
||||||
|
instances: 3
|
||||||
|
primaryUpdateStrategy: unsupervised
|
||||||
|
|
||||||
|
storage:
|
||||||
|
storageClass: csi-hostpath-sc
|
||||||
|
size: 1Gi
|
||||||
|
|
||||||
|
plugins:
|
||||||
|
- name: barman-cloud.cloudnative-pg.io
|
||||||
|
isWALArchiver: true
|
||||||
|
parameters:
|
||||||
|
barmanObjectName: minio-store-a
|
||||||
|
|
||||||
|
replica:
|
||||||
|
self: cluster-dc-a
|
||||||
|
primary: cluster-dc-a
|
||||||
|
source: cluster-dc-b
|
||||||
|
|
||||||
|
externalClusters:
|
||||||
|
- name: cluster-dc-a
|
||||||
|
plugin:
|
||||||
|
name: barman-cloud.cloudnative-pg.io
|
||||||
|
parameters:
|
||||||
|
barmanObjectName: minio-store-a
|
||||||
|
|
||||||
|
- name: cluster-dc-b
|
||||||
|
plugin:
|
||||||
|
name: barman-cloud.cloudnative-pg.io
|
||||||
|
parameters:
|
||||||
|
barmanObjectName: minio-store-b
|
||||||
|
```
|
||||||
|
|
||||||
|
## Configuring the plugin instance sidecar
|
||||||
|
|
||||||
|
The Barman Cloud Plugin runs as a sidecar container next to each PostgreSQL
|
||||||
|
instance pod. It manages backup, WAL archiving, and restore processes.
|
||||||
|
|
||||||
|
Configuration comes from multiple `ObjectStore` resources:
|
||||||
|
|
||||||
|
1. The one referenced in the
|
||||||
|
`.spec.plugins` section of the `Cluster`. This is the
|
||||||
|
object store used for WAL archiving and base backups.
|
||||||
|
2. The one referenced in the external cluster
|
||||||
|
used in the `.spec.replica.source` section of the `Cluster`. This is
|
||||||
|
used by the log-shipping designated primary to get the WAL files.
|
||||||
|
3. The one referenced in the
|
||||||
|
`.spec.bootstrap.recovery.source` section of the `Cluster`. Used by
|
||||||
|
the initial recovery job to create the cluster from an existing backup.
|
||||||
|
|
||||||
|
You can fine-tune sidecar behavior in the `.spec.instanceSidecarConfiguration`
|
||||||
|
of your ObjectStore. These settings apply to all PostgreSQL instances that use
|
||||||
|
this object store. Any updates take effect at the next `Cluster` reconciliation,
|
||||||
|
and could generate a rollout of the `Cluster`.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: barmancloud.cnpg.io/v1
|
||||||
|
kind: ObjectStore
|
||||||
|
metadata:
|
||||||
|
name: minio-store
|
||||||
|
spec:
|
||||||
|
configuration:
|
||||||
|
# [...]
|
||||||
|
instanceSidecarConfiguration:
|
||||||
|
retentionPolicyIntervalSeconds: 1800
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: "XXX"
|
||||||
|
cpu: "YYY"
|
||||||
|
limits:
|
||||||
|
memory: "XXX"
|
||||||
|
cpu: "YYY"
|
||||||
|
```
|
||||||
|
|
||||||
|
:::note
|
||||||
|
If more than one `ObjectStore` applies, the `instanceSidecarConfiguration` of
|
||||||
|
the one set in `.spec.plugins` has priority.
|
||||||
|
:::
|
||||||
8
web/versioned_sidebars/version-0.13.0-sidebars.json
Normal file
8
web/versioned_sidebars/version-0.13.0-sidebars.json
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"docs": [
|
||||||
|
{
|
||||||
|
"type": "autogenerated",
|
||||||
|
"dirName": "."
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@ -1,4 +1,5 @@
|
|||||||
[
|
[
|
||||||
|
"0.13.0",
|
||||||
"0.12.0",
|
"0.12.0",
|
||||||
"0.11.0",
|
"0.11.0",
|
||||||
"0.10.0",
|
"0.10.0",
|
||||||
|
|||||||
236
web/yarn.lock
236
web/yarn.lock
@ -2008,24 +2008,24 @@
|
|||||||
tslib "^2.4.0"
|
tslib "^2.4.0"
|
||||||
|
|
||||||
"@emnapi/core@^1.4.3":
|
"@emnapi/core@^1.4.3":
|
||||||
version "1.10.0"
|
version "1.11.0"
|
||||||
resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.10.0.tgz#380ccc8f2412ea22d1d972df7f8ee23a3b9c7467"
|
resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.11.0.tgz#8a655042dbbb10d0266670c9903c34a7001c705b"
|
||||||
integrity sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==
|
integrity sha512-l9Oo58x0HOP5znGzVhYW9U3e5wVuA4LAZU2AGezTmkhO1CgQRFDhDg4nneHsu/t3WniXg9QrG2nIXL/ZS8ln8Q==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@emnapi/wasi-threads" "1.2.1"
|
"@emnapi/wasi-threads" "1.2.2"
|
||||||
tslib "^2.4.0"
|
tslib "^2.4.0"
|
||||||
|
|
||||||
"@emnapi/runtime@^1.4.3":
|
"@emnapi/runtime@^1.4.3":
|
||||||
version "1.10.0"
|
version "1.11.0"
|
||||||
resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.10.0.tgz#4b260c0d3534204e98c6110b8db1a987d26ec87c"
|
resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.11.0.tgz#ce16b3674ff7266bbf50f9668bde8a04f3014d4e"
|
||||||
integrity sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==
|
integrity sha512-55coeOFKHv1ywEcUXJtWU5f+Jr/W5tZDvZig8DLKSwUN1JpROQ4rk/SNOQiFWmaR/VKF4zuFyW1B8JduOSv6Pg==
|
||||||
dependencies:
|
dependencies:
|
||||||
tslib "^2.4.0"
|
tslib "^2.4.0"
|
||||||
|
|
||||||
"@emnapi/wasi-threads@1.2.1":
|
"@emnapi/wasi-threads@1.2.2":
|
||||||
version "1.2.1"
|
version "1.2.2"
|
||||||
resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz#28fed21a1ba1ce797c44a070abc94d42f3ae8548"
|
resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz#4c93becf5bfa3b13d1bbdcc06aee38321ad8139a"
|
||||||
integrity sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==
|
integrity sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==
|
||||||
dependencies:
|
dependencies:
|
||||||
tslib "^2.4.0"
|
tslib "^2.4.0"
|
||||||
|
|
||||||
@ -2132,74 +2132,74 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz#5c23f796c47675f166d23b948cdb889184b93207"
|
resolved "https://registry.yarnpkg.com/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz#5c23f796c47675f166d23b948cdb889184b93207"
|
||||||
integrity sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==
|
integrity sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==
|
||||||
|
|
||||||
"@jsonjoy.com/fs-core@4.57.3":
|
"@jsonjoy.com/fs-core@4.57.6":
|
||||||
version "4.57.3"
|
version "4.57.6"
|
||||||
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-core/-/fs-core-4.57.3.tgz#e44bf1396a6d8c4a9a752084e57022617ea0f5f5"
|
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-core/-/fs-core-4.57.6.tgz#6ac35419d48a8ca558b357203f2fd6153135647f"
|
||||||
integrity sha512-IvO50vkGydDZwS1e9rz/JXEtCCt9XvqxoGI6FlrVIvVm4/HpygMKW4ETtREWtMTsN5CLJ9FR6GuCduoQPZLBiw==
|
integrity sha512-uI++Wx6VkBJqVmkb4ZeExwAVpZiA2Do5NrEtXoDk0Pdvce3ytFXJoviT1sLOj16+qDIMnD5nWPfOhVpnDmRJKg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@jsonjoy.com/fs-node-builtins" "4.57.3"
|
"@jsonjoy.com/fs-node-builtins" "4.57.6"
|
||||||
"@jsonjoy.com/fs-node-utils" "4.57.3"
|
"@jsonjoy.com/fs-node-utils" "4.57.6"
|
||||||
thingies "^2.5.0"
|
thingies "^2.5.0"
|
||||||
|
|
||||||
"@jsonjoy.com/fs-fsa@4.57.3":
|
"@jsonjoy.com/fs-fsa@4.57.6":
|
||||||
version "4.57.3"
|
version "4.57.6"
|
||||||
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-fsa/-/fs-fsa-4.57.3.tgz#097106d9688d9384419e3bac893b71e41a71f05d"
|
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-fsa/-/fs-fsa-4.57.6.tgz#385890464f57146ba71bd057ad98c961d144b96c"
|
||||||
integrity sha512-JlIDGUWPl7Y6zl+/ISnZuh8z2aMr/xoR66D18zlaVAuL192CvlNJEzOlzp27x4P52HRtDnCSOk6f59vTsmp5vw==
|
integrity sha512-pKkw/yC5CzSZKhIIUIsH1przOa+K5jGmZIg1sWaSF24JojyrUFbjcQv7QrcGAudriei6HQ6R0BFj+V8NbQinJw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@jsonjoy.com/fs-core" "4.57.3"
|
"@jsonjoy.com/fs-core" "4.57.6"
|
||||||
"@jsonjoy.com/fs-node-builtins" "4.57.3"
|
"@jsonjoy.com/fs-node-builtins" "4.57.6"
|
||||||
"@jsonjoy.com/fs-node-utils" "4.57.3"
|
"@jsonjoy.com/fs-node-utils" "4.57.6"
|
||||||
thingies "^2.5.0"
|
thingies "^2.5.0"
|
||||||
|
|
||||||
"@jsonjoy.com/fs-node-builtins@4.57.3":
|
"@jsonjoy.com/fs-node-builtins@4.57.6":
|
||||||
version "4.57.3"
|
version "4.57.6"
|
||||||
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.57.3.tgz#b6b34ed532554916e186977d00c19ffcafb3515f"
|
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.57.6.tgz#76a2a3300c9d0f1d5e45ec45785f2aacaec212be"
|
||||||
integrity sha512-JAI3PqNuY8BR7ovy4h0bADLrqJLIcUauONNZfyTxUnj3Wf3tpTYe39eJ6z7FzYyA+tdMt33VpiQQUikGr3QOBw==
|
integrity sha512-V4DgEFT3Cg5S9fCMOZSCVdTxdJWWLBO0WnAazV7hnCM96u5zXHyW/ubDAfcSVwqjkMJ50W1Y44IXtxRoIwaCVg==
|
||||||
|
|
||||||
"@jsonjoy.com/fs-node-to-fsa@4.57.3":
|
"@jsonjoy.com/fs-node-to-fsa@4.57.6":
|
||||||
version "4.57.3"
|
version "4.57.6"
|
||||||
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.57.3.tgz#020509740459a9d42f61d40c87613c2ec24b7022"
|
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.57.6.tgz#dbccc7d784b1e237c4d6a82f8d4ee39a2361da8c"
|
||||||
integrity sha512-uZGxyC0zDmcmW5bfHd4YivAZ54BLlbF9G0K5rBaksI/tZdJSGM7/AC+1TY7yvFu0Wc6gUHR7mFwf6SbQ3J1BTQ==
|
integrity sha512-+JptNw3iifihxH2rEXrninDzX4FFVW8JD/wPR8GbJPAeL9CQUSblrlumOPB5gZuS7tYRX+PJPLtT7XzKoRhv/Q==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@jsonjoy.com/fs-fsa" "4.57.3"
|
"@jsonjoy.com/fs-fsa" "4.57.6"
|
||||||
"@jsonjoy.com/fs-node-builtins" "4.57.3"
|
"@jsonjoy.com/fs-node-builtins" "4.57.6"
|
||||||
"@jsonjoy.com/fs-node-utils" "4.57.3"
|
"@jsonjoy.com/fs-node-utils" "4.57.6"
|
||||||
|
|
||||||
"@jsonjoy.com/fs-node-utils@4.57.3":
|
"@jsonjoy.com/fs-node-utils@4.57.6":
|
||||||
version "4.57.3"
|
version "4.57.6"
|
||||||
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.57.3.tgz#25fb8dbf0406c1cd5a9e0a22274f1e45bf6d460c"
|
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.57.6.tgz#67f1caff1ced836d8206bd769ecf3a4d3f04ca35"
|
||||||
integrity sha512-quCil8AvfcOxob4pn0drGdcQWpkPVgkt9q1+EjeyXXT40/L3l5lvYrr6hR8LmHu0eg+DNNaUwqjLT6Hr7V4sdQ==
|
integrity sha512-foyUrfS7WmYEUzqYXSNxmJBcSj04TABrkpFabwO9SCDCpVCfJ+qG+2sk5FjfiflG2n0SDFZDCJ6vYlJAEpxJFg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@jsonjoy.com/fs-node-builtins" "4.57.3"
|
"@jsonjoy.com/fs-node-builtins" "4.57.6"
|
||||||
|
|
||||||
"@jsonjoy.com/fs-node@4.57.3":
|
"@jsonjoy.com/fs-node@4.57.6":
|
||||||
version "4.57.3"
|
version "4.57.6"
|
||||||
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node/-/fs-node-4.57.3.tgz#edf03464f451d1bdd59bafc39f707d804524b364"
|
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node/-/fs-node-4.57.6.tgz#1772c9e34c044bc7a65bce49e3882c7e2907a140"
|
||||||
integrity sha512-089gZoKvbeOsT2jeBaVKSz91oFXQWFG7a62sMY6gVMHnoWbyGzTb6OVUP/V7G3wLQLJ555BEsHt8SD1nj1dgaQ==
|
integrity sha512-Kbn1jdkvDN4F2+BhoB6mMu7NCbhP0bgA5NcI1aJj/Q5UcU+I1JLLW+dEQean33iV4tXv35AzBVKPICnDltBpxw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@jsonjoy.com/fs-core" "4.57.3"
|
"@jsonjoy.com/fs-core" "4.57.6"
|
||||||
"@jsonjoy.com/fs-node-builtins" "4.57.3"
|
"@jsonjoy.com/fs-node-builtins" "4.57.6"
|
||||||
"@jsonjoy.com/fs-node-utils" "4.57.3"
|
"@jsonjoy.com/fs-node-utils" "4.57.6"
|
||||||
"@jsonjoy.com/fs-print" "4.57.3"
|
"@jsonjoy.com/fs-print" "4.57.6"
|
||||||
"@jsonjoy.com/fs-snapshot" "4.57.3"
|
"@jsonjoy.com/fs-snapshot" "4.57.6"
|
||||||
glob-to-regex.js "^1.0.0"
|
glob-to-regex.js "^1.0.0"
|
||||||
thingies "^2.5.0"
|
thingies "^2.5.0"
|
||||||
|
|
||||||
"@jsonjoy.com/fs-print@4.57.3":
|
"@jsonjoy.com/fs-print@4.57.6":
|
||||||
version "4.57.3"
|
version "4.57.6"
|
||||||
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-print/-/fs-print-4.57.3.tgz#b282395741a226a74550a7b6c14c9c81f57484d8"
|
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-print/-/fs-print-4.57.6.tgz#62be13d03362a4f8c1c711a4f81d4bcd5178a3bd"
|
||||||
integrity sha512-ITwaLZpGIqD9jHndwMvDFZDIvbVzGRsJZDQ5HKln0vyMculu1c1nb7zbEBgY8BVSBZ9S2xO138OWIBGeRsrF3Q==
|
integrity sha512-96eAn4Dudtt67LTeuU47yUD+pg9/G/oKpI10zei9ljk3X3WK4lYKc+n3cpaPCAbKPzoyfxl0mXm8f8Y7BOSFXw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@jsonjoy.com/fs-node-utils" "4.57.3"
|
"@jsonjoy.com/fs-node-utils" "4.57.6"
|
||||||
tree-dump "^1.1.0"
|
tree-dump "^1.1.0"
|
||||||
|
|
||||||
"@jsonjoy.com/fs-snapshot@4.57.3":
|
"@jsonjoy.com/fs-snapshot@4.57.6":
|
||||||
version "4.57.3"
|
version "4.57.6"
|
||||||
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.57.3.tgz#db3e113b77189d37f63d7f01c50d5e883ba2409b"
|
resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.57.6.tgz#6bde49a518a0ae4a9469a046fa4359c12f4f588d"
|
||||||
integrity sha512-wdNaG2DxCtvj9lKldAnEV3ycYPEpk+p2cP2lHD1qdxkoQGlWUtQverqvG9KZSkm6BHFha4PP6XRZbpARNfHRxA==
|
integrity sha512-V57CMzbOgTzUWGOWQ8GzHQdpJP6JnrYVNCtTBNxVYEnlVRvo4uEJqHhtAT8vhDFrIuJOXLrTL1Fki4h5oI7xxg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@jsonjoy.com/buffers" "^17.65.0"
|
"@jsonjoy.com/buffers" "^17.65.0"
|
||||||
"@jsonjoy.com/fs-node-utils" "4.57.3"
|
"@jsonjoy.com/fs-node-utils" "4.57.6"
|
||||||
"@jsonjoy.com/json-pack" "^17.65.0"
|
"@jsonjoy.com/json-pack" "^17.65.0"
|
||||||
"@jsonjoy.com/util" "^17.65.0"
|
"@jsonjoy.com/util" "^17.65.0"
|
||||||
|
|
||||||
@ -2908,9 +2908,9 @@
|
|||||||
"@types/unist" "*"
|
"@types/unist" "*"
|
||||||
|
|
||||||
"@types/mdx@^2.0.0":
|
"@types/mdx@^2.0.0":
|
||||||
version "2.0.13"
|
version "2.0.14"
|
||||||
resolved "https://registry.yarnpkg.com/@types/mdx/-/mdx-2.0.13.tgz#68f6877043d377092890ff5b298152b0a21671bd"
|
resolved "https://registry.yarnpkg.com/@types/mdx/-/mdx-2.0.14.tgz#c1e54113265b152021ab0afe0434e3cadd90bfe3"
|
||||||
integrity sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==
|
integrity sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg==
|
||||||
|
|
||||||
"@types/mime@^1":
|
"@types/mime@^1":
|
||||||
version "1.3.5"
|
version "1.3.5"
|
||||||
@ -2923,9 +2923,9 @@
|
|||||||
integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==
|
integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==
|
||||||
|
|
||||||
"@types/node@*":
|
"@types/node@*":
|
||||||
version "25.9.1"
|
version "25.9.2"
|
||||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-25.9.1.tgz#3bda556db500ae4319c08e7fc9ab94f19013ba0b"
|
resolved "https://registry.yarnpkg.com/@types/node/-/node-25.9.2.tgz#fc8958e757994b71fee516f9634bdb03d1b19e9f"
|
||||||
integrity sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==
|
integrity sha512-G05zqtJhcDLb8uslf5EjCxXg9G1KQxiV8OS0R26IC//Eoyitzqe8z37I7cqvnZlrlSfgocQRfSn/AHBZJJFyGw==
|
||||||
dependencies:
|
dependencies:
|
||||||
undici-types ">=7.24.0 <7.24.7"
|
undici-types ">=7.24.0 <7.24.7"
|
||||||
|
|
||||||
@ -2976,9 +2976,9 @@
|
|||||||
"@types/react" "*"
|
"@types/react" "*"
|
||||||
|
|
||||||
"@types/react@*":
|
"@types/react@*":
|
||||||
version "19.2.15"
|
version "19.2.17"
|
||||||
resolved "https://registry.yarnpkg.com/@types/react/-/react-19.2.15.tgz#9e2c6a4251a290f5c525c3143caa872fa6e01e0d"
|
resolved "https://registry.yarnpkg.com/@types/react/-/react-19.2.17.tgz#dccac365baa0f1734ec270ff4b51c89465e8dc7f"
|
||||||
integrity sha512-eRwcGNHve+E8qtEQSSRl6urh+rFop4v8gm6O8rGv25CodbvFdLjA1vVQ1KkiFE0w0UPOnb8tDiFKL5lp0rtY5Q==
|
integrity sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==
|
||||||
dependencies:
|
dependencies:
|
||||||
csstype "^3.2.2"
|
csstype "^3.2.2"
|
||||||
|
|
||||||
@ -3471,9 +3471,9 @@ balanced-match@^1.0.0:
|
|||||||
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
|
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
|
||||||
|
|
||||||
baseline-browser-mapping@^2.10.12:
|
baseline-browser-mapping@^2.10.12:
|
||||||
version "2.10.33"
|
version "2.10.35"
|
||||||
resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.33.tgz#27c299b096404978831958d429f48390424c4f9b"
|
resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.35.tgz#f0f2232e0de2d2f82cc491bcf830b05ed05937c6"
|
||||||
integrity sha512-bA6+tcSLpz2tIEdDXZPpPTIuxBcC4+w6SieaYyfigIa4h8GlFxbA17v22Vx3JUtuZQj9SgOsnbK+aTBzyDyEuw==
|
integrity sha512-honAfLBde0HAFLdNyBEfuuENkF6zR+ozxqxa/2zJKHBe1qzLqyTSeRKpdPEHAP03rlDGyQOPnCSxnVpVqQo9Mg==
|
||||||
|
|
||||||
batch@0.6.1:
|
batch@0.6.1:
|
||||||
version "0.6.1"
|
version "0.6.1"
|
||||||
@ -3680,9 +3680,9 @@ caniuse-api@^3.0.0:
|
|||||||
lodash.uniq "^4.5.0"
|
lodash.uniq "^4.5.0"
|
||||||
|
|
||||||
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001782, caniuse-lite@^1.0.30001787:
|
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001782, caniuse-lite@^1.0.30001787:
|
||||||
version "1.0.30001793"
|
version "1.0.30001797"
|
||||||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001793.tgz#238887ddf5fcfc8c36d872394d0a78a517312a72"
|
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001797.tgz#1332709e1439f01ff92085dd17001e0a45897ec0"
|
||||||
integrity sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==
|
integrity sha512-l8xKG+gwAIExZGl9FrF7KUwuOmk6wbEPC9Xoy/RtnWv1XG0Q4LFlagaLpUv3Kiza3W/wm27zy0yWJEieYKAP6w==
|
||||||
|
|
||||||
ccount@^2.0.0:
|
ccount@^2.0.0:
|
||||||
version "2.0.1"
|
version "2.0.1"
|
||||||
@ -4476,9 +4476,9 @@ ee-first@1.1.1:
|
|||||||
integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
|
integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
|
||||||
|
|
||||||
electron-to-chromium@^1.5.328:
|
electron-to-chromium@^1.5.328:
|
||||||
version "1.5.364"
|
version "1.5.371"
|
||||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.364.tgz#38af950b724b22b937c342c0c4b361bd2fb50669"
|
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.371.tgz#fa5684f2a514c57368823f9e75553f9a7c5ef0be"
|
||||||
integrity sha512-G/dYE3+AYhyHwzTwg8UbnXf7zqMERYh7l2jJ3QujhFsH8agSYwtnGAR2aZ7f0AakIKJXd5En/Hre4igIUrdlYw==
|
integrity sha512-e9htk9mAYL6AzmkEhSvVVw7IWGSBJ/Bqdn2eRyRLrj1g6sncN4WbFt5qnILYoCktktr45pyjIrOiRvBThQ808w==
|
||||||
|
|
||||||
emoji-regex@^8.0.0:
|
emoji-regex@^8.0.0:
|
||||||
version "8.0.0"
|
version "8.0.0"
|
||||||
@ -4519,9 +4519,9 @@ encoding-sniffer@^0.2.1:
|
|||||||
whatwg-encoding "^3.1.1"
|
whatwg-encoding "^3.1.1"
|
||||||
|
|
||||||
enhanced-resolve@^5.22.0:
|
enhanced-resolve@^5.22.0:
|
||||||
version "5.22.1"
|
version "5.23.0"
|
||||||
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.22.1.tgz#c34bc3f414298496fc244b21bbe316440782da17"
|
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.23.0.tgz#dfdf8d1c9065e4b52f8a598356138931c07305f9"
|
||||||
integrity sha512-6QEuw3zoX1SJQc7b87aBXke/no+mG2bTBgw29gWMQonLmpEkWoCAVkl+M49e48AZlWzxiDzDZzYdp6kobcyLww==
|
integrity sha512-yJN/BOOLxcOW2aQgeif9mSnaUB8KtvmMMp56oA1kx1CRfBKbhZm2pJ+NBY+3eOboHxix8lfjWpHE0Ei5U8RbSA==
|
||||||
dependencies:
|
dependencies:
|
||||||
graceful-fs "^4.2.4"
|
graceful-fs "^4.2.4"
|
||||||
tapable "^2.3.3"
|
tapable "^2.3.3"
|
||||||
@ -5889,9 +5889,9 @@ latest-version@^7.0.0:
|
|||||||
package-json "^8.1.0"
|
package-json "^8.1.0"
|
||||||
|
|
||||||
launch-editor@^2.6.1:
|
launch-editor@^2.6.1:
|
||||||
version "2.14.0"
|
version "2.14.1"
|
||||||
resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.14.0.tgz#acef0cfda90ead4e0ab7fecb8ad0e1453bc7d3a6"
|
resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.14.1.tgz#f7e0da3f58aaea03fea01074d840b5f739ed7ddc"
|
||||||
integrity sha512-Pj3ZOx9dD1BClS7YcSQx0An1PCF9wz4JpvbEmKvDxQtm0jxlkk5NhW8x0SBAKA/acHBKZaqdd5FFOWlXo500JA==
|
integrity sha512-QWBrQsMpH7gPr965dsKD/3cKWiNoTjpATQf++Xq63N6sKRGMwlVXz41O1IZTMfZQgBctD/K5Zt06+/I6pP6+HA==
|
||||||
dependencies:
|
dependencies:
|
||||||
picocolors "^1.1.1"
|
picocolors "^1.1.1"
|
||||||
shell-quote "^1.8.4"
|
shell-quote "^1.8.4"
|
||||||
@ -6247,18 +6247,18 @@ media-typer@0.3.0:
|
|||||||
integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==
|
integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==
|
||||||
|
|
||||||
memfs@^4.43.1:
|
memfs@^4.43.1:
|
||||||
version "4.57.3"
|
version "4.57.6"
|
||||||
resolved "https://registry.yarnpkg.com/memfs/-/memfs-4.57.3.tgz#dceeff71e88dbb8d3892786be90f83e303d1d287"
|
resolved "https://registry.yarnpkg.com/memfs/-/memfs-4.57.6.tgz#ec7c83388eb6822ff1046a576292743afbd22fa5"
|
||||||
integrity sha512-dlvqataP1zUOlfj6pv9wgCSC5pRIooNntXgdLfR7FWlcKi1p8fMfJADtHp/+8Dhu5JFvMHNh7L0QVcuaaBKqqA==
|
integrity sha512-WQK+DGjKCnPdpSyJUXphz+COF2uEhhsxQ3VIWBSbzpbbXuch3h4FePMqXrXGdLjsTgo4JFzBFsP6AWd9pVazGw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@jsonjoy.com/fs-core" "4.57.3"
|
"@jsonjoy.com/fs-core" "4.57.6"
|
||||||
"@jsonjoy.com/fs-fsa" "4.57.3"
|
"@jsonjoy.com/fs-fsa" "4.57.6"
|
||||||
"@jsonjoy.com/fs-node" "4.57.3"
|
"@jsonjoy.com/fs-node" "4.57.6"
|
||||||
"@jsonjoy.com/fs-node-builtins" "4.57.3"
|
"@jsonjoy.com/fs-node-builtins" "4.57.6"
|
||||||
"@jsonjoy.com/fs-node-to-fsa" "4.57.3"
|
"@jsonjoy.com/fs-node-to-fsa" "4.57.6"
|
||||||
"@jsonjoy.com/fs-node-utils" "4.57.3"
|
"@jsonjoy.com/fs-node-utils" "4.57.6"
|
||||||
"@jsonjoy.com/fs-print" "4.57.3"
|
"@jsonjoy.com/fs-print" "4.57.6"
|
||||||
"@jsonjoy.com/fs-snapshot" "4.57.3"
|
"@jsonjoy.com/fs-snapshot" "4.57.6"
|
||||||
"@jsonjoy.com/json-pack" "^1.11.0"
|
"@jsonjoy.com/json-pack" "^1.11.0"
|
||||||
"@jsonjoy.com/util" "^1.9.0"
|
"@jsonjoy.com/util" "^1.9.0"
|
||||||
glob-to-regex.js "^1.0.1"
|
glob-to-regex.js "^1.0.1"
|
||||||
@ -6853,9 +6853,9 @@ node-emoji@^2.1.0:
|
|||||||
skin-tone "^2.0.0"
|
skin-tone "^2.0.0"
|
||||||
|
|
||||||
node-releases@^2.0.36:
|
node-releases@^2.0.36:
|
||||||
version "2.0.46"
|
version "2.0.47"
|
||||||
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.46.tgz#d188a129a83f5e03a101aacb58f260f2ee8faaa1"
|
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.47.tgz#521bb2786da8eb140b748841c0b3b3a75334ffc4"
|
||||||
integrity sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ==
|
integrity sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og==
|
||||||
|
|
||||||
normalize-path@^3.0.0, normalize-path@~3.0.0:
|
normalize-path@^3.0.0, normalize-path@~3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
@ -7699,9 +7699,9 @@ postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.16:
|
|||||||
util-deprecate "^1.0.2"
|
util-deprecate "^1.0.2"
|
||||||
|
|
||||||
postcss-selector-parser@^7.0.0:
|
postcss-selector-parser@^7.0.0:
|
||||||
version "7.1.1"
|
version "7.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz#e75d2e0d843f620e5df69076166f4e16f891cb9f"
|
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-7.1.2.tgz#e2dc51fc26c007a29bc3195ee9e68ca6df52e32e"
|
||||||
integrity sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==
|
integrity sha512-Wjvt4scRFouioIInHf51IFNP4ltJ2EngJM+cZPGiqbKetBfmP3vpdPV8ID2S6JS6/jdo74N8+aEYH9lQr2C6sA==
|
||||||
dependencies:
|
dependencies:
|
||||||
cssesc "^3.0.0"
|
cssesc "^3.0.0"
|
||||||
util-deprecate "^1.0.2"
|
util-deprecate "^1.0.2"
|
||||||
@ -7796,9 +7796,9 @@ prop-types@^15.6.2, prop-types@^15.7.2:
|
|||||||
react-is "^16.13.1"
|
react-is "^16.13.1"
|
||||||
|
|
||||||
property-information@^7.0.0:
|
property-information@^7.0.0:
|
||||||
version "7.1.0"
|
version "7.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/property-information/-/property-information-7.1.0.tgz#b622e8646e02b580205415586b40804d3e8bfd5d"
|
resolved "https://registry.yarnpkg.com/property-information/-/property-information-7.2.0.tgz#0809b34264e995c0bfcd3227028a1e35210af80a"
|
||||||
integrity sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==
|
integrity sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==
|
||||||
|
|
||||||
proto-list@~1.2.1:
|
proto-list@~1.2.1:
|
||||||
version "1.2.4"
|
version "1.2.4"
|
||||||
@ -8372,9 +8372,9 @@ semver@^6.3.1:
|
|||||||
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
|
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
|
||||||
|
|
||||||
semver@^7.3.5, semver@^7.3.7, semver@^7.5.4:
|
semver@^7.3.5, semver@^7.3.7, semver@^7.5.4:
|
||||||
version "7.8.1"
|
version "7.8.4"
|
||||||
resolved "https://registry.yarnpkg.com/semver/-/semver-7.8.1.tgz#bf4970b5e70fda0686363cc18bfe8805d5ed957e"
|
resolved "https://registry.yarnpkg.com/semver/-/semver-7.8.4.tgz#c73eceebae0616934be8dff28a7fd70757c8e696"
|
||||||
integrity sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==
|
integrity sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==
|
||||||
|
|
||||||
send@~0.19.0, send@~0.19.1:
|
send@~0.19.0, send@~0.19.1:
|
||||||
version "0.19.2"
|
version "0.19.2"
|
||||||
@ -8482,7 +8482,7 @@ shell-quote@^1.8.4:
|
|||||||
resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.4.tgz#2edd9a4dcefc96649e2e2cb12f637b1f1d92a190"
|
resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.4.tgz#2edd9a4dcefc96649e2e2cb12f637b1f1d92a190"
|
||||||
integrity sha512-VsC6n6vz1ihYYyZZwX7YZSF5l5x36ca17OC+a69h94YqB7X6XLwf+5MOgynYir2SLFUbl8gIYvBo8K8RoNQ6bQ==
|
integrity sha512-VsC6n6vz1ihYYyZZwX7YZSF5l5x36ca17OC+a69h94YqB7X6XLwf+5MOgynYir2SLFUbl8gIYvBo8K8RoNQ6bQ==
|
||||||
|
|
||||||
side-channel-list@^1.0.0:
|
side-channel-list@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.1.tgz#c2e0b5a14a540aebee3bbc6c3f8666cc9b509127"
|
resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.1.tgz#c2e0b5a14a540aebee3bbc6c3f8666cc9b509127"
|
||||||
integrity sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==
|
integrity sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==
|
||||||
@ -8512,13 +8512,13 @@ side-channel-weakmap@^1.0.2:
|
|||||||
side-channel-map "^1.0.1"
|
side-channel-map "^1.0.1"
|
||||||
|
|
||||||
side-channel@^1.1.0:
|
side-channel@^1.1.0:
|
||||||
version "1.1.0"
|
version "1.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9"
|
resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.1.tgz#ea02c62e05dc4bea67d4442f0fb71ee192f8e0ab"
|
||||||
integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==
|
integrity sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
es-errors "^1.3.0"
|
es-errors "^1.3.0"
|
||||||
object-inspect "^1.13.3"
|
object-inspect "^1.13.4"
|
||||||
side-channel-list "^1.0.0"
|
side-channel-list "^1.0.1"
|
||||||
side-channel-map "^1.0.1"
|
side-channel-map "^1.0.1"
|
||||||
side-channel-weakmap "^1.0.2"
|
side-channel-weakmap "^1.0.2"
|
||||||
|
|
||||||
@ -8943,9 +8943,9 @@ typescript@~6.0.0:
|
|||||||
integrity sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==
|
integrity sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==
|
||||||
|
|
||||||
undici@^7.19.0:
|
undici@^7.19.0:
|
||||||
version "7.26.0"
|
version "7.27.2"
|
||||||
resolved "https://registry.yarnpkg.com/undici/-/undici-7.26.0.tgz#d413a2b5752e3e71e003bb268dec32b9a0ad0ce7"
|
resolved "https://registry.yarnpkg.com/undici/-/undici-7.27.2.tgz#f8fae968ee68377cfc61713d9cd152773716804f"
|
||||||
integrity sha512-3O9Tf67pGhgOv9jM35AbhkXAKi13f3oy3aE4CSgr+TckGeY+/iu97ZXN+J7DpHPzLbVApFd1IFhcnBjREYXYcg==
|
integrity sha512-uZsKNuzQxDMUY6M3pIMvy5tvlGmtq8XJ2oLAkfRKGNu+1VQAIvLy2xIVG5ATZl5wDXl/tddByAWCizRbOme+TA==
|
||||||
|
|
||||||
unicode-canonical-property-names-ecmascript@^2.0.0:
|
unicode-canonical-property-names-ecmascript@^2.0.0:
|
||||||
version "2.0.1"
|
version "2.0.1"
|
||||||
@ -9300,9 +9300,9 @@ webpackbar@^7.0.0:
|
|||||||
std-env "^3.7.0"
|
std-env "^3.7.0"
|
||||||
|
|
||||||
websocket-driver@>=0.5.1, websocket-driver@^0.7.4:
|
websocket-driver@>=0.5.1, websocket-driver@^0.7.4:
|
||||||
version "0.7.4"
|
version "0.7.5"
|
||||||
resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760"
|
resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.5.tgz#569d22764ab21f2de20af0e74b411e8ae5a0fa46"
|
||||||
integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==
|
integrity sha512-ZL2+3c7kMBdIRCMz6l8jQMHyGVxj+UL+xVk74Ombiciboca8rHa15L86B19E5oh1pL9Ii/uj54gtsIrZGMo6zA==
|
||||||
dependencies:
|
dependencies:
|
||||||
http-parser-js ">=0.5.1"
|
http-parser-js ">=0.5.1"
|
||||||
safe-buffer ">=5.1.0"
|
safe-buffer ">=5.1.0"
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user