github.com/sacloud/iaas-api-go@v1.12.0/internal/define/interface.go (about) 1 // Copyright 2022-2023 The sacloud/iaas-api-go Authors 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package define 16 17 import ( 18 "net/http" 19 20 "github.com/sacloud/iaas-api-go/internal/define/names" 21 "github.com/sacloud/iaas-api-go/internal/define/ops" 22 "github.com/sacloud/iaas-api-go/internal/dsl" 23 "github.com/sacloud/iaas-api-go/internal/dsl/meta" 24 "github.com/sacloud/iaas-api-go/naked" 25 ) 26 27 const ( 28 interfaceAPIName = "Interface" 29 interfaceAPIPathName = "interface" 30 ) 31 32 var interfaceAPI = &dsl.Resource{ 33 Name: interfaceAPIName, 34 PathName: interfaceAPIPathName, 35 PathSuffix: dsl.CloudAPISuffix, 36 Operations: dsl.Operations{ 37 // find 38 ops.Find(interfaceAPIName, interfaceNakedType, findParameter, interfaceView), 39 40 // create 41 ops.Create(interfaceAPIName, interfaceNakedType, interfaceCreateParam, interfaceView), 42 43 // read 44 ops.Read(interfaceAPIName, interfaceNakedType, interfaceView), 45 46 // update 47 ops.Update(interfaceAPIName, interfaceNakedType, interfaceUpdateParam, interfaceView), 48 49 // delete 50 ops.Delete(interfaceAPIName), 51 52 // monitor 53 ops.Monitor(interfaceAPIName, monitorParameter, monitors.interfaceModel()), 54 55 ops.WithIDAction(interfaceAPIName, "ConnectToSharedSegment", http.MethodPut, "to/switch/shared"), 56 57 ops.WithIDAction(interfaceAPIName, "ConnectToSwitch", http.MethodPut, "to/switch/{{.switchID}}", 58 &dsl.Argument{ 59 Name: "switchID", 60 Type: meta.TypeID, 61 }, 62 ), 63 64 ops.WithIDAction(interfaceAPIName, "DisconnectFromSwitch", http.MethodDelete, "to/switch"), 65 66 ops.WithIDAction(interfaceAPIName, "ConnectToPacketFilter", http.MethodPut, "to/packetfilter/{{.packetFilterID}}", 67 &dsl.Argument{ 68 Name: "packetFilterID", 69 Type: meta.TypeID, 70 }, 71 ), 72 73 ops.WithIDAction(interfaceAPIName, "DisconnectFromPacketFilter", http.MethodDelete, "to/packetfilter"), 74 }, 75 } 76 var ( 77 interfaceNakedType = meta.Static(naked.Interface{}) 78 79 interfaceView = &dsl.Model{ 80 Name: interfaceAPIName, 81 NakedType: interfaceNakedType, 82 Fields: []*dsl.FieldDesc{ 83 fields.ID(), 84 fields.MACAddress(), 85 fields.IPAddress(), 86 fields.UserIPAddress(), 87 fields.HostName(), 88 fields.SwitchID(), 89 fields.SwitchScope(), 90 fields.PacketFilterID(), 91 fields.ServerID(), 92 fields.CreatedAt(), 93 }, 94 } 95 96 interfaceCreateParam = &dsl.Model{ 97 Name: names.CreateParameterName(interfaceAPIName), 98 NakedType: interfaceNakedType, 99 Fields: []*dsl.FieldDesc{ 100 fields.ServerID(), 101 }, 102 } 103 104 interfaceUpdateParam = &dsl.Model{ 105 Name: names.UpdateParameterName(interfaceAPIName), 106 NakedType: interfaceNakedType, 107 Fields: []*dsl.FieldDesc{ 108 fields.UserIPAddress(), 109 }, 110 } 111 )