package node import ( "encoding/base64" "fmt" "github.com/coroot/coroot-node-agent/flags" "github.com/coroot/coroot-node-agent/kube" "github.com/coroot/coroot-node-agent/utils" . "github.com/coroot/coroot-node-agent/utils/modelse" klog "github.com/sirupsen/logrus" "gopkg.in/ini.v1" "strconv" "strings" ) func NewNodeInfo(name, kv, version string) (*NodeInfoT, error) { ni, err := newNodeInfoFromCommonIni(name, kv, version) if err != nil { klog.Errorf("Failed to create node info from common ini: %v", err) } else { klog.Infof("run in omniagent.") *flags.RunInOmniagent = true return ni, err } var ip string if *flags.RunInContainer { klog.Infof("run in container.") ip, err = kube.GetNodeIpByCore(name) if err != nil { return nil, err } } else { klog.Infof("run standalone.") ip, err = utils.GetRealIp() if err != nil { return nil, err } } n := &NodeInfoT{ Hostname: name, HostIp: ip, KernelVersion: kv, SystemUUID: utils.SystemUUID(), HostID: utils.GetHostID(), AccountID: utils.GetAccountID(), LicenseKey: *flags.LicenseKey, AgentVersion: version, } utils.SaveNodeInfo(n) return n, nil } func newNodeInfoFromCommonIni(name, kv, version string) (*NodeInfoT, error) { if *flags.CommonIni != "" { iniData, err := ini.Load(*flags.CommonIni) if err != nil { return nil, err } if iniData == nil { return nil, fmt.Errorf("no ini data") } ip := iniData.Section("common").Key("ip").String() uuid := iniData.Section("common").Key("system_uuid").String() host_id, err := iniData.Section("common").Key("host_id").Int64() if err != nil { return nil, err } token := iniData.Section("common").Key("token").String() account_and_user_byte, err := base64.StdEncoding.DecodeString(token) if err != nil { return nil, err } account_and_user_string := strings.Split(string(account_and_user_byte), "@") if len(account_and_user_string) > 0 { accountId, err := strconv.Atoi(account_and_user_string[0]) if err == nil { n := &NodeInfoT{ Hostname: name, HostIp: ip, KernelVersion: kv, SystemUUID: uuid, HostID: host_id, AccountID: accountId, LicenseKey: *flags.LicenseKey, AgentVersion: version, } utils.SaveNodeInfo(n) return n, nil } } } return nil, nil }