mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-04-28 21:31:26 -07:00
Allow Netbox device modification (#53631)
* netbox_device: Allow device modification * Add ability to update and existing device * Allow check_mode * Fail when device name is missing * Fail when cannot resolve ID instead of taking ID 1 by default * netbox_device: Add diff output * netbox: Some refactoring * Add diff output and check_mode to netbox_ip_address * Deduplicate redundant code into netbox_utils * netbox_utils: A few unit tests
This commit is contained in:
parent
a4c42ba687
commit
c637104078
4 changed files with 248 additions and 55 deletions
|
@ -223,7 +223,14 @@ import json
|
|||
import traceback
|
||||
|
||||
from ansible.module_utils.basic import AnsibleModule, missing_required_lib
|
||||
from ansible.module_utils.net_tools.netbox.netbox_utils import find_ids, normalize_data, IP_ADDRESS_ROLE, IP_ADDRESS_STATUS
|
||||
from ansible.module_utils.net_tools.netbox.netbox_utils import (
|
||||
find_ids,
|
||||
normalize_data,
|
||||
create_netbox_object,
|
||||
delete_netbox_object,
|
||||
IP_ADDRESS_ROLE,
|
||||
IP_ADDRESS_STATUS
|
||||
)
|
||||
from ansible.module_utils.compat import ipaddress
|
||||
from ansible.module_utils._text import to_text
|
||||
|
||||
|
@ -249,8 +256,9 @@ def main():
|
|||
validate_certs=dict(type="bool", default=True)
|
||||
)
|
||||
|
||||
global module
|
||||
module = AnsibleModule(argument_spec=argument_spec,
|
||||
supports_check_mode=False)
|
||||
supports_check_mode=True)
|
||||
|
||||
# Fail module if pynetbox is not installed
|
||||
if not HAS_PYNETBOX:
|
||||
|
@ -383,11 +391,11 @@ def create_ip_address(nb_endpoint, data):
|
|||
changed = False
|
||||
return {"msg": data, "changed": changed}
|
||||
|
||||
ip_addr = nb_endpoint.create(data).serialize()
|
||||
ip_addr, diff = create_netbox_object(nb_endpoint, data, module.check_mode)
|
||||
changed = True
|
||||
msg = "IP Addresses %s created" % (data["address"])
|
||||
|
||||
return {"ip_address": ip_addr, "msg": msg, "changed": changed}
|
||||
return {"ip_address": ip_addr, "msg": msg, "changed": changed, "diff": diff}
|
||||
|
||||
|
||||
def ensure_ip_in_prefix_present_on_netif(nb_app, nb_endpoint, data):
|
||||
|
@ -424,21 +432,24 @@ def get_new_available_ip_address(nb_app, data):
|
|||
if data.get("vrf"):
|
||||
prefix_query["vrf_id"] = data["vrf"]
|
||||
|
||||
result = {}
|
||||
prefix = nb_app.prefixes.get(**prefix_query)
|
||||
if not prefix:
|
||||
changed = False
|
||||
msg = "%s does not exist - please create first" % (data["prefix"])
|
||||
return {"msg": msg, "changed": changed}
|
||||
elif prefix.available_ips.list():
|
||||
ip_addr = prefix.available_ips.create(data)
|
||||
ip_addr, diff = create_netbox_object(prefix.available_ips, data, module.check_mode)
|
||||
changed = True
|
||||
msg = "IP Addresses %s created" % (ip_addr["address"])
|
||||
result["diff"] = diff
|
||||
else:
|
||||
changed = False
|
||||
msg = "No available IPs available within %s" % (data['prefix'])
|
||||
return {"msg": msg, "changed": changed}
|
||||
|
||||
return {"ip_address": ip_addr, "msg": msg, "changed": changed}
|
||||
result.update({"ip_address": ip_addr, "msg": msg, "changed": changed})
|
||||
return result
|
||||
|
||||
|
||||
def _get_prefix_id(nb_app, prefix, vrf_id=None):
|
||||
|
@ -476,15 +487,18 @@ def ensure_ip_address_absent(nb_endpoint, data):
|
|||
except ValueError:
|
||||
return _error_multiple_ip_results(data)
|
||||
|
||||
result = {}
|
||||
if ip_addr:
|
||||
ip_addr.delete()
|
||||
dummy, diff = delete_netbox_object(ip_addr, module.check_mode)
|
||||
changed = True
|
||||
msg = "IP Address %s deleted" % (data["address"])
|
||||
result["diff"] = diff
|
||||
else:
|
||||
changed = False
|
||||
msg = "IP Address %s already absent" % (data["address"])
|
||||
|
||||
return {"msg": msg, "changed": changed}
|
||||
result.update({"msg": msg, "changed": changed})
|
||||
return result
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue