##### SUMMARY
The network could not be renamed before. This was discovered while
working on #448
##### ISSUE TYPE
- Feature Pull Request
##### COMPONENT NAME
network
##### SUMMARY
- Do not silence 'firewall still in use' deletions errors.
- Allow forcing the deletion of a firewall that is still in use.
Fixes#380
##### ISSUE TYPE
- Feature Pull Request
##### COMPONENT NAME
firewall
##### SUMMARY
Replace `ansible.netcommon` deprecated ipaddr utils with python
`ipaddress` module. The `ansible.netcommon` collection is no longer
required by the collections. We still use the `ansible.utils`
collections for testing
##### SUMMARY
The class scoped `cache` dict was being shared across all
`cached_session`, we now make sure that the cache is instance scoped.
Fixes#403
##### ISSUE TYPE
- Bugfix Pull Request
##### SUMMARY
- Rename the inventory `token` option to `api_token`, use aliases for
backward compatibility.
- Rename the inventory `token_env` option to `api_token_env`, use
aliases for backward compatibility.
- Deprecate the inventory `api_token_env` option, suggest using a lookup
plugin (`{{ lookup('ansible.builtin.env', 'YOUR_ENV_VAR') }}`) or use
the well-known `HCLOUD_TOKEN` environment variable name.
- Let ansible parse the options, remove homemade options parsing.
- Improve and document the existing `api_endpoint` option.
##### ISSUE TYPE
- Feature Pull Request
##### COMPONENT NAME
hcloud inventory
##### SUMMARY
This allows to use `module_defaults` against all the modules at once
using the new `hetzner.hcloud.all` `action_group`.
You can now pass the `api_token` argument using module_defaults:
```yaml
- name: Demonstrate the usage of the 'hetzner.hcloud.all' module_defaults group
hosts: localhost
connection: local
module_defaults:
group/hetzner.hcloud.all:
api_token: "{{ _vault_hcloud_api_token }}"
tasks:
- name: Create a volume
hetzner.hcloud.volume:
name: my-volume
location: fsn1
size: 100
state: present
register: volume
```
See the documentation and examples for more details.
##### ISSUE TYPE
- Feature Pull Request
##### SUMMARY
Make the api endpoint module argument consistent with the api token.
- Renamed the `endpoint` module argument to `api_endpoint`, backward
compatibility is maintained using an alias.
- Allow to configure it using the `HCLOUD_ENDPOINT` env var.
This makes the inventory config and the modules config a bit more
consistent.
##### ISSUE TYPE
- Feature Pull Request
##### SUMMARY
This simplifies the name of the modules from
`hetzner.hcloud.hcloud_firewall` to `hetzner.hcloud.firewall`. While
maintaining backward compatibility with the old names.
Further changes such as updating the test or the documentation will be
done in a future PR to maintain the git history when squashing the PRs.
##### ISSUE TYPE
- Feature Pull Request
##### SUMMARY
Add missing "created" field to ansible result
based on documentation
https://docs.hetzner.cloud/#servers-get-all-servers
```
created
string required
Point in time when the Resource was created (in ISO-8601 format)
```
##### ISSUE TYPE
- Feature Pull Request
##### COMPONENT NAME
hcloud_server_info
hcloud_server
Co-authored-by: Pawel Urbanek <pawel.urbanek@medvc.eu>
##### SUMMARY
Closes#204
Return the `server_types` dict when querying the datacenters.
##### ISSUE TYPE
- Feature Pull Request
##### COMPONENT NAME
hcloud_datacenter_info
##### SUMMARY
When managing a tcp/udp firewall rule, provide a clear error message
when the port is missing from the rule.
Closes#344
##### ISSUE TYPE
- Bugfix Pull Request
##### COMPONENT NAME
hcloud_firewall
##### SUMMARY
In the `hcloud_load_balancer_service` return data, the
`health_check.http.certificates` field must be named
`health_check.http.status_codes`.
https://docs.hetzner.cloud/#load-balancers-get-a-load-balancerFixes#332
##### ISSUE TYPE
- Bugfix Pull Request
##### COMPONENT NAME
hcloud_load_balancer_service
##### SUMMARY
Prepare v2.1.1 release.
This should also trigger a new publish process, since 2.1.0 never had
the change to be published to ansible-galaxy.
##### SUMMARY
after deprecating "server type" warning should be shown but due to error
in string message there is crash.
```
File "/tmp/ansible_hcloud_server_payload__bgoim7j/ansible_hcloud_server_payload.zip/ansible_collections/hetzner/hcloud/plugins/modules/hcloud_server.py", line 942, in <module>
File "/tmp/ansible_hcloud_server_payload__bgoim7j/ansible_hcloud_server_payload.zip/ansible_collections/hetzner/hcloud/plugins/modules/hcloud_server.py", line 925, in main
File "/tmp/ansible_hcloud_server_payload__bgoim7j/ansible_hcloud_server_payload.zip/ansible_collections/hetzner/hcloud/plugins/modules/hcloud_server.py", line 858, in present_server
File "/tmp/ansible_hcloud_server_payload__bgoim7j/ansible_hcloud_server_payload.zip/ansible_collections/hetzner/hcloud/plugins/modules/hcloud_server.py", line 405, in _create_server
File "/tmp/ansible_hcloud_server_payload__bgoim7j/ansible_hcloud_server_payload.zip/ansible_collections/hetzner/hcloud/plugins/modules/hcloud_server.py", line 541, in _get_server_type
File "/tmp/ansible_hcloud_server_payload__bgoim7j/ansible_hcloud_server_payload.zip/ansible_collections/hetzner/hcloud/plugins/modules/hcloud_server.py", line 558, in _check_and_warn_deprecated_server
TypeError: %i format: a real number is required, not str
```
##### ISSUE TYPE
- Bugfix Pull Request
##### COMPONENT NAME
hcloud_server
---------
Co-authored-by: jo <ljonas@riseup.net>
##### SUMMARY
Fixes#302
The feature was missing, this make the floating_ip_info module consistent with what is expected to be implemented.
##### ISSUE TYPE
- Feature Pull Request
##### COMPONENT NAME
floating_ip_info
* Added new command hcloud_isos_info.py to get informations from all ISOs on HETZNER cloud.
* continue iso_info implementation
* add changelog
* fixes and improvements
* remove return docs choices for ansible 2.12 support
* rebase changes
* fix wording
Co-authored-by: Julian Tölle <julian.toelle97@gmail.com>
* run tests in group3
Co-authored-by: Julian Tölle <julian.toelle97@gmail.com>
* docs: returned architecture field might be null
* unused/invalid community.general.ipfilter collection in tests
* update wording relevant -> supported
* apply rebase changes
---------
Co-authored-by: patlegu <3754859+patlegu@users.noreply.github.com>
Co-authored-by: Julian Tölle <julian.toelle97@gmail.com>
* feat(server_type_info): return deprecation info
Co-authored-by: jo <ljonas@riseup.net>
* feat(server): show warning if server-type is deprecated
Co-authored-by: jo <ljonas@riseup.net>
---------
Co-authored-by: jo <ljonas@riseup.net>
When using a deprecated image with the "allow_deprecated_image" flag,
the script would crash because the string interpolation was not done
correctly. The brackes were in the wrong place.
Error would look like this:
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: TypeError: unsupported operand type(s) for %: 'NoneType' and 'str'
fatal: [localhost]: FAILED! => {"changed": false, "module_stderr": "Traceback (most recent call last):\n File \"/home/julian/.ansible/tmp/ansible-tmp-1686564668.6136558-165294-192879183382787/AnsiballZ_hcloud_server.py\", line 107, in <module>\n _ansiballz_main()\n File \"/home/julian/.ansible/tmp/ansible-tmp-1686564668.6136558-165294-192879183382787/AnsiballZ_hcloud_server.py\", line 99, in _ansiballz_main\n invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\n File \"/home/julian/.ansible/tmp/ansible-tmp-1686564668.6136558-165294-192879183382787/AnsiballZ_hcloud_server.py\", line 47, in invoke_module\n runpy.run_module(mod_name='ansible_collections.hetzner.hcloud.plugins.modules.hcloud_server', init_globals=dict(_module_fqn='ansible_collections.hetzner.hcloud.plugins.modules.hcloud_server', _modlib_path=modlib_path),\n File \"/nix/store/95cxzy2hpizr23343b8bskl4yacf4b3l-python3-3.10.11/lib/python3.10/runpy.py\", line 224, in run_module\n return _run_module_code(code, init_globals, run_name, mod_spec)\n File \"/nix/store/95cxzy2hpizr23343b8bskl4yacf4b3l-python3-3.10.11/lib/python3.10/runpy.py\", line 96, in _run_module_code\n _run_code(code, mod_globals, init_globals,\n File \"/nix/store/95cxzy2hpizr23343b8bskl4yacf4b3l-python3-3.10.11/lib/python3.10/runpy.py\", line 86, in _run_code\n exec(code, run_globals)\n File \"/run/user/1000/ansible_hcloud_server_payload_1g2rf66q/ansible_hcloud_server_payload.zip/ansible_collections/hetzner/hcloud/plugins/modules/hcloud_server.py\", line 927, in <module>\n File \"/run/user/1000/ansible_hcloud_server_payload_1g2rf66q/ansible_hcloud_server_payload.zip/ansible_collections/hetzner/hcloud/plugins/modules/hcloud_server.py\", line 908, in main\n File \"/run/user/1000/ansible_hcloud_server_payload_1g2rf66q/ansible_hcloud_server_payload.zip/ansible_collections/hetzner/hcloud/plugins/modules/hcloud_server.py\", line 843, in present_server\n File \"/run/user/1000/ansible_hcloud_server_payload_1g2rf66q/ansible_hcloud_server_payload.zip/ansible_collections/hetzner/hcloud/plugins/modules/hcloud_server.py\", line 411, in _create_server\n File \"/run/user/1000/ansible_hcloud_server_payload_1g2rf66q/ansible_hcloud_server_payload.zip/ansible_collections/hetzner/hcloud/plugins/modules/hcloud_server.py\", line 518, in _get_image\nTypeError: unsupported operand type(s) for %: 'NoneType' and 'str'\n", "module_stdout": "", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 1}
* 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>
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.