1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- package service
- import (
- "context"
- "go-common/app/admin/main/config/model"
- "go-common/library/log"
- "github.com/jinzhu/gorm"
- )
- //UpdateForce update force.
- func (s *Service) UpdateForce(ctx context.Context, treeID, version int64, env, zone, build, username string, hosts map[string]string) (err error) {
- var (
- app *model.App
- force *model.Force
- ups map[string]interface{}
- )
- if app, err = s.AppByTree(treeID, env, zone); err != nil {
- return
- }
- tx := s.dao.DB.Begin()
- for key, val := range hosts {
- force = &model.Force{}
- force.Hostname = key
- force.AppID = app.ID
- force.IP = val
- force.Operator = username
- force.Version = version
- if err = s.dao.DB.Where("app_id = ? and hostname = ? and ip = ?", app.ID, key, val).First(&model.Force{}).Error; err != nil {
- if err != gorm.ErrRecordNotFound {
- tx.Rollback()
- log.Error("UpdateForce first error(%v)", err)
- return
- }
- //create
- if err = s.dao.DB.Create(force).Error; err != nil {
- tx.Rollback()
- log.Error("UpdateForce(%s) error(%v)", force, err)
- return
- }
- } else {
- //update
- ups = map[string]interface{}{
- "hostname": key,
- "app_id": app.ID,
- "ip": val,
- "operator": username,
- "version": version,
- }
- if err = s.dao.DB.Model(&model.Force{}).Where("app_id = ? and hostname = ? and ip = ?", app.ID, key, val).Updates(ups).Error; err != nil {
- tx.Rollback()
- log.Error("UpdateForce(%s) error(%v)", force, err)
- return
- }
- }
- }
- if err = s.PushForce(ctx, treeID, env, zone, build, version, hosts, 1); err != nil {
- tx.Rollback()
- return
- }
- tx.Commit()
- return
- }
- //ClearForce delete force.
- func (s *Service) ClearForce(ctx context.Context, treeID int64, env, zone, build string, hosts map[string]string) (err error) {
- var (
- app *model.App
- )
- if app, err = s.AppByTree(treeID, env, zone); err != nil {
- return
- }
- tx := s.dao.DB.Begin()
- for key, val := range hosts {
- if err = s.dao.DB.Where("app_id = ? and hostname = ?", app.ID, key).Delete(model.Force{}).Error; err != nil {
- tx.Rollback()
- log.Error("ClearForce hostname(%s) ip(%v) error(%v)", key, val, err)
- return
- }
- }
- if err = s.PushForce(ctx, treeID, env, zone, build, 0, hosts, 0); err != nil {
- tx.Rollback()
- return
- }
- tx.Commit()
- return
- }
|