diff --git a/cloudstack/VLANService.go b/cloudstack/VLANService.go index b85bb623..eed2c18f 100644 --- a/cloudstack/VLANService.go +++ b/cloudstack/VLANService.go @@ -44,6 +44,8 @@ type VLANServiceIface interface { NewReleaseDedicatedGuestVlanRangeParams(id string) *ReleaseDedicatedGuestVlanRangeParams ListGuestVlans(p *ListGuestVlansParams) (*ListGuestVlansResponse, error) NewListGuestVlansParams() *ListGuestVlansParams + UpdateVlanIpRange(p *UpdateVlanIpRangeParams) (*UpdateVlanIpRangeResponse, error) + NewUpdateVlanIpRangeParams(id string) *UpdateVlanIpRangeParams } type CreateVlanIpRangeParams struct { @@ -399,6 +401,10 @@ func (s *VLANService) CreateVlanIpRange(p *CreateVlanIpRangeParams) (*CreateVlan return nil, err } + if resp, err = getRawValue(resp); err != nil { + return nil, err + } + var r CreateVlanIpRangeResponse if err := json.Unmarshal(resp, &r); err != nil { return nil, err @@ -1560,3 +1566,253 @@ type GuestVlan struct { Zoneid string `json:"zoneid"` Zonename string `json:"zonename"` } + +type UpdateVlanIpRangeParams struct { + p map[string]interface{} +} + +func (p *UpdateVlanIpRangeParams) toURLValues() url.Values { + u := url.Values{} + if p.p == nil { + return u + } + if v, found := p.p["endip"]; found { + u.Set("endip", v.(string)) + } + if v, found := p.p["endipv6"]; found { + u.Set("endipv6", v.(string)) + } + if v, found := p.p["forsystemvms"]; found { + vv := strconv.FormatBool(v.(bool)) + u.Set("forsystemvms", vv) + } + if v, found := p.p["gateway"]; found { + u.Set("gateway", v.(string)) + } + if v, found := p.p["id"]; found { + u.Set("id", v.(string)) + } + if v, found := p.p["ip6cidr"]; found { + u.Set("ip6cidr", v.(string)) + } + if v, found := p.p["ip6gateway"]; found { + u.Set("ip6gateway", v.(string)) + } + if v, found := p.p["netmask"]; found { + u.Set("netmask", v.(string)) + } + if v, found := p.p["startip"]; found { + u.Set("startip", v.(string)) + } + if v, found := p.p["startipv6"]; found { + u.Set("startipv6", v.(string)) + } + return u +} + +func (p *UpdateVlanIpRangeParams) SetEndip(v string) { + if p.p == nil { + p.p = make(map[string]interface{}) + } + p.p["endip"] = v +} + +func (p *UpdateVlanIpRangeParams) GetEndip() (string, bool) { + if p.p == nil { + p.p = make(map[string]interface{}) + } + value, ok := p.p["endip"].(string) + return value, ok +} + +func (p *UpdateVlanIpRangeParams) SetEndipv6(v string) { + if p.p == nil { + p.p = make(map[string]interface{}) + } + p.p["endipv6"] = v +} + +func (p *UpdateVlanIpRangeParams) GetEndipv6() (string, bool) { + if p.p == nil { + p.p = make(map[string]interface{}) + } + value, ok := p.p["endipv6"].(string) + return value, ok +} + +func (p *UpdateVlanIpRangeParams) SetForsystemvms(v bool) { + if p.p == nil { + p.p = make(map[string]interface{}) + } + p.p["forsystemvms"] = v +} + +func (p *UpdateVlanIpRangeParams) GetForsystemvms() (bool, bool) { + if p.p == nil { + p.p = make(map[string]interface{}) + } + value, ok := p.p["forsystemvms"].(bool) + return value, ok +} + +func (p *UpdateVlanIpRangeParams) SetGateway(v string) { + if p.p == nil { + p.p = make(map[string]interface{}) + } + p.p["gateway"] = v +} + +func (p *UpdateVlanIpRangeParams) GetGateway() (string, bool) { + if p.p == nil { + p.p = make(map[string]interface{}) + } + value, ok := p.p["gateway"].(string) + return value, ok +} + +func (p *UpdateVlanIpRangeParams) SetId(v string) { + if p.p == nil { + p.p = make(map[string]interface{}) + } + p.p["id"] = v +} + +func (p *UpdateVlanIpRangeParams) GetId() (string, bool) { + if p.p == nil { + p.p = make(map[string]interface{}) + } + value, ok := p.p["id"].(string) + return value, ok +} + +func (p *UpdateVlanIpRangeParams) SetIp6cidr(v string) { + if p.p == nil { + p.p = make(map[string]interface{}) + } + p.p["ip6cidr"] = v +} + +func (p *UpdateVlanIpRangeParams) GetIp6cidr() (string, bool) { + if p.p == nil { + p.p = make(map[string]interface{}) + } + value, ok := p.p["ip6cidr"].(string) + return value, ok +} + +func (p *UpdateVlanIpRangeParams) SetIp6gateway(v string) { + if p.p == nil { + p.p = make(map[string]interface{}) + } + p.p["ip6gateway"] = v +} + +func (p *UpdateVlanIpRangeParams) GetIp6gateway() (string, bool) { + if p.p == nil { + p.p = make(map[string]interface{}) + } + value, ok := p.p["ip6gateway"].(string) + return value, ok +} + +func (p *UpdateVlanIpRangeParams) SetNetmask(v string) { + if p.p == nil { + p.p = make(map[string]interface{}) + } + p.p["netmask"] = v +} + +func (p *UpdateVlanIpRangeParams) GetNetmask() (string, bool) { + if p.p == nil { + p.p = make(map[string]interface{}) + } + value, ok := p.p["netmask"].(string) + return value, ok +} + +func (p *UpdateVlanIpRangeParams) SetStartip(v string) { + if p.p == nil { + p.p = make(map[string]interface{}) + } + p.p["startip"] = v +} + +func (p *UpdateVlanIpRangeParams) GetStartip() (string, bool) { + if p.p == nil { + p.p = make(map[string]interface{}) + } + value, ok := p.p["startip"].(string) + return value, ok +} + +func (p *UpdateVlanIpRangeParams) SetStartipv6(v string) { + if p.p == nil { + p.p = make(map[string]interface{}) + } + p.p["startipv6"] = v +} + +func (p *UpdateVlanIpRangeParams) GetStartipv6() (string, bool) { + if p.p == nil { + p.p = make(map[string]interface{}) + } + value, ok := p.p["startipv6"].(string) + return value, ok +} + +// You should always use this function to get a new UpdateVlanIpRangeParams instance, +// as then you are sure you have configured all required params +func (s *VLANService) NewUpdateVlanIpRangeParams(id string) *UpdateVlanIpRangeParams { + p := &UpdateVlanIpRangeParams{} + p.p = make(map[string]interface{}) + p.p["id"] = id + return p +} + +// Updates a VLAN IP range. +func (s *VLANService) UpdateVlanIpRange(p *UpdateVlanIpRangeParams) (*UpdateVlanIpRangeResponse, error) { + resp, err := s.cs.newRequest("updateVlanIpRange", p.toURLValues()) + if err != nil { + return nil, err + } + + if resp, err = getRawValue(resp); err != nil { + return nil, err + } + + var r UpdateVlanIpRangeResponse + if err := json.Unmarshal(resp, &r); err != nil { + return nil, err + } + + return &r, nil +} + +type UpdateVlanIpRangeResponse struct { + Account string `json:"account"` + Cidr string `json:"cidr"` + Description string `json:"description"` + Domain string `json:"domain"` + Domainid string `json:"domainid"` + Endip string `json:"endip"` + Endipv6 string `json:"endipv6"` + Forsystemvms bool `json:"forsystemvms"` + Forvirtualnetwork bool `json:"forvirtualnetwork"` + Gateway string `json:"gateway"` + Id string `json:"id"` + Ip6cidr string `json:"ip6cidr"` + Ip6gateway string `json:"ip6gateway"` + JobID string `json:"jobid"` + Jobstatus int `json:"jobstatus"` + Netmask string `json:"netmask"` + Networkid string `json:"networkid"` + Physicalnetworkid string `json:"physicalnetworkid"` + Podid string `json:"podid"` + Podname string `json:"podname"` + Project string `json:"project"` + Projectid string `json:"projectid"` + Startip string `json:"startip"` + Startipv6 string `json:"startipv6"` + Vlan string `json:"vlan"` + Zoneid string `json:"zoneid"` +} diff --git a/cloudstack/VLANService_mock.go b/cloudstack/VLANService_mock.go index 9d9697ed..1e4b6880 100644 --- a/cloudstack/VLANService_mock.go +++ b/cloudstack/VLANService_mock.go @@ -282,6 +282,20 @@ func (mr *MockVLANServiceIfaceMockRecorder) NewReleaseDedicatedGuestVlanRangePar return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewReleaseDedicatedGuestVlanRangeParams", reflect.TypeOf((*MockVLANServiceIface)(nil).NewReleaseDedicatedGuestVlanRangeParams), id) } +// NewUpdateVlanIpRangeParams mocks base method. +func (m *MockVLANServiceIface) NewUpdateVlanIpRangeParams(id string) *UpdateVlanIpRangeParams { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "NewUpdateVlanIpRangeParams", id) + ret0, _ := ret[0].(*UpdateVlanIpRangeParams) + return ret0 +} + +// NewUpdateVlanIpRangeParams indicates an expected call of NewUpdateVlanIpRangeParams. +func (mr *MockVLANServiceIfaceMockRecorder) NewUpdateVlanIpRangeParams(id interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewUpdateVlanIpRangeParams", reflect.TypeOf((*MockVLANServiceIface)(nil).NewUpdateVlanIpRangeParams), id) +} + // ReleaseDedicatedGuestVlanRange mocks base method. func (m *MockVLANServiceIface) ReleaseDedicatedGuestVlanRange(p *ReleaseDedicatedGuestVlanRangeParams) (*ReleaseDedicatedGuestVlanRangeResponse, error) { m.ctrl.T.Helper() @@ -296,3 +310,18 @@ func (mr *MockVLANServiceIfaceMockRecorder) ReleaseDedicatedGuestVlanRange(p int mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ReleaseDedicatedGuestVlanRange", reflect.TypeOf((*MockVLANServiceIface)(nil).ReleaseDedicatedGuestVlanRange), p) } + +// UpdateVlanIpRange mocks base method. +func (m *MockVLANServiceIface) UpdateVlanIpRange(p *UpdateVlanIpRangeParams) (*UpdateVlanIpRangeResponse, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UpdateVlanIpRange", p) + ret0, _ := ret[0].(*UpdateVlanIpRangeResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// UpdateVlanIpRange indicates an expected call of UpdateVlanIpRange. +func (mr *MockVLANServiceIfaceMockRecorder) UpdateVlanIpRange(p interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UpdateVlanIpRange", reflect.TypeOf((*MockVLANServiceIface)(nil).UpdateVlanIpRange), p) +} diff --git a/generate/generate.go b/generate/generate.go index 2e68df1f..0a5b09ad 100644 --- a/generate/generate.go +++ b/generate/generate.go @@ -1718,10 +1718,12 @@ func (s *service) generateNewAPICallFunc(a *API) { "CreateNetwork", "CreateStoragePool", "CreateNetworkOffering", + "CreateVlanIpRange", "UpdateNetworkOffering", "UpdateServiceOffering", "UpdateConfiguration", "UpdateCluster", + "UpdateVlanIpRange", "CreatePod", "CreateSSHKeyPair", "CreateSecurityGroup", diff --git a/generate/layout.go b/generate/layout.go index 894ba7c7..2c85187d 100644 --- a/generate/layout.go +++ b/generate/layout.go @@ -503,6 +503,7 @@ var layout = apiInfo{ "listVlanIpRanges", "releaseDedicatedGuestVlanRange", "listGuestVlans", + "updateVlanIpRange", }, "UCSService": { "addUcsManager", diff --git a/test/VLANService_test.go b/test/VLANService_test.go index bbc1c764..dec47131 100644 --- a/test/VLANService_test.go +++ b/test/VLANService_test.go @@ -125,4 +125,19 @@ func TestVLANService(t *testing.T) { } t.Run("ListGuestVlans", testlistGuestVlans) + testupdateVlanIpRange := func(t *testing.T) { + if _, ok := response["updateVlanIpRange"]; !ok { + t.Skipf("Skipping as no json response is provided in testdata") + } + p := client.VLAN.NewUpdateVlanIpRangeParams("id") + r, err := client.VLAN.UpdateVlanIpRange(p) + if err != nil { + t.Errorf(err.Error()) + } + if r.Id == "" { + t.Errorf("Failed to parse response. ID not found") + } + } + t.Run("UpdateVlanIpRange", testupdateVlanIpRange) + } diff --git a/test/testdata/VLANService.json b/test/testdata/VLANService.json index 6b373414..e366f25e 100644 --- a/test/testdata/VLANService.json +++ b/test/testdata/VLANService.json @@ -11,5 +11,67 @@ "zoneid": 1 } } + }, + "createVlanIpRange": { + "createvlaniprangeresponse": { + "vlan": { + "id": "9772c190-3ad2-4e9c-8cd0-f1b3ebfe81d7", + "forvirtualnetwork": true, + "zoneid": "5de24f07-6668-4847-bff6-4f84ffc5bd70", + "vlan": "vlan://123", + "gateway": "10.0.0.1", + "netmask": "255.255.255.0", + "cidr": "10.0.0.0/24", + "startip": "10.0.0.2", + "endip": "10.0.0.10", + "networkid": "80cb0f82-f488-4092-91c8-ffb2805c26b2", + "physicalnetworkid": "2b46a0da-5076-481e-9ecf-d7d7055480c1", + "forsystemvms": false + } + } + }, + "updateVlanIpRange": { + "updatevlaniprangeresponse": { + "vlan": { + "id": "9772c190-3ad2-4e9c-8cd0-f1b3ebfe81d7", + "forvirtualnetwork": true, + "zoneid": "5de24f07-6668-4847-bff6-4f84ffc5bd70", + "vlan": "vlan://123", + "gateway": "10.0.0.1", + "netmask": "255.255.255.0", + "cidr": "10.0.0.0/24", + "startip": "10.0.0.2", + "endip": "10.0.0.11", + "networkid": "80cb0f82-f488-4092-91c8-ffb2805c26b2", + "physicalnetworkid": "2b46a0da-5076-481e-9ecf-d7d7055480c1", + "forsystemvms": false + } + } + }, + "listVlanIpRanges": { + "listvlaniprangesresponse": { + "count": 1, + "vlaniprange": [ + { + "id": "9772c190-3ad2-4e9c-8cd0-f1b3ebfe81d7", + "forvirtualnetwork": true, + "zoneid": "5de24f07-6668-4847-bff6-4f84ffc5bd70", + "vlan": "vlan://123", + "gateway": "10.0.0.1", + "netmask": "255.255.255.0", + "cidr": "10.0.0.0/24", + "startip": "10.0.0.2", + "endip": "10.0.0.11", + "networkid": "80cb0f82-f488-4092-91c8-ffb2805c26b2", + "physicalnetworkid": "2b46a0da-5076-481e-9ecf-d7d7055480c1", + "forsystemvms": false + } + ] + } + }, + "deleteVlanIpRange": { + "deletevlaniprangeresponse":{ + "success":true + } } -} \ No newline at end of file +}