func (this *TemplatesDetailController) List(serviceId int64) {
	service := entity.Service{}
	service.Id = serviceId
	service.Load()

	template, errs := entity.LoadTemplateList(serviceId)
	this.Data["Template"] = template

	if errs != nil {
		this.Data["MessageErr"] = fmt.Sprintf("Errors: %s", errs)
	}

	component, componenterrors := entity.LoadComponentList(serviceId)

	this.Data["Component"] = component
	if componenterrors != nil {
		this.Data["MessageErr"] = fmt.Sprintf("Errors: %s", componenterrors)
	}

	if service.Where == utils.Deploy_On_Vms {
		operation := entity.Operation{}
		operation.Sid = serviceId
		operationerrors := operation.LoadBySid()

		this.Data["Operation"] = operation
		if operationerrors != nil {
			this.Data["MessageErr"] = fmt.Sprintf("Errors: %s", operationerrors)
		}
	}
	this.TplName = "templates/index_detail.tpl"
}
func (serviceDeploy *ServiceDeployWebSocketController) Deploying(ws *websocket.Conn, serviceIds string) {
	serviceId, err := strconv.ParseInt(serviceIds, 10, 64)
	if err != nil {
		writeStringMessage(ws, fmt.Sprintf("Error ServiceId,%s", err))
		return
	}
	//加载service
	writeStringMessage(ws, "Load Service")
	service := entity.Service{}
	service.Id = serviceId
	err = service.Load()

	if err != nil {
		writeStringMessage(ws, fmt.Sprintf("Error,%s", err))
		return
	}

	switch service.Where {
	case utils.Deploy_On_PaaS:
		serviceDeploy.Deploy2PaaS(ws, service)
	case utils.Deploy_On_Vms:
		serviceDeploy.Deploy2Vms(ws, service)
	default:
		writeStringMessage(ws, fmt.Sprintf("Unknow Platform %s", service.Where))
	}
}
func (this *TemplatesController) LoadCustomServiceDetail() {
	id, err := this.GetInt64("id", 0)
	service := entity.Service{}
	if err == nil {
		service.Id = id
		err = service.Load()
		serviceDto := entity.ServiceDto{}
		serviceDto.Service = service
		err = serviceDto.Load()
		if err == nil {
			this.Data["json"] = &serviceDto
			this.ServeJSON()
		}
	}
}
func (this *TemplatesDetailController) CheckService(serviceId int64) bool {

	this.Data["ServiceId"] = serviceId
	if serviceId == 0 {
		this.TplName = "templates/404.tpl"
		return false
	}
	service := entity.Service{}
	service.Id = serviceId
	loaderr := service.Load()
	if loaderr != nil {
		this.TplName = "templates/404.tpl"
		return false
	}
	this.Data["Service"] = service
	return true
}
func (this *TemplatesController) DeleteCustomService() {
	id, err := this.GetInt64("id", 0)
	service := entity.Service{}
	if err == nil && id != 0 {
		service.Id = id
		err = service.Load()
		if err == nil {
			serviceDto := entity.ServiceDto{}
			serviceDto.Service = service
			serviceDto.Load()
			if serviceDto.Service.Where == utils.Deploy_On_PaaS {
				serviceDto.OnPaaS.Delete()
			}
			if serviceDto.Service.Where == utils.Deploy_On_Vms {
				serviceDto.OnCustom.Delete()
			}
		}

		err = service.Delete()
		if err != nil {
			this.Data["MessageErr"] = fmt.Sprintf("Errors: %s", err)
		}
	}
	if err != nil {
		this.Data["MessageErr"] = fmt.Sprintf("Errors: %s", err)
	}
}
func (this *ServiceDeployController) Get() {
	this.Layout = "index.tpl"
	this.Data["NavBarFocus"] = "templates"
	this.Data["IaaSVersion"] = iaasVersion
	this.Data["DefaultVersion"] = defaultVersion

	this.Data["HOST"] = this.Ctx.Request.Host
	this.Data["AppName"] = globaleAppName
	this.Data["WebSocket"] = serviceDeployWebScoket
	this.Data["ServiceId"] = this.GetString("serviceId")

	serviceId, _ := this.GetInt64("serviceId", 0)
	service := entity.Service{}
	service.Id = serviceId
	loaderr := service.Load()

	if loaderr == nil {
		this.Data["Service"] = service
	}

	this.TplName = "templates/deploy.tpl"
}
func (this *TemplatesController) Post() {
	action := this.GetString("action")
	switch action {
	case "":
		service := entity.Service{}
		service.Name = this.GetString("name")
		service.Description = this.GetString("description")
		service.Where = this.GetString("where")

		id, err := this.GetInt64("id", 0)
		if err == nil {
			if id == 0 {
				service.Save()
				if service.Where == utils.Deploy_On_PaaS {
					deployOnPaaS := entity.OnPaaS{}
					deployOnPaaS.Api = this.GetString("Api")
					deployOnPaaS.Sid = service.Id
					deployOnPaaS.User = this.GetString("UserName")
					deployOnPaaS.Passwd = this.GetString("Passwd")
					deployOnPaaS.Org = this.GetString("Org")
					deployOnPaaS.Space = this.GetString("Space")
					deployOnPaaS.Save()
				}
				if service.Where == utils.Deploy_On_Vms {
					deployOnCustom := entity.OnCustom{}
					deployOnCustom.Sid = service.Id
					deployOnCustom.Ip = this.GetString("ip")
					deployOnCustom.User = this.GetString("VmUserName")
					deployOnCustom.Passwd = this.GetString("VmPasswd")
					deployOnCustom.Save()
				}
			} else {
				service.Id = id
				service.Update()
				if service.Where == utils.Deploy_On_PaaS {
					paasid, _ := this.GetInt64("paasid", 0)
					deployOnPaaS := entity.OnPaaS{}
					deployOnPaaS.Id = paasid
					deployOnPaaS.Api = this.GetString("Api")
					deployOnPaaS.Sid = service.Id
					deployOnPaaS.User = this.GetString("UserName")
					deployOnPaaS.Passwd = this.GetString("Passwd")
					deployOnPaaS.Org = this.GetString("Org")
					deployOnPaaS.Space = this.GetString("Space")
					deployOnPaaS.Update()
				}
				if service.Where == utils.Deploy_On_Vms {
					vmid, _ := this.GetInt64("vmid", 0)
					deployOnCustom := entity.OnCustom{}
					deployOnCustom.Id = vmid
					deployOnCustom.Sid = service.Id
					deployOnCustom.Ip = this.GetString("ip")
					deployOnCustom.User = this.GetString("VmUserName")
					deployOnCustom.Passwd = this.GetString("VmPasswd")
					deployOnCustom.Update()
				}
			}
		}

	case "delete":
		this.DeleteCustomService()
	}
	this.Redirect("templates", 301) //this.Get()
}
package entity_test

import (
	"github.com/astaxie/beego/orm"
	"github.com/citycloud/citycloud.cf-deploy-ui/entity"
	_ "github.com/go-sql-driver/mysql"
	. "github.com/onsi/ginkgo"
	. "github.com/onsi/gomega"
)

var _ = Describe("Testing Service CRUD", func() {
	It("Service Save", func() {
		var service entity.Service = entity.Service{Name: "mysql-service", Description: "provide mysql store service"}
		err := service.Save()
		Expect(err).ToNot(HaveOccurred())

		err = service.Delete()
		Expect(err).ToNot(HaveOccurred())
	})
	It("Service Update", func() {
		service := entity.Service{Name: "mysql-service", Description: "provide mysql store service"}
		id, err := orm.NewOrm().Insert(&service)
		Expect(err).ToNot(HaveOccurred())
		service1 := entity.Service{}
		service1.Id = id
		errs := service1.Load()
		Expect(errs).ToNot(HaveOccurred())
		service1.Name = "New-mysql-service"
		errs = service1.Update()
		Expect(errs).ToNot(HaveOccurred())
		errs = service1.Load()