github.com/sacloud/iaas-api-go@v1.12.0/internal/define/internet.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  	internetAPIName     = "Internet"
    29  	internetAPIPathName = "internet"
    30  )
    31  
    32  var internetAPI = &dsl.Resource{
    33  	Name:       internetAPIName,
    34  	PathName:   internetAPIPathName,
    35  	PathSuffix: dsl.CloudAPISuffix,
    36  	Operations: dsl.Operations{
    37  		// find
    38  		ops.Find(internetAPIName, internetNakedType, findParameter, internetView),
    39  
    40  		// create
    41  		ops.Create(internetAPIName, internetNakedType, internetCreateParam, internetView),
    42  
    43  		// read
    44  		ops.Read(internetAPIName, internetNakedType, internetView),
    45  
    46  		// update
    47  		ops.Update(internetAPIName, internetNakedType, internetUpdateParam, internetView),
    48  
    49  		// delete
    50  		ops.Delete(internetAPIName),
    51  
    52  		// UpdateBandWidth
    53  		{
    54  			ResourceName: internetAPIName,
    55  			Name:         "UpdateBandWidth",
    56  			PathFormat:   dsl.IDAndSuffixPathFormat("bandwidth"),
    57  			Method:       http.MethodPut,
    58  			RequestEnvelope: dsl.RequestEnvelope(
    59  				&dsl.EnvelopePayloadDesc{
    60  					Type: internetNakedType,
    61  					Name: "Internet",
    62  				},
    63  			),
    64  			Arguments: dsl.Arguments{
    65  				dsl.ArgumentID,
    66  				dsl.MappableArgument("param", internetUpdateBandWidthParam, "Internet"),
    67  			},
    68  			ResponseEnvelope: dsl.ResponseEnvelope(&dsl.EnvelopePayloadDesc{
    69  				Type: internetNakedType,
    70  				Name: "Internet",
    71  			}),
    72  			Results: dsl.Results{
    73  				{
    74  					SourceField: "Internet",
    75  					DestField:   "Internet",
    76  					IsPlural:    false,
    77  					Model:       internetView,
    78  				},
    79  			},
    80  		},
    81  
    82  		// AddSubnet
    83  		{
    84  			ResourceName:    internetAPIName,
    85  			Name:            "AddSubnet",
    86  			PathFormat:      dsl.IDAndSuffixPathFormat("subnet"),
    87  			Method:          http.MethodPost,
    88  			RequestEnvelope: dsl.RequestEnvelopeFromModel(internetAddSubnetParam),
    89  			Arguments: dsl.Arguments{
    90  				dsl.ArgumentID,
    91  				dsl.PassthroughModelArgument("param", internetAddSubnetParam),
    92  			},
    93  			ResponseEnvelope: dsl.ResponseEnvelope(&dsl.EnvelopePayloadDesc{
    94  				Type: meta.Static(naked.Subnet{}),
    95  				Name: "Subnet",
    96  			}),
    97  			Results: dsl.Results{
    98  				{
    99  					SourceField: "Subnet",
   100  					DestField:   "Subnet",
   101  					IsPlural:    false,
   102  					Model:       models.internetSubnetOperationResult(),
   103  				},
   104  			},
   105  		},
   106  
   107  		// UpdateSubnet
   108  		{
   109  			ResourceName:    internetAPIName,
   110  			Name:            "UpdateSubnet",
   111  			PathFormat:      dsl.IDAndSuffixPathFormat("subnet/{{.subnetID}}"),
   112  			Method:          http.MethodPut,
   113  			RequestEnvelope: dsl.RequestEnvelopeFromModel(internetUpdateSubnetParam),
   114  			Arguments: dsl.Arguments{
   115  				dsl.ArgumentID,
   116  				{
   117  					Name: "subnetID",
   118  					Type: meta.TypeID,
   119  				},
   120  				dsl.PassthroughModelArgument("param", internetUpdateSubnetParam),
   121  			},
   122  			ResponseEnvelope: dsl.ResponseEnvelope(&dsl.EnvelopePayloadDesc{
   123  				Type: meta.Static(naked.Subnet{}),
   124  				Name: "Subnet",
   125  			}),
   126  			Results: dsl.Results{
   127  				{
   128  					SourceField: "Subnet",
   129  					DestField:   "Subnet",
   130  					IsPlural:    false,
   131  					Model:       models.internetSubnetOperationResult(),
   132  				},
   133  			},
   134  		},
   135  
   136  		// DeleteSubnet
   137  		ops.WithIDAction(internetAPIName, "DeleteSubnet", http.MethodDelete, "subnet/{{.subnetID}}",
   138  			&dsl.Argument{
   139  				Name: "subnetID",
   140  				Type: meta.TypeID,
   141  			},
   142  		),
   143  
   144  		// monitor
   145  		ops.Monitor(internetAPIName, monitorParameter, monitors.routerModel()),
   146  		ops.MonitorChild(internetAPIName, "Router", "", monitorParameter, monitors.routerModel()),
   147  
   148  		// ipv6
   149  		{
   150  			ResourceName: internetAPIName,
   151  			Name:         "EnableIPv6",
   152  			PathFormat:   dsl.IDAndSuffixPathFormat("ipv6net"),
   153  			Method:       http.MethodPost,
   154  			Arguments: dsl.Arguments{
   155  				dsl.ArgumentID,
   156  			},
   157  			ResponseEnvelope: dsl.ResponseEnvelope(&dsl.EnvelopePayloadDesc{
   158  				Type: ipv6netNakedType,
   159  				Name: ipv6netAPIName,
   160  			}),
   161  			Results: dsl.Results{
   162  				{
   163  					SourceField: ipv6netAPIName,
   164  					DestField:   ipv6netAPIName,
   165  					IsPlural:    false,
   166  					Model:       models.switchIPv6NetModel(),
   167  				},
   168  			},
   169  		},
   170  
   171  		ops.WithIDAction(internetAPIName, "DisableIPv6", http.MethodDelete, "ipv6net/{{.ipv6netID}}",
   172  			&dsl.Argument{
   173  				Name: "ipv6netID",
   174  				Type: meta.TypeID,
   175  			},
   176  		),
   177  	},
   178  }
   179  
   180  var (
   181  	internetNakedType = meta.Static(naked.Internet{})
   182  
   183  	internetView = models.internetModel()
   184  
   185  	internetCreateParam = &dsl.Model{
   186  		Name:      names.CreateParameterName(internetAPIName),
   187  		NakedType: internetNakedType,
   188  		Fields: []*dsl.FieldDesc{
   189  			fields.Name(),
   190  			fields.Description(),
   191  			fields.Tags(),
   192  			fields.IconID(),
   193  			fields.NetworkMaskLen(),
   194  			fields.BandWidthMbps(),
   195  		},
   196  	}
   197  
   198  	internetUpdateParam = &dsl.Model{
   199  		Name:      names.UpdateParameterName(internetAPIName),
   200  		NakedType: internetNakedType,
   201  		Fields: []*dsl.FieldDesc{
   202  			fields.Name(),
   203  			fields.Description(),
   204  			fields.Tags(),
   205  			fields.IconID(),
   206  		},
   207  	}
   208  
   209  	internetUpdateBandWidthParam = &dsl.Model{
   210  		Name:      "InternetUpdateBandWidthRequest",
   211  		NakedType: internetNakedType,
   212  		Fields: []*dsl.FieldDesc{
   213  			fields.BandWidthMbps(),
   214  		},
   215  	}
   216  
   217  	internetAddSubnetParam = &dsl.Model{
   218  		Name:      "InternetAddSubnetRequest",
   219  		NakedType: meta.Static(naked.SubnetOperationRequest{}),
   220  		Fields: []*dsl.FieldDesc{
   221  			fields.NetworkMaskLen(),
   222  			fields.NextHop(),
   223  		},
   224  	}
   225  	internetUpdateSubnetParam = &dsl.Model{
   226  		Name:      "InternetUpdateSubnetRequest",
   227  		NakedType: meta.Static(naked.SubnetOperationRequest{}),
   228  		Fields: []*dsl.FieldDesc{
   229  			fields.NextHop(),
   230  		},
   231  	}
   232  )