2023-06-05 14:18:05 -07:00

71 lines
1.4 KiB
Go

package state
import (
"github.com/hashicorp/vagrant-plugin-sdk/component"
"github.com/hashicorp/vagrant/internal/server/proto/vagrant_server"
"gorm.io/gorm"
)
type Component struct {
gorm.Model
Name string `gorm:"uniqueIndex:idx_stname"`
ServerAddr string `gorm:"uniqueIndex:idx_stname"`
Type component.Type `gorm:"uniqueIndex:idx_stname"`
Runners []*Runner `gorm:"many2many:runner_components"`
}
func init() {
models = append(models, &Component{})
}
func (c *Component) ToProtoRef() *vagrant_server.Ref_Component {
if c == nil {
return nil
}
return &vagrant_server.Ref_Component{
Type: vagrant_server.Component_Type(c.Type),
Name: c.Name,
}
}
func (c *Component) ToProto() *vagrant_server.Component {
if c == nil {
return nil
}
return &vagrant_server.Component{
Type: vagrant_server.Component_Type(c.Type),
Name: c.Name,
ServerAddr: c.ServerAddr,
}
}
func (s *State) ComponentFromProto(p *vagrant_server.Component) (*Component, error) {
var c Component
result := s.db.First(&c, &Component{
Name: p.Name,
ServerAddr: p.ServerAddr,
Type: component.Type(p.Type),
})
if result.Error == nil {
return &c, nil
}
if result.Error == gorm.ErrRecordNotFound {
c.Name = p.Name
c.ServerAddr = p.ServerAddr
c.Type = component.Type(p.Type)
result = s.db.Save(&c)
if result.Error != nil {
return nil, result.Error
}
return &c, nil
}
return nil, result.Error
}