����JFIF���������
__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
# -*- coding: utf-8 -*-
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
#
from __future__ import absolute_import, division, print_function
__metaclass__ = type
DOCUMENTATION = """
module: vyos_system
author: Nathaniel Case (@Qalthos)
short_description: Run `set system` commands on VyOS devices
description:
- Runs one or more commands on remote devices running VyOS. This module can also be
introspected to validate key parameters before returning successfully.
version_added: 1.0.0
extends_documentation_fragment:
- vyos.vyos.vyos
notes:
- Tested against VyOS 1.1.8 (helium).
- This module works with connection C(ansible.netcommon.network_cli). See L(the VyOS OS Platform Options,../network/user_guide/platform_vyos.html).
options:
host_name:
description:
- Configure the device hostname parameter. This option takes an ASCII string value.
type: str
domain_name:
description:
- The new domain name to apply to the device.
type: str
name_server:
description:
- A list of name servers to use with the device. Mutually exclusive with I(domain_search)
type: list
elements: str
aliases:
- name_servers
domain_search:
description:
- A list of domain names to search. Mutually exclusive with I(name_server)
type: list
elements: str
state:
description:
- Whether to apply (C(present)) or remove (C(absent)) the settings.
default: present
type: str
choices:
- present
- absent
"""
RETURN = """
commands:
description: The list of configuration mode commands to send to the device
returned: always
type: list
sample:
- set system hostname vyos01
- set system domain-name foo.example.com
"""
EXAMPLES = """
- name: configure hostname and domain-name
vyos.vyos.vyos_system:
host_name: vyos01
domain_name: test.example.com
- name: remove all configuration
vyos.vyos.vyos_system:
state: absent
- name: configure name servers
vyos.vyos.vyos_system: name_servers - 8.8.8.8 - 8.8.4.4
- name: configure domain search suffixes
vyos.vyos.vyos_system:
domain_search:
- sub1.example.com
- sub2.example.com
"""
from ansible.module_utils.basic import AnsibleModule
from ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.vyos import (
get_config,
load_config,
)
def spec_key_to_device_key(key):
device_key = key.replace("_", "-")
# domain-search is longer than just it's key
if device_key == "domain-search":
device_key += " domain"
return device_key
def config_to_dict(module):
data = get_config(module)
config = {"domain_search": [], "name_server": []}
for line in data.split("\n"):
if line.startswith("set system host-name"):
config["host_name"] = line[22:-1]
elif line.startswith("set system domain-name"):
config["domain_name"] = line[24:-1]
elif line.startswith("set system domain-search domain"):
config["domain_search"].append(line[33:-1])
elif line.startswith("set system name-server"):
config["name_server"].append(line[24:-1])
return config
def spec_to_commands(want, have):
commands = []
state = want.pop("state")
# state='absent' by itself has special meaning
if state == "absent" and all(v is None for v in want.values()):
# Clear everything
for key in have:
commands.append("delete system %s" % spec_key_to_device_key(key))
for key in want:
if want[key] is None:
continue
current = have.get(key)
proposed = want[key]
device_key = spec_key_to_device_key(key)
# These keys are lists which may need to be reconciled with the device
if key in ["domain_search", "name_server"]:
if not proposed:
# Empty list was passed, delete all values
commands.append("delete system %s" % device_key)
for config in proposed:
if state == "absent" and config in current:
commands.append("delete system %s '%s'" % (device_key, config))
elif state == "present" and config not in current:
commands.append("set system %s '%s'" % (device_key, config))
else:
if state == "absent" and current and proposed:
commands.append("delete system %s" % device_key)
elif state == "present" and proposed and proposed != current:
commands.append("set system %s '%s'" % (device_key, proposed))
return commands
def map_param_to_obj(module):
return {
"host_name": module.params["host_name"],
"domain_name": module.params["domain_name"],
"domain_search": module.params["domain_search"],
"name_server": module.params["name_server"],
"state": module.params["state"],
}
def main():
argument_spec = dict(
host_name=dict(type="str"),
domain_name=dict(type="str"),
domain_search=dict(type="list", elements="str"),
name_server=dict(type="list", aliases=["name_servers"], elements="str"),
state=dict(type="str", default="present", choices=["present", "absent"]),
)
module = AnsibleModule(
argument_spec=argument_spec,
supports_check_mode=True,
mutually_exclusive=[("domain_name", "domain_search")],
)
warnings = list()
result = {"changed": False, "warnings": warnings}
want = map_param_to_obj(module)
have = config_to_dict(module)
commands = spec_to_commands(want, have)
result["commands"] = commands
if commands:
commit = not module.check_mode
load_config(module, commands, commit=commit)
result["changed"] = True
module.exit_json(**result)
if __name__ == "__main__":
main()
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| __pycache__ | Folder | 0755 |
|
|
| __init__.py | File | 0 B | 0644 |
|
| vyos_banner.py | File | 5.04 KB | 0644 |
|
| vyos_bgp_address_family.py | File | 44.78 KB | 0644 |
|
| vyos_bgp_global.py | File | 49.19 KB | 0644 |
|
| vyos_command.py | File | 7.72 KB | 0644 |
|
| vyos_config.py | File | 13.02 KB | 0644 |
|
| vyos_facts.py | File | 5.21 KB | 0644 |
|
| vyos_firewall_global.py | File | 39.8 KB | 0644 |
|
| vyos_firewall_interfaces.py | File | 35.99 KB | 0644 |
|
| vyos_firewall_rules.py | File | 55.12 KB | 0644 |
|
| vyos_hostname.py | File | 8.16 KB | 0644 |
|
| vyos_interfaces.py | File | 26.79 KB | 0644 |
|
| vyos_l3_interfaces.py | File | 17.6 KB | 0644 |
|
| vyos_lag_interfaces.py | File | 21.63 KB | 0644 |
|
| vyos_lldp_global.py | File | 11.97 KB | 0644 |
|
| vyos_lldp_interfaces.py | File | 20.1 KB | 0644 |
|
| vyos_logging.py | File | 9.13 KB | 0644 |
|
| vyos_logging_global.py | File | 22.35 KB | 0644 |
|
| vyos_ntp_global.py | File | 23.92 KB | 0644 |
|
| vyos_ospf_interfaces.py | File | 25.91 KB | 0644 |
|
| vyos_ospfv2.py | File | 57.46 KB | 0644 |
|
| vyos_ospfv3.py | File | 18.15 KB | 0644 |
|
| vyos_ping.py | File | 7.04 KB | 0644 |
|
| vyos_prefix_lists.py | File | 53.13 KB | 0644 |
|
| vyos_route_maps.py | File | 33.52 KB | 0644 |
|
| vyos_snmp_server.py | File | 37.28 KB | 0644 |
|
| vyos_static_routes.py | File | 30.78 KB | 0644 |
|
| vyos_system.py | File | 6.3 KB | 0644 |
|
| vyos_user.py | File | 12.13 KB | 0644 |
|
| vyos_vlan.py | File | 10.73 KB | 0644 |
|