Skip to content
This repository was archived by the owner on Dec 15, 2024. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ COPY notify/template.html /opt/humpback-center/notify/template.html
COPY humpback-center /opt/humpback-center/humpback-center

COPY dumb-init /dumb-init
RUN chmod 777 /dumb-init

ENTRYPOINT ["/dumb-init", "--"]

Expand Down
16 changes: 9 additions & 7 deletions cluster/cache.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,5 @@
package cluster

import "github.com/humpback/gounits/system"
import "github.com/humpback/gounits/rand"
import "github.com/humpback/humpback-center/cluster/types"
import "github.com/humpback/common/models"

import (
"bytes"
"encoding/json"
Expand All @@ -16,6 +11,11 @@ import (
"strings"
"sync"
"time"

"github.com/humpback/common/models"
"github.com/humpback/gounits/rand"
"github.com/humpback/gounits/system"
"github.com/humpback/humpback-center/cluster/types"
)

// ContainerBaseConfig is exported
Expand Down Expand Up @@ -180,11 +180,13 @@ func (cache *ContainersConfigCache) SetImageTag(metaid string, imagetag string)
originalTag := metaData.ImageTag
metaData.ImageTag = imagetag
originalImage := metaData.Config.Image
nPos := strings.LastIndex(originalImage, ":")
tempPaths := strings.Split(originalImage, "/")
nPos := strings.LastIndex(tempPaths[len(tempPaths)-1], ":")
if nPos == -1 {
nPos = len(originalImage)
}
metaData.Config.Image = originalImage[:nPos] + ":" + imagetag
tempPaths[len(tempPaths)-1] = strings.Split(tempPaths[len(tempPaths)-1], ":")[0] + ":" + imagetag
metaData.Config.Image = strings.Join(tempPaths, "/")
if err := cache.writeMetaData(metaData); err != nil {
metaData.ImageTag = originalTag
metaData.Config.Image = originalImage
Expand Down
27 changes: 12 additions & 15 deletions cluster/cluster.go
Original file line number Diff line number Diff line change
@@ -1,14 +1,5 @@
package cluster

import "github.com/humpback/common/models"
import "github.com/humpback/humpback-center/notify"
import "github.com/humpback/humpback-center/cluster/storage"
import "github.com/humpback/humpback-center/cluster/types"
import "github.com/humpback/discovery"
import "github.com/humpback/discovery/backends"
import "github.com/humpback/gounits/logger"
import "github.com/humpback/gounits/system"

import (
"fmt"
"math/rand"
Expand All @@ -18,6 +9,15 @@ import (
"strings"
"sync"
"time"

"github.com/humpback/common/models"
"github.com/humpback/discovery"
"github.com/humpback/discovery/backends"
"github.com/humpback/gounits/logger"
"github.com/humpback/gounits/system"
"github.com/humpback/humpback-center/cluster/storage"
"github.com/humpback/humpback-center/cluster/types"
"github.com/humpback/humpback-center/notify"
)

var pendingWaitForInterval = time.Duration(time.Second * 5)
Expand Down Expand Up @@ -832,12 +832,9 @@ func (cluster *Cluster) UpgradeContainers(metaid string, imagetag string) (*type
}

config := metaData.Config
tagIndex := strings.LastIndex(config.Image, ":")
if tagIndex <= 0 {
return nil, fmt.Errorf("upgrade %s config tag invalid", metaid)
}

config.Image = config.Image[0:tagIndex] + ":" + imagetag
tempPaths := strings.Split(config.Image, "/")
tempPaths[len(tempPaths)-1] = strings.Split(tempPaths[len(tempPaths)-1], ":")[0] + ":" + imagetag
config.Image = strings.Join(tempPaths, "/")
upgradeContainers, err := cluster.upgradeContainers(metaData, engines, config)
if err != nil {
return nil, fmt.Errorf("upgrade %s failure, %s", metaid, err.Error())
Expand Down
25 changes: 14 additions & 11 deletions cluster/engine.go
Original file line number Diff line number Diff line change
@@ -1,12 +1,5 @@
package cluster

import "github.com/humpback/humpback-center/cluster/types"
import "github.com/humpback/common/models"
import "github.com/humpback/gounits/convert"
import "github.com/humpback/gounits/logger"
import "github.com/humpback/gounits/rand"
import "github.com/humpback/gounits/utils"

import (
"context"
"fmt"
Expand All @@ -16,6 +9,13 @@ import (
"strings"
"sync"
"time"

"github.com/humpback/common/models"
"github.com/humpback/gounits/convert"
"github.com/humpback/gounits/logger"
"github.com/humpback/gounits/rand"
"github.com/humpback/gounits/utils"
"github.com/humpback/humpback-center/cluster/types"
)

const (
Expand Down Expand Up @@ -545,15 +545,17 @@ func (engine *Engine) ForceUpgradeContainer(operate models.ContainerOperate) (*C
return nil, fmt.Errorf("upgrade container %s not found", ShortContainerID(operate.Container))
}

tagIndex := strings.LastIndex(container.Config.Image, ":")
tempPaths := strings.Split(container.Config.Image, "/")
tagIndex := strings.LastIndex(tempPaths[len(tempPaths)-1], ":")
if tagIndex <= 0 {
return nil, fmt.Errorf("upgrade container %s original tag invalid.", ShortContainerID(operate.Container))
}

metaData := engine.configCache.GetMetaData(container.MetaID())
containerConfig := metaData.MetaBase.Config
containerConfig.Name = container.Config.Name
containerConfig.Image = container.Config.Image[0:tagIndex] + ":" + operate.ImageTag
tempPaths[len(tempPaths)-1] = strings.Split(tempPaths[len(tempPaths)-1], ":")[0] + ":" + operate.ImageTag
containerConfig.Image = strings.Join(tempPaths, "/")
containerConfig.Env = container.BaseConfig.Env
if err := engine.RemoveContainer(operate.Container); err != nil {
logger.WARN("[#cluster#] engine %s upgrading, remove original container %s failure.", engine.IP, ShortContainerID(operate.Container))
Expand Down Expand Up @@ -591,8 +593,9 @@ func (engine *Engine) UpgradeContainer(operate models.ContainerOperate) (*Contai
}

baseConfig.ID = upgradeContainerResponse.ID
imageNameSplit := strings.SplitN(baseConfig.Image, ":", 2)
baseConfig.Image = imageNameSplit[0] + ":" + operate.ImageTag
tempPaths := strings.Split(baseConfig.Image, "/")
tempPaths[len(tempPaths)-1] = strings.Split(tempPaths[len(tempPaths)-1], ":")[0] + ":" + operate.ImageTag
baseConfig.Image = strings.Join(tempPaths, "/")
engine.configCache.CreateContainerBaseConfig(baseConfig.MetaData.MetaID, &baseConfig)
engine.configCache.RemoveContainerBaseConfig(baseConfig.MetaData.MetaID, operate.Container)
logger.INFO("[#cluster#] engine %s %s container %s to %s", engine.IP, operate.Action, ShortContainerID(operate.Container), ShortContainerID(upgradeContainerResponse.ID))
Expand Down
15 changes: 8 additions & 7 deletions cluster/utils.go
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
package cluster

import "github.com/humpback/humpback-center/cluster/storage/entry"
import "github.com/humpback/humpback-center/cluster/storage/node"
import "github.com/humpback/humpback-center/cluster/types"
import "github.com/humpback/discovery/backends"
import "github.com/humpback/gounits/json"

import (
"fmt"
"net"
"sort"
"strings"

"github.com/humpback/discovery/backends"
"github.com/humpback/gounits/json"
"github.com/humpback/humpback-center/cluster/storage/entry"
"github.com/humpback/humpback-center/cluster/storage/node"
"github.com/humpback/humpback-center/cluster/types"
)

//ParseServer is exported
Expand All @@ -29,7 +29,8 @@ func ParseServer(ipOrName string) Server {
func getImageTag(imageName string) string {

imageTag := "latest"
values := strings.SplitN(imageName, ":", 2)
tempPaths := strings.Split(imageName, "/")
values := strings.SplitN(tempPaths[len(tempPaths)-1], ":", 2)
if len(values) == 2 {
imageTag = values[1]
}
Expand Down
Binary file added dumb-init
Binary file not shown.
35 changes: 35 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
module github.com/humpback/humpback-center

go 1.15

require (
github.com/boltdb/bolt v1.3.1
github.com/containerd/containerd v1.3.9 // indirect
github.com/containerd/fifo v0.0.0-20201026212402-0724c46b320c // indirect
github.com/containerd/ttrpc v1.0.2 // indirect
github.com/containerd/typeurl v1.0.1 // indirect
github.com/coreos/etcd v3.3.25+incompatible // indirect
github.com/coreos/go-semver v0.3.0 // indirect
github.com/docker/docker v0.0.0-00010101000000-000000000000
github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c // indirect
github.com/docker/go-units v0.4.0
github.com/docker/libcompose v0.4.1-0.20190808084053-143e0f3f1ab9
github.com/docker/libkv v0.2.1 // indirect
github.com/gogo/googleapis v1.4.0 // indirect
github.com/google/uuid v1.1.2 // indirect
github.com/gorilla/mux v0.0.0-20160317213430-0eeaf8392f5b
github.com/hashicorp/consul/api v1.8.0 // indirect
github.com/humpback/common v0.0.0-20181013082642-ad18fdd2e380
github.com/humpback/discovery v0.0.0-20181012143229-ebb7ec858a9e
github.com/humpback/gounits v0.0.0-20190102083213-0662ccb72e5a
github.com/opencontainers/runtime-spec v1.0.2 // indirect
github.com/samuel/go-zookeeper v0.0.0-20200724154423-2164a8ac840e // indirect
github.com/sirupsen/logrus v1.7.0 // indirect
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 // indirect
gopkg.in/alexcesaro/quotedprintable.v2 v2.0.0-20150314193201-9b4a113f96b3 // indirect
gopkg.in/eapache/queue.v1 v1.1.0 // indirect
gopkg.in/gomail.v1 v1.0.0-20150320132819-11b919ab4933
gopkg.in/yaml.v2 v2.2.8
)

replace github.com/docker/docker => github.com/moby/moby v17.12.0-ce-rc1.0.20201201034508-7d75c1d40d88+incompatible
Loading