Merge pull request #190 from dlorenc/isomove

Move the addon-manager and dashboard configuration from the iso to mi…
pull/194/head
dlorenc 2016-06-10 06:01:40 -07:00 committed by GitHub
commit 23a7837c00
8 changed files with 113 additions and 54 deletions

2
.gitignore vendored
View File

@ -26,5 +26,5 @@ _testmain.go
/out
/_gopath
/pkg/minikube/cluster/localkubecontents.go
/pkg/minikube/cluster/assets.go
/minikube

View File

@ -43,7 +43,7 @@ LOCALKUBE_LDFLAGS := "$(K8S_VERSION_LDFLAGS) $(MINIKUBE_LDFLAGS) -s -w -extldfla
clean:
rm -rf $(GOPATH)
rm -rf $(BUILD_DIR)
rm pkg/minikube/cluster/localkubecontents.go
rm pkg/minikube/cluster/assets.go
MKGOPATH := mkdir -p $(shell dirname $(GOPATH)/src/$(REPOPATH)) && ln -s -f $(shell pwd) $(GOPATH)/src/$(REPOPATH)
@ -61,7 +61,7 @@ else
docker run -w /go/src/$(REPOPATH) -e IN_DOCKER=1 -v $(shell pwd):/go/src/$(REPOPATH) $(BUILD_IMAGE) make out/localkube
endif
out/minikube-$(GOOS)-$(GOARCH): $(MINIKUBEFILES) pkg/minikube/cluster/localkubecontents.go
out/minikube-$(GOOS)-$(GOARCH): $(MINIKUBEFILES) pkg/minikube/cluster/assets.go
$(MKGOPATH)
CGO_ENABLED=0 GOARCH=$(GOARCH) GOOS=$(GOOS) go build --installsuffix cgo -ldflags="$(MINIKUBE_LDFLAGS)" -a -o $(BUILD_DIR)/minikube-$(GOOS)-$(GOARCH) ./cmd/minikube
@ -76,12 +76,12 @@ integration: out/minikube
go test -v $(REPOPATH)/test/integration --tags=integration
.PHONY: test
test: pkg/minikube/cluster/localkubecontents.go
test: pkg/minikube/cluster/assets.go
$(MKGOPATH)
./test.sh
pkg/minikube/cluster/localkubecontents.go: out/localkube $(GOPATH)/bin/go-bindata
$(GOPATH)/bin/go-bindata -nomemcopy -o pkg/minikube/cluster/localkubecontents.go -pkg cluster ./out/localkube
pkg/minikube/cluster/assets.go: out/localkube $(GOPATH)/bin/go-bindata deploy/iso/addon-manager.yaml deploy/addons/dashboard-rc.yaml deploy/addons/dashboard-svc.yaml
$(GOPATH)/bin/go-bindata -nomemcopy -o pkg/minikube/cluster/assets.go -pkg cluster ./out/localkube deploy/iso/addon-manager.yaml deploy/addons/dashboard-rc.yaml deploy/addons/dashboard-svc.yaml
$(GOPATH)/bin/go-bindata:
$(MKGOPATH)

View File

@ -26,11 +26,6 @@ ADD socat $ROOTFS/usr/bin
ADD ethtool $ROOTFS/usr/bin
ADD conntrack $ROOTFS/usr/bin
# Add addons
ADD addon-manager.yaml $ROOTFS/etc/kubernetes/manifests/
ADD dashboard-rc.yaml $ROOTFS/etc/kubernetes/addons/
ADD dashboard-svc.yaml $ROOTFS/etc/kubernetes/addons/
# Get a specific version of Docker. This will overwrite the binary installed
# in the base image.
# The --strip-components=3 flag will have to change as we switch docker versions

View File

