Fix for runner network.wolmatch producing invalid arguements error

This commit is contained in:
David Murphy 2021-06-16 15:32:10 -06:00 committed by Megan Wilhite
parent 11c7242826
commit 83b7e1b9d1
2 changed files with 258 additions and 7 deletions

View file

@ -1,15 +1,11 @@
# -*- coding: utf-8 -*-
"""
Network tools to run from the Master
"""
# Import python libs
from __future__ import absolute_import, print_function, unicode_literals
import logging
import socket
# Import salt libs
import salt.utils.files
import salt.utils.network
import salt.utils.stringutils
@ -36,11 +32,11 @@ def wollist(maclist, bcast="255.255.255.255", destport=9):
for mac in ifile:
mac = salt.utils.stringutils.to_unicode(mac).strip()
wol(mac, bcast, destport)
print("Waking up {0}".format(mac))
print("Waking up {}".format(mac))
ret.append(mac)
except Exception as err: # pylint: disable=broad-except
__jid_event__.fire_event(
{"error": "Failed to open the MAC file. Error: {0}".format(err)}, "progress"
{"error": "Failed to open the MAC file. Error: {}".format(err)}, "progress"
)
return []
return ret
@ -79,7 +75,7 @@ def wolmatch(tgt, tgt_type="glob", bcast="255.255.255.255", destport=9):
ret = []
minions = __salt__["cache.grains"](tgt, tgt_type)
for minion in minions:
for iface, mac in minion["hwaddr_interfaces"].items():
for iface, mac in minions[minion]["hwaddr_interfaces"].items():
if iface == "lo":
continue
mac = mac.strip()

View file

