2018-12-17 22:41:24 +00:00
|
|
|
package objectset
|
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/rancher/norman/controller"
|
|
|
|
"github.com/rancher/norman/objectclient"
|
|
|
|
"k8s.io/apimachinery/pkg/runtime"
|
|
|
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
|
|
|
)
|
|
|
|
|
|
|
|
type Client interface {
|
|
|
|
Generic() controller.GenericController
|
|
|
|
ObjectClient() *objectclient.ObjectClient
|
|
|
|
}
|
|
|
|
|
|
|
|
type Processor struct {
|
|
|
|
setID string
|
|
|
|
codeVersion string
|
|
|
|
clients map[schema.GroupVersionKind]Client
|
|
|
|
}
|
|
|
|
|
|
|
|
func NewProcessor(setID string) Processor {
|
|
|
|
return Processor{
|
|
|
|
setID: setID,
|
|
|
|
clients: map[schema.GroupVersionKind]Client{},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (t Processor) CodeVersion(version string) Processor {
|
|
|
|
t.codeVersion = version
|
|
|
|
return t
|
|
|
|
}
|
|
|
|
|
|
|
|
func (t Processor) Client(clients ...Client) Processor {
|
|
|
|
// ensure cache is enabled
|
|
|
|
for _, client := range clients {
|
|
|
|
client.Generic()
|
|
|
|
t.clients[client.ObjectClient().GroupVersionKind()] = client
|
|
|
|
}
|
|
|
|
return t
|
|
|
|
}
|
|
|
|
|
|
|
|
func (t Processor) Remove(owner runtime.Object) error {
|
|
|
|
return t.NewDesiredSet(owner, nil).Apply()
|
|
|
|
}
|
|
|
|
|
|
|
|
func (t Processor) NewDesiredSet(owner runtime.Object, objs *ObjectSet) *DesiredSet {
|
2019-01-11 16:11:58 +00:00
|
|
|
remove := false
|
2018-12-17 22:41:24 +00:00
|
|
|
if objs == nil {
|
2019-01-11 16:11:58 +00:00
|
|
|
remove = true
|
2018-12-17 22:41:24 +00:00
|
|
|
objs = &ObjectSet{}
|
|
|
|
}
|
|
|
|
return &DesiredSet{
|
2019-01-11 16:11:58 +00:00
|
|
|
remove: remove,
|
2018-12-17 22:41:24 +00:00
|
|
|
objs: objs,
|
|
|
|
setID: t.setID,
|
|
|
|
codeVersion: t.codeVersion,
|
|
|
|
clients: t.clients,
|
|
|
|
owner: owner,
|
|
|
|
}
|
|
|
|
}
|