You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.3 KiB
49 lines
1.3 KiB
import {Injectable, Model, Field, FieldType, collect, Related, QueryRow} from '@extollo/lib'
|
|
import {HostGroupHost} from './HostGroupHost.model'
|
|
|
|
/**
|
|
* HostGroup Model
|
|
* -----------------------------------
|
|
* Put some description here.
|
|
*/
|
|
@Injectable()
|
|
export class HostGroup extends Model<HostGroup> {
|
|
protected static table = 'p5x_host_groups'
|
|
protected static key = 'id'
|
|
|
|
@Field(FieldType.serial)
|
|
public id?: number
|
|
|
|
@Field(FieldType.varchar)
|
|
public name!: string
|
|
|
|
@Related()
|
|
public hosts() {
|
|
return this.hasMany(HostGroupHost, 'id', 'hostGroupId')
|
|
}
|
|
|
|
public async setHosts(pveHosts: string[]): Promise<void> {
|
|
if ( !this.id ) {
|
|
throw new Error('Cannot setHosts on HostGroup that has not yet been persisted')
|
|
}
|
|
|
|
// Remove any existing hosts
|
|
await this.hosts().query().delete()
|
|
|
|
// Insert the host records
|
|
const rows = pveHosts.map(pveHost => ({
|
|
pveHost,
|
|
hostGroupId: this.key(),
|
|
}))
|
|
|
|
await HostGroupHost.query<HostGroupHost>()
|
|
.insert(rows)
|
|
}
|
|
|
|
public async toCobalt(): Promise<QueryRow> {
|
|
const obj = this.toQueryRow()
|
|
obj.hosts = await this.hosts().get().then(x => x.pluck('pveHost'))
|
|
return obj
|
|
}
|
|
}
|