package dcxSwitchapi import ( "encoding/json" "fmt" ) type ( SwitchApiVlans struct { Items []*SwitchApiVlan `json:"items"` Links map[string]*SwitchApiLink `json:"links"` } SwitchApiVlan struct { Id int `json:"id"` Name string `json:"name"` MACAddrs []*VlanMACData `json:"mac_addresses"` IntIds []int `json:"interface_ids"` Links map[string]*SwitchApiLink `json:"links"` } VlanMACData struct { Address string `json:"address"` IntId int `json:"interface_id"` Status string `json:"status"` } ) // SwitchVlans will return inf on all vlans from the target switch func (s *Client) SwitchVlans(swName string) (*SwitchApiVlans, error) { body, err := s.get(swName + "/vlans") if err != nil { return nil, err } var vl SwitchApiVlans if err = json.Unmarshal(*body, &vl); err != nil { return nil, err } return &vl, nil } // SwitchVlan will return info on a single vlan from the target switch func (s *Client) SwitchVlan(swName string, vlan int) (*SwitchApiVlan, error) { body, err := s.get(fmt.Sprintf("%s/vlans/%d", swName, vlan)) if err != nil { return nil, err } var vl SwitchApiVlan if err = json.Unmarshal(*body, &vl); err != nil { return nil, err } return &vl, nil } // CreateVlan will create a vlan on the target switch func (c *Client) CreateVlan(swName string, vlan int, vlanName string) error { payload := make([]byte, 0) var err error if vlanName != "" { type req struct { Name string `json:"name"` } r := req{Name: vlanName} payload, err = json.Marshal(&r) if err != nil { return err } } _, err = c.put(fmt.Sprintf("%s/vlans/%d", swName, vlan), payload) return err }