107 lines
3 KiB
Go
107 lines
3 KiB
Go
|
package netboxgo
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
"net/http"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
type VirtualMachinesService service
|
||
|
|
||
|
// NewVirtualMachine is used to create new VirtualizationVirtualMachines
|
||
|
type NewVirtualMachine struct {
|
||
|
ID int `json:"id"`
|
||
|
Name string `json:"name"`
|
||
|
Status struct {
|
||
|
Label string `json:"label"`
|
||
|
Value int `json:"value"`
|
||
|
} `json:"status"`
|
||
|
Site struct {
|
||
|
ID int `json:"id"`
|
||
|
URL string `json:"url"`
|
||
|
Name string `json:"name"`
|
||
|
Slug string `json:"slug"`
|
||
|
} `json:"site"`
|
||
|
Cluster struct {
|
||
|
ID int `json:"id"`
|
||
|
URL string `json:"url"`
|
||
|
Name string `json:"name"`
|
||
|
VirtualmachineCount int `json:"virtualmachine_count"`
|
||
|
} `json:"cluster"`
|
||
|
Role struct {
|
||
|
ID int `json:"id"`
|
||
|
URL string `json:"url"`
|
||
|
Name string `json:"name"`
|
||
|
Slug string `json:"slug"`
|
||
|
DeviceCount int `json:"device_count"`
|
||
|
VirtualmachineCount int `json:"virtualmachine_count"`
|
||
|
} `json:"role"`
|
||
|
Tenant struct {
|
||
|
ID int `json:"id"`
|
||
|
URL string `json:"url"`
|
||
|
Name string `json:"name"`
|
||
|
Slug string `json:"slug"`
|
||
|
} `json:"tenant"`
|
||
|
Platform struct {
|
||
|
ID int `json:"id"`
|
||
|
URL string `json:"url"`
|
||
|
Name string `json:"name"`
|
||
|
Slug string `json:"slug"`
|
||
|
DeviceCount int `json:"device_count"`
|
||
|
VirtualmachineCount int `json:"virtualmachine_count"`
|
||
|
} `json:"platform"`
|
||
|
PrimaryIP struct {
|
||
|
ID int `json:"id"`
|
||
|
URL string `json:"url"`
|
||
|
Family int `json:"family"`
|
||
|
Address string `json:"address"`
|
||
|
} `json:"primary_ip"`
|
||
|
PrimaryIP4 struct {
|
||
|
ID int `json:"id"`
|
||
|
URL string `json:"url"`
|
||
|
Family int `json:"family"`
|
||
|
Address string `json:"address"`
|
||
|
} `json:"primary_ip4"`
|
||
|
PrimaryIP6 struct {
|
||
|
ID int `json:"id"`
|
||
|
URL string `json:"url"`
|
||
|
Family int `json:"family"`
|
||
|
Address string `json:"address"`
|
||
|
} `json:"primary_ip6"`
|
||
|
Vcpus int `json:"vcpus"`
|
||
|
Memory int `json:"memory"`
|
||
|
Disk int `json:"disk"`
|
||
|
Comments string `json:"comments"`
|
||
|
LocalContextData string `json:"local_context_data"`
|
||
|
Tags []string `json:"tags"`
|
||
|
CustomFields struct{} `json:"custom_fields"`
|
||
|
ConfigContext struct {
|
||
|
AdditionalProp1 string `json:"additionalProp1"`
|
||
|
AdditionalProp2 string `json:"additionalProp2"`
|
||
|
AdditionalProp3 string `json:"additionalProp3"`
|
||
|
} `json:"config_context"`
|
||
|
Created string `json:"created"`
|
||
|
LastUpdated time.Time `json:"last_updated"`
|
||
|
}
|
||
|
|
||
|
const virtualMachinesPath = "/virtualization/virtual-machines"
|
||
|
|
||
|
// Create a virtual-machine
|
||
|
func (s *VirtualMachinesService) Create(ctx context.Context, c *NewVirtualMachine) error {
|
||
|
var err error
|
||
|
var req *http.Request
|
||
|
|
||
|
req, err = s.client.newRequest(ctx, "POST", virtualMachinesPath, "", c)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("unable to create request: %w", err)
|
||
|
}
|
||
|
|
||
|
_, err = s.client.do(req, nil)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("unable to do request: %w", err)
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|