Skip to content
This repository was archived by the owner on Mar 31, 2025. It is now read-only.

Commit fb21225

Browse files
leonardocearmru
andauthored
feat: implementation of the Backup service (#7)
Signed-off-by: Leonardo Cecchi <[email protected]> Signed-off-by: Armando Ruocco <[email protected]> Co-authored-by: Armando Ruocco <[email protected]>
1 parent c3cda12 commit fb21225

File tree

25 files changed

+915
-124
lines changed

25 files changed

+915
-124
lines changed

Dockerfile

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@ RUN --mount=type=cache,target=/root/.cache/go-build ./scripts/build.sh
1212

1313
# Step 2: build the image to be actually run
1414
FROM alpine:3.18.4
15+
RUN mkdir /tmp/kopia-dist && \
16+
wget -o /tmp/kopia-dist/kopia-0.15.0-linux-x64.tar.gz https://github.com/kopia/kopia/releases/download/v0.15.0/kopia-0.15.0-linux-x64.tar.gz && \
17+
tar -C /tmp/kopia-dist -xvzf kopia-0.15.0-linux-x64.tar.gz && \
18+
cp /tmp/kopia-dist/kopia-0.15.0-linux-x64/kopia /usr/bin/kopia && \
19+
rm -rf /tmp/kopia-dist
1520
USER 10001:10001
1621
COPY --from=builder /app/bin/plugin-pvc-backup /app/bin/plugin-pvc-backup
1722
ENTRYPOINT ["/app/bin/plugin-pvc-backup"]

go.mod

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ toolchain go1.21.6
66

77
require (
88
github.com/cloudnative-pg/cloudnative-pg v1.22.1-0.20240123130737-a22a155b9eb8
9-
github.com/cloudnative-pg/cnpg-i v0.0.0-20240124144003-4c0a1ac46426
9+
github.com/cloudnative-pg/cnpg-i v0.0.0-20240202130713-14050b29b7a2
1010
github.com/evanphx/json-patch/v5 v5.8.1
1111
github.com/go-logr/logr v1.3.0
1212
github.com/go-logr/zapr v1.2.4
@@ -16,10 +16,13 @@ require (
1616
go.uber.org/zap v1.26.0
1717
google.golang.org/grpc v1.60.1
1818
k8s.io/api v0.28.4
19+
k8s.io/apimachinery v0.28.4
20+
k8s.io/client-go v0.28.4
1921
)
2022

2123
require (
2224
github.com/beorn7/perks v1.0.1 // indirect
25+
github.com/blang/semver v3.5.1+incompatible // indirect
2326
github.com/cespare/xxhash/v2 v2.2.0 // indirect
2427
github.com/davecgh/go-spew v1.1.1 // indirect
2528
github.com/emicklei/go-restful/v3 v3.11.0 // indirect
@@ -33,17 +36,24 @@ require (
3336
github.com/google/gnostic-models v0.6.8 // indirect
3437
github.com/google/go-cmp v0.6.0 // indirect
3538
github.com/google/gofuzz v1.2.0 // indirect
39+
github.com/google/pprof v0.0.0-20230602150820-91b7bce49751 // indirect
3640
github.com/google/uuid v1.5.0 // indirect
3741
github.com/hashicorp/hcl v1.0.0 // indirect
3842
github.com/imdario/mergo v0.3.12 // indirect
3943
github.com/inconshreveable/mousetrap v1.1.0 // indirect
44+
github.com/jackc/pgpassfile v1.0.0 // indirect
45+
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect
46+
github.com/jackc/pgx/v5 v5.5.1 // indirect
47+
github.com/jackc/puddle/v2 v2.2.1 // indirect
4048
github.com/josharian/intern v1.0.0 // indirect
4149
github.com/json-iterator/go v1.1.12 // indirect
50+
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
4251
github.com/kubernetes-csi/external-snapshotter/client/v6 v6.3.0 // indirect
4352
github.com/lib/pq v1.10.9 // indirect
4453
github.com/magiconair/properties v1.8.6 // indirect
4554
github.com/mailru/easyjson v0.7.7 // indirect
4655
github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
56+
github.com/mitchellh/go-ps v1.0.0 // indirect
4757
github.com/mitchellh/mapstructure v1.5.0 // indirect
4858
github.com/moby/spdystream v0.2.0 // indirect
4959
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
@@ -54,7 +64,7 @@ require (
5464
github.com/pkg/errors v0.9.1 // indirect
5565
github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.70.0 // indirect
5666
github.com/prometheus/client_golang v1.17.0 // indirect
57-
github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16 // indirect
67+
github.com/prometheus/client_model v0.5.0 // indirect
5868
github.com/prometheus/common v0.44.0 // indirect
5969
github.com/prometheus/procfs v0.11.1 // indirect
6070
github.com/robfig/cron v1.2.0 // indirect
@@ -63,10 +73,13 @@ require (
6373
github.com/spf13/jwalterweatherman v1.1.0 // indirect
6474
github.com/spf13/pflag v1.0.5 // indirect
6575
github.com/subosito/gotenv v1.4.1 // indirect
76+
go.uber.org/atomic v1.11.0 // indirect
6677
go.uber.org/multierr v1.11.0 // indirect
78+
golang.org/x/crypto v0.18.0 // indirect
6779
golang.org/x/exp v0.0.0-20231219160207-73b9e39aefca // indirect
6880
golang.org/x/net v0.20.0 // indirect
6981
golang.org/x/oauth2 v0.13.0 // indirect
82+
golang.org/x/sync v0.5.0 // indirect
7083
golang.org/x/sys v0.16.0 // indirect
7184
golang.org/x/term v0.16.0 // indirect
7285
golang.org/x/text v0.14.0 // indirect
@@ -80,8 +93,6 @@ require (
8093
gopkg.in/yaml.v2 v2.4.0 // indirect
8194
gopkg.in/yaml.v3 v3.0.1 // indirect
8295
k8s.io/apiextensions-apiserver v0.28.4 // indirect
83-
k8s.io/apimachinery v0.28.4 // indirect
84-
k8s.io/client-go v0.28.4 // indirect
8596
k8s.io/component-base v0.28.4 // indirect
8697
k8s.io/klog/v2 v2.110.1 // indirect
8798
k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 // indirect

go.sum

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,15 @@ cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3f
3838
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
3939
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
4040
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
41+
github.com/DATA-DOG/go-sqlmock v1.5.1 h1:FK6RCIUSfmbnI/imIICmboyQBkOckutaa6R5YYlLZyo=
42+
github.com/DATA-DOG/go-sqlmock v1.5.1/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU=
4143
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
4244
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
4345
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
4446
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
4547
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
48+
github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ=
49+
github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
4650
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
4751
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
4852
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
@@ -52,10 +56,8 @@ github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMn
5256
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
5357
github.com/cloudnative-pg/cloudnative-pg v1.22.1-0.20240123130737-a22a155b9eb8 h1://2N4Zt2HER9w9l/HMbJheplJTNBgh8FlZ1mSrC2DJQ=
5458
github.com/cloudnative-pg/cloudnative-pg v1.22.1-0.20240123130737-a22a155b9eb8/go.mod h1:r6blheO2ihiuqKbk6rqPN5//PPJnYtKCGT2OxpXtk2o=
55-
github.com/cloudnative-pg/cnpg-i v0.0.0-20240122164555-5215ff219c8f h1:ypwPq45y8ezzwxUTHL0VkzkT2+pcHnE4yRoeGTP8fp8=
56-
github.com/cloudnative-pg/cnpg-i v0.0.0-20240122164555-5215ff219c8f/go.mod h1:0G5GXQVj09KvONIcYURyroL74zOFGjv4eI5OXz7/G/0=
57-
github.com/cloudnative-pg/cnpg-i v0.0.0-20240124144003-4c0a1ac46426 h1:eW94u+AQoFR+KDyIenekcHWCE6Kc48mo8CgGB+VOzKU=
58-
github.com/cloudnative-pg/cnpg-i v0.0.0-20240124144003-4c0a1ac46426/go.mod h1:0G5GXQVj09KvONIcYURyroL74zOFGjv4eI5OXz7/G/0=
59+
github.com/cloudnative-pg/cnpg-i v0.0.0-20240202130713-14050b29b7a2 h1:7Cow1BF5rM3k7q+QYjJsPiYGZTK8w+uTGa4VZ3IbBpk=
60+
github.com/cloudnative-pg/cnpg-i v0.0.0-20240202130713-14050b29b7a2/go.mod h1:0G5GXQVj09KvONIcYURyroL74zOFGjv4eI5OXz7/G/0=
5961
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
6062
github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
6163
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
@@ -162,8 +164,8 @@ github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hf
162164
github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
163165
github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
164166
github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
165-
github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec=
166-
github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
167+
github.com/google/pprof v0.0.0-20230602150820-91b7bce49751 h1:hR7/MlvK23p6+lIw9SN1TigNLn9ZnF3W4SYRKq2gAHs=
168+
github.com/google/pprof v0.0.0-20230602150820-91b7bce49751/go.mod h1:Jh3hGz2jkYak8qXPD19ryItVnUgpgeqzdkY/D0EaeuA=
167169
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
168170
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
169171
github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU=
@@ -184,12 +186,22 @@ github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU=
184186
github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
185187
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
186188
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
189+
github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
190+
github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
191+
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk=
192+
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
193+
github.com/jackc/pgx/v5 v5.5.1 h1:5I9etrGkLrN+2XPCsi6XLlV5DITbSL/xBZdmAxFcXPI=
194+
github.com/jackc/pgx/v5 v5.5.1/go.mod h1:Ig06C2Vu0t5qXC60W8sqIthScaEnFvojjj9dSljmHRA=
195+
github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk=
196+
github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
187197
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
188198
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
189199
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
190200
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
191201
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
192202
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
203+
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
204+
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
193205
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
194206
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
195207
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
@@ -211,6 +223,8 @@ github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0
211223
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
212224
github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo=
213225
github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
226+
github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc=
227+
github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg=
214228
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
215229
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
216230
github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8=
@@ -241,8 +255,8 @@ github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.70.0/g
241255
github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
242256
github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY=
243257
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
244-
github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16 h1:v7DLqVdK4VrYkVD5diGdl4sxJurKJEMnODWRJlxV9oM=
245-
github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU=
258+
github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
259+
github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI=
246260
github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY=
247261
github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY=
248262
github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
@@ -280,6 +294,8 @@ github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcU
280294
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
281295
github.com/subosito/gotenv v1.4.1 h1:jyEFiXpy21Wm81FBN71l9VoMMV8H8jG+qIK3GCpY6Qs=
282296
github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
297+
github.com/thoas/go-funk v0.9.3 h1:7+nAEx3kn5ZJcnDm2Bh23N2yOtweO14bi//dvRtgLpw=
298+
github.com/thoas/go-funk v0.9.3/go.mod h1:+IWnUfUmFO1+WVYQWQtIJHeRRdaIyyYglZN7xzUPe4Q=
283299
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
284300
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
285301
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
@@ -293,6 +309,8 @@ go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
293309
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
294310
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
295311
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
312+
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
313+
go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
296314
go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
297315
go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
298316
go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4=
@@ -310,6 +328,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh
310328
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
311329
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
312330
golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
331+
golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc=
332+
golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg=
313333
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
314334
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
315335
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -405,6 +425,8 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ
405425
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
406426
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
407427
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
428+
golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
429+
golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
408430
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
409431
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
410432
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=

internal/backup/backup.go

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
package backup
2+
3+
import (
4+
"context"
5+
"time"
6+
7+
"github.com/cloudnative-pg/cnpg-i/pkg/backup"
8+
9+
"github.com/cloudnative-pg/plugin-pvc-backup/internal/backup/executor"
10+
"github.com/cloudnative-pg/plugin-pvc-backup/internal/backup/storage"
11+
"github.com/cloudnative-pg/plugin-pvc-backup/pkg/logging"
12+
"github.com/cloudnative-pg/plugin-pvc-backup/pkg/metadata"
13+
"github.com/cloudnative-pg/plugin-pvc-backup/pkg/pluginhelper"
14+
)
15+
16+
// Implementation is the implementation of the identity service
17+
type Implementation struct {
18+
backup.BackupServer
19+
}
20+
21+
// GetCapabilities gets the capabilities of the Backup service
22+
func (Implementation) GetCapabilities(
23+
context.Context,
24+
*backup.BackupCapabilitiesRequest,
25+
) (*backup.BackupCapabilitiesResult, error) {
26+
return &backup.BackupCapabilitiesResult{
27+
Capabilities: []*backup.BackupCapability{
28+
{
29+
Type: &backup.BackupCapability_Rpc{
30+
Rpc: &backup.BackupCapability_RPC{
31+
Type: backup.BackupCapability_RPC_TYPE_BACKUP,
32+
},
33+
},
34+
},
35+
},
36+
}, nil
37+
}
38+
39+
// Backup take a physical backup using Kopia
40+
func (Implementation) Backup(
41+
ctx context.Context,
42+
request *backup.BackupRequest,
43+
) (*backup.BackupResult, error) {
44+
contextLogger := logging.FromContext(ctx)
45+
46+
helper, err := pluginhelper.NewDataBuilder(metadata.Data.Name, request.ClusterDefinition).Build()
47+
if err != nil {
48+
contextLogger.Error(err, "Error while decoding cluster definition from CNPG")
49+
return nil, err
50+
}
51+
52+
backupObject, err := helper.DecodeBackup(request.BackupDefinition)
53+
if err != nil {
54+
contextLogger.Error(err, "Error while decoding backup definition from CNPG")
55+
return nil, err
56+
}
57+
58+
cluster := helper.GetCluster()
59+
rep, err := executor.NewRepository(
60+
ctx,
61+
storage.GetBasePath(cluster.Name),
62+
storage.GetKopiaConfigFilePath(cluster.Name),
63+
storage.GetKopiaCacheDirectory(cluster.Name),
64+
)
65+
if err != nil {
66+
return nil, err
67+
}
68+
69+
exec := executor.NewLocalExecutor(
70+
cluster,
71+
backupObject,
72+
rep,
73+
)
74+
75+
startedAt := time.Now()
76+
backupInfo, err := exec.TakeBackup(ctx)
77+
if err != nil {
78+
return nil, err
79+
}
80+
81+
return &backup.BackupResult{
82+
BackupId: backupInfo.BackupName,
83+
BackupName: backupInfo.BackupName,
84+
StartedAt: startedAt.Unix(),
85+
StoppedAt: time.Now().Unix(),
86+
BeginWal: exec.GetBeginWal(),
87+
EndWal: exec.GetEndWal(),
88+
BeginLsn: string(backupInfo.BeginLSN),
89+
EndLsn: string(backupInfo.EndLSN),
90+
BackupLabelFile: backupInfo.LabelFile,
91+
TablespaceMapFile: backupInfo.SpcmapFile,
92+
Online: true,
93+
}, nil
94+
}

internal/backup/doc.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
// Package backup contain the implementation of the Backup service
2+
package backup
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package executor
2+
3+
const podIP = "127.0.0.1"

0 commit comments

Comments
 (0)