Merge pull request #39254 from freehan/cleanup-exec-networkplugin

Automatic merge from submit-queue

Remove 'exec' network plugin - use CNI instead

fixes: #38639
pull/6/head
Kubernetes Submit Queue 2016-12-28 14:00:48 -08:00 committed by GitHub
commit 41956a682d
8 changed files with 8 additions and 646 deletions

View File

@ -56,7 +56,6 @@ go_library(
"//pkg/kubelet/dockertools:go_default_library",
"//pkg/kubelet/network:go_default_library",
"//pkg/kubelet/network/cni:go_default_library",
"//pkg/kubelet/network/exec:go_default_library",
"//pkg/kubelet/network/kubenet:go_default_library",
"//pkg/kubelet/server:go_default_library",
"//pkg/kubelet/types:go_default_library",

View File

@ -25,7 +25,6 @@ import (
// Network plugins
"k8s.io/kubernetes/pkg/kubelet/network"
"k8s.io/kubernetes/pkg/kubelet/network/cni"
"k8s.io/kubernetes/pkg/kubelet/network/exec"
"k8s.io/kubernetes/pkg/kubelet/network/kubenet"
// Volume plugins
"k8s.io/kubernetes/pkg/volume"
@ -101,7 +100,6 @@ func ProbeNetworkPlugins(pluginDir, cniConfDir, cniBinDir string) []network.Netw
cniConfDir = pluginDir
}
// for each existing plugin, add to the list
allPlugins = append(allPlugins, exec.ProbeNetworkPlugins(pluginDir)...)
allPlugins = append(allPlugins, cni.ProbeNetworkPlugins(cniConfDir, cniBinDir)...)
allPlugins = append(allPlugins, kubenet.NewPlugin(pluginDir))

View File

@ -75,7 +75,7 @@ func (fi bindataFileInfo) Sys() interface{} {
return nil
}
var _translationsKubectlDefaultLc_messagesK8sMo = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xbc\x93\xcf\x6e\xd3\x4e\x10\xc7\x27\xbf\xf6\x77\xf1\x91\x33\x87\x41\x02\xa9\x08\x8d\x59\xbb\xa5\xaa\x5c\x82\x50\x4b\x8b\x22\x25\x6a\x54\x5c\xd4\x23\x1b\xef\xd4\x59\xb4\xd9\xb5\x76\xd7\x4d\x7b\xe4\x21\x78\x05\x2e\xf0\x16\xbc\x02\x67\x9e\x05\x39\x86\x14\x6e\xbd\xb4\x7b\xb0\xfc\x1d\x7d\xfc\x9d\x3f\x9e\xfd\xf9\x60\xf3\x33\x00\xc0\x06\x00\x3c\x04\x80\x1d\x00\xf8\x1f\x00\xc6\xd0\x9f\x0f\x00\x30\x02\x00\x09\x00\x5b\x03\x80\xaf\x00\xf0\x6d\x00\xf0\x63\x00\xf0\x18\x00\x3e\x6d\x00\x7c\x07\x80\x2f\x1b\x00\x83\xdf\x3e\x7f\xce\x7f\xdd\xe3\xac\x51\x32\x32\xc6\x39\xa3\xb4\xd6\x45\x19\xb5\xb3\x01\x9d\x45\x89\x9e\x83\x6b\x7d\xc5\x9b\xb7\x81\x60\x29\x63\x35\x47\xdd\x85\xcd\x35\x86\xb6\x69\x9c\x8f\xac\x3a\x4a\x5b\xa5\x2f\xb5\x6a\xa5\x59\xe3\x01\xa5\x55\x6b\x85\x95\x33\x86\xab\xde\x96\xf0\x89\xfa\x8b\x5b\xb2\x67\xbc\x70\xad\x55\x9b\x77\x9f\xe2\x1e\xba\x80\xa9\x77\x1f\xb9\x8a\x34\x52\xf4\x9e\x7d\xd0\xce\x16\x58\x73\x8c\x7c\x15\xa9\x76\xc4\x57\x72\xd1\x18\x0e\x34\x67\x63\x5c\x72\xca\x5d\x05\x34\x09\xb5\x56\x74\xd0\xd6\x81\x4a\x57\x60\x32\x3d\x29\xe9\xd0\xf3\xea\x4f\xd0\x1b\x19\xb9\xc0\x5c\x64\xdb\x94\xe5\x94\xe5\x98\x8b\x42\x6c\x3f\x13\x42\x88\x64\x7a\x42\xa7\x7c\xa9\xc3\x3f\xdc\xee\x8a\xdb\xc6\x3c\x2b\x5e\xec\x90\xd8\x13\x22\x19\xcb\x10\xa9\xf4\xd2\x06\x23\xa3\xf3\x05\x1e\x78\xb6\x4a\x5a\x3c\x68\xbd\x0d\xf8\x72\xd6\xcb\x54\xa5\xb3\x2e\xf0\xba\x5e\x48\x6d\xd2\xca\x2d\x5e\x25\x93\xd1\xe4\xe8\xa6\x95\x2c\x15\xc9\xa1\xb3\x91\x6d\xa4\xf2\xba\xe1\x02\xbb\xce\x9e\x37\x46\x6a\xbb\x8f\xd5\x5c\xfa\xc0\x71\x78\x56\x1e\xd3\xde\x0d\xd7\xe5\xbd\x60\x4f\x47\xb6\x72\x4a\xdb\xba\xc0\xbd\x99\x8e\xc9\x39\xbd\x65\xcb\xbe\x2f\x68\xea\x58\xe9\x88\x59\xba\x9b\x66\x22\x39\xa7\x5e\xd3\xbb\xd5\x84\x0f\x7b\xdf\x02\x7b\xe3\xb1\xb4\x75\x2b\x6b\xa6\x92\xe5\xa2\x1b\x97\x69\xbd\x34\x74\xec\xfc\x22\x14\x68\x9b\x95\x0c\xc3\x7c\x1f\xfb\xd7\xe1\x96\xc5\x47\x43\xcc\x9e\xee\xaf\x3f\x2d\x90\x6d\x72\xab\xfb\x71\x47\x4b\x83\x4b\x19\xee\x6f\x2b\x7f\x05\x00\x00\xff\xff\xaa\xa3\x15\xc3\x6a\x04\x00\x00")
var _translationsKubectlDefaultLc_messagesK8sMo = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xbc\x53\xc1\x6e\xd3\x40\x10\x75\x21\x5c\x7c\xe4\xcc\x61\x90\x40\x2a\x42\x13\xec\xa4\x54\x91\x43\x10\x4a\x68\x51\xa4\x44\x44\x25\x45\x1c\xd9\x78\xa7\xce\xa2\xf5\xae\xb5\xbb\x6e\xda\x23\x1f\xc1\x2f\x70\x81\xbf\xe0\x17\x38\xf3\x2d\x8c\x63\x48\xe1\xd6\x4b\x3b\xf2\xf3\xcc\xac\xdf\xbe\xd9\xd9\x5d\xff\xba\xdf\xf9\x12\xb1\xdd\x65\x3c\x60\x1c\x30\xee\x31\x66\x51\x6b\x1f\x19\x53\x86\x60\xec\xef\x45\xd1\x37\xf6\xdf\xd9\xff\x64\x3c\xe2\xf8\x33\x4f\xfc\xc1\xfe\x2b\xfb\xbd\x3f\x3a\x7f\xed\x4e\xf3\x3a\xad\xa4\x08\x04\x61\x4d\x20\x8c\xb1\x41\x04\x65\x8d\x07\x6b\x40\x80\x23\x6f\x6b\x97\x53\xe7\x3a\xa4\x68\x23\x42\xbe\x06\xd5\x0c\xeb\x4b\xf0\x75\x55\x59\x17\x48\x36\x2c\x65\xa4\x3a\x57\xb2\x16\x7a\x47\xf7\xac\x24\x77\x19\xe4\x56\x6b\xca\x5b\x59\x84\xc7\xf2\x1f\xde\x86\x1c\xc1\x99\xad\x8d\xec\xdc\x7c\x89\x5b\xe8\x22\x5a\x38\xfb\x89\x59\x38\x95\xf8\x9e\x9c\x67\x76\x06\x05\x85\x40\x17\x01\x0b\x8b\x74\x21\xca\x4a\x93\xc7\x35\x69\x6d\xe3\x13\x6a\x56\x80\x73\x5f\x28\x89\xe3\xba\xf0\xb8\xb4\x19\xc4\x8b\xb7\x4b\x9c\x38\xda\x9e\x04\xbe\xe6\xd3\xc9\xa0\x97\xa4\x7d\x4c\x7b\xfc\x70\x98\x25\xfd\xa7\x09\x1b\x13\xf1\x84\xce\x95\xff\x8f\x77\xb8\xe5\xf5\xa1\x97\x66\xcf\x0f\x30\x19\x30\x6f\x26\x7c\xc0\xa5\x13\xc6\x6b\x11\xac\xcb\x60\xec\xc8\x48\x61\x60\x5c\x3b\x6e\xe7\xc5\xaa\x4d\xbb\xb2\xbb\x6a\x06\x5e\x15\xa5\x50\xba\x9b\xdb\xf2\x65\x3c\x9f\xce\x8f\xae\x5a\x49\xbb\x49\x3c\xb1\x26\x90\x61\xbd\xcb\x8a\x0b\x36\x9d\x3d\xab\xb4\x50\x66\x08\xf9\x5a\x38\x4f\x61\x74\xba\x3c\xc6\xc1\x15\xaf\xa9\x7b\x46\x0e\x8f\x4c\x6e\xa5\x32\x45\x06\x83\x95\x0a\xf1\x07\x7c\x43\x86\x5c\xbb\xa0\x85\x25\xa9\x02\xeb\x1f\x76\xd3\x84\x3f\xb5\x39\xbe\xdb\xee\xf0\xa4\xd5\xcd\xa0\x15\x9e\x09\x53\xd4\xa2\x20\x5c\x92\x28\x9b\xed\xd2\xb5\x13\x1a\x8f\xad\x2b\x7d\x06\xa6\xda\xa6\x7e\xd4\x1b\x42\x1b\x8e\xf6\x0d\x3c\x1c\x41\xfa\x64\xb8\x9b\x9a\x01\x99\xf8\x5a\xff\xc7\x0d\x5d\x1a\xd8\x08\x7f\x7b\xb7\xf2\x77\x00\x00\x00\xff\xff\xaa\xa3\x15\xc3\x6a\x04\x00\x00")
func translationsKubectlDefaultLc_messagesK8sMoBytes() ([]byte, error) {
return bindataRead(
@ -95,7 +95,7 @@ func translationsKubectlDefaultLc_messagesK8sMo() (*asset, error) {
return a, nil
}
var _translationsKubectlDefaultLc_messagesK8sPo = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xbc\x53\xdd\x6e\xd3\x4c\x10\xbd\xcf\x53\xcc\xe7\xe8\x93\x5a\xc1\x1a\x3b\x85\xaa\x72\x09\xa2\x0d\x6d\xa9\x68\xd5\x28\x75\x11\x12\x20\xb4\xf1\x4e\x9c\x85\xf5\xac\xb5\x33\xee\xcf\xdb\x23\xdb\x69\x43\x90\x90\x7a\xd3\xde\xcd\xce\x9e\x99\x33\x67\xf6\xec\x10\x72\x64\x01\x09\x9a\xd8\x69\xb1\x9e\x18\x16\x3e\x40\x43\x56\x40\x90\x85\xe3\xc1\x10\x26\xbe\xbe\x0b\xb6\x5c\x0a\x6c\x4d\xb6\x61\x94\xa4\xbb\x83\x21\xe4\x4b\xcb\xb0\xb0\x0e\xc1\x32\x18\xcb\x12\xec\xbc\x11\x34\xd0\x90\xc1\x00\xb2\x44\x60\x5d\x21\x38\x5b\x20\x31\x82\xe6\x2e\x37\x3d\x98\x7c\x3a\x38\x39\x82\x5a\x17\xbf\x74\x89\x6d\xfb\xe3\xd3\xd9\x65\x0e\x07\x57\xf9\xc7\x8b\x19\xcc\x03\x92\xd1\x14\x9b\x78\xde\x04\xe2\xf7\x65\xa5\xad\x8b\x0b\x5f\xbd\xec\x88\xe3\xc1\x70\x50\x71\x69\x0d\x44\x51\x1b\xb0\x84\x36\x8a\xa6\xc1\xff\xc4\x42\xd4\xa9\x51\x9f\x31\xb0\xf5\x94\x41\x89\x22\x78\x2b\xaa\xf4\x0a\x6f\x75\x55\x3b\x64\xb5\x44\xe7\xfc\x37\x8a\x06\xd1\x0c\x6b\x1f\x44\x9d\xb7\xcd\xd4\x61\x53\xb2\xca\x7d\x06\xdd\xd5\xf4\x22\x57\x93\x80\xdd\x3e\xd4\x07\x2d\x98\xb5\xdc\x3b\x2a\x1d\xa9\x74\x04\xa3\x24\x4b\x76\x5e\x24\x49\x92\xac\xc0\x6a\x86\xd7\x96\x37\xb0\xbb\x1d\x76\x07\x46\x69\xf6\xe6\xb5\x4a\xf6\x56\xd8\x33\xcd\xa2\xf2\xd5\xb2\x7d\xc8\xe0\xb0\x57\x0b\x87\xad\x56\x78\xfb\x4f\xf1\xef\xba\xf2\xf3\xd3\xf3\xa3\xb5\xbc\x34\xee\x9b\x4e\x3c\x09\x92\xa8\xfc\xae\xc6\x0c\x5a\xc5\xaf\x6a\xa7\x2d\xed\x43\xb1\xd4\x81\x51\xc6\x57\xf9\xb1\xda\xdb\xc4\xb6\x33\x2c\x30\xa8\x23\x2a\xbc\xb1\x54\x66\xb0\x37\xb7\xd2\x61\xbe\xa8\x13\x24\x0c\xfd\x80\x53\x8f\xc6\x0a\xa4\xf1\x6e\x9c\x26\xab\xeb\x3e\xa7\x2e\x7d\x13\x0a\x9c\xf4\x1c\x19\xac\x49\xce\x34\x95\x8d\x2e\x51\xe5\xa8\xab\xfb\x95\xba\x26\x68\xa7\x8e\x7d\xa8\x38\x03\xaa\xbb\x23\x8f\x47\xfb\xd0\x87\xe3\x2d\x82\xff\xc6\x90\x6e\xef\x6f\xb4\xc8\x00\xa9\x4d\xb4\x4f\x5d\xc8\xad\x40\x74\x55\x1b\x2d\xd8\x59\x49\x13\x79\x59\x99\xd6\x13\x68\x08\xc8\xdd\x4c\xd1\xbd\x45\x1e\x0d\xee\x6c\xf4\x38\xf4\x7a\x94\x68\x10\xdd\x68\x29\x96\xed\x07\xf0\xe4\xee\x80\x9b\xba\xf5\x14\x9a\xb6\xc6\x92\xb1\xd7\xd6\x34\xda\x3d\x14\x33\x68\x32\x0f\x27\x28\xbc\x73\x58\xf4\x24\x0a\xa2\x41\xf4\xbf\xf9\x03\x7a\x83\x01\x61\xe1\x1b\x32\xd1\xda\xf1\xcf\x4a\xf8\xa3\x7f\x9a\x67\xe6\x65\x09\x5f\x93\xef\x4f\x4b\x0a\x37\x9a\xff\xa2\x4c\x9f\x98\x72\x53\xe7\xef\x00\x00\x00\xff\xff\x96\x33\xff\xe8\x78\x05\x00\x00")
var _translationsKubectlDefaultLc_messagesK8sPo = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xbc\x53\x6f\x4f\xdb\x3e\x10\x7e\xcf\xa7\xb8\x5f\xd1\x4f\x02\x6d\xce\x92\xb2\x21\x14\xd6\x69\x90\x01\x43\x03\x51\x95\x30\x4d\xda\xa6\xc9\x8d\x8f\xc4\x9b\x63\x47\xb6\x03\xf4\xdb\xef\xec\x14\xba\x4e\x9a\xc4\x1b\xa8\x2a\xc5\x3e\x3f\x77\xcf\xfd\x79\x6e\x13\x4a\x74\x1e\xbc\xe5\xda\x29\xee\xa5\xd1\x0e\xae\x8d\x85\x5e\x4b\xb2\xd2\x93\x4b\x36\x36\xa1\x30\xdd\xc2\xca\xba\xf1\xb0\x55\x6c\xc3\x38\xcd\x76\xc9\x58\x36\x92\xb0\x52\x21\xd0\x57\x48\xe7\xad\x9c\xf7\x1e\x05\xf9\x0a\xb4\xe0\x1b\x04\xc7\x5b\x04\x25\x2b\xd4\x0e\x81\xbb\x68\x9b\x1e\x14\x9f\x0e\x4e\x8e\xa0\xe3\xd5\x2f\x5e\x63\x08\x7f\x7c\x3a\xbb\x2c\xe1\xe0\xaa\xfc\x78\x31\x83\xb9\x45\x2d\xb8\x4e\x44\x32\xef\xad\x76\xef\xeb\x96\x4b\x95\x54\xa6\x7d\x19\x89\x09\xbf\xd1\xba\x5a\x0a\x18\x8d\xc2\x81\x68\xc3\x69\x34\xb5\xe6\x27\x56\x9e\x9d\x0a\xf6\x19\xad\xa3\x42\x72\xa8\xd1\x7b\xbc\xf3\xac\x36\x0c\xef\x78\xdb\x29\x74\xac\x41\xa5\xcc\x37\x4d\x1e\x33\xec\x8c\xf5\xec\x3c\x04\x63\x87\x7d\xed\x58\x69\x72\x88\x4f\xd3\x8b\x92\x15\x16\x63\x3f\xd8\x07\xee\x31\x0f\xdc\x3b\x2c\x1b\xd3\x9f\x8e\x79\xba\xf3\x22\xa5\xdf\x12\xcc\x66\x78\x23\xdd\x1a\x76\x37\x62\x77\x60\x9c\xe5\x6f\x5e\xb3\x74\x6f\x89\x3d\xe3\xce\xb3\x72\xd9\x6c\x63\x73\x38\x1c\xaa\x85\xc3\x50\x2b\xbc\xfd\x67\xf1\xef\xa2\xfb\xf9\xe9\xf9\xd1\xaa\xbc\x2c\x19\x82\x16\x46\x7b\xd4\x14\x77\xd1\x11\x79\xa8\xf8\x55\xa7\xb8\xd4\xfb\x50\x35\xdc\x3a\xf4\x93\xab\xf2\x98\xed\xad\x63\x43\x0e\xd7\x68\xd9\x91\xae\x8c\x90\xba\xce\x61\x6f\x2e\x7d\xc4\x7c\x61\x27\xa8\xd1\x0e\x09\x4e\x0d\x0a\x92\x42\x96\xec\x26\x59\xba\x7c\x1e\x6c\xec\xd2\xf4\xb6\xc2\x62\xe0\xc8\x61\x45\x72\xc6\x75\xdd\xd3\x6c\x59\x89\xbc\xbd\x6f\xa9\xea\x2d\x57\xec\xd8\xd8\xd6\xe5\xa0\xbb\x78\x75\x93\xf1\x3e\x0c\xc7\xc9\x96\x86\xff\x26\x90\x6d\xef\xaf\x85\xc8\x01\x75\x30\x84\x51\x57\xfe\xce\xc3\xe8\xaa\x13\xd4\xe4\x28\x25\xae\xb5\xf1\x4b\xd1\x1a\x0d\x1c\x2c\xba\x98\xd3\xe8\x5e\x22\x8f\x06\x47\x19\x3d\x0e\xbd\x4a\x85\xf2\xbc\xe5\xbe\x6a\xc2\x02\x18\xad\x16\xe0\xfa\x2e\x68\x8a\x76\x80\x7c\xa4\x16\xf2\x46\x8a\x9e\xab\x07\x67\x47\x71\xc5\xc3\x0d\x2a\xa3\x14\x69\x36\x92\x30\xa0\x68\xff\x8b\x3f\xa0\xb7\x68\x91\x76\x91\xb6\x69\xb4\x52\xfc\xb3\x12\xfe\x18\x46\xf3\xcc\xbc\x34\x8a\xaf\xe9\xf7\xa7\x25\x85\x5b\xee\xfe\xa2\xcc\x9e\x98\x72\xbd\xce\xdf\x01\x00\x00\xff\xff\x96\x33\xff\xe8\x78\x05\x00\x00")
func translationsKubectlDefaultLc_messagesK8sPoBytes() ([]byte, error) {
return bindataRead(
@ -115,7 +115,7 @@ func translationsKubectlDefaultLc_messagesK8sPo() (*asset, error) {
return a, nil
}
var _translationsKubectlEn_usLc_messagesK8sMo = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xbc\x93\xcf\x6e\xd3\x40\x10\xc6\x27\xb4\x5c\x7c\xe4\xcc\x61\x90\x40\x2a\x42\x63\xd6\x0e\x54\x95\x4b\x10\x6a\x69\x51\xa5\x44\x8d\x8a\x8b\x7a\x64\xe3\x9d\x3a\x8b\x36\xbb\xd6\xee\xba\x69\x8f\x3c\x04\xaf\xc0\x05\xde\x82\x57\xe0\xcc\xb3\x20\xc7\x90\xc2\xad\x97\x76\x0f\x96\xbf\xd1\xcf\xdf\xfc\xf1\xec\xaf\x07\x9b\x5f\x00\x00\x36\x00\xe0\x21\x00\xbc\x00\x80\xfb\x00\x30\x86\xfe\x7c\x04\x80\x23\x00\x90\x00\xb0\x35\x00\xf8\x06\x00\xdf\x07\x00\x3f\x07\x00\x8f\x01\xe0\xf3\x06\xc0\x0f\x00\xf8\xba\x01\x30\xf8\xe3\xf3\xf7\xdc\xeb\x1e\xa7\x8d\x92\x91\x31\xce\x19\xa5\xb5\x2e\xca\xa8\x9d\x0d\xe8\x2c\x4a\xf4\x1c\x5c\xeb\x2b\xde\xbc\x09\x04\x4b\x19\xab\x39\xea\x2e\x6c\xae\x30\xb4\x4d\xe3\x7c\x64\xd5\x51\xda\x2a\x7d\xa1\x55\x2b\xcd\x1a\x0f\x28\xad\x5a\x2b\xac\x9c\x31\x5c\xf5\xb6\x84\x4f\xd4\x3f\xdc\x92\x3d\xe3\xb9\x6b\xad\xda\xbc\xfd\x14\x77\xd0\x05\x4c\xbd\xfb\xc4\x55\xa4\x23\x45\x1f\xd8\x07\xed\x6c\x81\x35\xc7\xc8\x97\x91\x6a\x47\x7c\x29\x17\x8d\xe1\x40\x73\x36\xc6\x25\x27\xdc\x55\x40\x93\x50\x6b\x45\x7b\x6d\x1d\xa8\x74\x05\x26\xd3\xe3\x92\xf6\x3d\xaf\xfe\x04\xbd\x95\x91\x0b\xcc\x45\x36\xa4\x2c\xa7\x2c\xc7\x5c\x14\x62\xf8\x4c\x08\x21\x92\xe9\x31\x9d\xf0\x85\x0e\xff\x71\xdb\x2b\x6e\x88\x79\x5e\x0c\x5f\x92\xd8\x11\x22\x19\xcb\x10\xa9\xf4\xd2\x06\x23\xa3\xf3\x05\xee\x79\xb6\x4a\x5a\xdc\x6b\xbd\x0d\xf8\x6a\xd6\xcb\x54\xa5\xb3\x2e\xf0\xa6\x5e\x48\x6d\xd2\xca\x2d\x5e\x27\x93\xa3\xc9\xc1\x75\x2b\x59\x2a\x92\x7d\x67\x23\xdb\x48\xe5\x55\xc3\x05\x76\x9d\x3d\x6f\x8c\xd4\x76\x17\xab\xb9\xf4\x81\xe3\xe8\xb4\x3c\xa4\x9d\x6b\xae\xcb\x7b\xce\x9e\x0e\x6c\xe5\x94\xb6\x75\x81\x3b\x33\x1d\x93\x33\x7a\xc7\x96\x7d\x5f\xd0\xd4\xb1\xd2\x11\xb3\x74\x3b\xcd\x44\x72\x46\xbd\xa6\xf7\xab\x09\xef\xf7\xbe\x05\xf6\xc6\x63\x69\xeb\x56\xd6\x4c\x25\xcb\x45\x37\x2e\xd3\x7a\x69\xe8\xd0\xf9\x45\x28\xd0\x36\x2b\x19\x46\xf9\x2e\xf6\xaf\xa3\x2d\x8b\x8f\x46\x98\x3d\xdd\x5d\x7f\x5a\x20\xdb\xe4\x46\xf7\xe3\x96\x96\x06\x97\x32\xdc\xdd\x56\xfe\x0e\x00\x00\xff\xff\x52\x15\x0d\x38\x6a\x04\x00\x00")
var _translationsKubectlEn_usLc_messagesK8sMo = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xbc\x53\xc1\x6e\x13\x31\x10\xdd\x42\xb8\xec\x91\x33\x87\x41\x02\xa9\x08\x4d\xd8\x24\x50\x45\x0e\x41\x28\xa1\x45\x91\x12\x11\x95\x14\x71\xc4\x59\x4f\x37\x46\x8e\xbd\xb2\xbd\x4d\x7b\xe4\x23\xf8\x05\x2e\xf0\x17\xfc\x02\x67\xbe\x85\xd9\x2c\xa4\xf4\xd6\x4b\x3b\xda\xb7\x33\xe3\x7d\x7e\xe3\xb1\xbd\xbf\xef\xb7\xbe\x26\x6c\x77\x19\x0f\x18\xcf\x19\xf7\x18\xd3\xa4\xb1\x4f\x8c\x09\x43\x32\xf6\xf7\x92\xe4\x3b\xfb\x1f\xec\x7f\x31\x1e\x71\xfc\x85\x27\xfe\x64\xff\x8d\xfd\xde\x5f\x9d\x7f\x76\xa7\x7e\x9d\x94\x4a\x46\x82\xb8\x22\x90\xd6\xba\x28\xa3\x76\x36\x80\xb3\x20\xc1\x53\x70\x95\xcf\xa9\x75\x1d\x52\xb2\x91\x31\x5f\x81\xae\x87\xcd\x05\x84\xaa\x2c\x9d\x8f\xa4\x6a\x96\xb6\x4a\x9f\x69\x55\x49\xb3\xa3\x07\x56\x52\xbb\x0c\x72\x67\x0c\xe5\x8d\x2c\xc2\x63\xf5\x1f\x6f\x43\x9e\xe0\xd4\x55\x56\xb5\x6e\xbe\xc4\x2d\x74\x91\xcc\xbd\xfb\xcc\x2c\x9c\x28\xfc\x40\x3e\x30\x5b\x40\x41\x31\xd2\x79\xc4\xc2\x21\x9d\xcb\x75\x69\x28\xe0\x8a\x8c\x71\xe9\x31\xd5\x2b\xc0\x59\x28\xb4\xc2\x51\x55\x04\x5c\x38\x01\xe9\xfc\xdd\x02\xc7\x9e\xb6\x27\x81\x6f\xf8\x74\x04\x74\xb3\x4e\x0f\x3b\x5d\x7e\x38\x14\x59\xef\x69\xc6\xc6\x44\x3c\xa6\x33\x1d\xae\xf0\x0e\xb6\xbc\x1e\x74\xbb\xa2\xf7\x02\xb3\x3e\xf3\xa6\x32\x44\x5c\x78\x69\x83\x91\xd1\x79\x01\x23\x4f\x56\x49\x0b\xa3\xca\x73\x3b\x2f\x97\x4d\xda\x56\xed\x65\x3d\xf0\xba\x58\x4b\x6d\xda\xb9\x5b\xbf\x4a\x67\x93\xd9\xe1\x65\x2b\x9d\x76\x96\x8e\x9d\x8d\x64\x59\xef\xa2\xe4\x82\x75\x67\xcf\x4a\x23\xb5\x1d\x40\xbe\x92\x3e\x50\x1c\x9e\x2c\x8e\xb0\x7f\xc9\xab\xeb\x9e\x92\xc7\x43\x9b\x3b\xa5\x6d\x21\xa0\xbf\xd4\x31\xfd\x88\x6f\xc9\x92\x6f\x16\x34\x77\xa4\x74\x64\xfd\x83\x76\x27\xe3\x4f\x4d\x8e\xef\xb7\x3b\x3c\x6e\x74\x05\x34\xc2\x53\x69\x8b\x4a\x16\x84\x0b\x92\xeb\x7a\xbb\x4c\xe5\xa5\xc1\x23\xe7\xd7\x41\x80\x2d\xb7\x69\x18\x76\x07\xd0\x84\xc3\x7d\x0b\x0f\x87\xd0\x79\x32\xd8\x4d\x15\x40\x36\xbd\xd6\xff\x71\x43\x97\x06\x36\x32\xdc\xde\xad\xfc\x13\x00\x00\xff\xff\x52\x15\x0d\x38\x6a\x04\x00\x00")
func translationsKubectlEn_usLc_messagesK8sMoBytes() ([]byte, error) {
return bindataRead(
@ -135,7 +135,7 @@ func translationsKubectlEn_usLc_messagesK8sMo() (*asset, error) {
return a, nil
}
var _translationsKubectlEn_usLc_messagesK8sPo = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xbc\x53\x5d\x4f\xdb\x4a\x10\x7d\xcf\xaf\x98\xeb\xe8\x4a\xa0\x7b\xd7\xb5\x13\x15\x21\xd3\x54\x85\x14\x28\x2a\x88\x28\x98\xaa\x52\x5b\x55\x1b\xef\xc4\xd9\x76\x3d\x6b\xed\x8c\xf9\xf8\xf7\x95\xed\x40\x9a\x4a\x95\x78\x81\xb7\xd9\xd9\x33\x73\xe6\xcc\x9e\x1d\x42\x8e\x2c\x20\x41\x13\x3b\x2d\xd6\x13\xc3\xd2\x07\x68\xc8\x0a\x08\xb2\x70\x3c\x18\xc2\xd4\xd7\xf7\xc1\x96\x2b\x81\x9d\xe9\x2e\x8c\x92\x74\x6f\x30\x84\x7c\x65\x19\x96\xd6\x21\x58\x06\x63\x59\x82\x5d\x34\x82\x06\x1a\x32\x18\x40\x56\x08\xac\x2b\x04\x67\x0b\x24\x46\xd0\xdc\xe5\x66\x87\xd3\x8f\x87\xa7\xc7\x50\xeb\xe2\xa7\x2e\xb1\x6d\x7f\x72\x36\xbf\xca\xe1\xf0\x3a\xff\x70\x39\x87\x45\x40\x32\x9a\x62\x13\x2f\x9a\x40\xfc\xae\xac\xb4\x75\x71\xe1\xab\xff\x3b\xe2\x78\x30\x1c\x54\x5c\x5a\x03\x51\xd4\x06\x2c\xa1\x8d\xa2\x59\xf0\x3f\xb0\x10\x75\x66\xd4\x27\x0c\x6c\x3d\x65\x50\xa2\x08\xde\x89\x2a\xbd\xc2\x3b\x5d\xd5\x0e\x59\xad\xd0\x39\xff\x95\xa2\x41\x34\xc7\xda\x07\x51\x17\x6d\x33\x75\xd4\x94\xac\x72\x9f\x41\x77\x35\xbb\xcc\xd5\x34\x60\xb7\x0f\xf5\x5e\x0b\x66\x2d\xf7\x58\xa5\x23\x95\x8e\x60\x94\x64\xc9\xf8\xbf\x24\x49\x92\x35\x58\xcd\xf1\xc6\xf2\x16\x76\xaf\xc3\x8e\x61\x34\xca\xc6\xaf\x55\xb2\xbf\xc6\x9e\x6b\x16\x95\xaf\x97\xed\x43\x06\x47\xbd\x5a\x38\x6a\xb5\xc2\x9b\xbf\x8a\x7f\xdb\x95\x5f\x9c\x5d\x1c\x6f\xe4\xa5\x71\xdf\x74\xea\x49\x90\x44\xe5\xf7\x35\x66\xd0\x2a\x7e\x55\x3b\x6d\xe9\x00\x8a\x95\x0e\x8c\x32\xb9\xce\x4f\xd4\xfe\x36\xb6\x9d\x61\x89\x41\x1d\x53\xe1\x8d\xa5\x32\x83\xfd\x85\x95\x0e\xf3\x59\x9d\x22\x61\xe8\x07\x9c\x79\x34\x56\x20\x8d\xf7\xe2\x34\x59\x5f\xf7\x39\x75\xe5\x9b\x50\xe0\xb4\xe7\xc8\x60\x43\x72\xae\xa9\x6c\x74\x89\x2a\x47\x5d\x3d\xac\xd4\x35\x41\x3b\x75\xe2\x43\xc5\x19\x50\xdd\x1d\x79\x32\x3a\x80\x3e\x9c\xec\x10\xfc\x33\x81\x74\xf7\x60\xab\x45\x06\x48\x6d\xa2\x7d\xea\x42\xee\x04\xa2\xeb\xda\x68\xc1\xce\x4a\x9a\xc8\xcb\xda\xb4\x9e\x40\x43\x40\xee\x66\x8a\x1e\x2c\xf2\x64\x70\x67\xa3\xa7\xa1\x37\xa3\x44\x83\xe8\x56\x4b\xb1\x6a\x3f\x80\x27\x77\x0f\xdc\xd4\xad\xa7\xd0\xb4\x35\x96\x8c\xbd\xb1\xa6\xd1\xee\xb1\x98\x41\x93\x79\x3c\x41\xe1\x9d\xc3\xa2\x27\x51\x10\x0d\xa2\x7f\xcd\x6f\xd0\x5b\x0c\x08\x4b\xdf\x90\x89\x36\x8e\x7f\x51\xc2\xef\xfd\xd3\xbc\x30\x2f\x4b\xf8\x92\x7c\x7b\x5e\x52\xb8\xd5\xfc\x07\x65\xfa\xcc\x94\xdb\x3a\x7f\x05\x00\x00\xff\xff\x61\x66\xb9\x11\x78\x05\x00\x00")
var _translationsKubectlEn_usLc_messagesK8sPo = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xbc\x53\x6d\x4f\xdb\x30\x10\xfe\xce\xaf\xb8\x15\x4d\x02\x6d\xce\x92\x56\x43\x28\xac\xd3\x20\x03\x86\x06\xa2\x2a\x61\x9a\xb4\x4d\x93\x1b\x1f\x89\x37\xc7\x8e\x6c\x87\x97\x7f\xbf\xb3\x53\xe8\x3a\x69\x12\x5f\xa0\xaa\x14\xfb\xfc\xdc\x3d\xf7\xf2\xdc\x26\x94\xe8\x3c\x78\xcb\xb5\x53\xdc\x4b\xa3\x1d\x5c\x19\x0b\xbd\x96\x64\xa5\x27\x97\x6c\x6c\x42\x61\xba\x3b\x2b\xeb\xc6\xc3\x56\xb1\x0d\xe3\x34\xdb\x21\x63\xd9\x48\xc2\x4a\x85\x40\x5f\x21\x9d\xb7\x72\xd1\x7b\x14\xe4\x2b\xd0\x82\x6f\x10\x1c\x6f\x11\x94\xac\x50\x3b\x04\xee\xa2\x6d\xb6\x5f\x7c\xde\x3f\x3e\x84\x8e\x57\xbf\x79\x8d\x21\xfc\xd1\xc9\xfc\xa2\x84\xfd\xcb\xf2\xd3\xf9\x1c\x16\x16\xb5\xe0\x3a\x11\xc9\xa2\xb7\xda\x7d\xa8\x5b\x2e\x55\x52\x99\xf6\x75\x24\x26\xfc\x46\xeb\x6a\x29\x60\x34\x0a\x07\xa2\x0d\xa7\xd1\xcc\x9a\x5f\x58\x79\x76\x22\xd8\x17\xb4\x8e\x0a\xc9\xa1\x46\xef\xf1\xd6\xb3\xda\x30\xbc\xe5\x6d\xa7\xd0\xb1\x06\x95\x32\xdf\x35\x79\xcc\xb1\x33\xd6\xb3\xb3\x10\x8c\x1d\xf4\xb5\x63\xa5\xc9\x21\x3e\xcd\xce\x4b\x56\x58\x8c\xfd\x60\x1f\xb9\xc7\x3c\x70\x4f\x58\x36\xa6\x3f\x1d\xf3\x74\xf2\x2a\xa5\xdf\x12\xcc\xe6\x78\x2d\xdd\x1a\x76\x27\x62\x27\x30\x1e\xe7\x93\xb7\x2c\xdd\x5d\x62\x4f\xb9\xf3\xac\x5c\x36\xdb\xd8\x1c\x0e\x86\x6a\xe1\x20\xd4\x0a\xef\xfe\x5b\xfc\xfb\xe8\x7e\x76\x72\x76\xb8\x2a\x2f\x4b\x86\xa0\x85\xd1\x1e\x35\xc5\xbd\xeb\x88\x3c\x54\xfc\xa6\x53\x5c\xea\x3d\xa8\x1a\x6e\x1d\xfa\xe9\x65\x79\xc4\x76\xd7\xb1\x21\x87\x2b\xb4\xec\x50\x57\x46\x48\x5d\xe7\xb0\xbb\x90\x3e\x62\xbe\xb2\x63\xd4\x68\x87\x04\x67\x06\x05\x49\x21\x4b\x76\x92\x2c\x5d\x3e\x0f\x36\x76\x61\x7a\x5b\x61\x31\x70\xe4\xb0\x22\x39\xe5\xba\xee\x69\xb6\xac\x44\xde\xde\xb7\x54\xf5\x96\x2b\x76\x64\x6c\xeb\x72\xd0\x5d\xbc\xba\xe9\x78\x0f\x86\xe3\x74\x4b\xc3\x8b\x29\x64\xdb\x7b\x6b\x21\x72\x40\x1d\x0c\x61\xd4\x95\xbf\xf5\x30\xba\xec\x04\x35\x39\x4a\x89\x6b\x6d\xfc\x52\xb4\x46\x03\x07\x8b\x2e\xe6\x34\xba\x97\xc8\xa3\xc1\x51\x46\x8f\x43\xaf\x52\xa1\x3c\x6f\xb8\xaf\x9a\xb0\x00\x46\xab\x3b\x70\x7d\x17\x34\x45\x3b\x40\x3e\x52\x0b\x79\x2d\x45\xcf\xd5\x83\xb3\xa3\xb8\xe2\xe1\x06\x95\x51\x8a\x34\x1b\x49\x18\x50\xb4\x97\xe2\x2f\xe8\x0d\x5a\xa4\x5d\xa4\x6d\x1a\xad\x14\xff\xac\x84\x3f\x87\xd1\x3c\x33\x2f\x8d\xe2\x5b\xfa\xe3\x69\x49\xe1\x86\xbb\x7f\x28\xb3\x27\xa6\x5c\xaf\xf3\x4f\x00\x00\x00\xff\xff\x61\x66\xb9\x11\x78\x05\x00\x00")
func translationsKubectlEn_usLc_messagesK8sPoBytes() ([]byte, error) {
return bindataRead(
@ -155,7 +155,7 @@ func translationsKubectlEn_usLc_messagesK8sPo() (*asset, error) {
return a, nil
}
var _translationsTestDefaultLc_messagesK8sMo = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x64\x51\xc1\x6e\x13\x31\x10\x7d\x0d\xe1\xb2\x47\x2e\x5c\x38\x18\xa1\x4a\x20\x34\x8b\x77\x03\x55\xe4\x10\x84\x12\x5a\x54\x94\xa8\x51\x59\x50\x6f\xe0\x64\xa7\x1b\xa3\x5d\x7b\x65\x3b\x50\x3e\x80\x4f\xe0\xc8\x1f\xf0\x4d\x7c\x0b\x4a\x36\xd0\x22\xe6\x60\xbd\x79\x7a\xef\xd9\xe3\xf9\x75\xa7\xff\x1d\x00\x6e\x01\xb8\x07\xe0\x29\x80\xdb\x00\x66\xe8\xea\x23\x80\x07\x00\x34\x80\xbb\x00\xbe\x01\xf8\x79\x00\xfc\x00\x70\x08\xe0\x4d\xaf\xf3\xb6\x3d\xe0\x60\xef\xe9\xed\xf3\x76\x15\x39\xc4\x0f\x6d\xbd\xf1\xba\xee\xdf\xc0\xf8\x0f\x87\xe8\x8d\xad\xfa\x37\x30\x16\xde\x7d\xe2\x55\xa4\xd3\x92\xde\xb3\x0f\xc6\x59\x25\x2a\x8e\x91\xaf\x22\x55\x8e\xf8\x4a\x37\x6d\xcd\x81\xd6\x5c\xd7\x2e\x39\xe7\xd6\xf9\x48\xf3\x50\x99\x92\x26\x9b\x2a\x50\xe1\x94\x48\x16\x67\x05\x4d\x3d\xeb\x68\x9c\xa5\x57\x3a\xb2\x12\xb9\xcc\x06\x94\xe5\x94\xe5\x22\x97\x4a\x0e\x1e\x4b\x29\x65\xb2\x38\xa3\x73\xfe\x6c\xc2\x3f\xba\xa3\x9d\x6e\x20\xf2\x4c\x0d\x9e\x91\x1c\x4a\x99\xcc\x74\x88\x54\x78\x6d\x43\xad\xa3\xf3\x4a\x4c\x3c\xdb\x52\x5b\x31\xd9\x78\x1b\xc4\xf3\x65\xd7\xa6\x65\xba\xdc\x12\x2f\xab\x46\x9b\x3a\x5d\xb9\xe6\x45\x32\x3f\x9d\x1f\x5f\x8f\x92\xa5\x32\x99\x3a\x1b\xd9\x46\x2a\xbe\xb6\xac\xc4\x76\xb2\x27\x6d\xad\x8d\x1d\x89\xd5\x5a\xfb\xc0\x71\xfc\xae\x38\xa1\xe1\xb5\x6e\x7b\xef\x25\x7b\x3a\xb6\x2b\x57\x1a\x5b\x29\x31\x5c\x9a\x98\x5c\xd0\x6b\xb6\xec\xbb\x07\x2d\x1c\x97\x26\x8a\x2c\x3d\x4a\x33\x99\x5c\x50\xd7\xd3\x5b\xb7\xf1\x2b\x9e\x76\xb9\x4a\x74\xc1\x33\x6d\xab\x8d\xae\x98\x0a\xd6\xcd\xf6\xbb\x76\x2b\xa1\x13\xe7\x9b\xa0\x84\xed\x36\x14\xc6\xf9\x48\x74\x70\xfc\xd0\x8a\xfb\x63\x91\x3d\x1a\xfd\xb5\x2a\xc1\x36\x41\x5c\xb3\x67\xf1\x45\x07\x71\x58\x0a\x13\xb9\xf9\xc3\x6c\x8f\x3d\x15\x70\xe9\x1c\x7e\x07\x00\x00\xff\xff\x59\x11\x2e\xef\x74\x02\x00\x00")
var _translationsTestDefaultLc_messagesK8sMo = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x64\x91\xc1\x8e\xd3\x30\x10\x86\xb3\x4b\xb9\xe4\xc8\x85\x0b\x87\x41\x68\x25\x10\x9a\x92\xb4\xb0\xaa\x5c\x8a\x50\xcb\x2e\x5a\xd4\x8a\x6a\x09\x88\x1b\xb8\xc9\x6c\x1a\x94\xd8\x91\x3d\x81\xe5\x01\x78\x04\x8e\xbc\x01\xcf\xc4\xb3\x30\xa9\x0b\xbb\x88\x51\xbe\x78\x3c\xf9\xe7\x77\x6c\xff\xba\x35\xf8\x1e\x49\xdc\x10\xee\x08\x8f\x85\x9b\xc2\x32\x0a\xf1\x51\xb8\x27\x68\xe1\xb6\xf0\x4d\xf8\x79\x10\x45\x3f\x64\x3c\x12\x5e\x1d\x86\xde\x56\xc6\x83\x7d\xcf\xe1\xde\x6f\x17\x4c\x9e\x3f\xb4\x75\xe7\x74\x3d\xb8\x96\x47\xff\xe5\x9e\x5d\x65\xca\xc1\xb5\x3c\x5a\x3b\xfb\x89\x72\xc6\xb3\x02\xdf\x91\xf3\x95\x35\x0a\x4a\x62\xa6\x4b\xc6\xd2\x22\x5d\xea\xa6\xad\xc9\xe3\x96\xea\xda\xc6\xe7\xd4\x5a\xc7\xb8\xf2\x65\x55\xe0\xbc\x2b\x3d\x66\x56\x41\xbc\x7e\x9d\xe1\xc2\x91\x66\x69\xc7\x17\x9a\x49\xc1\x28\x49\xc7\x98\x8e\xe4\x91\x54\x25\xe3\x87\x89\x84\x08\xf1\x9c\x3e\x57\xfe\x1f\xdd\xf1\x4e\x37\x86\x51\xaa\xc6\x4f\x30\x99\x88\x6e\xa9\x3d\x63\xe6\xb4\xf1\xb5\x66\xeb\x14\xcc\x1d\x99\x42\x1b\x98\x77\xce\x78\x78\xba\x09\xd3\x61\x31\xdc\xf4\x85\xe7\x65\xa3\xab\x7a\x98\xdb\xe6\x59\xbc\x3a\x5b\x9d\x5c\x6d\x25\x1d\x26\xf1\xc2\x1a\x26\x23\x7e\x5f\x5b\x59\xb0\xdf\xd9\xa3\xb6\xd6\x95\x99\x42\xbe\xd5\xce\x13\xcf\xde\x66\xa7\x38\xb9\xd2\xf5\xeb\x5e\x90\xc3\x13\x93\xdb\x42\x0e\x49\xc1\x64\x53\x71\xfc\x1e\x5f\x92\x21\x17\x7e\x68\x6d\xa9\xa8\x58\xfc\x8f\x87\x69\x22\x9f\xc2\x1c\xdf\xd8\xce\xe5\xb4\x08\xbe\x0a\x82\xf1\x52\x9b\xb2\xd3\x25\x61\x46\xba\xe9\x8f\x6b\x77\x25\x78\x6a\x5d\xe3\x15\x98\x70\x43\x7e\x36\x9a\x42\x48\x67\xf7\x0d\xdc\x9d\x41\xfa\x60\xfa\xb7\x55\x01\x99\x38\xe2\x2d\x39\x82\x2f\xda\xc3\x51\x01\x15\x53\xf3\xa7\xd2\xbf\xf6\x25\x1f\x5d\x58\x1b\xfd\x0e\x00\x00\xff\xff\x59\x11\x2e\xef\x74\x02\x00\x00")
func translationsTestDefaultLc_messagesK8sMoBytes() ([]byte, error) {
return bindataRead(
@ -175,7 +175,7 @@ func translationsTestDefaultLc_messagesK8sMo() (*asset, error) {
return a, nil
}
var _translationsTestDefaultLc_messagesK8sPo = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x74\x52\x61\x6f\xd3\x30\x10\xfd\x9e\x5f\x71\xa4\x42\xda\x04\x0e\x49\x2a\xa6\x29\xa3\x88\x2d\xb4\xa3\x62\xd5\xaa\x2e\x43\x48\x80\x90\x9b\x5c\x13\x43\x62\x47\xbe\x0b\x74\xff\x1e\x39\xc9\xa8\xca\xc4\x97\xc8\x7e\xef\xdd\x3d\xbf\xcb\x4d\x20\x43\x62\x60\x2b\x35\xd5\x92\x95\xd1\x04\x3b\x63\xa1\xd3\x8a\x81\x91\x98\x02\x6f\x02\xa9\x69\x1f\xac\x2a\x2b\x86\x93\xf4\x14\xe2\x30\x3a\xf3\x26\x90\x55\x8a\x60\xa7\x6a\x04\x45\x50\x28\x62\xab\xb6\x1d\x63\x01\x9d\x2e\xd0\x02\x57\x08\x24\x1b\x84\x5a\xe5\xa8\x09\x41\x52\x8f\xad\x2f\xd3\x8f\x97\xd7\x73\x68\x65\xfe\x53\x96\xe8\xda\x2f\x96\x9b\xbb\x0c\x2e\xef\xb3\x0f\xb7\x1b\xd8\x5a\xd4\x85\xd4\x41\x11\x6c\x3b\xab\xe9\x5d\xd9\x48\x55\x07\xb9\x69\x5e\xf6\xc6\x81\x37\xf1\x1a\x2a\x55\x01\xbe\xef\x0e\xc4\xd6\x9d\xfc\xb5\x35\x3f\x30\x67\xb1\x2c\xc4\x27\xb4\xa4\x8c\x4e\xa0\x44\x66\xdc\xb3\x28\x8d\xc0\xbd\x6c\xda\x1a\x49\x54\x58\xd7\xe6\xab\xf6\x3d\x7f\x83\xad\xb1\x2c\x56\xae\x99\xb8\xea\x4a\x12\x99\x49\xa0\xa7\xd6\xb7\x99\x48\x2d\xf6\xf3\x10\xef\x25\x63\xe2\xbc\xa7\x22\x8a\x45\x14\x43\x1c\x26\xe1\xf4\x45\x18\x86\xe1\x28\x16\x1b\xfc\xa5\xe8\x48\x7b\xd6\x6b\xa7\x10\x47\xc9\xf4\xb5\x08\xcf\x47\xed\x8d\x24\x16\xd9\x38\x6c\x63\x13\xb8\x1a\xd2\xc2\x95\xcb\x0a\x6f\xfe\x1b\xfe\x6d\x5f\xbe\x5a\xae\xe6\x87\x78\x51\x30\x34\x4d\x8d\x66\xd4\x2c\xb2\x87\x16\x13\x70\x89\x5f\xb5\xb5\x54\xfa\x02\xf2\x4a\x5a\x42\x9e\xdd\x67\x0b\x71\x7e\xac\x75\x6f\xd8\xa1\x15\x73\x9d\x9b\x42\xe9\x32\x81\xf3\xad\xe2\x5e\xf3\x59\x5c\xa3\x46\x3b\x3c\x70\x6d\xb0\x50\x0c\x51\x70\x16\x44\xe1\x48\x0f\x98\xb8\x33\x9d\xcd\x31\x1d\x3c\x12\x38\x98\xdc\x48\x5d\x76\xb2\x44\x91\xa1\x6c\x1e\x47\x5a\x77\x56\xd6\x62\x61\x6c\x43\x09\xe8\xb6\xbf\xd2\x2c\xbe\x80\xe1\x38\x3b\xd1\xf0\x6c\x06\xd1\xe9\xc5\x51\x8b\x04\x50\x3b\xc0\xfd\xea\x9c\xf7\x0c\xbe\x5b\xca\xef\x6e\xd9\x74\xe9\x3f\x6e\xc2\xbf\x58\xbf\x14\x3b\x63\x9e\xd4\x0d\x5e\xc7\x75\x47\xd8\x78\x7b\x4a\x11\xdb\x2f\xe1\x37\xf0\xb9\x42\x8b\xf0\x5b\x12\x3c\x2f\x40\x31\x36\x7f\xd9\xe8\xc0\xba\xcf\x48\x93\xef\xfd\x09\x00\x00\xff\xff\xbf\xc0\xcb\xd2\x64\x03\x00\x00")
var _translationsTestDefaultLc_messagesK8sPo = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x74\x52\x61\x6f\xd3\x30\x10\xfd\xde\x5f\x71\x64\x42\xda\x04\x0e\x49\x2b\xaa\x2a\xa5\x88\x36\xb4\xa3\x62\xd5\xaa\x2e\x43\x48\x80\x90\x9b\x5c\x13\x43\x62\x47\xb6\x03\xdd\xbf\xe7\x9c\x64\x54\x65\x22\x8a\x92\xf3\x7b\xef\xee\xf9\xec\xbb\x80\x04\x8d\x05\xab\xb9\x34\x25\xb7\x42\x49\x03\x07\xa5\xa1\x91\x82\x50\xa2\x8c\x3f\xb8\x80\x58\xd5\x0f\x5a\xe4\x85\x85\xcb\xf8\x0a\x86\x41\x38\x26\x30\x29\x04\x69\x45\x89\x40\xff\x4c\x18\xab\xc5\xbe\xb1\x98\x51\x6e\x86\x1a\x6c\x81\x60\x78\x85\x50\x8a\x14\xa5\x41\xe0\xa6\xc5\xb6\xf3\xf8\xe3\xfc\x7a\x09\x35\x4f\x7f\xf2\x1c\x5d\xf9\xd5\x7a\x77\x97\xc0\xfc\x3e\xf9\x70\xbb\x83\xbd\x46\x99\x71\xe9\x67\xfe\xbe\xd1\xd2\xbc\xcb\x2b\x2e\x4a\x3f\x55\xd5\xcb\xd6\x98\xf4\x83\xca\xe4\x22\x03\xcf\x73\x01\xd9\xba\xc8\xdb\x6a\xf5\x03\x53\xcb\xd6\x19\xfb\x84\xda\x50\x23\x11\xe4\x68\x2d\x1e\x2d\xcb\x15\xc3\x23\xaf\xea\x12\x0d\x2b\xb0\x2c\xd5\x57\x49\x19\x3b\xac\x95\xb6\x6c\xe3\x8a\xb1\x45\x93\x1b\x96\xa8\x08\x5a\x6a\x7b\x9b\xb0\x58\x63\x7b\x1e\xec\x3d\xb7\x18\x39\xef\x11\x0b\x87\xf4\x52\x18\x05\xa3\x17\x01\x3d\xbd\x98\xed\xf0\x97\x30\x67\xda\x71\xab\x1d\xc1\x30\x8c\x46\xaf\x59\x30\xe9\xb5\x37\xdc\x58\x96\xf4\x87\xad\x74\x04\x8b\xae\x5b\x58\xb8\x5e\xe1\xcd\x7f\x9b\x7f\xdb\xa6\x6f\xd6\x9b\xe5\xa9\xbd\xd0\xef\x8a\xc6\x4a\x5a\x94\x54\xf7\xa1\x26\x73\xd7\xf1\xab\xba\xe4\x42\x4e\x21\x2d\xb8\x36\x68\x67\xf7\xc9\x8a\x4d\xce\xb5\x6e\x0f\x07\xd4\x6c\x29\x53\x95\x09\x99\x47\x30\xd9\x0b\xdb\x6a\x3e\xb3\x6b\x94\xa8\xbb\x0d\x6e\x15\x66\x34\x0a\xa1\x3f\xf6\xc3\xa0\xa7\x3b\x8c\xdd\xa9\x46\xa7\x18\x77\x1e\x11\x9c\x4c\x6e\xb8\xcc\x1b\xba\x5b\x96\x20\xaf\x1e\x8f\xb4\x6c\x34\x2f\xd9\x4a\xe9\xca\x44\x20\xeb\x76\x69\x66\xc3\x29\x74\xe1\xec\x52\xc2\xb3\x19\x84\x57\xd3\xb3\x12\x11\xa0\x74\x80\xbb\xea\xd4\x1e\x2d\x78\x6e\x28\xbf\xbb\x61\x93\xb9\xf7\x38\x09\xff\x62\xed\x50\x1c\x94\x7a\x92\xd7\x79\x9d\xe7\x9d\x61\xfd\xea\x29\x45\x25\xbf\x04\xdf\x08\x2f\x50\x23\xfc\xa6\x61\x7e\x9e\x81\xb0\x58\xfd\x65\xc3\x13\xeb\x3e\x3d\x6d\xbc\xc1\x9f\x00\x00\x00\xff\xff\xbf\xc0\xcb\xd2\x64\x03\x00\x00")
func translationsTestDefaultLc_messagesK8sPoBytes() ([]byte, error) {
return bindataRead(
@ -195,7 +195,7 @@ func translationsTestDefaultLc_messagesK8sPo() (*asset, error) {
return a, nil
}
var _translationsTestEn_usLc_messagesK8sMo = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x64\x51\xc1\x6e\x13\x31\x10\x7d\x0d\xe1\xb2\x47\x2e\x5c\x38\x18\xa1\x4a\x20\x34\x8b\x77\x83\xaa\xc8\x21\x08\x25\xb4\xa8\x28\x51\xa3\xb2\xa0\xde\xc0\xc9\x0e\x1b\xa3\x5d\x7b\x65\x3b\x50\xb8\xf3\x09\x1c\xf9\x03\xbe\x89\x6f\x41\xc9\x06\x5a\xd4\x39\x58\x6f\x9e\xde\x7b\xf6\x78\x7e\xdf\xe9\xff\x00\x80\x5b\x00\xee\x01\x78\x0a\xe0\x36\x80\x19\xba\xfa\x00\xe0\x01\x00\x0d\xe0\x2e\x80\xef\x00\x7e\x1d\x00\x3f\x01\x1c\x02\x78\xdd\xeb\xbc\x6d\x0f\x38\xd8\x7b\x7a\xfb\xbc\x5d\x45\x0e\xf1\x7d\x5b\x6f\xbc\xae\xfb\xd7\x30\x6e\xe0\x10\xbd\xb1\x55\xff\x1a\xc6\xc2\xbb\x4f\xbc\x8a\x74\x5a\xd2\x3b\xf6\xc1\x38\xab\x44\xc5\x31\xf2\x65\xa4\xca\x11\x5f\xea\xa6\xad\x39\xd0\x9a\xeb\xda\x25\xe7\xdc\x3a\x1f\x69\x1e\x2a\x53\xd2\x64\x53\x05\x2a\x9c\x12\xc9\xe2\xac\xa0\xa9\x67\x1d\x8d\xb3\xf4\x52\x47\x56\x22\x97\xd9\x80\xb2\x9c\xb2\x5c\xe4\x52\xc9\xc1\x63\x29\xa5\x4c\x16\x67\x74\xce\x9f\x4d\xf8\x4f\x77\xb4\xd3\x0d\x44\x9e\xab\x2c\x27\x39\x94\x32\x99\xe9\x10\xa9\xf0\xda\x86\x5a\x47\xe7\x95\x98\x78\xb6\xa5\xb6\x62\xb2\xf1\x36\x88\x67\xcb\xae\x4d\xcb\x74\xb9\x25\x5e\x54\x8d\x36\x75\xba\x72\xcd\xf3\x64\x7e\x3a\x3f\xbe\x1a\x25\x4b\x65\x32\x75\x36\xb2\x8d\x54\x7c\x6d\x59\x89\xed\x64\x4f\xda\x5a\x1b\x3b\x12\xab\xb5\xf6\x81\xe3\xf8\x6d\x71\x42\xc3\x2b\xdd\xf6\xde\x8f\xec\xe9\xd8\xae\x5c\x69\x6c\xa5\xc4\x70\x69\x62\x72\x41\xaf\xd8\xb2\xef\x1e\xb4\x70\x5c\x9a\x28\xb2\xf4\x28\xcd\x64\x72\x41\x5d\x4f\x6f\xdc\xc6\xaf\x78\xda\xe5\x2a\xd1\x05\xcf\xb4\xad\x36\xba\x62\x2a\x58\x37\xdb\xef\xda\xad\x84\x4e\x9c\x6f\x82\x12\xb6\xdb\x50\x18\xe7\x23\xd1\xc1\xf1\x43\x2b\xee\x8f\x45\xf6\x68\xf4\xcf\xaa\x04\xdb\x04\x71\xcd\x9e\xc5\x17\x1d\xc4\x61\x29\x4c\xe4\xe6\x2f\xb3\x3d\xf6\x54\xc0\x52\x7f\xc3\x9f\x00\x00\x00\xff\xff\xa9\x73\xeb\x8c\x74\x02\x00\x00")
var _translationsTestEn_usLc_messagesK8sMo = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x64\x91\xc1\x6e\xd3\x40\x10\x86\xdd\x12\x2e\x3e\x72\xe1\xc2\x61\x10\xaa\x04\x42\x63\x6c\x07\x55\xd1\x86\x20\x94\xd0\xa2\xa2\x44\x44\xc5\x20\x6e\xb0\xb1\x07\xc7\xc8\xde\xb5\x76\xc7\x50\xb8\xf3\x08\x1c\x79\x03\x9e\x89\x67\x61\x1c\x07\x5a\xd4\x91\x3f\xef\xbf\xe3\x99\x7f\xbd\xbb\xbf\x6f\x8d\x7e\x04\x12\x37\x84\x3b\xc2\x63\xe1\xa6\xb0\x0c\x86\xf8\x20\xdc\x13\xb4\x70\x5b\xf8\x2e\xfc\x3a\x08\x82\x9f\x32\x1e\x09\x2f\x0f\x87\xde\x56\xc6\x83\x7d\xcf\xe1\xde\x6f\x17\x4c\x9e\xdf\xb7\x75\xe7\x74\x3d\xba\xa2\x83\x6b\xda\xb3\xab\x4c\x39\xba\xa2\x83\xb5\xb3\x9f\x28\x67\x3c\x2b\xf0\x2d\x39\x5f\x59\xa3\xa0\x24\x66\xba\x60\x2c\x2d\xd2\x85\x6e\xda\x9a\x3c\x6e\xa9\xae\x6d\x78\x4e\xad\x75\x8c\x2b\x5f\x56\x05\xce\xbb\xd2\x63\x66\x15\x84\xeb\x57\x19\x2e\x1c\x69\x96\x76\x7c\xae\x99\x14\xa4\x71\x32\xc6\x24\x95\x47\xa4\x8a\xc7\x0f\x63\x09\x29\xc4\x73\xfa\x5c\xf9\xff\xea\x8e\x77\x75\x63\x48\x53\x25\x22\x9e\x48\xdd\x52\x7b\xc6\xcc\x69\xe3\x6b\xcd\xd6\x29\x98\x3b\x32\x85\x36\x30\xef\x9c\xf1\xf0\x64\x33\x4c\xa3\x22\xda\xf4\x89\x67\x65\xa3\xab\x3a\xca\x6d\xf3\x34\x5c\x9d\xad\x4e\x2e\xb7\x92\x44\x71\xb8\xb0\x86\xc9\x88\xdf\xd7\x56\x16\xec\x77\xf6\xa8\xad\x75\x65\xa6\x90\x6f\xb5\xf3\xc4\xb3\x37\xd9\x29\x4e\x2e\xeb\xfa\x75\x3f\x92\xc3\x13\x93\xdb\x42\x0e\x49\xc1\x64\x53\x71\xf8\x0e\x5f\x90\x21\x37\xfc\xd0\xda\x52\x51\xb1\xf8\x1f\x47\x49\x2c\x9f\x86\x39\xbe\xb6\x9d\xcb\x69\x31\xf8\x2a\x18\x8c\x97\xda\x94\x9d\x2e\x09\x33\xd2\x4d\x7f\x5c\xbb\x2b\xc1\x53\xeb\x1a\xaf\xc0\x0c\x37\xe4\x67\xe9\x14\x06\x39\xbb\x6f\xe0\xee\x0c\x92\x07\xd3\x7f\xad\x0a\xc8\x84\x01\x6f\xc9\x11\x7c\xd1\x1e\x8e\x0a\xa8\x98\x9a\xbf\x99\xfe\xb5\x4f\xf9\x60\xa3\xbf\x05\x7f\x02\x00\x00\xff\xff\xa9\x73\xeb\x8c\x74\x02\x00\x00")
func translationsTestEn_usLc_messagesK8sMoBytes() ([]byte, error) {
return bindataRead(
@ -215,7 +215,7 @@ func translationsTestEn_usLc_messagesK8sMo() (*asset, error) {
return a, nil
}
var _translationsTestEn_usLc_messagesK8sPo = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x74\x52\x61\x6f\xd3\x30\x10\xfd\x9e\x5f\x71\xa4\x42\xda\x04\x0e\x49\x26\x4d\x53\x46\x11\x6b\x68\x47\xc5\xaa\x55\x5d\x86\x90\x00\x21\x37\xb9\x26\x86\xc4\x8e\x7c\x17\xe8\xf8\xf5\xc8\x49\x46\x55\x26\xbe\x44\xf6\x7b\xef\xee\xf9\x5d\x6e\x02\x19\x12\x03\x5b\xa9\xa9\x96\xac\x8c\x26\xd8\x19\x0b\x9d\x56\x0c\x8c\xc4\x14\x78\x13\x48\x4d\xfb\x60\x55\x59\x31\x9c\xa4\xa7\x10\x87\xd1\xb9\x37\x81\xac\x52\x04\x3b\x55\x23\x28\x82\x42\x11\x5b\xb5\xed\x18\x0b\xe8\x74\x81\x16\xb8\x42\x20\xd9\x20\xd4\x2a\x47\x4d\x08\x92\x7a\x6c\x7d\x95\x7e\xb8\xba\x9e\x43\x2b\xf3\x1f\xb2\x44\xd7\x7e\xb1\xdc\xdc\x65\x70\x75\x9f\xbd\xbf\xdd\xc0\xd6\xa2\x2e\xa4\x0e\x8a\x60\xdb\x59\x4d\x6f\xcb\x46\xaa\x3a\xc8\x4d\xf3\xb2\x37\x0e\xbc\x89\xd7\x50\xa9\x0a\xf0\x7d\x77\x20\xb6\xee\xe4\xaf\xad\xf9\x8e\x39\x8b\x65\x21\x3e\xa2\x25\x65\x74\x02\x25\x32\xe3\x9e\x45\x69\x04\xee\x65\xd3\xd6\x48\xa2\xc2\xba\x36\x5f\xb4\xef\xf9\x1b\x6c\x8d\x65\xb1\x72\xcd\xc4\xac\x2b\x49\x64\x26\x81\x9e\x5a\xdf\x66\x22\xb5\xd8\xcf\x43\xbc\x93\x8c\x89\xf3\x3e\x13\x51\x2c\xa2\x18\xe2\x30\x09\xcf\x5e\x84\x61\x18\x8e\x62\xb1\xc1\x9f\x8a\x8e\xb4\xe7\xbd\xf6\x0c\xe2\x38\x89\x62\x11\x5e\x8c\xda\x1b\x49\x2c\xb2\x71\xd8\xc6\x26\x30\x1b\xd2\xc2\xcc\x65\x85\xd7\xff\x0d\xff\xa6\x2f\x5f\x2d\x57\xf3\x43\xbc\x28\x18\x9a\xa6\x46\x33\x6a\x16\xd9\x43\x8b\x09\xb8\xc4\xaf\xda\x5a\x2a\x7d\x09\x79\x25\x2d\x21\x4f\xef\xb3\x85\xb8\x38\xd6\xba\x37\xec\xd0\x8a\xb9\xce\x4d\xa1\x74\x99\xc0\xc5\x56\x71\xaf\xf9\x24\xae\x51\xa3\x1d\x1e\xb8\x36\x58\x28\x86\x28\x38\x0f\xa2\x70\xa4\x07\x4c\xdc\x99\xce\xe6\x98\x0e\x1e\x09\x1c\x4c\x6e\xa4\x2e\x3b\x59\xa2\xc8\x50\x36\x8f\x23\xad\x3b\x2b\x6b\xb1\x30\xb6\xa1\x04\x74\xdb\x5f\x69\x1a\x5f\xc2\x70\x9c\x9e\x68\x78\x36\x85\xe8\xf4\xf2\xa8\x45\x02\xa8\x1d\xe0\x7e\x75\xce\x7b\x06\xdf\x2d\xe5\x37\xb7\x6c\xba\xf4\x1f\x37\xe1\x5f\xac\x5f\x8a\xad\xfc\xfd\xa4\x6e\xf0\x3a\xae\x3b\xc2\xc6\xdb\x53\x8a\xd8\x7e\x0e\xbf\x82\xcf\x15\x5a\x84\x5f\x92\xe0\x79\x01\x8a\xb1\xf9\xcb\x46\x07\xd6\x7d\x46\x9a\x7c\xef\x4f\x00\x00\x00\xff\xff\x03\xfe\xb1\xf0\x64\x03\x00\x00")
var _translationsTestEn_usLc_messagesK8sPo = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x74\x52\x61\x6f\xd3\x30\x10\xfd\xbe\x5f\x71\x64\x42\xda\x04\x0e\x49\x2b\x55\x55\x4a\x11\x6d\x68\x47\xc5\xaa\x55\x5d\x86\x90\x00\x21\x37\xb9\x25\x86\xc4\x8e\x6c\x07\x3a\x7e\x3d\xe7\x24\xa3\x0a\x13\x51\x94\x9c\xdf\x7b\x77\xcf\x67\xdf\x39\x24\x68\x2c\x58\xcd\xa5\x29\xb9\x15\x4a\x1a\xb8\x57\x1a\x1a\x29\x08\x25\xca\xf8\x67\xe7\x10\xab\xfa\x41\x8b\xbc\xb0\x70\x11\x5f\xc2\x28\x08\x27\x04\x26\x85\x20\xad\x28\x11\xe8\x9f\x09\x63\xb5\x38\x34\x16\x33\xca\xcd\x50\x83\x2d\x10\x0c\xaf\x10\x4a\x91\xa2\x34\x08\xdc\xb4\xd8\x6e\x11\x7f\x58\x5c\xad\xa0\xe6\xe9\x0f\x9e\xa3\x2b\xbf\xde\xec\x6f\x13\x58\xdc\x25\xef\x6f\xf6\x70\xd0\x28\x33\x2e\xfd\xcc\x3f\x34\x5a\x9a\xb7\x79\xc5\x45\xe9\xa7\xaa\x7a\xd9\x1a\x93\xfe\xac\x32\xb9\xc8\xc0\xf3\x5c\x40\xb6\x2e\xf2\x76\x5a\x7d\xc7\xd4\xb2\x4d\xc6\x3e\xa2\x36\xd4\x48\x04\x39\x5a\x8b\x47\xcb\x72\xc5\xf0\xc8\xab\xba\x44\xc3\x0a\x2c\x4b\xf5\x45\x52\xc6\x1e\x6b\xa5\x2d\xdb\xba\x62\x6c\xd9\xe4\x86\x25\x2a\x82\x96\xda\xdd\x24\x2c\xd6\xd8\x9e\x07\x7b\xc7\x2d\x46\xce\x7b\xcc\xc2\x11\xbd\x14\x46\xc1\xf8\x45\x40\x4f\x2f\x66\x7b\xfc\x29\xcc\x40\x3b\x69\xb5\x63\x18\x8d\x22\x0a\x82\x69\xaf\xbd\xe6\xc6\xb2\xa4\x3f\x6c\xa5\x23\x58\x76\xdd\xc2\xd2\xf5\x0a\xaf\xff\xdb\xfc\x9b\x36\x7d\xbb\xd9\xae\x4e\xed\x85\x7e\x57\x34\x56\xd2\xa2\xa4\xba\x0f\x35\x99\xbb\x8e\x5f\xd5\x25\x17\x72\x06\x69\xc1\xb5\x41\x3b\xbf\x4b\xd6\x6c\x3a\xd4\xba\x3d\xdc\xa3\x66\x2b\x99\xaa\x4c\xc8\x3c\x82\xe9\x41\xd8\x56\xf3\x89\x5d\xa1\x44\xdd\x6d\x70\xa7\x30\xa3\x51\x08\xfd\x89\x1f\x06\x3d\xdd\x61\xec\x56\x35\x3a\xc5\xb8\xf3\x88\xe0\x64\x72\xcd\x65\xde\xd0\xdd\xb2\x04\x79\xf5\x78\xa4\x65\xa3\x79\xc9\xd6\x4a\x57\x26\x02\x59\xb7\x4b\x33\x1f\xcd\xa0\x0b\xe7\x17\x12\x9e\xcd\x21\xbc\x9c\x0d\x4a\x44\x80\xd2\x01\xee\xaa\x53\x7b\xb4\xe0\xb9\xa1\xfc\xe6\x86\x4d\xe6\xde\xe3\x24\xfc\x8b\xb5\x43\x71\xe0\xbf\x9f\xe4\x75\x5e\xc3\xbc\x01\xd6\xaf\x9e\x52\x54\xf2\x73\xf0\x95\xf0\x02\x35\xc2\x2f\x1a\xe6\xe7\x19\x08\x8b\xd5\x5f\x36\x3c\xb1\xee\xd3\xd3\xc6\x3b\xfb\x13\x00\x00\xff\xff\x03\xfe\xb1\xf0\x64\x03\x00\x00")
func translationsTestEn_usLc_messagesK8sPoBytes() ([]byte, error) {
return bindataRead(

View File

@ -1,41 +0,0 @@
package(default_visibility = ["//visibility:public"])
licenses(["notice"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
"go_test",
)
go_library(
name = "go_default_library",
srcs = [
"exec.go",
"exec_unix.go",
],
tags = ["automanaged"],
deps = [
"//pkg/apis/componentconfig:go_default_library",
"//pkg/apis/meta/v1:go_default_library",
"//pkg/kubelet/container:go_default_library",
"//pkg/kubelet/network:go_default_library",
"//pkg/util/exec:go_default_library",
"//vendor:github.com/golang/glog",
],
)
go_test(
name = "go_default_test",
srcs = ["exec_test.go"],
library = "go_default_library",
tags = ["automanaged"],
deps = [
"//pkg/apis/componentconfig:go_default_library",
"//pkg/kubelet/container:go_default_library",
"//pkg/kubelet/network:go_default_library",
"//pkg/kubelet/network/testing:go_default_library",
"//pkg/util/sets:go_default_library",
"//pkg/util/testing:go_default_library",
],
)

View File

@ -1,203 +0,0 @@
/*
Copyright 2014 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
// Package exec scans and loads networking plugins that are installed
// under /usr/libexec/kubernetes/kubelet-plugins/net/exec/
// The layout convention for a plugin is:
// plugin-name/ (plugins have to be directories first)
// plugin-name/plugin-name (executable that will be called out, see Vendoring Note for more nuances)
// plugin-name/<other-files>
// where, 'executable' has the following requirements:
// - should have exec permissions
// - should give non-zero exit code on failure, and zero on success
// - the arguments will be <action> <pod_namespace> <pod_name> <docker_id_of_infra_container>
// whereupon, <action> will be one of:
// - init, called when the kubelet loads the plugin
// - setup, called after the infra container of a pod is
// created, but before other containers of the pod are created
// - teardown, called before the pod infra container is killed
// - status, called at regular intervals and is supposed to return a json
// formatted output indicating the pod's IPAddress(v4/v6). An empty string value or an erroneous output
// will mean the container runtime (docker) will be asked for the PodIP
// e.g. {
// "apiVersion" : "v1beta1",
// "kind" : "PodNetworkStatus",
// "ip" : "10.20.30.40"
// }
// The fields "apiVersion" and "kind" are optional in version v1beta1
// As the executables are called, the file-descriptors stdin, stdout, stderr
// remain open. The combined output of stdout/stderr is captured and logged.
//
// Note: If the pod infra container self-terminates (e.g. crashes or is killed),
// the entire pod lifecycle will be restarted, but teardown will not be called.
//
// Vendoring Note:
// Plugin Names can be vendored also. Use '~' as the escaped name for plugin directories.
// And expect command line argument to call vendored plugins as 'vendor/pluginName'
// e.g. pluginName = mysdn
// vendorname = mycompany
// then, plugin layout should be
// mycompany~mysdn/
// mycompany~mysdn/mysdn (this becomes the executable)
// mycompany~mysdn/<other-files>
// and, call the kubelet with '--network-plugin=mycompany/mysdn'
package exec
import (
"encoding/json"
"errors"
"fmt"
"io/ioutil"
"path"
"strings"
"github.com/golang/glog"
"k8s.io/kubernetes/pkg/apis/componentconfig"
metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
"k8s.io/kubernetes/pkg/kubelet/network"
utilexec "k8s.io/kubernetes/pkg/util/exec"
)
type execNetworkPlugin struct {
network.NoopNetworkPlugin
execName string
execPath string
host network.Host
}
const (
initCmd = "init"
setUpCmd = "setup"
tearDownCmd = "teardown"
statusCmd = "status"
defaultDir = "/usr/libexec/kubernetes/kubelet-plugins/net/exec/"
)
func ProbeNetworkPlugins(pluginDir string) []network.NetworkPlugin {
execPlugins := []network.NetworkPlugin{}
if pluginDir == "" {
pluginDir = defaultDir
}
files, _ := ioutil.ReadDir(pluginDir)
for _, f := range files {
// only directories are counted as plugins
// and pluginDir/dirname/dirname should be an executable
// unless dirname contains '~' for escaping namespace
// e.g. dirname = vendor~ipvlan
// then, executable will be pluginDir/dirname/ipvlan
if f.IsDir() {
execPath := path.Join(pluginDir, f.Name())
execPlugins = append(execPlugins, &execNetworkPlugin{execName: network.UnescapePluginName(f.Name()), execPath: execPath})
}
}
return execPlugins
}
func (plugin *execNetworkPlugin) Init(host network.Host, hairpinMode componentconfig.HairpinMode, nonMasqueradeCIDR string, mtu int) error {
err := plugin.validate()
if err != nil {
return err
}
plugin.host = host
// call the init script
out, err := utilexec.New().Command(plugin.getExecutable(), initCmd).CombinedOutput()
if err != nil {
glog.V(5).Infof("Init 'exec' network plugin output: %s, %v", string(out), err)
} else {
glog.V(5).Infof("Init 'exec' network plugin output: %s", string(out))
}
return err
}
func (plugin *execNetworkPlugin) getExecutable() string {
parts := strings.Split(plugin.execName, "/")
execName := parts[len(parts)-1]
return path.Join(plugin.execPath, execName)
}
func (plugin *execNetworkPlugin) Name() string {
return plugin.execName
}
func (plugin *execNetworkPlugin) validate() error {
if !isExecutable(plugin.getExecutable()) {
errStr := fmt.Sprintf("Invalid exec plugin. Executable '%s' does not have correct permissions.", plugin.execName)
return errors.New(errStr)
}
return nil
}
func (plugin *execNetworkPlugin) SetUpPod(namespace string, name string, id kubecontainer.ContainerID) error {
out, err := utilexec.New().Command(plugin.getExecutable(), setUpCmd, namespace, name, id.ID).CombinedOutput()
if err != nil {
glog.V(5).Infof("SetUpPod 'exec' network plugin output: %s, %v", string(out), err)
} else {
glog.V(5).Infof("SetUpPod 'exec' network plugin output: %s", string(out))
}
return err
}
func (plugin *execNetworkPlugin) TearDownPod(namespace string, name string, id kubecontainer.ContainerID) error {
out, err := utilexec.New().Command(plugin.getExecutable(), tearDownCmd, namespace, name, id.ID).CombinedOutput()
if err != nil {
glog.V(5).Infof("TearDownPod 'exec' network plugin output: %s, %v", string(out), err)
} else {
glog.V(5).Infof("TearDownPod 'exec' network plugin output: %s", string(out))
}
return err
}
func (plugin *execNetworkPlugin) GetPodNetworkStatus(namespace string, name string, id kubecontainer.ContainerID) (*network.PodNetworkStatus, error) {
out, err := utilexec.New().Command(plugin.getExecutable(), statusCmd, namespace, name, id.ID).CombinedOutput()
if err != nil {
glog.V(5).Infof("Status 'exec' network plugin output: %s, %v", string(out), err)
return nil, err
} else {
glog.V(5).Infof("Status 'exec' network plugin output: %s", string(out))
}
if string(out) == "" {
return nil, nil
}
findVersion := struct {
metav1.TypeMeta `json:",inline"`
}{}
err = json.Unmarshal(out, &findVersion)
if err != nil {
return nil, err
}
// check kind and version
if findVersion.Kind != "" && findVersion.Kind != "PodNetworkStatus" {
errStr := fmt.Sprintf("Invalid 'kind' returned in network status for pod '%s'. Valid value is 'PodNetworkStatus', got '%s'.", name, findVersion.Kind)
return nil, errors.New(errStr)
}
switch findVersion.APIVersion {
case "":
fallthrough
case "v1beta1":
networkStatus := &network.PodNetworkStatus{}
err = json.Unmarshal(out, networkStatus)
return networkStatus, err
}
errStr := fmt.Sprintf("Unknown version '%s' in network status for pod '%s'.", findVersion.APIVersion, name)
return nil, errors.New(errStr)
}

View File

@ -1,341 +0,0 @@
// +build linux
/*
Copyright 2014 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package exec
import (
"bytes"
"fmt"
"io/ioutil"
"math/rand"
"os"
"path"
"sync"
"testing"
"text/template"
"k8s.io/kubernetes/pkg/apis/componentconfig"
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
"k8s.io/kubernetes/pkg/kubelet/network"
nettest "k8s.io/kubernetes/pkg/kubelet/network/testing"
"k8s.io/kubernetes/pkg/util/sets"
utiltesting "k8s.io/kubernetes/pkg/util/testing"
)
func tmpDirOrDie() string {
dir, err := utiltesting.MkTmpdir("exec-test")
if err != nil {
panic(fmt.Sprintf("error creating tmp dir: %v", err))
}
return path.Join(dir, "fake", "plugins", "net")
}
var lock sync.Mutex
var namesInUse = sets.NewString()
func selectName() string {
lock.Lock()
defer lock.Unlock()
for {
pluginName := fmt.Sprintf("test%d", rand.Intn(1000))
if !namesInUse.Has(pluginName) {
namesInUse.Insert(pluginName)
return pluginName
}
}
}
func releaseName(name string) {
lock.Lock()
defer lock.Unlock()
namesInUse.Delete(name)
}
func installPluginUnderTest(t *testing.T, vendorName, testPluginPath, plugName string, execTemplateData *map[string]interface{}) {
vendoredName := plugName
if vendorName != "" {
vendoredName = fmt.Sprintf("%s~%s", vendorName, plugName)
}
pluginDir := path.Join(testPluginPath, vendoredName)
err := os.MkdirAll(pluginDir, 0777)
if err != nil {
t.Errorf("Failed to create plugin dir %q: %v", pluginDir, err)
}
pluginExec := path.Join(pluginDir, plugName)
f, err := os.Create(pluginExec)
if err != nil {
t.Errorf("Failed to install plugin %q: %v", pluginExec, err)
}
defer f.Close()
err = f.Chmod(0777)
if err != nil {
t.Errorf("Failed to set exec perms on plugin %q: %v", pluginExec, err)
}
const execScriptTempl = `#!/bin/bash
# If status hook is called print the expected json to stdout
if [ "$1" == "status" ]; then
echo -n '{
"ip" : "{{.IPAddress}}"
}'
fi
# Direct the arguments to a file to be tested against later
echo -n "$@" &> {{.OutputFile}}
`
if execTemplateData == nil {
execTemplateData = &map[string]interface{}{
"IPAddress": "10.20.30.40",
"OutputFile": path.Join(pluginDir, plugName+".out"),
}
}
tObj := template.Must(template.New("test").Parse(execScriptTempl))
buf := &bytes.Buffer{}
if err := tObj.Execute(buf, *execTemplateData); err != nil {
t.Errorf("Error in executing script template: %v", err)
}
execScript := buf.String()
_, err = f.WriteString(execScript)
if err != nil {
t.Errorf("Failed to write plugin %q: %v", pluginExec, err)
}
}
func tearDownPlugin(testPluginPath string) {
err := os.RemoveAll(testPluginPath)
if err != nil {
fmt.Printf("Error in cleaning up test: %v", err)
}
}
func TestSelectPlugin(t *testing.T) {
// The temp dir where test plugins will be stored.
testPluginPath := tmpDirOrDie()
// install some random plugin under testPluginPath
pluginName := selectName()
defer tearDownPlugin(testPluginPath)
defer releaseName(pluginName)
installPluginUnderTest(t, "", testPluginPath, pluginName, nil)
plug, err := network.InitNetworkPlugin(ProbeNetworkPlugins(testPluginPath), pluginName, nettest.NewFakeHost(nil), componentconfig.HairpinNone, "10.0.0.0/8", network.UseDefaultMTU)
if err != nil {
t.Errorf("Failed to select the desired plugin: %v", err)
}
if plug.Name() != pluginName {
t.Errorf("Wrong plugin selected, chose %s, got %s\n", pluginName, plug.Name())
}
}
func TestSelectVendoredPlugin(t *testing.T) {
// The temp dir where test plugins will be stored.
testPluginPath := tmpDirOrDie()
// install some random plugin under testPluginPath
pluginName := selectName()
defer tearDownPlugin(testPluginPath)
defer releaseName(pluginName)
vendor := "mycompany"
installPluginUnderTest(t, vendor, testPluginPath, pluginName, nil)
vendoredPluginName := fmt.Sprintf("%s/%s", vendor, pluginName)
plug, err := network.InitNetworkPlugin(ProbeNetworkPlugins(testPluginPath), vendoredPluginName, nettest.NewFakeHost(nil), componentconfig.HairpinNone, "10.0.0.0/8", network.UseDefaultMTU)
if err != nil {
t.Errorf("Failed to select the desired plugin: %v", err)
}
if plug.Name() != vendoredPluginName {
t.Errorf("Wrong plugin selected, chose %s, got %s\n", vendoredPluginName, plug.Name())
}
}
func TestSelectWrongPlugin(t *testing.T) {
// The temp dir where test plugins will be stored.
testPluginPath := tmpDirOrDie()
// install some random plugin under testPluginPath
pluginName := selectName()
defer tearDownPlugin(testPluginPath)
defer releaseName(pluginName)
installPluginUnderTest(t, "", testPluginPath, pluginName, nil)
wrongPlugin := "abcd"
plug, err := network.InitNetworkPlugin(ProbeNetworkPlugins(testPluginPath), wrongPlugin, nettest.NewFakeHost(nil), componentconfig.HairpinNone, "10.0.0.0/8", network.UseDefaultMTU)
if plug != nil || err == nil {
t.Errorf("Expected to see an error. Wrong plugin selected.")
}
}
func TestPluginValidation(t *testing.T) {
// The temp dir where test plugins will be stored.
testPluginPath := tmpDirOrDie()
// install some random plugin under testPluginPath
pluginName := selectName()
defer tearDownPlugin(testPluginPath)
defer releaseName(pluginName)
installPluginUnderTest(t, "", testPluginPath, pluginName, nil)
// modify the perms of the pluginExecutable
f, err := os.Open(path.Join(testPluginPath, pluginName, pluginName))
if err != nil {
t.Errorf("Nil value expected.")
}
err = f.Chmod(0444)
if err != nil {
t.Errorf("Failed to set perms on plugin exec")
}
f.Close()
_, err = network.InitNetworkPlugin(ProbeNetworkPlugins(testPluginPath), pluginName, nettest.NewFakeHost(nil), componentconfig.HairpinNone, "10.0.0.0/8", network.UseDefaultMTU)
if err == nil {
// we expected an error here because validation would have failed
t.Errorf("Expected non-nil value.")
}
}
func TestPluginSetupHook(t *testing.T) {
// The temp dir where test plugins will be stored.
testPluginPath := tmpDirOrDie()
// install some random plugin under testPluginPath
pluginName := selectName()
defer tearDownPlugin(testPluginPath)
defer releaseName(pluginName)
installPluginUnderTest(t, "", testPluginPath, pluginName, nil)
plug, err := network.InitNetworkPlugin(ProbeNetworkPlugins(testPluginPath), pluginName, nettest.NewFakeHost(nil), componentconfig.HairpinNone, "10.0.0.0/8", network.UseDefaultMTU)
err = plug.SetUpPod("podNamespace", "podName", kubecontainer.ContainerID{Type: "docker", ID: "dockerid2345"})
if err != nil {
t.Errorf("Expected nil: %v", err)
}
// check output of setup hook
output, err := ioutil.ReadFile(path.Join(testPluginPath, pluginName, pluginName+".out"))
if err != nil {
t.Errorf("Expected nil")
}
expectedOutput := "setup podNamespace podName dockerid2345"
if string(output) != expectedOutput {
t.Errorf("Mismatch in expected output for setup hook. Expected '%s', got '%s'", expectedOutput, string(output))
}
}
func TestPluginTearDownHook(t *testing.T) {
// The temp dir where test plugins will be stored.
testPluginPath := tmpDirOrDie()
// install some random plugin under testPluginPath
pluginName := selectName()
defer tearDownPlugin(testPluginPath)
defer releaseName(pluginName)
installPluginUnderTest(t, "", testPluginPath, pluginName, nil)
plug, err := network.InitNetworkPlugin(ProbeNetworkPlugins(testPluginPath), pluginName, nettest.NewFakeHost(nil), componentconfig.HairpinNone, "10.0.0.0/8", network.UseDefaultMTU)
err = plug.TearDownPod("podNamespace", "podName", kubecontainer.ContainerID{Type: "docker", ID: "dockerid2345"})
if err != nil {
t.Errorf("Expected nil")
}
// check output of setup hook
output, err := ioutil.ReadFile(path.Join(testPluginPath, pluginName, pluginName+".out"))
if err != nil {
t.Errorf("Expected nil")
}
expectedOutput := "teardown podNamespace podName dockerid2345"
if string(output) != expectedOutput {
t.Errorf("Mismatch in expected output for teardown hook. Expected '%s', got '%s'", expectedOutput, string(output))
}
}
func TestPluginStatusHook(t *testing.T) {
// The temp dir where test plugins will be stored.
testPluginPath := tmpDirOrDie()
// install some random plugin under testPluginPath
pluginName := selectName()
defer tearDownPlugin(testPluginPath)
defer releaseName(pluginName)
installPluginUnderTest(t, "", testPluginPath, pluginName, nil)
plug, err := network.InitNetworkPlugin(ProbeNetworkPlugins(testPluginPath), pluginName, nettest.NewFakeHost(nil), componentconfig.HairpinNone, "10.0.0.0/8", network.UseDefaultMTU)
ip, err := plug.GetPodNetworkStatus("namespace", "name", kubecontainer.ContainerID{Type: "docker", ID: "dockerid2345"})
if err != nil {
t.Errorf("Expected nil got %v", err)
}
// check output of status hook
output, err := ioutil.ReadFile(path.Join(testPluginPath, pluginName, pluginName+".out"))
if err != nil {
t.Errorf("Expected nil")
}
expectedOutput := "status namespace name dockerid2345"
if string(output) != expectedOutput {
t.Errorf("Mismatch in expected output for status hook. Expected '%s', got '%s'", expectedOutput, string(output))
}
if ip.IP.String() != "10.20.30.40" {
t.Errorf("Mismatch in expected output for status hook. Expected '10.20.30.40', got '%s'", ip.IP.String())
}
}
func TestPluginStatusHookIPv6(t *testing.T) {
// The temp dir where test plugins will be stored.
testPluginPath := tmpDirOrDie()
// install some random plugin under testPluginPath
pluginName := selectName()
defer tearDownPlugin(testPluginPath)
defer releaseName(pluginName)
pluginDir := path.Join(testPluginPath, pluginName)
execTemplate := &map[string]interface{}{
"IPAddress": "fe80::e2cb:4eff:fef9:6710",
"OutputFile": path.Join(pluginDir, pluginName+".out"),
}
installPluginUnderTest(t, "", testPluginPath, pluginName, execTemplate)
plug, err := network.InitNetworkPlugin(ProbeNetworkPlugins(testPluginPath), pluginName, nettest.NewFakeHost(nil), componentconfig.HairpinNone, "10.0.0.0/8", network.UseDefaultMTU)
if err != nil {
t.Errorf("InitNetworkPlugin() failed: %v", err)
}
ip, err := plug.GetPodNetworkStatus("namespace", "name", kubecontainer.ContainerID{Type: "docker", ID: "dockerid2345"})
if err != nil {
t.Errorf("Status() failed: %v", err)
}
// check output of status hook
outPath := path.Join(testPluginPath, pluginName, pluginName+".out")
output, err := ioutil.ReadFile(outPath)
if err != nil {
t.Errorf("ReadFile(%q) failed: %v", outPath, err)
}
expectedOutput := "status namespace name dockerid2345"
if string(output) != expectedOutput {
t.Errorf("Mismatch in expected output for status hook. Expected %q, got %q", expectedOutput, string(output))
}
if ip.IP.String() != "fe80::e2cb:4eff:fef9:6710" {
t.Errorf("Mismatch in expected output for status hook. Expected 'fe80::e2cb:4eff:fef9:6710', got '%s'", ip.IP.String())
}
}

View File

@ -1,27 +0,0 @@
// +build !windows
/*
Copyright 2015 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package exec
import "syscall"
const X_OK = 0x1
func isExecutable(path string) bool {
return syscall.Access(path, X_OK) == nil
}

View File

@ -1,23 +0,0 @@
// +build windows
/*
Copyright 2015 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package exec
func isExecutable(path string) bool {
return false
}