2022-05-05 13:25:50 +00:00
|
|
|
// Copyright 2022 Cloudbase Solutions SRL
|
|
|
|
|
//
|
|
|
|
|
// Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
|
|
|
// not use this file except in compliance with the License. You may obtain
|
|
|
|
|
// a copy of the License at
|
|
|
|
|
//
|
|
|
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
|
//
|
|
|
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
|
|
|
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
|
|
|
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
|
|
|
// License for the specific language governing permissions and limitations
|
|
|
|
|
// under the License.
|
|
|
|
|
|
2022-04-25 00:03:26 +00:00
|
|
|
package sql
|
|
|
|
|
|
|
|
|
|
import (
|
2022-05-04 11:44:10 +00:00
|
|
|
"garm/config"
|
2022-12-29 16:49:50 +00:00
|
|
|
"garm/params"
|
2022-05-04 11:44:10 +00:00
|
|
|
"garm/runner/providers/common"
|
2022-04-25 00:03:26 +00:00
|
|
|
"time"
|
|
|
|
|
|
2022-04-28 16:13:20 +00:00
|
|
|
"github.com/pkg/errors"
|
2022-04-25 00:03:26 +00:00
|
|
|
uuid "github.com/satori/go.uuid"
|
|
|
|
|
"gorm.io/gorm"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type Base struct {
|
|
|
|
|
ID uuid.UUID `gorm:"type:uuid;primary_key;"`
|
|
|
|
|
CreatedAt time.Time
|
|
|
|
|
UpdatedAt time.Time
|
|
|
|
|
DeletedAt gorm.DeletedAt `gorm:"index"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (b *Base) BeforeCreate(tx *gorm.DB) error {
|
2022-04-26 20:29:58 +00:00
|
|
|
emptyId := uuid.UUID{}
|
|
|
|
|
if b.ID != emptyId {
|
|
|
|
|
return nil
|
|
|
|
|
}
|
2022-04-28 16:13:20 +00:00
|
|
|
newID, err := uuid.NewV4()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return errors.Wrap(err, "generating id")
|
|
|
|
|
}
|
|
|
|
|
b.ID = newID
|
2022-04-25 00:03:26 +00:00
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type Tag struct {
|
|
|
|
|
Base
|
|
|
|
|
|
2022-04-26 20:29:58 +00:00
|
|
|
Name string `gorm:"type:varchar(64);uniqueIndex"`
|
|
|
|
|
Pools []*Pool `gorm:"many2many:pool_tags;"`
|
2022-04-25 00:03:26 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type Pool struct {
|
|
|
|
|
Base
|
|
|
|
|
|
2022-06-29 23:44:03 +00:00
|
|
|
ProviderName string `gorm:"index:idx_pool_type"`
|
|
|
|
|
MaxRunners uint
|
|
|
|
|
MinIdleRunners uint
|
|
|
|
|
RunnerBootstrapTimeout uint
|
|
|
|
|
Image string `gorm:"index:idx_pool_type"`
|
|
|
|
|
Flavor string `gorm:"index:idx_pool_type"`
|
|
|
|
|
OSType config.OSType
|
|
|
|
|
OSArch config.OSArch
|
|
|
|
|
Tags []*Tag `gorm:"many2many:pool_tags;"`
|
|
|
|
|
Enabled bool
|
2022-04-26 20:29:58 +00:00
|
|
|
|
2022-05-04 21:57:08 +00:00
|
|
|
RepoID uuid.UUID `gorm:"index"`
|
2022-04-26 20:29:58 +00:00
|
|
|
Repository Repository `gorm:"foreignKey:RepoID"`
|
|
|
|
|
|
2022-05-04 21:57:08 +00:00
|
|
|
OrgID uuid.UUID `gorm:"index"`
|
2022-04-26 20:29:58 +00:00
|
|
|
Organization Organization `gorm:"foreignKey:OrgID"`
|
2022-04-27 16:56:28 +00:00
|
|
|
|
2022-10-13 16:09:28 +00:00
|
|
|
EnterpriseID uuid.UUID `gorm:"index"`
|
|
|
|
|
Enterprise Enterprise `gorm:"foreignKey:EnterpriseID"`
|
|
|
|
|
|
2022-04-27 16:56:28 +00:00
|
|
|
Instances []Instance `gorm:"foreignKey:PoolID"`
|
2022-04-25 00:03:26 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type Repository struct {
|
|
|
|
|
Base
|
|
|
|
|
|
2022-04-28 16:13:20 +00:00
|
|
|
CredentialsName string
|
2022-10-05 17:12:45 +03:00
|
|
|
Owner string `gorm:"index:idx_owner_nocase,unique,collate:nocase"`
|
|
|
|
|
Name string `gorm:"index:idx_owner_nocase,unique,collate:nocase"`
|
2022-04-28 16:13:20 +00:00
|
|
|
WebhookSecret []byte
|
|
|
|
|
Pools []Pool `gorm:"foreignKey:RepoID"`
|
2022-04-25 00:03:26 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type Organization struct {
|
|
|
|
|
Base
|
|
|
|
|
|
2022-04-28 16:13:20 +00:00
|
|
|
CredentialsName string
|
2022-10-05 17:12:45 +03:00
|
|
|
Name string `gorm:"index:idx_org_name_nocase,collate:nocase"`
|
2022-04-28 16:13:20 +00:00
|
|
|
WebhookSecret []byte
|
|
|
|
|
Pools []Pool `gorm:"foreignKey:OrgID"`
|
2022-04-26 20:29:58 +00:00
|
|
|
}
|
|
|
|
|
|
2022-10-13 16:09:28 +00:00
|
|
|
type Enterprise struct {
|
|
|
|
|
Base
|
|
|
|
|
|
|
|
|
|
CredentialsName string
|
|
|
|
|
Name string `gorm:"index:idx_ent_name_nocase,collate:nocase"`
|
|
|
|
|
WebhookSecret []byte
|
|
|
|
|
Pools []Pool `gorm:"foreignKey:EnterpriseID"`
|
|
|
|
|
}
|
|
|
|
|
|
2022-04-26 20:29:58 +00:00
|
|
|
type Address struct {
|
|
|
|
|
Base
|
|
|
|
|
|
|
|
|
|
Address string
|
|
|
|
|
Type string
|
2022-05-03 19:49:14 +00:00
|
|
|
|
|
|
|
|
InstanceID uuid.UUID
|
|
|
|
|
Instance Instance `gorm:"foreignKey:InstanceID"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type InstanceStatusUpdate struct {
|
|
|
|
|
Base
|
|
|
|
|
|
2022-12-29 16:49:50 +00:00
|
|
|
EventType params.EventType `gorm:"index:eventType"`
|
|
|
|
|
EventLevel params.EventLevel
|
|
|
|
|
Message string `gorm:"type:text"`
|
2022-05-03 19:49:14 +00:00
|
|
|
|
|
|
|
|
InstanceID uuid.UUID
|
|
|
|
|
Instance Instance `gorm:"foreignKey:InstanceID"`
|
2022-04-26 20:29:58 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type Instance struct {
|
|
|
|
|
Base
|
|
|
|
|
|
2022-12-06 19:48:00 +00:00
|
|
|
ProviderID *string `gorm:"uniqueIndex"`
|
|
|
|
|
Name string `gorm:"uniqueIndex"`
|
|
|
|
|
AgentID int64
|
|
|
|
|
OSType config.OSType
|
|
|
|
|
OSArch config.OSArch
|
|
|
|
|
OSName string
|
|
|
|
|
OSVersion string
|
|
|
|
|
Addresses []Address `gorm:"foreignKey:InstanceID"`
|
|
|
|
|
Status common.InstanceStatus
|
|
|
|
|
RunnerStatus common.RunnerStatus
|
|
|
|
|
CallbackURL string
|
|
|
|
|
MetadataURL string
|
|
|
|
|
ProviderFault []byte `gorm:"type:longblob"`
|
|
|
|
|
CreateAttempt int
|
2022-04-27 16:56:28 +00:00
|
|
|
|
|
|
|
|
PoolID uuid.UUID
|
|
|
|
|
Pool Pool `gorm:"foreignKey:PoolID"`
|
2022-05-03 19:49:14 +00:00
|
|
|
|
|
|
|
|
StatusMessages []InstanceStatusUpdate `gorm:"foreignKey:InstanceID"`
|
2022-04-25 00:03:26 +00:00
|
|
|
}
|
2022-04-28 16:13:20 +00:00
|
|
|
|
|
|
|
|
type User struct {
|
|
|
|
|
Base
|
|
|
|
|
|
|
|
|
|
Username string `gorm:"uniqueIndex;varchar(64)"`
|
|
|
|
|
FullName string `gorm:"type:varchar(254)"`
|
|
|
|
|
Email string `gorm:"type:varchar(254);unique;index:idx_email"`
|
|
|
|
|
Password string `gorm:"type:varchar(60)"`
|
|
|
|
|
IsAdmin bool
|
|
|
|
|
Enabled bool
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type ControllerInfo struct {
|
|
|
|
|
Base
|
|
|
|
|
|
|
|
|
|
ControllerID uuid.UUID
|
|
|
|
|
}
|