* First commit: outline of K8s runtime package
* Added poller. Added auto-updater into default runtime
* Added build and updated Poller interface
* Added comments and NewRuntime that accepts Options
* DefaultPoller; Runtime options
* First commit to add Kubernetes cruft
* Add comments
* Add micro- prefix to K8s runtime service names
* Get rid of import cycles. Move K8s runtime into main runtime package
* Major refactoring: Poller replaced by Notifier
POller has been replaced by Notifier which returns a channel of events
that can be consumed and acted upon.
* Added runtime configuration options
* K8s runtime is now Kubernetes runtime in dedicated pkg. Naming kung-fu.
* Fix typo in command.
* Fixed typo
* Dont Delete service when runtime stops.
runtime.Stop stops services; no need to double-stop
* Track runtime services
* Parse Unix timestamps properly
* Added deployments into K8s client. Debug logging
`config.NewConfig()` with consul source will both read from consul
and watch consul for changes. Hence, the `prefix` is used in these
2 cases:
- read case: it is used to strip path based on the `KVPair` returned
from consul `kv.List()` method
- watch case: it is used as the `key` of watch query (`keyprefix` type)
So for *watch case*, the `key` is leagal to be `/` for watching change
on root. While for *read case*, because `KVPair.Key` is always stripped
off the leading slash, so if user specified some `prefix` with leading
slash, we should strip it also.
An extream case would be: user want's to read & watch node in root dir.
One would specify `prefix` as `/`, and it should work then.
Check whetehr the 1st level encoded json is array or not, to
support 1st level array in consul config.
During debug, i suspected the incapability of arrray is caused by
json reader, so i added test for array. I think it makes no harm
to also check that in.