def test_dns_return(self): ''' test the return for a dns grain. test for issue: https://github.com/saltstack/salt/issues/41230 ''' resolv_mock = { 'domain': '', 'sortlist': [], 'nameservers': [ ipaddress.IPv4Address(IP4_ADD1), ipaddress.IPv6Address(IP6_ADD1), IP6_ADD_SCOPE ], 'ip4_nameservers': [ipaddress.IPv4Address(IP4_ADD1)], 'search': ['test.saltstack.com'], 'ip6_nameservers': [ipaddress.IPv6Address(IP6_ADD1), IP6_ADD_SCOPE], 'options': [] } ret = { 'dns': { 'domain': '', 'sortlist': [], 'nameservers': [IP4_ADD1, IP6_ADD1, IP6_ADD_SCOPE], 'ip4_nameservers': [IP4_ADD1], 'search': ['test.saltstack.com'], 'ip6_nameservers': [IP6_ADD1, IP6_ADD_SCOPE], 'options': [] } } with patch.object(salt.utils.dns, 'parse_resolv', MagicMock(return_value=resolv_mock)): assert core.dns() == ret
def hex2ip(hex_ip, invert=False): ''' Convert a hex string to an ip, if a failure occurs the original hex is returned. If 'invert=True' assume that ip from /proc/net/<proto> ''' if len(hex_ip) == 32: # ipv6 ip = [] for i in range(0, 32, 8): ip_part = hex_ip[i:i + 8] ip_part = [ip_part[x:x + 2] for x in range(0, 8, 2)] if invert: ip.append("{0[3]}{0[2]}:{0[1]}{0[0]}".format(ip_part)) else: ip.append("{0[0]}{0[1]}:{0[2]}{0[3]}".format(ip_part)) try: return ipaddress.IPv6Address(":".join(ip)).compressed except ipaddress.AddressValueError as ex: log.error('hex2ip - ipv6 address error: {0}'.format(ex)) return hex_ip try: hip = int(hex_ip, 16) except ValueError: return hex_ip if invert: return '{3}.{2}.{1}.{0}'.format(hip >> 24 & 255, hip >> 16 & 255, hip >> 8 & 255, hip & 255) return '{0}.{1}.{2}.{3}'.format(hip >> 24 & 255, hip >> 16 & 255, hip >> 8 & 255, hip & 255)
def _load_minion(minion_id, cache): data_minion, grains, pillar = salt.utils.minions.get_minion_data( minion_id, __opts__) if minion_id != data_minion: log.error('Asked for minion {0}, got {1}'.format( minion_id, data_minion)) raise LookupError if not grains: log.warning('No grain data for minion id {0}'.format(minion_id)) grains = {} if not pillar: log.warning('No pillar data for minion id {0}'.format(minion_id)) pillar = {} addrs = { 4: sorted( [ipaddress.IPv4Address(addr) for addr in grains.get('ipv4', [])]), 6: sorted( [ipaddress.IPv6Address(addr) for addr in grains.get('ipv6', [])]) } mine = cache.fetch('minions/{0}'.format(minion_id), 'mine') return grains, pillar, addrs, mine
def _load_minion(minion_id, cache): data_minion, grains, pillar = salt.utils.minions.get_minion_data( minion_id, __opts__ ) if minion_id != data_minion: log.error("Asked for minion %s, got %s", minion_id, data_minion) raise LookupError if not grains: log.warning("No grain data for minion id %s", minion_id) grains = {} if not pillar: log.warning("No pillar data for minion id %s", minion_id) pillar = {} addrs = { 4: sorted([ipaddress.IPv4Address(addr) for addr in grains.get("ipv4", [])]), 6: sorted([ipaddress.IPv6Address(addr) for addr in grains.get("ipv6", [])]), } mine = cache.fetch("minions/{}".format(minion_id), "mine") return grains, pillar, addrs, mine