@ -20,8 +20,6 @@ ISO=minikube.iso
tmpdir=$(mktemp -d)
echo "Building in $tmpdir."
cp -r . $tmpdir/
# Copy in the addons
cp ../addons/* $tmpdir/
pushd $tmpdir

View File

@ -173,21 +173,57 @@ func StartCluster(h sshAble) error {
return nil
}
func UpdateCluster(d drivers.Driver) error {
localkube, err := Asset("out/localkube")
if err != nil {
glog.Infoln("Error loading localkube: ", err)
return err
}
type fileToCopy struct {
AssetName string
TargetDir string
TargetName string
Permissions string
}
var assets = []fileToCopy{
{
AssetName: "out/localkube",
TargetDir: "/usr/local/bin",
TargetName: "localkube",
Permissions: "0777",
},
{
AssetName: "deploy/iso/addon-manager.yaml",
TargetDir: "/etc/kubernetes/manifests/",
TargetName: "addon-manager.yaml",
Permissions: "0640",
},
{
AssetName: "deploy/addons/dashboard-rc.yaml",
TargetDir: "/etc/kubernetes/addons/",
TargetName: "dashboard-rc.yaml",
Permissions: "0640",
},
{
AssetName: "deploy/addons/dashboard-svc.yaml",
TargetDir: "/etc/kubernetes/addons/",
TargetName: "dashboard-svc.yaml",
Permissions: "0640",
},
}
func UpdateCluster(d drivers.Driver) error {
client, err := sshutil.NewSSHClient(d)
if err != nil {
return err
}
if err := sshutil.Transfer(localkube, "/usr/local/bin/", "localkube", "0777", client); err != nil {
return err
}
for _, a := range assets {
contents, err := Asset(a.AssetName)
if err != nil {
glog.Infof("Error loading asset %s: %s", a.AssetName, err)
return err
}
if err := sshutil.Transfer(contents, a.TargetDir, a.TargetName, a.Permissions, client); err != nil {
return err
}
}
return nil
}

View File

@ -459,3 +459,31 @@ func TestGetDashboardURL(t *testing.T) {
}
}
func TestUpdate(t *testing.T) {
s, _ := tests.NewSSHServer()
port, err := s.Start()
if err != nil {
t.Fatalf("Error starting ssh server: %s", err)
}
d := &tests.MockDriver{
Port: port,
BaseDriver: drivers.BaseDriver{
IPAddress: "127.0.0.1",
SSHKeyPath: "",
},
}
if err := UpdateCluster(d); err != nil {
t.Fatalf("Error updating cluster: %s", err)
}
transferred := s.Transfers.Bytes()
for _, a := range assets {
contents, _ := Asset(a.AssetName)
if !bytes.Contains(transferred, contents) {
t.Fatalf("File not copied. Expected transfers to contain: %s. It was: %s", contents, transferred)
}
}
}

View File

@ -74,44 +74,46 @@ func (s *SSHServer) Start() (int, error) {
go func() {
for {
nConn, err := listener.Accept()
if err != nil {
return
}
_, chans, reqs, err := ssh.NewServerConn(nConn, s.Config)
if err != nil {
return
}
// The incoming Request channel must be serviced.
go ssh.DiscardRequests(reqs)
// Service the incoming Channel channel.
for newChannel := range chans {
if newChannel.ChannelType() == "session" {
s.HadASessionRequested = true
}
channel, requests, err := newChannel.Accept()
s.Connected = true
go func() {
if err != nil {
return
}
req := <-requests
req.Reply(true, nil)
//Note: string(req.Payload) adds additional characters to start of input, execRequest used to solve this issue
var cmd execRequest
if err := ssh.Unmarshal(req.Payload, &cmd); err != nil {
glog.Errorln("Unmarshall encountered error: %s", err)
_, chans, reqs, err := ssh.NewServerConn(nConn, s.Config)
if err != nil {
return
}
s.Commands[cmd.Command] = 1
channel.SendRequest("exit-status", false, []byte{0, 0, 0, 0})
// The incoming Request channel must be serviced.
go ssh.DiscardRequests(reqs)
// Store anything that comes in over stdin.
io.Copy(s.Transfers, channel)
channel.Close()
}
// Service the incoming Channel channel.
for newChannel := range chans {
if newChannel.ChannelType() == "session" {
s.HadASessionRequested = true
}
channel, requests, err := newChannel.Accept()
s.Connected = true
if err != nil {
return
}
req := <-requests
req.Reply(true, nil)
//Note: string(req.Payload) adds additional characters to start of input, execRequest used to solve this issue
var cmd execRequest
if err := ssh.Unmarshal(req.Payload, &cmd); err != nil {
glog.Errorln("Unmarshall encountered error: %s", err)
return
}
s.Commands[cmd.Command] = 1
channel.SendRequest("exit-status", false, []byte{0, 0, 0, 0})
// Store anything that comes in over stdin.
io.Copy(s.Transfers, channel)
channel.Close()
}
}()
}
}()

View File

@ -32,7 +32,7 @@ TESTS=$(go list -f '{{ if .TestGoFiles }} {{.ImportPath}} {{end}}' ./...)
go test -v ${TESTS}
# Ignore these paths in the following tests.
ignore="vendor\|\_gopath\|localkubecontents.go"
ignore="vendor\|\_gopath\|assets.go"
# Check gofmt
echo "Checking gofmt..."