Coverage for src/edwh_restic_plugin/repositories/r2.py: 48%
23 statements
« prev ^ index » next coverage.py v7.6.12, created at 2025-02-28 16:28 +0100
« prev ^ index » next coverage.py v7.6.12, created at 2025-02-28 16:28 +0100
1import os
3from edwh.helpers import generate_password
4from invoke import Context
6from . import register
7from .s3 import S3Repository
10@register()
11class R2Repository(S3Repository):
12 # https://docs.oracle.com/en-us/iaas/Content/Object/Tasks/s3compatibleapi.htm
14 def setup(self) -> None:
15 self.check_env(
16 "R2_NAME",
17 default=None,
18 comment="Bucket to store your backups",
19 )
21 self.check_env(
22 "R2_ACCOUNT_ID",
23 default=None,
24 comment="The ID of the account this bucket belongs to. "
25 "Usually seen in the url: https://dash.cloudflare.com/your-id-goes-here/",
26 )
28 self.check_env(
29 "R2_PASSWORD",
30 default=generate_password(silent=True),
31 comment="Create a Restic password, keep it safe.",
32 )
34 self.check_env("R2_ACCESS_KEY_ID", default=None, comment="(Customer) Access Key")
35 self.check_env("R2_SECRET_ACCESS_KEY", default=None, comment="(Customer) Access Secret")
37 def prepare_for_restic(self, _: Context) -> None:
38 env = self.env_config
39 os.environ["RESTIC_PASSWORD"] = env["R2_PASSWORD"]
40 os.environ["RESTIC_REPOSITORY"] = self.uri
42 os.environ["AWS_ACCESS_KEY_ID"] = env["R2_ACCESS_KEY_ID"]
43 os.environ["AWS_SECRET_ACCESS_KEY"] = env["R2_SECRET_ACCESS_KEY"]
45 @property
46 def uri(self) -> str:
47 env = self.env_config
48 return "s3:{account_id}.r2.cloudflarestorage.com/{bucket}".format(
49 account_id=env.get("R2_ACCOUNT_ID", "?"),
50 bucket=env.get("R2_NAME", "?"),
51 )