-
Notifications
You must be signed in to change notification settings - Fork 39
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(primary_ip): add hcloud_primary_ip_info module (#225)
Co-authored-by: Kevin Castner <[email protected]>
- Loading branch information
Showing
6 changed files
with
320 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
minor_changes: | ||
- hcloud_primary_ip_info Create hcloud_primary_ip_info module |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,204 @@ | ||
#!/usr/bin/python | ||
# -*- coding: utf-8 -*- | ||
|
||
# Copyright: (c) 2019, Hetzner Cloud GmbH <[email protected]> | ||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) | ||
|
||
from __future__ import absolute_import, division, print_function | ||
|
||
__metaclass__ = type | ||
|
||
DOCUMENTATION = """ | ||
--- | ||
module: hcloud_primary_ip_info | ||
short_description: Gather infos about the Hetzner Cloud Primary IPs. | ||
description: | ||
- Gather facts about your Hetzner Cloud Primary IPs. | ||
author: | ||
- Lukas Kaemmerling (@LKaemmerling) | ||
- Kevin Castner (@kcastner) | ||
options: | ||
id: | ||
description: | ||
- The ID of the Primary IP you want to get. | ||
type: int | ||
name: | ||
description: | ||
- The name for the Primary IP you want to get. | ||
type: str | ||
label_selector: | ||
description: | ||
- The label selector for the Primary IP you want to get. | ||
type: str | ||
extends_documentation_fragment: | ||
- hetzner.hcloud.hcloud | ||
""" | ||
|
||
EXAMPLES = """ | ||
- name: Gather hcloud Primary IP infos | ||
hcloud_primary_ip_info: | ||
register: output | ||
- name: Gather hcloud Primary IP infos by id | ||
hcloud_primary_ip_info: | ||
id: 673954 | ||
register: output | ||
- name: Gather hcloud Primary IP infos by name | ||
hcloud_primary_ip_info: | ||
name: srv1-v4 | ||
register: output | ||
- name: Gather hcloud Primary IP infos by label | ||
hcloud_primary_ip_info: | ||
label_selector: srv03-ips | ||
register: output | ||
- name: Print the gathered infos | ||
debug: | ||
var: output | ||
""" | ||
|
||
RETURN = """ | ||
hcloud_primary_ip_info: | ||
description: The Primary IP infos as list | ||
returned: always | ||
type: complex | ||
contains: | ||
id: | ||
description: Numeric identifier of the Primary IP | ||
returned: always | ||
type: int | ||
sample: 1937415 | ||
name: | ||
description: Name of the Primary IP | ||
returned: always | ||
type: str | ||
sample: my-primary-ip | ||
ip: | ||
description: IP address of the Primary IP | ||
returned: always | ||
type: str | ||
sample: 131.232.99.1 | ||
type: | ||
description: Type of the Primary IP | ||
returned: always | ||
type: str | ||
sample: ipv4 | ||
assignee_id: | ||
description: Numeric identifier of the ressource where the Primary IP is assigned to. | ||
returned: always | ||
type: int | ||
sample: 19584637 | ||
assignee_type: | ||
description: Name of the type where the Primary IP is assigned to. | ||
returned: always | ||
type: str | ||
sample: server | ||
home_location: | ||
description: Location with datacenter where the Primary IP was created in | ||
returned: always | ||
type: str | ||
sample: fsn1-dc1 | ||
dns_ptr: | ||
description: Shows the DNS PTR Record for Primary IP. | ||
returned: always | ||
type: str | ||
sample: srv01.example.com | ||
labels: | ||
description: User-defined labels (key-value pairs) | ||
returned: always | ||
type: dict | ||
delete_protection: | ||
description: True if the Primary IP is protected for deletion | ||
returned: always | ||
type: bool | ||
""" | ||
|
||
from ansible.module_utils.basic import AnsibleModule | ||
from ansible.module_utils._text import to_native | ||
from ansible_collections.hetzner.hcloud.plugins.module_utils.hcloud import Hcloud | ||
|
||
|
||
class AnsibleHcloudPrimaryIPInfo(Hcloud): | ||
def __init__(self, module): | ||
Hcloud.__init__(self, module, "hcloud_primary_ip_info") | ||
self.hcloud_primary_ip_info = None | ||
|
||
def _prepare_result(self): | ||
tmp = [] | ||
|
||
for primary_ip in self.hcloud_primary_ip_info: | ||
if primary_ip is not None: | ||
dns_ptr = None | ||
if len(primary_ip.dns_ptr) > 0: | ||
dns_ptr = primary_ip.dns_ptr[0]["dns_ptr"] | ||
tmp.append({ | ||
"id": to_native(primary_ip.id), | ||
"name": to_native(primary_ip.name), | ||
"ip": to_native(primary_ip.ip), | ||
"type": to_native(primary_ip.type), | ||
"assignee_id": to_native(primary_ip.assignee_id) if primary_ip.assignee_id is not None else None, | ||
"assignee_type": to_native(primary_ip.assignee_type), | ||
"home_location": to_native(primary_ip.datacenter.name), | ||
"dns_ptr": to_native(dns_ptr) if dns_ptr is not None else None, | ||
"labels": primary_ip.labels, | ||
"delete_protection": primary_ip.protection["delete"], | ||
}) | ||
|
||
return tmp | ||
|
||
def get_primary_ips(self): | ||
try: | ||
if self.module.params.get("id") is not None: | ||
self.hcloud_primary_ip_info = [self.client.primary_ips.get_by_id( | ||
self.module.params.get("id") | ||
)] | ||
elif self.module.params.get("name") is not None: | ||
self.hcloud_primary_ip_info = [self.client.primary_ips.get_by_name( | ||
self.module.params.get("name") | ||
)] | ||
elif self.module.params.get("label_selector") is not None: | ||
self.hcloud_primary_ip_info = self.client.primary_ips.get_all( | ||
label_selector=self.module.params.get("label_selector")) | ||
else: | ||
self.hcloud_primary_ip_info = self.client.primary_ips.get_all() | ||
|
||
except Exception as e: | ||
self.module.fail_json(msg=e.message) | ||
|
||
@staticmethod | ||
def define_module(): | ||
return AnsibleModule( | ||
argument_spec=dict( | ||
id={"type": "int"}, | ||
label_selector={"type": "str"}, | ||
name={"type": "str"}, | ||
**Hcloud.base_module_arguments() | ||
), | ||
supports_check_mode=True, | ||
) | ||
|
||
|
||
def main(): | ||
module = AnsibleHcloudPrimaryIPInfo.define_module() | ||
|
||
hcloud = AnsibleHcloudPrimaryIPInfo(module) | ||
|
||
hcloud.get_primary_ips() | ||
result = hcloud.get_result() | ||
|
||
ansible_info = { | ||
'hcloud_primary_ip_info': result['hcloud_primary_ip_info'] | ||
} | ||
module.exit_json(**ansible_info) | ||
|
||
|
||
if __name__ == "__main__": | ||
main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
cloud/hcloud | ||
shippable/hcloud/group2 |
5 changes: 5 additions & 0 deletions
5
tests/integration/targets/hcloud_primary_ip_info/defaults/main.yml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
# Copyright: (c) 2019, Hetzner Cloud GmbH <[email protected]> | ||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) | ||
--- | ||
hcloud_prefix: "tests" | ||
hcloud_primary_ip_name: "{{hcloud_prefix}}-i" |
3 changes: 3 additions & 0 deletions
3
tests/integration/targets/hcloud_primary_ip_info/meta/main.yml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
collections: | ||
- community.general.ipfilter | ||
- hetzner.cloud |
104 changes: 104 additions & 0 deletions
104
tests/integration/targets/hcloud_primary_ip_info/tasks/main.yml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
# Copyright: (c) 2019, Hetzner Cloud GmbH <[email protected]> | ||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) | ||
--- | ||
- name: setup ensure primary ip is absent | ||
hcloud_primary_ip: | ||
name: "{{ hcloud_primary_ip_name }}" | ||
state: absent | ||
|
||
- name: setup primary ip | ||
hcloud_primary_ip: | ||
name: "{{ hcloud_primary_ip_name }}" | ||
datacenter: "fsn1-dc14" | ||
type: ipv4 | ||
labels: | ||
key: value | ||
register: test_primary_ip | ||
|
||
- name: verify setup primary ip | ||
assert: | ||
that: | ||
- test_primary_ip is changed | ||
|
||
- name: test gather hcloud primary ip infos | ||
hcloud_primary_ip_info: | ||
register: hcloud_primary_ips | ||
- name: verify test gather hcloud primary ip infos | ||
assert: | ||
that: | ||
- hcloud_primary_ips.hcloud_primary_ip_info| list | count >= 1 | ||
|
||
- name: test gather hcloud primary ip infos in check mode | ||
hcloud_primary_ip_info: | ||
check_mode: yes | ||
register: hcloud_primary_ips | ||
|
||
- name: verify test gather hcloud primary ip infos in check mode | ||
assert: | ||
that: | ||
- hcloud_primary_ips.hcloud_primary_ip_info| list | count >= 1 | ||
|
||
- name: test gather hcloud primary ip infos with correct label selector | ||
hcloud_primary_ip_info: | ||
label_selector: "key=value" | ||
register: hcloud_primary_ips | ||
- name: verify test gather hcloud primary ip with correct label selector | ||
assert: | ||
that: | ||
- hcloud_primary_ips.hcloud_primary_ip_info|selectattr('name','equalto','{{ test_primary_ip.hcloud_primary_ip.name }}') | list | count == 1 | ||
|
||
- name: test gather hcloud primary ip infos with wrong label selector | ||
hcloud_primary_ip_info: | ||
label_selector: "key!=value" | ||
register: hcloud_primary_ips | ||
- name: verify test gather hcloud primary ip with wrong label selector | ||
assert: | ||
that: | ||
- hcloud_primary_ips.hcloud_primary_ip_info | list | count == 0 | ||
|
||
- name: test gather hcloud primary ip infos with correct name | ||
hcloud_primary_ip_info: | ||
name: "{{ hcloud_primary_ip_name }}" | ||
register: hcloud_primary_ips | ||
- name: verify test gather hcloud primary ip with correct name | ||
assert: | ||
that: | ||
- hcloud_primary_ips.hcloud_primary_ip_info|selectattr('name','equalto','{{ test_primary_ip.hcloud_primary_ip.name }}') | list | count == 1 | ||
|
||
- name: test gather hcloud primary ip infos with wrong name | ||
hcloud_primary_ip_info: | ||
name: "wrong-name" | ||
register: hcloud_primary_ips | ||
- name: verify test gather hcloud primary ip with wrong name | ||
assert: | ||
that: | ||
- hcloud_primary_ips.hcloud_primary_ip_info | list | count == 0 | ||
|
||
- name: test gather hcloud primary ip infos with correct id | ||
hcloud_primary_ip_info: | ||
id: "{{test_primary_ip.hcloud_primary_ip.id}}" | ||
register: hcloud_primary_ips | ||
- name: verify test gather hcloud primary ip with correct id | ||
assert: | ||
that: | ||
- hcloud_primary_ips.hcloud_primary_ip_info|selectattr('name','equalto','{{ test_primary_ip.hcloud_primary_ip.name }}') | list | count == 1 | ||
|
||
- name: test gather hcloud primary ip infos with wrong id | ||
hcloud_primary_ip_info: | ||
id: "{{test_primary_ip.hcloud_primary_ip.id}}1" | ||
register: result | ||
ignore_errors: true | ||
- name: verify test gather hcloud primary ip with wrong id | ||
assert: | ||
that: | ||
- result is failed | ||
|
||
- name: cleanup | ||
hcloud_primary_ip: | ||
id: "{{ test_primary_ip.hcloud_primary_ip.id }}" | ||
state: absent | ||
register: result | ||
- name: verify cleanup | ||
assert: | ||
that: | ||
- result is success |