def master(master=None, connected=True): ''' .. versionadded:: 2014.7.0 Return the connection status with master. Fire an event if the connection to master is not as expected. This function is meant to be run via a scheduled job from the minion. If master_ip is an FQDN/Hostname, it must be resolvable to a valid IPv4 address. CLI Example: .. code-block:: bash salt '*' status.master ''' # the default publishing port port = 4505 master_ip = None if __salt__['config.get']('publish_port') != '': port = int(__salt__['config.get']('publish_port')) # Check if we have FQDN/hostname defined as master # address and try resolving it first. _remote_port_tcp # only works with IP-addresses. if master is not None: tmp_ip = _host_to_ip(master) if tmp_ip is not None: master_ip = tmp_ip ips = _remote_port_tcp(port) master_connection_status = master_ip in ips if master_connection_status is not connected: event = salt.utils.event.get_event('minion', opts=__opts__, listen=False) if master_connection_status: event.fire_event({'master': master}, salt.minion.master_event(type='connected')) else: event.fire_event({'master': master}, salt.minion.master_event(type='disconnected')) return master_connection_status
def master(master=None, connected=True): ''' .. versionadded:: 2014.7.0 Fire an event if the minion gets disconnected from its master. This function is meant to be run via a scheduled job from the minion. If master_ip is an FQDN/Hostname, is must be resolvable to a valid IPv4 address. CLI Example: .. code-block:: bash salt '*' status.master ''' # the default publishing port port = 4505 master_ip = None if __salt__['config.get']('publish_port') != '': port = int(__salt__['config.get']('publish_port')) # Check if we have FQDN/hostname defined as master # address and try resolving it first. _remote_port_tcp # only works with IP-addresses. if master is not None: tmp_ip = _host_to_ip(master) if tmp_ip is not None: master_ip = tmp_ip ips = _remote_port_tcp(port) if connected: if master_ip not in ips: event = salt.utils.event.get_event('minion', opts=__opts__, listen=False) event.fire_event({'master': master}, '__master_disconnected') else: if master_ip in ips: event = salt.utils.event.get_event('minion', opts=__opts__, listen=False) event.fire_event({'master': master}, '__master_connected')
def master(master=None, connected=True): ''' .. versionadded:: 2015.5.0 Fire an event if the minion gets disconnected from its master. This function is meant to be run via a scheduled job from the minion. If master_ip is an FQDN/Hostname, is must be resolvable to a valid IPv4 address. CLI Example: .. code-block:: bash salt '*' status.master ''' def _win_remotes_on(port): ''' Windows specific helper function. Returns set of ipv4 host addresses of remote established connections on local or remote tcp port. Parses output of shell 'netstat' to get connections PS C:> netstat -n -p TCP Active Connections Proto Local Address Foreign Address State TCP 10.1.1.26:3389 10.1.1.1:4505 ESTABLISHED TCP 10.1.1.26:56862 10.1.1.10:49155 TIME_WAIT TCP 10.1.1.26:56868 169.254.169.254:80 CLOSE_WAIT TCP 127.0.0.1:49197 127.0.0.1:49198 ESTABLISHED TCP 127.0.0.1:49198 127.0.0.1:49197 ESTABLISHED ''' remotes = set() try: data = subprocess.check_output(['netstat', '-n', '-p', 'TCP']) # pylint: disable=minimum-python-version except subprocess.CalledProcessError: log.error('Failed netstat') raise lines = salt.utils.to_str(data).split('\n') for line in lines: if 'ESTABLISHED' not in line: continue chunks = line.split() remote_host, remote_port = chunks[2].rsplit(':', 1) if int(remote_port) != port: continue remotes.add(remote_host) return remotes # the default publishing port port = 4505 master_ip = None if __salt__['config.get']('publish_port') != '': port = int(__salt__['config.get']('publish_port')) # Check if we have FQDN/hostname defined as master # address and try resolving it first. _remote_port_tcp # only works with IP-addresses. if master is not None: tmp_ip = _host_to_ip(master) if tmp_ip is not None: master_ip = tmp_ip ips = _win_remotes_on(port) if connected: if master_ip not in ips: event = salt.utils.event.get_event( 'minion', opts=__opts__, listen=False ) event.fire_event({'master': master}, '__master_disconnected') else: if master_ip in ips: event = salt.utils.event.get_event( 'minion', opts=__opts__, listen=False ) event.fire_event({'master': master}, '__master_connected')
def master(master=None, connected=True): ''' .. versionadded:: 2015.5.0 Fire an event if the minion gets disconnected from its master. This function is meant to be run via a scheduled job from the minion. If master_ip is an FQDN/Hostname, is must be resolvable to a valid IPv4 address. CLI Example: .. code-block:: bash salt '*' status.master ''' def _win_remotes_on(port): ''' Windows specific helper function. Returns set of ipv4 host addresses of remote established connections on local or remote tcp port. Parses output of shell 'netstat' to get connections PS C:> netstat -n -p TCP Active Connections Proto Local Address Foreign Address State TCP 10.1.1.26:3389 10.1.1.1:4505 ESTABLISHED TCP 10.1.1.26:56862 10.1.1.10:49155 TIME_WAIT TCP 10.1.1.26:56868 169.254.169.254:80 CLOSE_WAIT TCP 127.0.0.1:49197 127.0.0.1:49198 ESTABLISHED TCP 127.0.0.1:49198 127.0.0.1:49197 ESTABLISHED ''' remotes = set() try: data = subprocess.check_output(['netstat', '-n', '-p', 'TCP']) # pylint: disable=minimum-python-version except subprocess.CalledProcessError: log.error('Failed netstat') raise lines = salt.utils.to_str(data).split('\n') for line in lines: if 'ESTABLISHED' not in line: continue chunks = line.split() remote_host, remote_port = chunks[2].rsplit(':', 1) if int(remote_port) != port: continue remotes.add(remote_host) return remotes # the default publishing port port = 4505 master_ip = None if __salt__['config.get']('publish_port') != '': port = int(__salt__['config.get']('publish_port')) # Check if we have FQDN/hostname defined as master # address and try resolving it first. _remote_port_tcp # only works with IP-addresses. if master is not None: tmp_ip = _host_to_ip(master) if tmp_ip is not None: master_ip = tmp_ip ips = _win_remotes_on(port) master_connection_status = master_ip in ips if master_connection_status is not connected: event = salt.utils.event.get_event('minion', opts=__opts__, listen=False) if master_connection_status: event.fire_event({'master': master}, salt.minion.master_event(type='connected')) else: event.fire_event({'master': master}, salt.minion.master_event(type='disconnected')) return master_connection_status