in cni/network/stateless/main.go [53:159]
func rootExecute() error {
var (
config common.PluginConfig
tb *telemetry.TelemetryBuffer
)
log.SetName(name)
log.SetLevel(log.LevelInfo)
if err := log.SetTargetLogDirectory(log.TargetLogfile, ""); err != nil {
fmt.Printf("Failed to setup cni logging: %v\n", err)
}
defer log.Close()
config.Version = version
config.Stateless = stateless
reportManager := &telemetry.ReportManager{
HostNetAgentURL: hostNetAgentURL,
ContentType: telemetry.ContentType,
Report: &telemetry.CNIReport{
Context: "AzureCNI",
SystemDetails: telemetry.SystemInfo{},
InterfaceDetails: telemetry.InterfaceInfo{},
BridgeDetails: telemetry.BridgeInfo{},
Version: version,
},
}
cniReport := reportManager.Report.(*telemetry.CNIReport)
netPlugin, err := network.NewPlugin(
name,
&config,
&nns.GrpcClient{},
&network.Multitenancy{},
)
if err != nil {
network.PrintCNIError(fmt.Sprintf("Failed to create network plugin, err:%v.\n", err))
return errors.Wrap(err, "Create plugin error")
}
// Check CNI_COMMAND value
cniCmd := os.Getenv(cni.Cmd)
if cniCmd != cni.CmdVersion {
logger.Info("Environment variable set", zap.String("CNI_COMMAND", cniCmd))
cniReport.GetReport(pluginName, version, ipamQueryURL)
var upTime time.Time
p := platform.NewExecClient(logger)
upTime, err = p.GetLastRebootTime()
if err == nil {
cniReport.VMUptime = upTime.Format("2006-01-02 15:04:05")
}
defer func() {
if recover() != nil {
os.Exit(1)
}
}()
// Connect to the telemetry process.
tb = telemetry.NewTelemetryBuffer(logger)
tb.ConnectToTelemetry()
defer tb.Close()
netPlugin.SetCNIReport(cniReport, tb)
t := time.Now()
cniReport.Timestamp = t.Format("2006-01-02 15:04:05")
if err = netPlugin.Start(&config); err != nil {
network.PrintCNIError(fmt.Sprintf("Failed to start network plugin, err:%v.\n", err))
network.ReportPluginError(reportManager, tb, err)
panic("network plugin start fatal error")
}
}
// dump an empty state in case the API is called for StateMigration or InitilizeCNS from CNI State
if cniCmd == cni.CmdGetEndpointsState {
logger.Debug("returning an empty state")
simpleState := api.AzureCNIState{
ContainerInterfaces: make(map[string]api.PodNetworkInterfaceInfo),
}
err = simpleState.PrintResult()
if err != nil {
logger.Error("Failed to print state result to stdout", zap.Error(err))
}
return errors.Wrap(err, "Get cni state printresult error")
}
if cniCmd == cni.CmdVersion {
return errors.Wrap(err, "Execute netplugin failure")
}
if err = netPlugin.Execute(cni.PluginApi(netPlugin)); err != nil {
return errors.Wrap(err, "Failed to execute network plugin")
}
netPlugin.Stop()
if err != nil {
network.ReportPluginError(reportManager, tb, err)
}
return errors.Wrap(err, "Execute netplugin failure")
}