109 lines
2.7 KiB
Go
109 lines
2.7 KiB
Go
|
package netboxgo
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
"net/http"
|
||
|
"net/url"
|
||
|
|
||
|
"github.com/gorilla/schema"
|
||
|
)
|
||
|
|
||
|
type InventoryItemsService service
|
||
|
|
||
|
type NewInventoryItem struct {
|
||
|
Device int `json:"device"`
|
||
|
Parent int `json:"parent"`
|
||
|
Name string `json:"name"`
|
||
|
Manufacturer int `json:"manufacturer"`
|
||
|
PartID string `json:"part_id"`
|
||
|
Serial string `json:"serial"`
|
||
|
AssetTag string `json:"asset_tag"`
|
||
|
Discovered bool `json:"discovered"`
|
||
|
Description string `json:"description"`
|
||
|
Tags []string `json:"tags"`
|
||
|
}
|
||
|
|
||
|
type InventoryItems struct {
|
||
|
Count int `json:"count"`
|
||
|
Next string `json:"next"`
|
||
|
Previous string `json:"previous"`
|
||
|
Results []struct {
|
||
|
ID int `json:"id"`
|
||
|
Device struct {
|
||
|
ID int `json:"id"`
|
||
|
URL string `json:"url"`
|
||
|
Name string `json:"name"`
|
||
|
DisplayName string `json:"display_name"`
|
||
|
} `json:"device"`
|
||
|
Parent int `json:"parent"`
|
||
|
Name string `json:"name"`
|
||
|
Manufacturer struct {
|
||
|
ID int `json:"id"`
|
||
|
URL string `json:"url"`
|
||
|
Name string `json:"name"`
|
||
|
Slug string `json:"slug"`
|
||
|
DevicetypeCount int `json:"devicetype_count"`
|
||
|
} `json:"manufacturer"`
|
||
|
PartID string `json:"part_id"`
|
||
|
Serial string `json:"serial"`
|
||
|
AssetTag string `json:"asset_tag"`
|
||
|
Discovered bool `json:"discovered"`
|
||
|
Description string `json:"description"`
|
||
|
Tags []string `json:"tags"`
|
||
|
} `json:"results"`
|
||
|
}
|
||
|
|
||
|
type InventoryItemFilter struct {
|
||
|
Device string `schema:"device"`
|
||
|
}
|
||
|
|
||
|
const inventoryItemsPath = "/dcim/inventory-items"
|
||
|
|
||
|
// List inventory-items. InventoryItemFilter is used to list based on filter queries.
|
||
|
func (s *InventoryItemsService) List(ctx context.Context, f *InventoryItemFilter) (*InventoryItems, error) {
|
||
|
var inventoryitems InventoryItems
|
||
|
var query string
|
||
|
var req *http.Request
|
||
|
var err error
|
||
|
|
||
|
encoder := schema.NewEncoder()
|
||
|
|
||
|
form := url.Values{}
|
||
|
err = encoder.Encode(f, form)
|
||
|
if err != nil {
|
||
|
return &inventoryitems, err
|
||
|
}
|
||
|
query = form.Encode()
|
||
|
|
||
|
req, err = s.client.newRequest(ctx, "GET", inventoryItemsPath, query, nil)
|
||
|
if err != nil {
|
||
|
return &inventoryitems, err
|
||
|
}
|
||
|
|
||
|
_, err = s.client.do(req, &inventoryitems)
|
||
|
if err != nil {
|
||
|
return &inventoryitems, err
|
||
|
}
|
||
|
|
||
|
return &inventoryitems, nil
|
||
|
}
|
||
|
|
||
|
// Create a inventory-item
|
||
|
func (s *InventoryItemsService) Create(ctx context.Context, c *NewInventoryItem) error {
|
||
|
var err error
|
||
|
var req *http.Request
|
||
|
|
||
|
req, err = s.client.newRequest(ctx, "POST", inventoryItemsPath, "", 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
|
||
|
}
|