diff options
Diffstat (limited to 'vendor/k8s.io/kubernetes/pkg/util/io/writer.go')
-rw-r--r-- | vendor/k8s.io/kubernetes/pkg/util/io/writer.go | 78 |
1 files changed, 0 insertions, 78 deletions
diff --git a/vendor/k8s.io/kubernetes/pkg/util/io/writer.go b/vendor/k8s.io/kubernetes/pkg/util/io/writer.go deleted file mode 100644 index 8d1d9964e..000000000 --- a/vendor/k8s.io/kubernetes/pkg/util/io/writer.go +++ /dev/null @@ -1,78 +0,0 @@ -/* -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 io - -import ( - "bytes" - "fmt" - "io/ioutil" - "os" - - "k8s.io/kubernetes/pkg/util/nsenter" - - "github.com/golang/glog" -) - -// 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 -} - -// StdWriter implements Writer interface and uses standard libraries -// for writing data to files. -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) -} - -// 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 -// limitation one has to first enter hosts namespace (by using 'nsenter') and -// only then write data. -type NsenterWriter struct{} - -// WriteFile calls 'nsenter cat - > <the file>' and 'nsenter chmod' to create a -// file on the host. -func (writer *NsenterWriter) WriteFile(filename string, data []byte, perm os.FileMode) error { - ne := nsenter.NewNsenter() - echoArgs := []string{"-c", fmt.Sprintf("cat > %s", filename)} - glog.V(5).Infof("nsenter: write data to file %s by nsenter", filename) - command := ne.Exec("sh", echoArgs) - command.SetStdin(bytes.NewBuffer(data)) - outputBytes, err := command.CombinedOutput() - if err != nil { - glog.Errorf("Output from writing to %q: %v", filename, string(outputBytes)) - return err - } - - chmodArgs := []string{fmt.Sprintf("%o", perm), filename} - glog.V(5).Infof("nsenter: change permissions of file %s to %s", filename, chmodArgs[0]) - outputBytes, err = ne.Exec("chmod", chmodArgs).CombinedOutput() - if err != nil { - glog.Errorf("Output from chmod command: %v", string(outputBytes)) - return err - } - - return nil -} |