diff --git a/pkg/util/io/BUILD b/pkg/util/io/BUILD index 39c14b37dd..7c9d0733ec 100644 --- a/pkg/util/io/BUILD +++ b/pkg/util/io/BUILD @@ -10,7 +10,6 @@ load( go_library( name = "go_default_library", srcs = ["writer.go"], - "//vendor/k8s.io/api/core/v1:go_default_library", tags = ["automanaged"], deps = ["//vendor/github.com/golang/glog:go_default_library"], ) diff --git a/pkg/util/io/writer.go b/pkg/util/io/writer.go index 086508c90d..5d0f1703eb 100644 --- a/pkg/util/io/writer.go +++ b/pkg/util/io/writer.go @@ -28,6 +28,7 @@ import ( // Writer is an interface which allows to write data to a file. type Writer interface { + // WriteFile mimics ioutil.WriteFile. WriteFile(filename string, data []byte, perm os.FileMode) error } @@ -36,31 +37,32 @@ type Writer interface { type StdWriter struct { } +// WriteFile directly calls ioutil.WriteFile. func (writer *StdWriter) WriteFile(filename string, data []byte, perm os.FileMode) error { return ioutil.WriteFile(filename, data, perm) } -// Alternative implementation of Writer interface that allows writing data to file -// using nsenter command. +// NsenterWriter is implementation of Writer interface that allows writing data +// to file using nsenter command. // If a program (e.g. kubelet) runs in a container it may want to write data to // a mounted device. Since in Docker, mount propagation mode is set to private, // it will not see the mounted device in its own namespace. To work around this -// limitaion one has to first enter hosts namespace (by using 'nsenter') and only -// then write data. -type NsenterWriter struct { -} +// limitation one has to first enter hosts namespace (by using 'nsenter') and +// only then write data. +type NsenterWriter struct{} -// TODO: should take a writer, not []byte +// WriteFile calls 'nsenter cat - > ' and 'nsenter chmod' to create a +// file on the host. func (writer *NsenterWriter) WriteFile(filename string, data []byte, perm os.FileMode) error { cmd := "nsenter" - base_args := []string{ + baseArgs := []string{ "--mount=/rootfs/proc/1/ns/mnt", "--", } - echo_args := append(base_args, "sh", "-c", fmt.Sprintf("cat > %s", filename)) - glog.V(5).Infof("Command to write data to file: %v %v", cmd, echo_args) - command := exec.Command(cmd, echo_args...) + echoArgs := append(baseArgs, "sh", "-c", fmt.Sprintf("cat > %s", filename)) + glog.V(5).Infof("Command to write data to file: %v %v", cmd, echoArgs) + command := exec.Command(cmd, echoArgs...) command.Stdin = bytes.NewBuffer(data) outputBytes, err := command.CombinedOutput() if err != nil { @@ -68,9 +70,9 @@ func (writer *NsenterWriter) WriteFile(filename string, data []byte, perm os.Fil return err } - chmod_args := append(base_args, "chmod", fmt.Sprintf("%o", perm), filename) - glog.V(5).Infof("Command to change permissions to file: %v %v", cmd, chmod_args) - outputBytes, err = exec.Command(cmd, chmod_args...).CombinedOutput() + chmodArgs := append(baseArgs, "chmod", fmt.Sprintf("%o", perm), filename) + glog.V(5).Infof("Command to change permissions to file: %v %v", cmd, chmodArgs) + outputBytes, err = exec.Command(cmd, chmodArgs...).CombinedOutput() if err != nil { glog.Errorf("Output from chmod command: %v", string(outputBytes)) return err