mirror of
https://github.com/ansible-collections/hetzner.hcloud.git
synced 2026-02-04 08:01:49 +00:00
Fixes #203 The namespace used to differentiate the resources between CI pipelines, CI stages or even between test targets was broken and resulted in conflicting resource names. This PR ensure the resources names don't collide with each other by making sure we use the entire hcloud_prefix value as md5sum, and by including the target role names inside the resource names. Create a setup/teardown framework to handle testing resources used by the tests. To simplify the review process, additional changes such as splitting the setup/teardown task in the prepare.yml and cleanup.yml files will be done in future PRs (many files were renamed, and git will not preserve the file history after the PR squash). * chore: move integrations targets files * test: create integration common files * test: fix resources name namespace using the magic hcloud_ns * test: simplify requirements install * test: rename hcloud_server test taskfiles
613 lines
16 KiB
YAML
613 lines
16 KiB
YAML
- name: test create server with check mode
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name }}"
|
|
server_type: cx11
|
|
image: ubuntu-22.04
|
|
state: present
|
|
register: result
|
|
check_mode: true
|
|
- name: test create server server
|
|
assert:
|
|
that:
|
|
- result is changed
|
|
|
|
- name: test create server
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name}}"
|
|
server_type: cx11
|
|
image: ubuntu-22.04
|
|
enable_ipv6: False
|
|
state: started
|
|
register: main_server
|
|
- name: verify create server
|
|
assert:
|
|
that:
|
|
- main_server is changed
|
|
- main_server.hcloud_server.name == "{{ hcloud_server_name }}"
|
|
- main_server.hcloud_server.server_type == "cx11"
|
|
- main_server.hcloud_server.status == "running"
|
|
- main_server.root_password != ""
|
|
|
|
- name: test create server idempotence
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name }}"
|
|
state: started
|
|
register: result
|
|
- name: verify create server idempotence
|
|
assert:
|
|
that:
|
|
- result is not changed
|
|
|
|
- name: test stop server with check mode
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name }}"
|
|
state: stopped
|
|
register: result
|
|
check_mode: true
|
|
- name: verify stop server with check mode
|
|
assert:
|
|
that:
|
|
- result is changed
|
|
- result.hcloud_server.status == "running"
|
|
|
|
- name: test stop server
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name }}"
|
|
state: stopped
|
|
register: result
|
|
- name: verify stop server
|
|
assert:
|
|
that:
|
|
- result is changed
|
|
- result.hcloud_server.status == "off"
|
|
|
|
- name: test start server with check mode
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name }}"
|
|
state: started
|
|
register: result
|
|
check_mode: true
|
|
- name: verify start server with check mode
|
|
assert:
|
|
that:
|
|
- result is changed
|
|
|
|
- name: test start server
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name }}"
|
|
state: started
|
|
register: result
|
|
- name: verify start server
|
|
assert:
|
|
that:
|
|
- result is changed
|
|
- result.hcloud_server.status == "running"
|
|
|
|
- name: test start server idempotence
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name }}"
|
|
state: started
|
|
register: result
|
|
- name: verify start server idempotence
|
|
assert:
|
|
that:
|
|
- result is not changed
|
|
- result.hcloud_server.status == "running"
|
|
|
|
- name: test stop server by its id
|
|
hetzner.hcloud.hcloud_server:
|
|
id: "{{ main_server.hcloud_server.id }}"
|
|
state: stopped
|
|
register: result
|
|
- name: verify stop server by its id
|
|
assert:
|
|
that:
|
|
- result is changed
|
|
- result.hcloud_server.status == "off"
|
|
|
|
- name: test resize server running without force
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name }}"
|
|
server_type: "cx21"
|
|
state: present
|
|
register: result
|
|
check_mode: true
|
|
- name: verify test resize server running without force
|
|
assert:
|
|
that:
|
|
- result is changed
|
|
- result.hcloud_server.server_type == "cx11"
|
|
|
|
- name: test resize server with check mode
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name }}"
|
|
server_type: "cx21"
|
|
state: stopped
|
|
register: result
|
|
check_mode: true
|
|
- name: verify resize server with check mode
|
|
assert:
|
|
that:
|
|
- result is changed
|
|
|
|
- name: test resize server without disk
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name }}"
|
|
server_type: "cx21"
|
|
state: stopped
|
|
register: result
|
|
- name: verify resize server without disk
|
|
assert:
|
|
that:
|
|
- result is changed
|
|
- result.hcloud_server.server_type == "cx21"
|
|
|
|
- name: test resize server idempotence
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name }}"
|
|
server_type: "cx21"
|
|
state: stopped
|
|
register: result
|
|
- name: verify resize server idempotence
|
|
assert:
|
|
that:
|
|
- result is not changed
|
|
|
|
- name: test resize server to smaller plan
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name }}"
|
|
server_type: "cx11"
|
|
state: stopped
|
|
register: result
|
|
- name: verify resize server to smaller plan
|
|
assert:
|
|
that:
|
|
- result is changed
|
|
- result.hcloud_server.server_type == "cx11"
|
|
|
|
- name: test resize server with disk
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name }}"
|
|
server_type: "cx21"
|
|
upgrade_disk: true
|
|
state: stopped
|
|
register: result
|
|
- name: verify resize server with disk
|
|
assert:
|
|
that:
|
|
- result is changed
|
|
- result.hcloud_server.server_type == "cx21"
|
|
|
|
- name: test enable backups with check mode
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name }}"
|
|
backups: true
|
|
state: stopped
|
|
register: result
|
|
check_mode: true
|
|
- name: verify enable backups with check mode
|
|
assert:
|
|
that:
|
|
- result is changed
|
|
|
|
- name: test enable backups
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name }}"
|
|
backups: true
|
|
state: stopped
|
|
register: result
|
|
- name: verify enable backups
|
|
assert:
|
|
that:
|
|
- result is changed
|
|
- result.hcloud_server.backup_window != ""
|
|
|
|
- name: test enable backups idempotence
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name }}"
|
|
backups: true
|
|
state: stopped
|
|
register: result
|
|
- name: verify enable backups idempotence
|
|
assert:
|
|
that:
|
|
- result is not changed
|
|
- result.hcloud_server.backup_window != ""
|
|
|
|
- name: test backups are not accidentally disabled
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name }}"
|
|
# Make sure that backups are not disabled because a partial server object without "backups" was supplied somewhere
|
|
# to update some unrelated properties.
|
|
# Regression test for https://github.com/ansible-collections/hetzner.hcloud/pull/196
|
|
# backups: true
|
|
state: stopped
|
|
register: result
|
|
- name: verify backups are not accidentally disabled
|
|
assert:
|
|
that:
|
|
- result is not changed
|
|
- result.hcloud_server.backup_window != ""
|
|
|
|
- name: test rebuild server
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name }}"
|
|
image: ubuntu-22.04
|
|
state: rebuild
|
|
register: result_after_test
|
|
- name: verify rebuild server
|
|
assert:
|
|
that:
|
|
- result_after_test is changed
|
|
- result.hcloud_server.id == result_after_test.hcloud_server.id
|
|
|
|
- name: test rebuild server with check mode
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name }}"
|
|
image: ubuntu-22.04
|
|
state: rebuild
|
|
register: result_after_test
|
|
check_mode: true
|
|
- name: verify rebuild server with check mode
|
|
assert:
|
|
that:
|
|
- result_after_test is changed
|
|
|
|
- name: test update server protection booth protection arguments are required
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name }}"
|
|
delete_protection: true
|
|
state: present
|
|
register: result_after_test
|
|
ignore_errors: true
|
|
- name: verify update server protection booth protection arguments are required
|
|
assert:
|
|
that:
|
|
- result_after_test is failed
|
|
- 'result_after_test.msg == "parameters are required together: delete_protection, rebuild_protection"'
|
|
|
|
- name: test update server protection fails if they are not the same
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name }}"
|
|
delete_protection: true
|
|
rebuild_protection: false
|
|
state: present
|
|
register: result_after_test
|
|
ignore_errors: true
|
|
- name: verify update server protection fails if they are not the same
|
|
assert:
|
|
that:
|
|
- result_after_test is failed
|
|
|
|
- name: test update server protection
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name }}"
|
|
delete_protection: true
|
|
rebuild_protection: true
|
|
state: present
|
|
register: result_after_test
|
|
ignore_errors: true
|
|
- name: verify update server protection
|
|
assert:
|
|
that:
|
|
- result_after_test is changed
|
|
- result_after_test.hcloud_server.delete_protection is sameas true
|
|
- result_after_test.hcloud_server.rebuild_protection is sameas true
|
|
|
|
- name: test server without protection set to be idempotent
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{hcloud_server_name}}"
|
|
register: result_after_test
|
|
- name: verify test server without protection set to be idempotent
|
|
assert:
|
|
that:
|
|
- result_after_test is not changed
|
|
- result_after_test.hcloud_server.delete_protection is sameas true
|
|
- result_after_test.hcloud_server.rebuild_protection is sameas true
|
|
|
|
- name: test delete server fails if it is protected
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{hcloud_server_name}}"
|
|
state: absent
|
|
ignore_errors: true
|
|
register: result
|
|
- name: verify delete server fails if it is protected
|
|
assert:
|
|
that:
|
|
- result is failed
|
|
- 'result.msg == "server deletion is protected"'
|
|
|
|
- name: test rebuild server fails if it is protected
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{hcloud_server_name}}"
|
|
image: ubuntu-22.04
|
|
state: rebuild
|
|
ignore_errors: true
|
|
register: result
|
|
- name: verify rebuild server fails if it is protected
|
|
assert:
|
|
that:
|
|
- result is failed
|
|
- 'result.msg == "server rebuild is protected"'
|
|
|
|
- name: test remove server protection
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name }}"
|
|
delete_protection: false
|
|
rebuild_protection: false
|
|
state: present
|
|
register: result_after_test
|
|
ignore_errors: true
|
|
- name: verify remove server protection
|
|
assert:
|
|
that:
|
|
- result_after_test is changed
|
|
- result_after_test.hcloud_server.delete_protection is sameas false
|
|
- result_after_test.hcloud_server.rebuild_protection is sameas false
|
|
|
|
- name: absent server
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name }}"
|
|
state: absent
|
|
register: result
|
|
- name: verify absent server
|
|
assert:
|
|
that:
|
|
- result is success
|
|
|
|
- name: test create server with ssh key
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name}}"
|
|
server_type: cx11
|
|
image: "ubuntu-22.04"
|
|
ssh_keys:
|
|
- ci@ansible.hetzner.cloud
|
|
state: started
|
|
register: main_server
|
|
- name: verify create server with ssh key
|
|
assert:
|
|
that:
|
|
- main_server is changed
|
|
- main_server.hcloud_server.name == "{{ hcloud_server_name }}"
|
|
- main_server.hcloud_server.server_type == "cx11"
|
|
- main_server.hcloud_server.status == "running"
|
|
- main_server.root_password != ""
|
|
|
|
- name: test activate rescue mode with check_mode
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name }}"
|
|
rescue_mode: "linux64"
|
|
ssh_keys:
|
|
- ci@ansible.hetzner.cloud
|
|
state: present
|
|
register: main_server
|
|
check_mode: true
|
|
- name: verify activate rescue mode
|
|
assert:
|
|
that:
|
|
- main_server is changed
|
|
|
|
- name: test activate rescue mode
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name }}"
|
|
rescue_mode: "linux64"
|
|
ssh_keys:
|
|
- ci@ansible.hetzner.cloud
|
|
state: present
|
|
register: main_server
|
|
- name: verify activate rescue mode
|
|
assert:
|
|
that:
|
|
- main_server is changed
|
|
- main_server.hcloud_server.rescue_enabled is sameas true
|
|
|
|
- name: test disable rescue mode
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name }}"
|
|
ssh_keys:
|
|
- ci@ansible.hetzner.cloud
|
|
state: present
|
|
register: main_server
|
|
- name: verify activate rescue mode
|
|
assert:
|
|
that:
|
|
- main_server is changed
|
|
- main_server.hcloud_server.rescue_enabled is sameas false
|
|
|
|
- name: test activate rescue mode without ssh keys
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name }}"
|
|
rescue_mode: "linux64"
|
|
state: present
|
|
register: main_server
|
|
- name: verify activate rescue mode without ssh keys
|
|
assert:
|
|
that:
|
|
- main_server is changed
|
|
- main_server.hcloud_server.rescue_enabled is sameas true
|
|
|
|
- name: absent server
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name }}"
|
|
state: absent
|
|
register: result
|
|
- name: verify absent server
|
|
assert:
|
|
that:
|
|
- result is success
|
|
|
|
- name: test create server with rescue_mode
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name}}"
|
|
server_type: cx11
|
|
image: "ubuntu-22.04"
|
|
ssh_keys:
|
|
- ci@ansible.hetzner.cloud
|
|
rescue_mode: "linux64"
|
|
state: started
|
|
register: main_server
|
|
- name: verify create server with rescue_mode
|
|
assert:
|
|
that:
|
|
- main_server is changed
|
|
- main_server.hcloud_server.name == "{{ hcloud_server_name }}"
|
|
- main_server.hcloud_server.server_type == "cx11"
|
|
- main_server.hcloud_server.status == "running"
|
|
- main_server.root_password != ""
|
|
- main_server.hcloud_server.rescue_enabled is sameas true
|
|
|
|
- name: absent server
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name }}"
|
|
state: absent
|
|
register: result
|
|
- name: verify absent server
|
|
assert:
|
|
that:
|
|
- result is success
|
|
- name: test create server with labels
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name}}"
|
|
server_type: cx11
|
|
image: "ubuntu-22.04"
|
|
ssh_keys:
|
|
- ci@ansible.hetzner.cloud
|
|
labels:
|
|
key: value
|
|
mylabel: "val123"
|
|
state: started
|
|
register: main_server
|
|
- name: verify create server with labels
|
|
assert:
|
|
that:
|
|
- main_server is changed
|
|
- main_server.hcloud_server.labels.key == "value"
|
|
- main_server.hcloud_server.labels.mylabel == "val123"
|
|
|
|
- name: test update server with labels
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name}}"
|
|
server_type: cx11
|
|
image: "ubuntu-22.04"
|
|
ssh_keys:
|
|
- ci@ansible.hetzner.cloud
|
|
labels:
|
|
key: other
|
|
mylabel: "val123"
|
|
state: started
|
|
register: main_server
|
|
- name: verify update server with labels
|
|
assert:
|
|
that:
|
|
- main_server is changed
|
|
- main_server.hcloud_server.labels.key == "other"
|
|
- main_server.hcloud_server.labels.mylabel == "val123"
|
|
|
|
- name: test update server with labels in other order
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name}}"
|
|
server_type: cx11
|
|
image: "ubuntu-22.04"
|
|
ssh_keys:
|
|
- ci@ansible.hetzner.cloud
|
|
labels:
|
|
mylabel: "val123"
|
|
key: other
|
|
state: started
|
|
register: main_server
|
|
- name: verify update server with labels in other order
|
|
assert:
|
|
that:
|
|
- main_server is not changed
|
|
|
|
- name: cleanup with labels
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name }}"
|
|
state: absent
|
|
register: result
|
|
- name: verify cleanup
|
|
assert:
|
|
that:
|
|
- result is success
|
|
|
|
- name: test create server with enabled backups
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name }}"
|
|
server_type: cpx11
|
|
backups: true
|
|
image: "ubuntu-22.04"
|
|
ssh_keys:
|
|
- ci@ansible.hetzner.cloud
|
|
state: present
|
|
register: result
|
|
- name: verify enable backups
|
|
assert:
|
|
that:
|
|
- result is changed
|
|
- result.hcloud_server.backup_window != ""
|
|
|
|
- name: cleanup test create server with enabled backups
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name }}"
|
|
state: absent
|
|
register: result
|
|
- name: verify cleanup
|
|
assert:
|
|
that:
|
|
- result is success
|
|
|
|
- name: test create server with protection
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name }}"
|
|
delete_protection: true
|
|
rebuild_protection: true
|
|
server_type: cpx11
|
|
image: "ubuntu-22.04"
|
|
ssh_keys:
|
|
- ci@ansible.hetzner.cloud
|
|
state: present
|
|
register: result_after_test
|
|
ignore_errors: true
|
|
- name: verify create server with protection
|
|
assert:
|
|
that:
|
|
- result_after_test is changed
|
|
- result_after_test.hcloud_server.delete_protection is sameas true
|
|
- result_after_test.hcloud_server.rebuild_protection is sameas true
|
|
|
|
- name: test delete server fails if it is protected
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{hcloud_server_name}}"
|
|
state: absent
|
|
ignore_errors: true
|
|
register: result
|
|
- name: verify delete server fails if it is protected
|
|
assert:
|
|
that:
|
|
- result is failed
|
|
- 'result.msg == "server deletion is protected"'
|
|
|
|
- name: remove protection from server
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name }}"
|
|
delete_protection: false
|
|
rebuild_protection: false
|
|
state: present
|
|
register: result_after_test
|
|
ignore_errors: true
|
|
- name: verify update server protection
|
|
assert:
|
|
that:
|
|
- result_after_test is changed
|
|
- result_after_test.hcloud_server.delete_protection is sameas false
|
|
- result_after_test.hcloud_server.rebuild_protection is sameas false
|
|
|
|
- name: cleanup
|
|
hetzner.hcloud.hcloud_server:
|
|
name: "{{ hcloud_server_name }}"
|
|
state: absent
|
|
register: result
|
|
- name: verify cleanup
|
|
assert:
|
|
that:
|
|
- result is success
|