diff --git a/npc/json.go b/npc/json.go index fd975554..c5946718 100644 --- a/npc/json.go +++ b/npc/json.go @@ -4,7 +4,56 @@ import ( "encoding/json" ) +// Return JSON suitable for logging an API object. func js(v interface{}) string { + // Get the raw JSON a, _ := json.Marshal(v) + // Convert this back into a tree of key-value maps + var m map[string]interface{} + if err := json.Unmarshal(a, &m); err != nil { + // If that didn't work, just return the raw version + return string(a) + } + // Trim some bulk, and potentially sensitive areas + withMap(m["metadata"], func(status map[string]interface{}) { + delete(status, "ownerReferences") + }) + withMap(m["spec"], func(spec map[string]interface{}) { + delete(spec, "tolerations") + delete(spec, "volumes") + rangeSlice(spec["containers"], func(container map[string]interface{}) { + delete(container, "args") + delete(container, "command") + delete(container, "env") + delete(container, "livenessProbe") + delete(container, "resources") + delete(container, "securityContext") + delete(container, "volumeMounts") + }) + }) + withMap(m["status"], func(status map[string]interface{}) { + delete(status, "containerStatuses") + }) + // Now marshall what's left to JSON + a, _ = json.Marshal(m) return string(a) } + +// Helper function: operate on a map node from a tree of key-value maps +func withMap(m interface{}, f func(map[string]interface{})) { + if v, ok := m.(map[string]interface{}); ok { + f(v) + } +} + +// Helper function: operate on all nodes under i which is a slice in a +// tree of key-value maps +func rangeSlice(i interface{}, f func(map[string]interface{})) { + if s, ok := i.([]interface{}); ok { + for _, v := range s { + if m, ok := v.(map[string]interface{}); ok { + f(m) + } + } + } +} diff --git a/site/kubernetes/kube-addon.md b/site/kubernetes/kube-addon.md index 1431d514..e0054105 100644 --- a/site/kubernetes/kube-addon.md +++ b/site/kubernetes/kube-addon.md @@ -323,12 +323,14 @@ You can customise the YAML you get from `cloud.weave.works` by passing some of W - `disable-npc`: boolean (`true|false`). Default: `false`. - `env.NAME=VALUE`: add environment variable `NAME` and set it to `VALUE`. - `seLinuxOptions.NAME=VALUE`: add SELinux option `NAME` and set it to `VALUE`, e.g. `seLinuxOptions.type=spc_t` - - `use-legacy-netpol`: use [legacy NetworkPolicy semantics](https://v1-7.docs.kubernetes.io/docs/api-reference/v1.7/#networkpolicy-v1-networking), boolean (`true|false`). Default: `true` for Kubernetes version <= 1.6, `false` for > 1.6. + - `use-legacy-netpol`: use [legacy NetworkPolicy semantics](https://v1-6.docs.kubernetes.io/docs/api-reference/v1.6/#networkpolicy-v1beta1-extensions), boolean (`true|false`). Default: `true` for Kubernetes version <= 1.6, `false` for > 1.6. The list of variables you can set is: * `CHECKPOINT_DISABLE` - if set to 1, disable checking for new Weave Net versions (default is blank, i.e. check is enabled) +* `CONN_LIMIT` - soft limit on the number of connections between + peers. Defaults to 30. * `HAIRPIN_MODE` - Weave Net defaults to enabling hairpin on the bridge side of the `veth` pair for containers attached. If you need to disable hairpin, e.g. your kernel is one of those that can panic if hairpin is enabled, then you can disable it