CMDB单模块编译和模型关联关系的添加

CMDB模块编译

     1.推荐安装gox进行混合编译

go get github.com/mitchellh/gox
测试:命令行输入gox -h,应该会用输出的,不然你要检查下PATH变量设置的是否正确
$gox -h
...

    2.使用方法

1.编译window 64位:
  	gox -osarch="windows/amd64" ./
2.编译mac 64位:
  	gox -osarch = "darwin/amd64" ./
3.编译Linux 64位:
  	gox -osarch="linux/amd64" ./

   4.把生成的二进制包替换为CMDB平台对应主机上面的包,例如:

      1.登录中控机:cat /data/install/install.config

       

    2.替换二进制包,例如:

        ssh到目标机,cd  /data/bkee/cmdb/server/bin,替换对应的模块即可

   

  3.中控机操作CMDB服务,例如:

     cd  /data/install,执行 ./bkeec start/stop cmdb 停止和启动CMDB服务

 

添加模型关联关系

  <1>.采集器端

  1.  增加需要关联的字段,可以是主机、业务或者其他,例如:host、biz等
  2.  字段属性根据需要,可以设置为隐藏字段,singleasst(基于3.2.0版本)

  <2>.CMDB源码段

      

  1.  目录结果如下:模块名为datacollection

   2.找到handler.go文件里面如下的方法进行修改,可以做关联关系增删改查操作

 3.对应的表结构为

  • cc_ObjectBase          所有的模型实例
  • cc_ObjAsst               模型的关联关系
  • cc_InstAsst               实例和关联关系的结合
  • cc_UserCustom        用户自定义的实例字段

 

要点:

    1.discover.go文件需要引入底层数据库的操作句柄,自己搭建操作桥梁

type Discover struct {
      db dal.RDB
}

  2. NewDiscover方法

func NewDiscover(ctx context.Context, chanName string, maxSize int, redisCli, subCli *redis.Client, backbone *backbone.Engine, db dal.RDB) *Discover {

	if 0 == maxSize {
		maxSize = 100
	}
	pheader := http.Header{}
	pheader.Add(bkc.BKHTTPOwnerID, bkc.BKDefaultOwnerID)
	pheader.Add(bkc.BKHTTPHeaderUser, bkc.CCSystemCollectorUserName)

	discover := &Discover{
		chanName:               chanName,
		msgChan:                make(chan string, maxSize*4),
		interrupt:              make(chan error),
		resetHandle:            make(chan struct{}),
		doneCh:                 make(chan struct{}),
		maxSize:                maxSize,
		redisCli:               redisCli,
		subCli:                 subCli,
		ts:                     time.Now(),
		id:                     xid.New().String()[5:],
		maxConcurrent:          runtime.NumCPU(),
		getMasterInterval:      time.Second * 11,
		masterProcLockLiveTime: getMasterProcIntervalTime + time.Second*10,
		ctx:                    ctx,
		pheader:                pheader,
	}
	discover.Engine = backbone
	discover.db = db
	return discover
}

  3.从datacollection.go,入口处开始添加操作DB引用

func (d *DataCollection) Run() error {

	blog.Infof("datacollection start...")

	var err error

	discli, err := redis.NewFromConfig(d.Config.DiscoverRedis)
	if nil != err {
		return err
	}

	snapcli, err := redis.NewFromConfig(d.Config.SnapRedis)
	if nil != err {
		return err
	}

	rediscli, err := redis.NewFromConfig(d.Config.CCRedis)
	if nil != err {
		return err
	}

	db, err := mongo.NewMgo(d.Config.MongoDB.BuildURI(), time.Minute)
	if err != nil {
		return fmt.Errorf("connect mongo server failed %s", err.Error())
	}
	d.db = db

	chanName := []string{}
	for {
		chanName, err = d.getSnapChanName(d.ctx)
		if nil == err {
			break
		}
		blog.Errorf("get channame faile: %v, please init databae first, we will try 10 second later", err)
		time.Sleep(time.Second * 10)
	}

	hostSnap := NewHostSnap(d.ctx, chanName, MaxSnapSize, rediscli, snapcli, db)
	hostSnap.Start()

	discoverChan := ""
	for {
		discoverChan, err = d.getDiscoverChanName(d.ctx)
		if nil == err {
			break
		}
		blog.Errorf("get discover channel fail: %v, please init database first, we will try 10 second later", err)
		time.Sleep(time.Second * 10)
	}
	discover := NewDiscover(context.Background(), discoverChan, MaxDiscoverSize, rediscli, discli, d.Engine, db)
	discover.Start()

	blog.Infof("datacollection started")
	return nil
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值