mirror of
https://github.com/ansible-collections/community.general.git
synced 2026-06-12 02:55:29 +00:00
kopia: Add kopia_repository module (#11752)
* Add kopia module util
* fix pipeline suggestions
* add kopia repository module
* apply code review changes
* remove kopia_runner instance unit test
* update botmeta with kopia
* refactor docs and redundant state
* add kopia_info module and fix kopia_repository check mode support
- Add kopia_info module for read-only repository information gathering
(kopia repository status, kopia repository throttle get) following
the pacemaker_info pattern with ModuleHelper and info_module fragment
- Add _fmt_throttle to _kopia.py and register throttle format in
kopia_runner; remove throttle_operation get option from
kopia_repository per Ansible best practices (info ops belong in
_info modules)
- Add throttle suboption dict to kopia_repository with all seven
kopia repository throttle set flags
- Fix check_mode: support from full to actually full by implementing
_predict_value() in kopia_repository; previously check_mode_skip
caused changed to always be false in check mode
- Add check mode test cases to test_kopia_repository.yaml covering
created and disconnected states for both connected and disconnected
initial conditions
- Add BOTMETA.yml entry and full test fixture for kopia_info
* apply code review suggestions
(cherry picked from commit d4031f36e4)
Co-authored-by: munchtoast <45038532+munchtoast@users.noreply.github.com>
346 lines
8.3 KiB
YAML
346 lines
8.3 KiB
YAML
# Copyright (c) 2026, Dexter Le <dextersydney2001@gmail.com>
|
|
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
---
|
|
anchors:
|
|
environ: &env-def {environ_update: {LANGUAGE: C, LC_ALL: C}, check_rc: false}
|
|
status_ok: &status-ok
|
|
command: [/testbin/kopia, repository, status, --config-file=/etc/kopia/root.config]
|
|
environ: *env-def
|
|
rc: 0
|
|
out: "Connected to repository."
|
|
err: ''
|
|
status_empty: &status-empty
|
|
command: [/testbin/kopia, repository, status, --config-file=/etc/kopia/root.config]
|
|
environ: *env-def
|
|
rc: 1
|
|
out: ''
|
|
err: 'repository not connected'
|
|
|
|
test_cases:
|
|
- id: create_s3
|
|
input:
|
|
state: created
|
|
password: secret
|
|
config: /etc/kopia/root.config
|
|
backend:
|
|
provider: s3
|
|
bucket: my-bucket
|
|
access_key: myaccesskey
|
|
secret_access_key: mysecretkey
|
|
output:
|
|
changed: true
|
|
mocks:
|
|
run_command:
|
|
- *status-empty
|
|
- command:
|
|
- /testbin/kopia
|
|
- repository
|
|
- create
|
|
- s3
|
|
- --bucket=my-bucket
|
|
- --access-key=myaccesskey
|
|
- --secret-access-key=mysecretkey
|
|
- --password=secret
|
|
- --config-file=/etc/kopia/root.config
|
|
environ: *env-def
|
|
rc: 0
|
|
out: ''
|
|
err: ''
|
|
- *status-ok
|
|
|
|
- id: create_s3_already_exists
|
|
input:
|
|
state: created
|
|
password: secret
|
|
config: /etc/kopia/root.config
|
|
backend:
|
|
provider: s3
|
|
bucket: my-bucket
|
|
access_key: myaccesskey
|
|
secret_access_key: mysecretkey
|
|
output:
|
|
changed: false
|
|
mocks:
|
|
run_command:
|
|
- *status-ok
|
|
- command:
|
|
- /testbin/kopia
|
|
- repository
|
|
- create
|
|
- s3
|
|
- --bucket=my-bucket
|
|
- --access-key=myaccesskey
|
|
- --secret-access-key=mysecretkey
|
|
- --password=secret
|
|
- --config-file=/etc/kopia/root.config
|
|
environ: *env-def
|
|
rc: 1
|
|
out: ''
|
|
err: 'already exists'
|
|
- *status-ok
|
|
|
|
- id: create_filesystem
|
|
input:
|
|
state: created
|
|
password: secret
|
|
backend:
|
|
provider: filesystem
|
|
path: /mnt/backup/kopia
|
|
output:
|
|
changed: true
|
|
mocks:
|
|
run_command:
|
|
- command: [/testbin/kopia, repository, status]
|
|
environ: *env-def
|
|
rc: 1
|
|
out: ''
|
|
err: 'repository not connected'
|
|
- command:
|
|
- /testbin/kopia
|
|
- repository
|
|
- create
|
|
- filesystem
|
|
- --path=/mnt/backup/kopia
|
|
- --password=secret
|
|
environ: *env-def
|
|
rc: 0
|
|
out: ''
|
|
err: ''
|
|
- command: [/testbin/kopia, repository, status]
|
|
environ: *env-def
|
|
rc: 0
|
|
out: "Connected to repository."
|
|
err: ''
|
|
|
|
- id: connect_server
|
|
input:
|
|
state: connected
|
|
password: secret
|
|
config: /etc/kopia/root.config
|
|
url: https://kopia.example.com:51515
|
|
fingerprint_tls: "AA:BB:CC:DD"
|
|
backend:
|
|
provider: server
|
|
output:
|
|
changed: true
|
|
mocks:
|
|
run_command:
|
|
- *status-empty
|
|
- command:
|
|
- /testbin/kopia
|
|
- repository
|
|
- connect
|
|
- --password=secret
|
|
- --server-cert-fingerprint=AA:BB:CC:DD
|
|
- --url=https://kopia.example.com:51515
|
|
- --config-file=/etc/kopia/root.config
|
|
environ: *env-def
|
|
rc: 0
|
|
out: ''
|
|
err: ''
|
|
- *status-ok
|
|
|
|
- id: connect_azure
|
|
input:
|
|
state: connected
|
|
password: secret
|
|
config: /etc/kopia/root.config
|
|
backend:
|
|
provider: azure
|
|
container: my-container
|
|
storage_account: myaccount
|
|
storage_key: mykey
|
|
output:
|
|
changed: true
|
|
mocks:
|
|
run_command:
|
|
- *status-empty
|
|
- command:
|
|
- /testbin/kopia
|
|
- repository
|
|
- connect
|
|
- azure
|
|
- --container=my-container
|
|
- --storage-account=myaccount
|
|
- --storage-key=mykey
|
|
- --password=secret
|
|
- --config-file=/etc/kopia/root.config
|
|
environ: *env-def
|
|
rc: 0
|
|
out: ''
|
|
err: ''
|
|
- *status-ok
|
|
|
|
- id: disconnect
|
|
input:
|
|
state: disconnected
|
|
config: /etc/kopia/root.config
|
|
output:
|
|
changed: true
|
|
mocks:
|
|
run_command:
|
|
- *status-ok
|
|
- command:
|
|
- /testbin/kopia
|
|
- repository
|
|
- disconnect
|
|
- --config-file=/etc/kopia/root.config
|
|
environ: *env-def
|
|
rc: 0
|
|
out: ''
|
|
err: ''
|
|
- *status-empty
|
|
|
|
- id: sync_s3
|
|
input:
|
|
state: synced
|
|
password: secret
|
|
config: /etc/kopia/root.config
|
|
backend:
|
|
provider: s3
|
|
bucket: my-sync-bucket
|
|
access_key: myaccesskey
|
|
secret_access_key: mysecretkey
|
|
output:
|
|
changed: false
|
|
mocks:
|
|
run_command:
|
|
- *status-ok
|
|
- command:
|
|
- /testbin/kopia
|
|
- repository
|
|
- sync-to
|
|
- s3
|
|
- --bucket=my-sync-bucket
|
|
- --access-key=myaccesskey
|
|
- --secret-access-key=mysecretkey
|
|
- --password=secret
|
|
- --config-file=/etc/kopia/root.config
|
|
environ: *env-def
|
|
rc: 0
|
|
out: ''
|
|
err: ''
|
|
- *status-ok
|
|
|
|
- id: throttle_set
|
|
input:
|
|
state: throttled
|
|
config: /etc/kopia/root.config
|
|
throttle:
|
|
upload_bytes_per_second: 1048576
|
|
download_bytes_per_second: 5242880
|
|
concurrent_reads: 4
|
|
concurrent_writes: 2
|
|
output:
|
|
changed: false
|
|
mocks:
|
|
run_command:
|
|
- *status-ok
|
|
- command:
|
|
- /testbin/kopia
|
|
- repository
|
|
- throttle
|
|
- set
|
|
- --download-bytes-per-second
|
|
- "5242880"
|
|
- --upload-bytes-per-second
|
|
- "1048576"
|
|
- --concurrent-reads
|
|
- "4"
|
|
- --concurrent-writes
|
|
- "2"
|
|
- --config-file=/etc/kopia/root.config
|
|
environ: *env-def
|
|
rc: 0
|
|
out: ''
|
|
err: ''
|
|
- *status-ok
|
|
|
|
- id: throttle_set_rate_limits
|
|
input:
|
|
state: throttled
|
|
config: /etc/kopia/root.config
|
|
throttle:
|
|
read_requests_per_second: 10.0
|
|
write_requests_per_second: 5.0
|
|
list_requests_per_second: 2.5
|
|
output:
|
|
changed: false
|
|
mocks:
|
|
run_command:
|
|
- *status-ok
|
|
- command:
|
|
- /testbin/kopia
|
|
- repository
|
|
- throttle
|
|
- set
|
|
- --read-requests-per-second
|
|
- "10.0"
|
|
- --write-requests-per-second
|
|
- "5.0"
|
|
- --list-requests-per-second
|
|
- "2.5"
|
|
- --config-file=/etc/kopia/root.config
|
|
environ: *env-def
|
|
rc: 0
|
|
out: ''
|
|
err: ''
|
|
- *status-ok
|
|
|
|
- id: check_mode_create_not_exists
|
|
flags: {check: true}
|
|
input:
|
|
state: created
|
|
password: secret
|
|
config: /etc/kopia/root.config
|
|
backend:
|
|
provider: s3
|
|
bucket: my-bucket
|
|
access_key: myaccesskey
|
|
secret_access_key: mysecretkey
|
|
output:
|
|
changed: true
|
|
mocks:
|
|
run_command:
|
|
- *status-empty
|
|
|
|
- id: check_mode_create_already_exists
|
|
flags: {check: true}
|
|
input:
|
|
state: created
|
|
password: secret
|
|
config: /etc/kopia/root.config
|
|
backend:
|
|
provider: s3
|
|
bucket: my-bucket
|
|
access_key: myaccesskey
|
|
secret_access_key: mysecretkey
|
|
output:
|
|
changed: false
|
|
mocks:
|
|
run_command:
|
|
- *status-ok
|
|
|
|
- id: check_mode_disconnect_connected
|
|
flags: {check: true}
|
|
input:
|
|
state: disconnected
|
|
config: /etc/kopia/root.config
|
|
output:
|
|
changed: true
|
|
mocks:
|
|
run_command:
|
|
- *status-ok
|
|
|
|
- id: check_mode_disconnect_not_connected
|
|
flags: {check: true}
|
|
input:
|
|
state: disconnected
|
|
config: /etc/kopia/root.config
|
|
output:
|
|
changed: false
|
|
mocks:
|
|
run_command:
|
|
- *status-empty
|