@ -0,0 +1,255 @@
"""
Unit tests for Network runner
"""
import logging
import pytest
import salt.runners.network as network
from tests.support.mock import MagicMock, patch
log = logging.getLogger(__name__)
MAC_LIST = ["08:00:27:82:b2:ca", "52:54:00:ee:eb:e1", "52:54:00:ee:eb:e1"]
class ListMacAddresses:
def __init__(self):
self.list_macs = MAC_LIST
def __call__(self):
"""
Return a list of MAC layer addressses for Ethernet adapters
"""
return self.list_macs
MINION_ID = "test-host"
cache_grain_data = {
MINION_ID: {
"cwd": "/",
"ip_gw": True,
"ip4_gw": "192.168.0.1",
"ip6_gw": False,
"dns": {
"nameservers": ["192.168.0.1"],
"ip4_nameservers": ["192.168.0.1"],
"ip6_nameservers": [],
"sortlist": [],
"domain": "",
"search": ["example.org"],
"options": [],
},
"fqdns": ["Unknown.example.org"],
"machine_id": "ae886ddffbcc4f0da1e72769adfe0171",
"master": "192.168.0.109",
"server_id": 644891398,
"localhost": "Unknown.example.org",
"fqdn": "Unknown.example.org",
"host": "Unknown",
"domain": "example.org",
"hwaddr_interfaces": {
"lo": "00:00:00:00:00:00",
"enp0s3": "08:00:27:82:b2:ca",
"virbr0": "52:54:00:ee:eb:e1",
"virbr0-nic": "52:54:00:ee:eb:e1",
},
"id": "test-host",
"ip4_interfaces": {
"lo": ["127.0.0.1"],
"enp0s3": ["192.168.0.124"],
"virbr0": ["192.168.122.1"],
"virbr0-nic": [],
},
"ip6_interfaces": {
"lo": ["::1"],
"enp0s3": ["fe80::a00:27ff:fe82:b2ca"],
"virbr0": [],
"virbr0-nic": [],
},
"ipv4": ["127.0.0.1", "192.168.0.124", "192.168.122.1"],
"ipv6": ["::1", "fe80::a00:27ff:fe82:b2ca"],
"fqdn_ip4": ["192.168.0.70"],
"fqdn_ip6": [],
"ip_interfaces": {
"lo": ["127.0.0.1", "::1"],
"enp0s3": ["192.168.0.124", "fe80::a00:27ff:fe82:b2ca"],
"virbr0": ["192.168.122.1"],
"virbr0-nic": [],
},
"kernelparams": [
["BOOT_IMAGE", "/vmlinuz-3.10.0-1127.18.2.el7.x86_64"],
["root", "/dev/mapper/centos-root"],
["ro", None],
["rd.lvm.lv", "centos/root"],
["rd.lvm.lv", "centos/swap"],
["rhgb", None],
["quiet", None],
["LANG", "en_US.UTF-8"],
],
"locale_info": {
"defaultlanguage": "en_US",
"defaultencoding": "UTF-8",
"detectedencoding": "UTF-8",
"timezone": "unknown",
},
"num_gpus": 1,
"gpus": [{"vendor": "vmware", "model": "SVGA II Adapter"}],
"kernel": "Linux",
"nodename": "Unknown.example.org",
"kernelrelease": "3.10.0-1127.18.2.el7.x86_64",
"kernelversion": "#1 SMP Sun Jul 26 15:27:06 UTC 2020",
"cpuarch": "x86_64",
"selinux": {"enabled": False, "enforced": "Disabled"},
"systemd": {
"version": "219",
"features": "+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN",
},
"init": "systemd",
"lsb_distrib_id": "CentOS Linux",
"lsb_distrib_codename": "CentOS Linux 7 (Core)",
"osfullname": "CentOS Linux",
"osrelease": "7.8.2003",
"oscodename": "CentOS Linux 7 (Core)",
"os": "CentOS",
"num_cpus": 1,
"cpu_model": "Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz",
"cpu_flags": [
"fpu",
"vme",
"de",
"pse",
"tsc",
"msr",
"pae",
"mce",
"cx8",
"apic",
"sep",
"mtrr ",
"pge",
"mca",
"cmov",
"pat",
"pse36",
"clflush",
"mmx",
"fxsr",
"sse",
"sse2",
"ht",
"syscall",
"nx",
"rdtscp",
"lm",
"constant_tsc",
"rep_good",
"nopl",
"xtopology",
"nonstop_tsc",
"eagerfpu",
"pni",
"pclmulqdq",
"monitor",
"ssse3",
"cx16",
"pcid",
"sse4_1",
"sse4_2",
"x2apic",
"movbe",
"popcnt",
"aes",
"xsave",
"avx",
"rdrand",
"hypervisor",
"lahf_lm",
"abm",
"3dnowprefetch",
"invpcid_single",
"fsgsbase",
"avx2",
"inv pcid",
"rdseed",
"clflushopt",
"md_clear",
"flush_l1d",
],
"os_family": "RedHat",
"osarch": "x86_64",
"mem_total": 1998,
"swap_total": 2047,
"biosversion": "VirtualBox",
"productname": "VirtualBox",
"manufacturer": "innotek GmbH",
"biosreleasedate": "12/01/2006",
"uuid": "dd95fedd-1a2b-5e48-86a7-7e339f9f02a1",
"serialnumber": "0",
"virtual": "VirtualBox",
"ps": "ps -efHww",
"osrelease_info": [7, 8, 2003],
"osmajorrelease": 7,
"osfinger": "CentOS Linux-7",
"path": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin",
"systempath": ["/usr/local/sbin", "/usr/local/bin", "/usr/sbin", "/usr/bin"],
"pythonexecutable": "/usr/bin/python3",
"pythonpath": [
"/usr/bin",
"/usr/lib64/python36.zip",
"/usr/lib64/python3.6",
"/usr/lib64/python3.6/lib-dynload",
"/usr/lib64/python3.6/site-packages",
"/usr/lib/python3.6/site-packages",
],
"pythonversion": [3, 6, 8, "final", 0],
"saltpath": "/usr/lib/python3.6/site-packages/salt",
"saltversion": "3003",
"saltversioninfo": [3003],
"zmqversion": "4.1.4",
"disks": ["sda", "sr0"],
"ssds": [],
"shell": "/bin/sh",
"lvm": {"centos": ["root", "swap"]},
"mdadm": [],
"username": "root",
"groupname": "root",
"pid": 2469,
"gid": 0,
"uid": 0,
"zfs_support": False,
"zfs_feature_flags": False,
}
}
@pytest.fixture
def configure_loader_modules():
return {
network: {
"__grains__": {
"osarch": "x86_64",
"os_family": "Redhat",
"osmajorrelease": 7,
"kernelrelease": "3.10.0-1127.18.2.el7.x86_64",
},
},
}
def test_wolmatch():
"""
Test wolmatch
"""
MINION_ID = "test-host"
cache_mock = MagicMock(return_value=cache_grain_data)
patches = {
"cache.grains": cache_mock,
}
wol_out = MagicMock(return_value=ListMacAddresses())
with patch.dict(network.__salt__, patches):
with patch("salt.runners.network.wol", wol_out):
added = network.wolmatch(MINION_ID)
expected = MAC_LIST
assert added == expected