The server that was being handled could still exist from previous tests
running in the same suite. This can be fixed by making sure that the
server does not exist at the start of this test suite.
* fix(server): prevent backups from being disabled when undefined
With an existing server with backups enabled and the state being either
present, started, stopped, restarted or rebuild and the backups module
parameter not set, the module would disable backups and in turn delete
all existing backups.
The correct behaviour (leave backups untouched when parameter not set)
is implemented by this commit. Strong typing would have prevented this.
* test: verify fix works
---------
Co-authored-by: Julian Tölle <julian.toelle@hetzner-cloud.de>
* test: update for new locations
* test(cert): fix issues with random name failing the test
The variable hcloud_dns_test_domain used the random function to generate
a number from 1-100. This number changed between every usage of the
variable, so the test that compared the domain name of the cert to the
variable kept failing, as different numbers were generated.
By generating the number once and saving it into a fact, this is fixed.
* test: fix issues with long resource names
Server and volume names have restricted length (63 and 64 respectivly).
This can cause issues when the `hcloud_prefix` is of certain length. By
applying truncate, we can be sure to not reach the limit.
This issue mainly happened in our internal ci, as the hcloud_prefix variable
contains the hostname where the tests were running, and our hostnames are
quite long.
In some cases the server was still marked as locked after attaching it to
a placement_group. This caused potential follow up tasks that use the server
to fail.
This happened because the action returned by `add_to_placement_group()` was
not waited upon.
For the detach case this is handled correctly.
This variable matches the `ansible_host` variable that we set when
`connect_with: public_ipv6`, and allows the user to dynamically choose the
connection method in `compose`.
Currently if any of the servers in the inventory do not work with the
selected `connect_with` mode, the script exits and returns 0 servers.
This can happen for example if one of your servers does not have a public
ipv4 address, but you set `connect_with: public_ipv4` (default).
This commit changes the behaviour to log a warning message, and just skip
setting `ansible_host` for this server. This server will not be reachable
by ansible by default, but users can use `compose` to override the
`ansible_host` that we set based on the other variables.
This can be used in the `compose`, `groups` and `keyed_groups` settings
to dynamically build the inventory.
It also makes it possible for the user to override the `ansible_host`
in `compose`, based on wether or not the server has a public ipv4 address,
with fallback to the address in a specific private network.
* Add possibility to specify private network when creating or updating a server
This allows creating servers without public internet access
* Add integration tests
This fixes the behavior if there is a server without direct internet
connectivity in the examined network.
Previously, the module would throw an AttributeError because
server.public_net.ipv4/ipv6 is None in this case. Now the None propagates
correctly.
- hcloud_server - When state stopped and server is created, do not start the server
Signed-off-by: Lukas Kämmerling <lukas.kaemmerling@hetzner-cloud.de>
* Run tests on Python 3.9
Signed-off-by: Lukas Kämmerling <lukas.kaemmerling@hetzner-cloud.de>
* Use new test container
Signed-off-by: Lukas Kämmerling <lukas.kaemmerling@hetzner-cloud.de>
* Remove tests for Ansible 2.10 and earlier
Signed-off-by: Lukas Kämmerling <lukas.kaemmerling@hetzner-cloud.de>
* add status as an option to filter the server list
* Update plugins/inventory/hcloud.py
fix the sanity check
Co-authored-by: Lukas Kämmerling <github@lukas-kaemmerling.de>
Co-authored-by: Tagir Bakirov <tagir.bakirov@reservix.de>
Co-authored-by: Lukas Kämmerling <github@lukas-kaemmerling.de>