mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-05-07 22:24:32 +08:00
107 lines
2.4 KiB
Go
107 lines
2.4 KiB
Go
// Copyright 2019 Yunion
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package models
|
|
|
|
import (
|
|
"time"
|
|
|
|
"yunion.io/x/onecloud/pkg/apihelper"
|
|
)
|
|
|
|
type ModelSetsMaxUpdatedAt struct {
|
|
ProxyEndpoints time.Time
|
|
Forwards time.Time
|
|
}
|
|
|
|
func NewModelSetsMaxUpdatedAt() *ModelSetsMaxUpdatedAt {
|
|
return &ModelSetsMaxUpdatedAt{
|
|
ProxyEndpoints: apihelper.PseudoZeroTime,
|
|
Forwards: apihelper.PseudoZeroTime,
|
|
}
|
|
}
|
|
|
|
type ModelSets struct {
|
|
ProxyEndpoints ProxyEndpoints
|
|
Forwards Forwards
|
|
}
|
|
|
|
func NewModelSets() *ModelSets {
|
|
return &ModelSets{
|
|
ProxyEndpoints: ProxyEndpoints{},
|
|
Forwards: Forwards{},
|
|
}
|
|
}
|
|
|
|
func (mss *ModelSets) ModelSetList() []apihelper.IModelSet {
|
|
// it's ordered this way to favour creation, not deletion
|
|
return []apihelper.IModelSet{
|
|
mss.ProxyEndpoints,
|
|
mss.Forwards,
|
|
}
|
|
}
|
|
|
|
func (mss *ModelSets) NewEmpty() apihelper.IModelSets {
|
|
return NewModelSets()
|
|
}
|
|
|
|
func (mss *ModelSets) copy_() *ModelSets {
|
|
mssCopy := &ModelSets{
|
|
ProxyEndpoints: mss.ProxyEndpoints.Copy().(ProxyEndpoints),
|
|
Forwards: mss.Forwards.Copy().(Forwards),
|
|
}
|
|
return mssCopy
|
|
}
|
|
|
|
func (mss *ModelSets) Copy() apihelper.IModelSets {
|
|
return mss.copy_()
|
|
}
|
|
|
|
func (mss *ModelSets) CopyJoined() apihelper.IModelSets {
|
|
mssCopy := mss.copy_()
|
|
mssCopy.join()
|
|
return mssCopy
|
|
}
|
|
|
|
func (mss *ModelSets) ApplyUpdates(mssNews apihelper.IModelSets) apihelper.ModelSetsUpdateResult {
|
|
r := apihelper.ModelSetsUpdateResult{
|
|
Changed: false,
|
|
Correct: true,
|
|
}
|
|
mssList := mss.ModelSetList()
|
|
mssNewsList := mssNews.ModelSetList()
|
|
for i, mss := range mssList {
|
|
mssNews := mssNewsList[i]
|
|
msR := apihelper.ModelSetApplyUpdates(mss, mssNews)
|
|
if !r.Changed && msR.Changed {
|
|
r.Changed = true
|
|
}
|
|
}
|
|
if r.Changed {
|
|
r.Correct = mss.join()
|
|
}
|
|
return r
|
|
}
|
|
|
|
func (mss *ModelSets) join() bool {
|
|
var p []bool
|
|
p = append(p, mss.ProxyEndpoints.joinForwards(mss.Forwards))
|
|
for _, b := range p {
|
|
if !b {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|