Merge pull request #44467 from JulienBalestra/fix-rkt-host-path-volume

Automatic merge from submit-queue (batch tested with PRs 44469, 44566, 44467, 44526)

Kubelet:rkt Fix the hostPath Volume creation

**What this PR does / why we need it**:

This PR fix the `hostPath` volume when the path exist and it's not a directory.
At the moment, the creation of a `hostPath` volume for an existing file leads to this error:

> kubelet[1984]: E0413 07:53:16.480922    1984 pod_workers.go:184] Error syncing pod 38359a57-1fb1-11e7-a484-76870fe7db83, skipping: failed to SyncPod: mkdir /usr/share/coreos/lsb-release: not a directory

**Special notes for your reviewer**:

You can have a look to the difference with this [gist](https://gist.github.com/JulienBalestra/28ae15efc8a1393d350300880c07ff4f)
This commit is contained in:
Kubernetes Submit Queue 2017-04-17 20:06:59 -07:00 committed by GitHub
commit 2c774753e1

View File

@ -1320,11 +1320,14 @@ func (r *Runtime) setupPodNetwork(pod *v1.Pod) (string, string, error) {
func createHostPathVolumes(pod *v1.Pod) (err error) {
for _, v := range pod.Spec.Volumes {
if v.VolumeSource.HostPath != nil {
err = os.MkdirAll(v.HostPath.Path, os.ModePerm)
if err != nil && !os.IsExist(err) {
return err
_, err = os.Stat(v.HostPath.Path)
if os.IsNotExist(err) {
if err = os.MkdirAll(v.HostPath.Path, os.ModePerm); err != nil {
glog.Errorf("Create volume HostPath %q for Pod %q failed: %q", v.HostPath.Path, format.Pod(pod), err.Error())
return err
}
glog.V(4).Infof("Created volume HostPath %q for Pod %q", v.HostPath.Path, format.Pod(pod))
}
glog.V(4).Infof("Created volume HostPath %q for Pod %q", v.HostPath.Path, format.Pod(pod))
}
}
return nil