summaryrefslogtreecommitdiff
path: root/plugins/modules
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/modules')
-rw-r--r--plugins/modules/vyos_bgp_global.py139
-rw-r--r--plugins/modules/vyos_config.py47
-rw-r--r--plugins/modules/vyos_user.py4
-rw-r--r--plugins/modules/vyos_vlan.py12
4 files changed, 45 insertions, 157 deletions
diff --git a/plugins/modules/vyos_bgp_global.py b/plugins/modules/vyos_bgp_global.py
index 2ac4f645..02f5e590 100644
--- a/plugins/modules/vyos_bgp_global.py
+++ b/plugins/modules/vyos_bgp_global.py
@@ -73,37 +73,6 @@ options:
description:
- Minimum interval for sending routing updates.
type: int
- # bfd: # <-- added in 1.3
- # description: Enable Bidirectional Forwarding Detection (BFD) support
- # type: dict
- # suboptions:
- # check-control-plane-failure:
- # description:
- # - Allow to write CBIT independence in BFD outgoing packets
- # and read both C-BIT value of BFD and lookup BGP peer status
- # type: bool
- # allowas_in: --> Moved to address-family before 1.3
- # description:
- # - Number of occurrences of AS number.
- # type: int
- # as_override: --> Moved to address-family before 1.3
- # description:
- # - AS for routes sent to this neighbor to be the local AS.
- # type: bool
- # attribute_unchanged: --> Moved to address-family before 1.3
- # description:
- # - BGP attributes are sent unchanged.
- # type: dict
- # suboptions:
- # as_path:
- # description: as_path
- # type: bool
- # med:
- # description: med
- # type: bool
- # next_hop:
- # description: next_hop
- # type: bool
capability:
description:
- Advertise capabilities to this neighbor.
@@ -117,13 +86,6 @@ options:
description:
- Advertise extended nexthop capability to this neighbor.
type: bool
- # orf: --> Removed before 1.3
- # description:
- # - Advertise ORF capability to this neighbor.
- # type: str
- # choices:
- # - send
- # - receive
default_originate:
description:
- Send default route to this neighbor
@@ -145,70 +107,14 @@ options:
- Disable sending community attributes to this neighbor.
type: str
choices: ['extended', 'standard']
- # distribute_list: --> Moved to address-family before 1.3
- # description: Access-list to filter route updates to/from this neighbor.
- # type: list
- # elements: dict
- # suboptions:
- # action:
- # description: Access-list to filter outgoing/incoming route updates to this neighbor
- # type: str
- # choices: ['export', 'import']
- # acl:
- # description: Access-list number.
- # type: int
ebgp_multihop:
description:
- Allow this EBGP neighbor to not be on a directly connected network. Specify
- the number hops.
+ the number of hops.
type: int
- # interface: # <-- added in 1.3
- # description: interface parameters
- # type: dict
- # suboptions:
- # peer_group:
- # description: Peer group for this neighbor
- # type: str
- # remote_as:
- # description:
- # - Remote AS number
- # - Or 'external' for any number except this AS number
- # - or 'internal' for this AS number
- # type: str
- # v6only:
- # description: Enable BGP with v6 link-local only
- # type: dict
- # suboptions:
- # peer_group:
- # description: Peer group for this neighbor
- # type: str
- # remote_as:
- # description:
- # - Remote AS number
- # - Or 'external' for any number except this AS number
- # - or 'internal' for this AS number
- # filter_list: --> Moved to address-family before 1.3
- # description: As-path-list to filter route updates to/from this neighbor.
- # type: list
- # elements: dict
- # suboptions:
- # action:
- # description: filter outgoing/incoming route updates
- # type: str
- # choices: ['export', 'import']
- # path_list:
- # description: As-path-list to filter
- # type: str
local_as:
description: local as number not to be prepended to updates from EBGP peers
type: int
- # maximum_prefix: --> Moved to address-family before 1.3
- # description: Maximum number of prefixes to accept from this neighbor
- # nexthop-self Nexthop for routes sent to this neighbor to be the local router.
- # type: int
- # nexthop_self: --> Moved to address-family before 1.3
- # description: Nexthop for routes sent to this neighbor to be the local router.
- # type: bool
override_capability:
description: Ignore capability negotiation with specified neighbor.
type: bool
@@ -227,61 +133,18 @@ options:
port:
description: Neighbor's BGP port
type: int
- # prefix_list: --> Moved to address-family before 1.3
- # description: Prefix-list to filter route updates to/from this neighbor.
- # type: list
- # elements: dict
- # suboptions:
- # action:
- # description: filter outgoing/incoming route updates
- # type: str
- # choices: ['export', 'import']
- # prefix_list:
- # description: Prefix-list to filter
- # type: str
remote_as:
description: Neighbor BGP AS number
type: int
- # remove_private_as: --> Moved to address-family before 1.3
- # description: Remove private AS numbers from AS path in outbound route updates
- # type: bool
- # route_map: --> Moved to address-family before 1.3
- # description: Route-map to filter route updates to/from this neighbor.
- # type: list
- # elements: dict
- # suboptions:
- # action:
- # description: filter outgoing/incoming route updates
- # type: str
- # choices: ['export', 'import']
- # route_map:
- # description: route-map to filter
- # type: str
- # route_reflector_client: --> Moved to address-family before 1.3
- # description: Neighbor as a route reflector client
- # type: bool
- # route_server_client: --> Removed prior to 1.3
- # description: Neighbor is route server client
- # type: bool
shutdown:
description: Administratively shut down neighbor
type: bool
- # soft_reconfiguration: --> Moved to address-family before 1.3
- # description: Soft reconfiguration for neighbor
- # type: bool
solo: # <-- added in 1.3
description: Do not send back prefixes learned from the neighbor
type: bool
strict_capability_match:
description: Enable strict capability negotiation
type: bool
- # unsuppress_map: --> Moved to address-family before 1.3
- # description: Route-map to selectively unsuppress suppressed routes
- # type: str
-
- # weight: --> Moved to address-family before 1.3
- # description: Default weight for routes from this neighbor
- # type: int
timers:
description: Neighbor timers
type: dict
diff --git a/plugins/modules/vyos_config.py b/plugins/modules/vyos_config.py
index 1a4ec351..717e1aa2 100644
--- a/plugins/modules/vyos_config.py
+++ b/plugins/modules/vyos_config.py
@@ -141,6 +141,20 @@ options:
in C(filename) within I(backup) directory.
type: path
type: dict
+ allow_password_change:
+ description:
+ - The C(allow_password_change) argument specifies whether any configuration lines which
+ would change a user's password should be filtered out. By default only plaintext
+ password changes are allowed and any encrypted-password keys are filtered out. In
+ order to allow all password updates, both plaintext and encrypted, set this argument
+ to C(all).
+ type: str
+ default: plaintext
+ choices:
+ - all
+ - plaintext
+ - encrypted
+ - none
"""
EXAMPLES = """
@@ -231,9 +245,7 @@ from ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.vyos import
DEFAULT_COMMENT = "configured by vyos_config"
-CONFIG_FILTERS = [
- re.compile(r"set system login user \S+ authentication encrypted-password"),
-]
+PASSWORD_NEEDLE = re.compile(r"set system login user \S+ authentication (encrypted|plaintext)-password")
def get_candidate(module):
@@ -292,14 +304,26 @@ def diff_config(commands, config):
return list(updates)
-def sanitize_config(config, result):
+def sanitize_config(config, result, allow):
result["filtered"] = list()
+
+ if allow == "all":
+ return
+
index_to_filter = list()
- for regex in CONFIG_FILTERS:
- for index, line in enumerate(list(config)):
- if regex.search(line):
- result["filtered"].append(line)
- index_to_filter.append(index)
+
+ for index, line in enumerate(list(config)):
+ found = PASSWORD_NEEDLE.search(line)
+
+ if found is None:
+ continue
+
+ if allow == found[1]:
+ continue
+
+ result["filtered"].append(line)
+ index_to_filter.append(index)
+
# Delete all filtered configs
for filter_index in sorted(index_to_filter, reverse=True):
del config[filter_index]
@@ -326,7 +350,9 @@ def run(module, result):
module.fail_json(msg=to_text(exc, errors="surrogate_then_replace"))
commands = response.get("config_diff")
- sanitize_config(commands, result)
+
+ allow_password_change = module.params["allow_password_change"]
+ sanitize_config(commands, result, allow=allow_password_change)
result["commands"] = commands
@@ -366,6 +392,7 @@ def main():
backup=dict(type="bool", default=False),
backup_options=dict(type="dict", options=backup_spec),
save=dict(type="bool", default=False),
+ allow_password_change=dict(default="plaintext", choices=["all", "encrypted", "plaintext", "none"])
)
mutually_exclusive = [("lines", "src")]
diff --git a/plugins/modules/vyos_user.py b/plugins/modules/vyos_user.py
index 6ee6b3aa..6ca6f0c6 100644
--- a/plugins/modules/vyos_user.py
+++ b/plugins/modules/vyos_user.py
@@ -204,6 +204,7 @@ commands:
"""
import re
+import shlex
from copy import deepcopy
from functools import partial
@@ -275,7 +276,8 @@ def spec_to_commands(updates, module):
add(
commands,
want,
- "authentication plaintext-password %s" % want["configured_password"],
+ "authentication plaintext-password %s"
+ % shlex.quote(want["configured_password"]),
)
return commands
diff --git a/plugins/modules/vyos_vlan.py b/plugins/modules/vyos_vlan.py
index 81192bd7..d2e004f8 100644
--- a/plugins/modules/vyos_vlan.py
+++ b/plugins/modules/vyos_vlan.py
@@ -278,15 +278,11 @@ def map_config_to_obj(module):
obj = {}
eth = splitted_line[0].strip("'")
- if eth.startswith("eth"):
+ if eth.startswith("eth") and "." in eth:
obj["interfaces"] = []
- if "." in eth:
- interface = eth.split(".")[0]
- obj["interfaces"].append(interface)
- obj["vlan_id"] = eth.split(".")[-1]
- else:
- obj["interfaces"].append(eth)
- obj["vlan_id"] = None
+ interface = eth.split(".")[0]
+ obj["interfaces"].append(interface)
+ obj["vlan_id"] = eth.split(".")[-1]
if splitted_line[1].strip("'") != "-":
obj["address"] = splitted_line[1].strip("'")