1
0
Fork 0
mirror of https://github.com/ansible-collections/hetzner.hcloud.git synced 2026-02-04 08:01:49 +00:00
hetzner.hcloud/tests/integration/targets/storage_box/tasks/test.yml
Jonas L. 5394c6f246
feat: add support for Storage Boxes (#676)
##### SUMMARY

We collect all changes for the Storage Box support in this PR. It will
only be merged when everything is implemented through smaller pull
requests targeting the `storage-boxes` branch.

---------

Co-authored-by: Julian Tölle <julian.toelle@hetzner-cloud.de>
2025-12-10 13:18:36 +01:00

247 lines
8 KiB
YAML

---
- name: Test missing required parameters
hetzner.hcloud.storage_box:
name: "{{ hcloud_storage_box_name }}"
state: present
ignore_errors: true
register: result
- name: Verify missing required parameters
ansible.builtin.assert:
that:
- result is failed
- 'result.msg == "missing required arguments: storage_box_type, location, password"'
- name: Test create with check mode
hetzner.hcloud.storage_box:
name: "{{ hcloud_storage_box_name }}"
type: "{{ hcloud_storage_box_type_name }}"
location: "{{ hcloud_location_name }}"
password: "{{ hcloud_storage_box_password }}"
ssh_keys:
- "{{ test_ssh_keypair.public_key }}"
labels:
key: value
check_mode: true
register: result
- name: Verify create with check mode
ansible.builtin.assert:
that:
- result is changed
- name: Test create
hetzner.hcloud.storage_box:
name: "{{ hcloud_storage_box_name }}"
type: "{{ hcloud_storage_box_type_name }}"
location: "{{ hcloud_location_name }}"
password: "{{ hcloud_storage_box_password }}"
ssh_keys:
- "{{ test_ssh_keypair.public_key }}"
access_settings:
ssh_enabled: true
zfs_enabled: false
snapshot_plan:
max_snapshots: 10
hour: 3
minute: 30
labels:
key: value
register: result
- name: Verify create
ansible.builtin.assert:
that:
- result is changed
- result.hcloud_storage_box.id is not none
- result.hcloud_storage_box.name == hcloud_storage_box_name
- result.hcloud_storage_box.storage_box_type == hcloud_storage_box_type_name
- result.hcloud_storage_box.location == hcloud_location_name
- result.hcloud_storage_box.labels.key == "value"
- result.hcloud_storage_box.delete_protection == false
- result.hcloud_storage_box.access_settings.reachable_externally == false
- result.hcloud_storage_box.access_settings.samba_enabled == false
- result.hcloud_storage_box.access_settings.ssh_enabled == true
- result.hcloud_storage_box.access_settings.webdav_enabled == false
- result.hcloud_storage_box.access_settings.zfs_enabled == false
- result.hcloud_storage_box.snapshot_plan.max_snapshots == 10
- result.hcloud_storage_box.snapshot_plan.hour == 3
- result.hcloud_storage_box.snapshot_plan.minute == 30
- result.hcloud_storage_box.status == "active"
- result.hcloud_storage_box.server is not none
- result.hcloud_storage_box.system is not none
- result.hcloud_storage_box.username is not none
- result.hcloud_storage_box.stats.size >= 0
- result.hcloud_storage_box.stats.size_data >= 0
- result.hcloud_storage_box.stats.size_snapshots >= 0
- name: Test create idempotency
hetzner.hcloud.storage_box:
name: "{{ hcloud_storage_box_name }}"
type: "{{ hcloud_storage_box_type_name }}"
location: "{{ hcloud_location_name }}"
password: "{{ hcloud_storage_box_password }}"
ssh_keys:
- "{{ test_ssh_keypair.public_key }}"
access_settings:
ssh_enabled: true
zfs_enabled: false
snapshot_plan:
max_snapshots: 10
hour: 3
minute: 30
labels:
key: value
register: result
- name: Verify create idempotency
ansible.builtin.assert:
that:
- result is not changed
- name: Test update name
hetzner.hcloud.storage_box:
id: "{{ result.hcloud_storage_box.id }}"
name: "{{ hcloud_storage_box_name }}-changed" # Update
register: result
- name: Verify update name
ansible.builtin.assert:
that:
- result is changed
- result.hcloud_storage_box.name == hcloud_storage_box_name + "-changed"
# Ensure snapshot plan was not changed
- result.hcloud_storage_box.snapshot_plan.max_snapshots == 10
- result.hcloud_storage_box.snapshot_plan.hour == 3
- result.hcloud_storage_box.snapshot_plan.minute == 30
- name: Test update
hetzner.hcloud.storage_box:
id: "{{ result.hcloud_storage_box.id }}"
name: "{{ hcloud_storage_box_name }}" # Update
type: "{{ hcloud_storage_box_type_upgrade_name }}" # Update
location: "{{ hcloud_location_name }}"
ssh_keys:
- "{{ test_ssh_keypair.public_key }}"
access_settings: # Update
ssh_enabled: false
reachable_externally: true
snapshot_plan:
max_snapshots: 10
hour: 4 # Update
minute: 30
labels:
key: changed # Update
delete_protection: true # Update
register: result
- name: Verify update
ansible.builtin.assert:
that:
- result is changed
- result.hcloud_storage_box.id is not none
- result.hcloud_storage_box.name == hcloud_storage_box_name
- result.hcloud_storage_box.storage_box_type == hcloud_storage_box_type_upgrade_name
- result.hcloud_storage_box.location == hcloud_location_name
- result.hcloud_storage_box.labels.key == "changed"
- result.hcloud_storage_box.delete_protection == true
- result.hcloud_storage_box.access_settings.reachable_externally == true
- result.hcloud_storage_box.access_settings.samba_enabled == false
- result.hcloud_storage_box.access_settings.ssh_enabled == false
- result.hcloud_storage_box.access_settings.webdav_enabled == false
- result.hcloud_storage_box.access_settings.zfs_enabled == false
- result.hcloud_storage_box.snapshot_plan.max_snapshots == 10
- result.hcloud_storage_box.snapshot_plan.hour == 4
- result.hcloud_storage_box.snapshot_plan.minute == 30
- name: Test update idempotency
hetzner.hcloud.storage_box:
id: "{{ result.hcloud_storage_box.id }}"
name: "{{ hcloud_storage_box_name }}" # Update
type: "{{ hcloud_storage_box_type_upgrade_name }}" # Update
location: "{{ hcloud_location_name }}"
ssh_keys:
- "{{ test_ssh_keypair.public_key }}"
access_settings: # Update
ssh_enabled: false
reachable_externally: true
snapshot_plan:
max_snapshots: 10
hour: 4 # Update
minute: 30
labels:
key: changed # Update
delete_protection: true # Update
register: result
- name: Verify update idempotency
ansible.builtin.assert:
that:
- result is not changed
- name: Test delete with delete protection
hetzner.hcloud.storage_box:
name: "{{ hcloud_storage_box_name }}"
state: absent
ignore_errors: true
register: result
- name: Verify delete with delete protection
ansible.builtin.assert:
that:
- result is failed
- result.failure.code == "protected"
- name: Test update delete protection
hetzner.hcloud.storage_box:
name: "{{ hcloud_storage_box_name }}"
delete_protection: false
register: result
- name: Verify update delete protection
ansible.builtin.assert:
that:
- result is changed
- result.hcloud_storage_box.delete_protection == false
- name: Test update snapshot plan
hetzner.hcloud.storage_box:
name: "{{ hcloud_storage_box_name }}"
snapshot_plan: null
register: result
- name: Verify update snapshot plan
ansible.builtin.assert:
that:
- result is changed
- result.hcloud_storage_box.snapshot_plan is none
- name: Test reset password
hetzner.hcloud.storage_box:
name: "{{ hcloud_storage_box_name }}"
password: "{{ hcloud_storage_box_password }}"
state: reset_password
register: result
- name: Verify reset password
ansible.builtin.assert:
that:
- result is changed
- name: Create snapshot
hetzner.hcloud.storage_box_snapshot:
storage_box: "{{ hcloud_storage_box_name }}"
description: test-rollback
register: _rollback_snapshot
- name: Test rollback snapshot
hetzner.hcloud.storage_box:
name: "{{ hcloud_storage_box_name }}"
snapshot: "{{ _rollback_snapshot.hcloud_storage_box_snapshot.id }}"
state: rollback_snapshot
register: result
- name: Verify rollback snapshot
ansible.builtin.assert:
that:
- result is changed
- name: Test delete
hetzner.hcloud.storage_box:
name: "{{ hcloud_storage_box_name }}"
state: absent
register: result
- name: Verify delete
ansible.builtin.assert:
that:
- result is changed
- result.hcloud_storage_box is none