From 2c8bee48044b33bc47c1dd8108ee3ea5b93f3120 Mon Sep 17 00:00:00 2001 From: Kalle Carlbark Date: Tue, 4 Feb 2020 14:17:17 +0100 Subject: [PATCH] Add netbox_virtualization.go --- netbox_virtualization.go | 113 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) diff --git a/netbox_virtualization.go b/netbox_virtualization.go index 4587e2e..f60972e 100644 --- a/netbox_virtualization.go +++ b/netbox_virtualization.go @@ -1,6 +1,7 @@ package netboxgo import ( + "bytes" "crypto/tls" "encoding/json" @@ -14,6 +15,82 @@ import ( "github.com/pkg/errors" ) +type VirtualizationVirtualMachinesCreate 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"` +} + type VirtualizationClustersCreate struct { ID int `json:"id"` Name string `json:"name"` @@ -153,3 +230,39 @@ func (n *NetBox) ListClusters(i *VirtualizationClustersList, f *ClusterFilter) e } return nil } + +// CreateInterfaces creates interfaces via Netbox API dcim_interfaces_create +func (n *NetBox) CreateVirtualMachine(v *VirtualizationClustersCreate) error { + data, err := json.Marshal(v) + if err != nil { + return err + } + transport := &http.Transport{ + TLSClientConfig: &tls.Config{InsecureSkipVerify: n.InsecureSkipVerify}, + } + timeout := time.Duration(60 * time.Second) + client := &http.Client{ + Timeout: timeout, + Transport: transport, + } + request, err := http.NewRequest("POST", n.RootURL+"/api/virtualization/virtual-machines/", bytes.NewBuffer(data)) + if err != nil { + return err + } + request.Header.Add("Accept", "application/json") + request.Header.Add("Content-Type", "application/json") + request.Header.Add("Authorization", " Token "+n.Token) + response, err := client.Do(request) + if err != nil { + return err + } + err = response.Body.Close() + if err != nil { + return err + } + + if response.StatusCode == http.StatusCreated { + return nil + } + return errors.Errorf("Error: response was: %d should be %d\n", response.StatusCode, http.StatusCreated) +}