nodeup: Add docker.service dep to LoadImageTask

Tested with manual build and NODEUP_URL

Fixes #685, #686
This commit is contained in:
Zach Loafman 2016-10-18 14:54:44 -07:00
parent 0d78c65498
commit 21c479d5b3
3 changed files with 37 additions and 18 deletions

View File

@ -1,6 +1,7 @@
[Unit]
Description=Kubernetes Kubelet Server
Documentation=https://github.com/kubernetes/kubernetes
After=docker.service
[Service]
EnvironmentFile=/etc/sysconfig/kubelet

View File

@ -18,17 +18,20 @@ package nodetasks
import (
"fmt"
"os/exec"
"path"
"strings"
"github.com/golang/glog"
"k8s.io/kops/upup/pkg/fi"
"k8s.io/kops/upup/pkg/fi/nodeup/cloudinit"
"k8s.io/kops/upup/pkg/fi/nodeup/local"
"k8s.io/kops/upup/pkg/fi/utils"
"k8s.io/kops/util/pkg/hashing"
"os/exec"
"path"
"strings"
)
const dockerService = "docker.service"
// LoadImageTask is responsible for downloading a docker image
type LoadImageTask struct {
Source string
@ -36,6 +39,20 @@ type LoadImageTask struct {
}
var _ fi.Task = &LoadImageTask{}
var _ fi.HasDependencies = &LoadImageTask{}
func (t *LoadImageTask) GetDependencies(tasks map[string]fi.Task) []fi.Task {
// LoadImageTask depends on the docker service to ensure we
// sideload images after docker is completely updated and
// configured.
var deps []fi.Task
for _, v := range tasks {
if svc, ok := v.(*Service); ok && svc.Name == dockerService {
deps = append(deps, v)
}
}
return deps
}
func (t *LoadImageTask) String() string {
return fmt.Sprintf("LoadImageTask: %s", t.Source)

View File

@ -19,19 +19,18 @@ package nodetasks
import (
"encoding/json"
"fmt"
"github.com/golang/glog"
"io/ioutil"
"os"
"os/exec"
"path"
"strings"
"time"
"github.com/golang/glog"
"k8s.io/kops/upup/pkg/fi"
"k8s.io/kops/upup/pkg/fi/nodeup/cloudinit"
"k8s.io/kops/upup/pkg/fi/nodeup/local"
"k8s.io/kops/upup/pkg/fi/nodeup/tags"
"k8s.io/kops/upup/pkg/fi/utils"
"os"
"os/exec"
"path"
"reflect"
"strings"
"time"
)
const (
@ -60,15 +59,17 @@ var _ fi.HasDependencies = &Service{}
func (p *Service) GetDependencies(tasks map[string]fi.Task) []fi.Task {
var deps []fi.Task
for _, v := range tasks {
// We assume that services depend on basically everything
typeName := utils.BuildTypeName(reflect.TypeOf(v))
switch typeName {
case "*CopyAssetTask", "*File", "*Package", "*Sysctl", "*UpdatePackages", "*UserTask", "*Disk":
// We assume that services depend on everything except for
// LoadImageTask. If there are any LoadImageTasks (e.g. we're
// launching a custom Kubernetes build), they all depend on
// the "docker.service" Service task.
switch v.(type) {
case *File, *Package, *UpdatePackages, *UserTask, *MountDiskTask:
deps = append(deps, v)
case "*Service":
// ignore
case *Service, *LoadImageTask:
// ignore
default:
glog.Warningf("Unhandled type name in Service::GetDependencies: %q", typeName)
glog.Warningf("Unhandled type %t in Service::GetDependencies: %v", v, v)
deps = append(deps, v)
}
}