package netboxgo import ( "context" "fmt" "net/http" "net/url" "time" "github.com/gorilla/schema" ) type VirtualizationInterfacesService service // NewVirtualizationInterface is used for creating a new virtualization interface type NewVirtualizationInterface struct { VirtualMachine int `json:"virtual_machine"` Name string `json:"name"` Enabled bool `json:"enabled"` Parent int `json:"parent"` Bridge int `json:"bridge"` MTU int `json:"mtu"` MACAddress string `json:"mac_address"` Description string `json:"description"` Mode string `json:"mode"` UntaggedVLAN int `json:"untagged_vlan"` TaggedVLANs []int `json:"tagged_vlans"` Tags []struct { Name string `json:"name"` Slug string `json:"slug"` Color string `json:"color"` } `json:"tags"` CustomFields interface{} `json:"custom_fields"` } // VirtualizationInterfaces is a list of interfaces type VirtualizationInterfaces struct { Next string `json:"next,omitempty"` Previous string `json:"previous,omitempty"` Results []VirtualizationInterface `json:"results,omitempty"` Count int `json:"count,omitempty"` } // VirtualizationInterface is one virtualization interface type VirtualizationInterface struct { ID int `json:"id"` URL string `json:"url"` Display string `json:"display"` VirtualMachine struct { ID int `json:"id"` URL string `json:"url"` Display string `json:"display"` Name string `json:"name"` } `json:"virtual_machine"` Name string `json:"name"` Enabled bool `json:"enabled"` Parent struct { ID int `json:"id"` URL string `json:"url"` Display string `json:"display"` VirtualMachine struct { ID int `json:"id"` URL string `json:"url"` Display string `json:"display"` Name string `json:"name"` } `json:"virtual_machine"` Name string `json:"name"` } `json:"parent"` Bridge struct { ID int `json:"id"` URL string `json:"url"` Display string `json:"display"` VirtualMachine struct { ID int `json:"id"` URL string `json:"url"` Display string `json:"display"` Name string `json:"name"` } `json:"virtual_machine"` Name string `json:"name"` } `json:"bridge"` MTU int `json:"mtu"` MACAddress string `json:"mac_address"` Description string `json:"description"` Mode struct { Label string `json:"label"` Value string `json:"value"` } `json:"mode"` UntaggedVLAN struct { ID int `json:"id"` URL string `json:"url"` Display string `json:"display"` Vid int `json:"vid"` Name string `json:"name"` } `json:"untagged_vlan"` TaggedVLANs []struct { ID int `json:"id"` URL string `json:"url"` Display string `json:"display"` Vid int `json:"vid"` Name string `json:"name"` } `json:"tagged_vlans"` Tags []struct { ID int `json:"id"` URL string `json:"url"` Display string `json:"display"` Name string `json:"name"` Slug string `json:"slug"` Color string `json:"color"` } `json:"tags"` CustomFields interface{} `json:"custom_fields"` Created string `json:"created"` LastUpdated time.Time `json:"last_updated"` CountIPAddresses int `json:"count_ipaddresses"` CountFHRPGroups int `json:"count_fhrp_groups"` } // VirtualizationInterfaceFilter is used to filter out virtualization interfaces type VirtualizationInterfaceFilter struct { // User specific filters ID string `schema:"id,omitempty"` Name string `schema:"name,omitempty"` ConnectionStatus string `schema:"connection_status,omitempty"` Type string `schema:"type,omitempty"` MTU string `schema:"mtu,omitempty"` MGMTOnly string `schema:"mgmt_only,omitempty"` Mode string `schema:"mode,omitempty"` Description string `schema:"description,omitempty"` Q string `schema:"q,omitempty"` VirtualMachine string `schema:"device,omitempty"` ClusterID string `schema:"cluster_id,omitempty"` VirtualMachineID string `schema:"virtual_machine_id,omitempty"` Cabled string `schema:"cabled,omitempty"` Kind string `schema:"kind,omitempty"` LagID string `schema:"lag_id,omitempty"` MACAddress string `schema:"mac_address,omitempty"` Tag string `schema:"tag,omitempty"` VLANID string `schema:"vlan_id,omitempty"` VLAN string `schema:"vlan,omitempty"` ParentID string `schema:"parent_id,omitempty"` BridgeID string `schema:"bridge_id,omitempty"` Offset int64 `schema:"offset,omitempty"` Limit int64 `schema:"limit,omitempty"` } const virtualizationInterfacesPath = virtualizationPath + "/interfaces" // List devices. DeviceFilter is used to list based on filter queries. func (s *VirtualizationInterfacesService) List(ctx context.Context, f *VirtualizationInterfaceFilter) (*VirtualizationInterfaces, error) { var interfaces VirtualizationInterfaces 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 &interfaces, err } query = form.Encode() req, err = s.client.newRequest(ctx, "GET", interfacesPath, query, nil) if err != nil { return &interfaces, err } _, err = s.client.do(req, &interfaces) if err != nil { return &interfaces, err } return &interfaces, nil } // Create a interfaces func (s *VirtualizationInterfacesService) Create(ctx context.Context, c *NewVirtualizationInterface) (*VirtualizationInterface, error) { var err error var req *http.Request var nic VirtualizationInterface req, err = s.client.newRequest(ctx, "POST", interfacesPath, "", c) if err != nil { return &nic, fmt.Errorf("unable to create request: %w", err) } _, err = s.client.do(req, &nic) if err != nil { return &nic, fmt.Errorf("unable to do request: %w", err) } return &nic, nil } // Delete a interface func (s *VirtualizationInterfacesService) Delete(ctx context.Context, i string) error { var err error var req *http.Request req, err = s.client.newRequest(ctx, "DELETE", virtualizationInterfacesPath+"/"+i+"/", "", nil) 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 }