func()

in pkg/initalizer/iproute/link.go [25:51]


func (l *agentLinkRetriever) CreateOrGetLink(ctx context.Context) (AgentLink, error) {
	log := logger.FromContext(ctx)

	attrs := netlink.NewLinkAttrs()
	attrs.Name = configuration.AgentLinkName
	dummyDevice := &netlink.Dummy{LinkAttrs: attrs}

	link, err := l.netlinkHandle.LinkByName(attrs.Name)
	if err != nil {
		_, errWasLinkNotFound := err.(netlink.LinkNotFoundError)
		if !errWasLinkNotFound {
			return nil, fmt.Errorf("error finding %s: %w", attrs.Name, err)
		}

		log.Infof("Link was not found, creating it")
		link, err = l.createLink(ctx, dummyDevice)
		if err != nil {
			return nil, fmt.Errorf("unable to create interface %v: %w", dummyDevice.Name, err)
		}
		log.Debugf("Link %s created", link.Attrs().Name)
	}

	return &agentLink{
		netlinkHandle: l.netlinkHandle,
		link:          link,
	}, nil
}