%PDF- %PDF-
Direktori : /lib/python2.7/site-packages/salt/runners/ |
Current File : //lib/python2.7/site-packages/salt/runners/network.py |
# -*- 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 log = logging.getLogger(__name__) def wollist(maclist, bcast='255.255.255.255', destport=9): ''' Send a "Magic Packet" to wake up a list of Minions. This list must contain one MAC hardware address per line CLI Example: .. code-block:: bash salt-run network.wollist '/path/to/maclist' salt-run network.wollist '/path/to/maclist' 255.255.255.255 7 salt-run network.wollist '/path/to/maclist' 255.255.255.255 7 ''' ret = [] try: with salt.utils.files.fopen(maclist, 'r') as ifile: for mac in ifile: mac = salt.utils.stringutils.to_unicode(mac).strip() wol(mac, bcast, destport) print('Waking up {0}'.format(mac)) ret.append(mac) except Exception as err: __jid_event__.fire_event({'error': 'Failed to open the MAC file. Error: {0}'.format(err)}, 'progress') return [] return ret def wol(mac, bcast='255.255.255.255', destport=9): ''' Send a "Magic Packet" to wake up a Minion CLI Example: .. code-block:: bash salt-run network.wol 08-00-27-13-69-77 salt-run network.wol 080027136977 255.255.255.255 7 salt-run network.wol 08:00:27:13:69:77 255.255.255.255 7 ''' dest = salt.utils.network.mac_str_to_bytes(mac) sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) sock.sendto(b'\xff' * 6 + dest * 16, (bcast, int(destport))) return True def wolmatch(tgt, tgt_type='glob', bcast='255.255.255.255', destport=9): ''' Send a "Magic Packet" to wake up Minions that are matched in the grains cache CLI Example: .. code-block:: bash salt-run network.wolmatch minion_id salt-run network.wolmatch 192.168.0.0/16 tgt_type='ipcidr' bcast=255.255.255.255 destport=7 ''' ret = [] minions = __salt__['cache.grains'](tgt, tgt_type) for minion in minions: for iface, mac in minion['hwaddr_interfaces'].items(): if iface == 'lo': continue mac = mac.strip() wol(mac, bcast, destport) log.info('Waking up %s', mac) ret.append(mac) return ret