Skip to content

Commit

Permalink
feat(panos_virtual_router): Add network resource module states
Browse files Browse the repository at this point in the history
  • Loading branch information
shinmog committed Jul 26, 2022
1 parent f396b11 commit 40d1d70
Showing 1 changed file with 19 additions and 110 deletions.
129 changes: 19 additions & 110 deletions plugins/modules/panos_virtual_router.py
Expand Up @@ -34,7 +34,7 @@
- pandevice can be obtained from PyPI U(https://pypi.python.org/pypi/pandevice)
extends_documentation_fragment:
- paloaltonetworks.panos.fragments.transitional_provider
- paloaltonetworks.panos.fragments.state
- paloaltonetworks.panos.fragments.network_resource_module_state
- paloaltonetworks.panos.fragments.vsys_import
- paloaltonetworks.panos.fragments.full_template_support
- paloaltonetworks.panos.fragments.deprecated_commit
Expand Down Expand Up @@ -108,41 +108,37 @@
)

try:
from panos.errors import PanDeviceError
from panos.network import VirtualRouter
except ImportError:
try:
from pandevice.errors import PanDeviceError
from pandevice.network import VirtualRouter
except ImportError:
pass


def setup_args():
return dict(
commit=dict(type="bool", default=False),
name=dict(type="str", default="default"),
interface=dict(type="list", elements="str"),
ad_static=dict(type="int"),
ad_static_ipv6=dict(type="int"),
ad_ospf_int=dict(type="int"),
ad_ospf_ext=dict(type="int"),
ad_ospfv3_int=dict(type="int"),
ad_ospfv3_ext=dict(type="int"),
ad_ibgp=dict(type="int"),
ad_ebgp=dict(type="int"),
ad_rip=dict(type="int"),
)


def main():
helper = get_connection(
vsys_importable=True,
template=True,
template_stack=True,
with_state=True,
with_network_resource_module_state=True,
with_classic_provider_spec=True,
argument_spec=setup_args(),
with_commit=True,
with_set_vsys_reference=True,
sdk_cls=VirtualRouter,
sdk_params=dict(
name=dict(type="str", default="default"),
interface=dict(type="list", elements="str"),
ad_static=dict(type="int"),
ad_static_ipv6=dict(type="int"),
ad_ospf_int=dict(type="int"),
ad_ospf_ext=dict(type="int"),
ad_ospfv3_int=dict(type="int"),
ad_ospfv3_ext=dict(type="int"),
ad_ibgp=dict(type="int"),
ad_ebgp=dict(type="int"),
ad_rip=dict(type="int"),
),
)

module = AnsibleModule(
Expand All @@ -151,94 +147,7 @@ def main():
required_one_of=helper.required_one_of,
)

# Verify imports, build pandevice object tree.
parent = helper.get_pandevice_parent(module)

# Exclude non-object items from kwargs passed to the object.
exclude_list = [
"ip_address",
"username",
"password",
"api_key",
"state",
"commit",
"provider",
"template",
"template_stack",
"vsys",
"port",
]

# Generate the kwargs for network.VirtualRouter.
obj_spec = dict(
(k, module.params[k])
for k in helper.argument_spec.keys()
if k not in exclude_list
)

name = module.params["name"]
state = module.params["state"]
commit = module.params["commit"]

# Retrieve current virtual routers.
try:
vr_list = VirtualRouter.refreshall(parent, add=False)
except PanDeviceError as e:
module.fail_json(msg="Failed refresh: {0}".format(e))

# Create the new state object.
virtual_router = VirtualRouter(**obj_spec)
parent.add(virtual_router)

reference_params = {
"refresh": True,
"update": not module.check_mode,
"return_type": "bool",
}
changed = False
if state == "present":
for item in vr_list:
if item.name != name:
continue
if not item.equal(virtual_router, compare_children=False):
changed = True
virtual_router.extend(item.children)
if not module.check_mode:
try:
virtual_router.apply()
except PanDeviceError as e:
module.fail_json(msg="Failed apply: {0}".format(e))
break
else:
changed = True
if not module.check_mode:
try:
virtual_router.create()
except PanDeviceError as e:
module.fail_json(msg="Failed apply: {0}".format(e))

changed |= virtual_router.set_vsys(module.params["vsys"], **reference_params)
else:
changed |= virtual_router.set_vsys(None, **reference_params)
if name in [x.name for x in vr_list]:
changed = True
if not module.check_mode:
try:
virtual_router.delete()
except PanDeviceError as e:
module.fail_json(msg="Failed delete: {0}".format(e))

if commit and changed:
helper.commit(module)

if not changed:
msg = "no changes required."
elif module.check_mode:
msg = "Changes are required."
else:
msg = "Virtual router update successful."

module.exit_json(msg=msg, changed=changed)
helper.process(module)


if __name__ == "__main__":
Expand Down

0 comments on commit 40d1d70

Please sign in to comment.