func New()

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
}