In Consul v0.8.4 or later, consul watch -type event HANDLER gives same events several time to the HANDLER.
- Invoke 
consul watch -type event HANDLERto wait events - Invoke 
consul event -name "foo"several time to fire events 
| #!/bin/bash | |
| # Delete all devices on the Tailnet except for no expiry devices | |
| # Released under the MIT license | |
| set -eo pipefail | |
| TAILSCALE_TAILNET=${TAILSCALE_TAILNET:-} | |
| TAILSCALE_API_KEY=${TAILSCALE_API_KEY:-} | |
| SCRIPT_REAL_RUN=${SCRIPT_REAL_RUN:false} | |
| if [ -z "${TAILSCALE_API_KEY}" ]; then | 
| #include <uapi/linux/if_ether.h> | |
| #include <uapi/linux/in.h> | |
| #include <uapi/linux/ip.h> | |
| #include <uapi/linux/tcp.h> | |
| int drop_ipv4_tcp_80(struct xdp_md *ctx) { | |
| void *data = (void *)(long)ctx->data; | |
| void *data_end = (void *)(long)ctx->data_end; | |
| struct ethhdr *eth; | 
| #!/usr/bin/env python3 | |
| import pyroute2 | |
| import socket | |
| from pyroute2.netlink import rtnl | |
| import subprocess | |
| import time | |
| from operator import itemgetter | |
| class TCL3Switch(object): | 
| #!/usr/bin/env python | |
| import socket | |
| import fcntl | |
| import struct | |
| import array | |
| SIOCETHTOOL = 0x8946 | |
| ETHTOOL_GSTRINGS = 0x0000001b | |
| ETHTOOL_GSSET_INFO = 0x00000037 | |
| ETHTOOL_GSTATS = 0x0000001d | 
| import hashlib | |
| class MaglevHash(object): | |
| def __init__(self, m=65537): | |
| self.m = m | |
| self.permutation = {} | |
| self.entry = [None] * self.m | |
| def add(self, node): | 
| #define KBUILD_MODNAME "xdp_drop_80_8080" | |
| #include <uapi/linux/bpf.h> | |
| #include <linux/in.h> | |
| #include <linux/if_ether.h> | |
| #include <linux/if_packet.h> | |
| #include <linux/if_vlan.h> | |
| #include <linux/ip.h> | |
| #include <linux/ipv6.h> | |
| BPF_HASH(counter, uint32_t, long); | 
| #!/usr/bin/env python2 | |
| from twisted.internet import reactor | |
| from twisted.names import client, dns, server | |
| import ipaddr | |
| import socket | |
| class SixFourResolver(client.Resolver): | |
| def __init__( | |
| self, | 
| [root@HOSTNAME:~]# netstat -natup | |
| Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name | |
| (snip) | |
| tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 38681/java | |
| tcp 0 0 127.0.0.1:48176 127.0.0.1:8080 ESTABLISHED 38681/java | |
| tcp 71 0 127.0.0.1:8080 127.0.0.1:48176 ESTABLISHED 38681/java | 
| [testuser@HOSTNAME norikra]$ uname -a | |
| Linux HOSTNAME 2.6.32-431.29.2.el6.x86_64 #1 SMP Tue Sep 9 21:36:05 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux | |
| [testuser@HOSTNAME norikra]$ cat /etc/redhat-release | |
| CentOS release 6.5 (Final) | |
| [testuser@HOSTNAME norikra]$ rbenv version | |
| jruby-1.7.17 (set by RBENV_VERSION environment variable) | |
| [testuser@HOSTNAME norikra]$ jruby --version | |
| jruby 1.7.17 (1.9.3p392) 2014-12-09 fafd1a7 on OpenJDK 64-Bit Server VM 1.7.0_65-mockbuild_2014_07_16_06_06-b00 +jit [linux-amd64] | |
| [testuser@HOSTNAME norikra]$ gem list |