2013-01-19 00:13:39 +00:00
|
|
|
package docker
|
|
|
|
|
2013-05-02 07:49:23 +00:00
|
|
|
// Compare two Config struct. Do not compare the "Image" nor "Hostname" fields
|
|
|
|
// If OpenStdin is set, then it differs
|
|
|
|
func CompareConfig(a, b *Config) bool {
|
|
|
|
if a == nil || b == nil ||
|
|
|
|
a.OpenStdin || b.OpenStdin {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
if a.AttachStdout != b.AttachStdout ||
|
|
|
|
a.AttachStderr != b.AttachStderr ||
|
|
|
|
a.User != b.User ||
|
|
|
|
a.Memory != b.Memory ||
|
|
|
|
a.MemorySwap != b.MemorySwap ||
|
2013-05-07 18:16:30 +00:00
|
|
|
a.CpuShares != b.CpuShares ||
|
2013-05-02 07:49:23 +00:00
|
|
|
a.OpenStdin != b.OpenStdin ||
|
|
|
|
a.Tty != b.Tty {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
if len(a.Cmd) != len(b.Cmd) ||
|
|
|
|
len(a.Dns) != len(b.Dns) ||
|
|
|
|
len(a.Env) != len(b.Env) ||
|
|
|
|
len(a.PortSpecs) != len(b.PortSpecs) {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
|
|
|
for i := 0; i < len(a.Cmd); i++ {
|
|
|
|
if a.Cmd[i] != b.Cmd[i] {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for i := 0; i < len(a.Dns); i++ {
|
|
|
|
if a.Dns[i] != b.Dns[i] {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for i := 0; i < len(a.Env); i++ {
|
|
|
|
if a.Env[i] != b.Env[i] {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for i := 0; i < len(a.PortSpecs); i++ {
|
|
|
|
if a.PortSpecs[i] != b.PortSpecs[i] {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
}
|
2013-06-25 02:20:05 +00:00
|
|
|
for i := 0; i < len(a.Entrypoint); i++ {
|
|
|
|
if a.Entrypoint[i] != b.Entrypoint[i] {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
}
|
2013-05-02 07:49:23 +00:00
|
|
|
return true
|
|
|
|
}
|
2013-05-19 17:46:24 +00:00
|
|
|
|
|
|
|
func MergeConfig(userConf, imageConf *Config) {
|
2013-05-23 20:48:50 +00:00
|
|
|
if userConf.User == "" {
|
2013-05-19 17:46:24 +00:00
|
|
|
userConf.User = imageConf.User
|
|
|
|
}
|
|
|
|
if userConf.Memory == 0 {
|
|
|
|
userConf.Memory = imageConf.Memory
|
|
|
|
}
|
|
|
|
if userConf.MemorySwap == 0 {
|
|
|
|
userConf.MemorySwap = imageConf.MemorySwap
|
|
|
|
}
|
|
|
|
if userConf.CpuShares == 0 {
|
|
|
|
userConf.CpuShares = imageConf.CpuShares
|
|
|
|
}
|
|
|
|
if userConf.PortSpecs == nil || len(userConf.PortSpecs) == 0 {
|
|
|
|
userConf.PortSpecs = imageConf.PortSpecs
|
|
|
|
}
|
|
|
|
if !userConf.Tty {
|
|
|
|
userConf.Tty = imageConf.Tty
|
|
|
|
}
|
|
|
|
if !userConf.OpenStdin {
|
|
|
|
userConf.OpenStdin = imageConf.OpenStdin
|
|
|
|
}
|
|
|
|
if !userConf.StdinOnce {
|
|
|
|
userConf.StdinOnce = imageConf.StdinOnce
|
|
|
|
}
|
|
|
|
if userConf.Env == nil || len(userConf.Env) == 0 {
|
|
|
|
userConf.Env = imageConf.Env
|
|
|
|
}
|
|
|
|
if userConf.Cmd == nil || len(userConf.Cmd) == 0 {
|
|
|
|
userConf.Cmd = imageConf.Cmd
|
|
|
|
}
|
|
|
|
if userConf.Dns == nil || len(userConf.Dns) == 0 {
|
|
|
|
userConf.Dns = imageConf.Dns
|
|
|
|
}
|
2013-06-25 02:20:05 +00:00
|
|
|
if userConf.Entrypoint == nil || len(userConf.Entrypoint) == 0 {
|
|
|
|
userConf.Entrypoint = imageConf.Entrypoint
|
|
|
|
}
|
2013-05-19 17:46:24 +00:00
|
|
|
}
|