in pkg/agent/agent.go [73:115]
func New(log logging.Logger, kube kubernetes.Interface, nodeName string) (*Agent, error) {
if nodeName == "" {
return nil, errors.New("nodeName must be provided for Agent to manage")
}
nodeclient := kube.CoreV1().Nodes()
// Determine which platform to use depending on the updater interface version
node, err := nodeclient.Get(context.TODO(), nodeName, v1meta.GetOptions{})
if err != nil {
return nil, errors.New("failed to retrieve node information")
}
// Get the updater interface version from the node label
var platform platform.Platform
platformVersion := node.Labels[marker.UpdaterInterfaceVersionKey]
switch platformVersion {
default:
// If the updater interface version is not specified, default to
// using Updog as the platform
log.Warn("unknown platform version specified, defaulting to using updog")
fallthrough
case "1.0.0":
platform, err = updog.New()
if err != nil {
return nil, errors.WithMessage(err, "could not setup Updog platform for agent")
}
case "2.0.0":
platform, err = api.New()
if err != nil {
return nil, errors.WithMessage(err, "could not setup Update API platform for agent")
}
}
return &Agent{
log: log,
kube: kube,
platform: platform,
poster: &k8sPoster{log, nodeclient},
proc: &osProc{},
nodeName: nodeName,
lastCache: cache.NewLastCache(),
tracker: newPostTracker(),
}, nil
}