github.com/sacloud/iaas-api-go@v1.12.0/naked/local_router.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 naked 16 17 import ( 18 "encoding/json" 19 "fmt" 20 "time" 21 22 "github.com/sacloud/iaas-api-go/types" 23 ) 24 25 // LocalRouter ローカルルータ 26 type LocalRouter struct { 27 ID types.ID `json:",omitempty" yaml:"id,omitempty" structs:",omitempty"` 28 Name string `json:",omitempty" yaml:"name,omitempty" structs:",omitempty"` 29 Description string `yaml:"description"` 30 Tags types.Tags `yaml:"tags"` 31 Icon *Icon `json:",omitempty" yaml:"icon,omitempty" structs:",omitempty"` 32 CreatedAt *time.Time `json:",omitempty" yaml:"created_at,omitempty" structs:",omitempty"` 33 ModifiedAt *time.Time `json:",omitempty" yaml:"modified_at,omitempty" structs:",omitempty"` 34 Availability types.EAvailability `json:",omitempty" yaml:"availability,omitempty" structs:",omitempty"` 35 Provider *Provider `json:",omitempty" yaml:"provider,omitempty" structs:",omitempty"` 36 Settings *LocalRouterSettings `json:",omitempty" yaml:"settings,omitempty" structs:",omitempty"` 37 SettingsHash string `json:",omitempty" yaml:"settings_hash,omitempty" structs:",omitempty"` 38 Status *LocalRouterStatus `json:",omitempty" yaml:"status" structs:",omitempty"` 39 ServiceClass string `json:",omitempty" yaml:"service_class,omitempty" structs:",omitempty"` 40 } 41 42 // LocalRouterSettings セッティング 43 type LocalRouterSettings struct { 44 LocalRouter *LocalRouterSetting `json:",omitempty" yaml:"local_router,omitempty" structs:",omitempty"` 45 } 46 47 // LocalRouterSettingsUpdate ローカルルータ セッティング更新 48 type LocalRouterSettingsUpdate struct { 49 Settings *LocalRouterSettings `json:",omitempty" yaml:"settings,omitempty" structs:",omitempty"` 50 SettingsHash string `json:",omitempty" yaml:"settings_hash,omitempty" structs:",omitempty"` 51 } 52 53 // LocalRouterSetting セッティング 54 type LocalRouterSetting struct { 55 Switch *LocalRouterSettingSwitch `yaml:"switch"` 56 Interface *LocalRouterSettingInterface `yaml:"interface"` 57 Peers []*LocalRouterSettingPeer `yaml:"peers"` 58 StaticRoutes []*LocalRouterSettingStaticRoute `yaml:"static_routes"` 59 } 60 61 // LocalRouterSettingSwitch ローカルルータのスイッチ設定 62 type LocalRouterSettingSwitch struct { 63 Code string `json:",omitempty" yaml:",omitempty" structs:",omitempty"` // リソースIDなど 64 Category string `json:",omitempty" yaml:",omitempty" structs:",omitempty"` // cloud/vps/専用サーバなどを表す 65 ZoneID string `json:",omitempty" yaml:",omitempty" structs:",omitempty"` // クラウドの場合is1aなど Note: VPSの場合は数値型となる 66 } 67 68 // UnmarshalJSON ZoneIDに数値/文字列が混在する問題への対応 69 func (l *LocalRouterSettingSwitch) UnmarshalJSON(b []byte) error { 70 type alias struct { 71 Code string `json:",omitempty" yaml:",omitempty" structs:",omitempty"` // リソースIDなど 72 Category string `json:",omitempty" yaml:",omitempty" structs:",omitempty"` // cloud/vps/専用サーバなどを表す 73 ZoneID interface{} `json:",omitempty" yaml:",omitempty" structs:",omitempty"` // クラウドの場合is1aなど Note: VPSの場合は数値型となる 74 } 75 76 var a alias 77 if err := json.Unmarshal(b, &a); err != nil { 78 return err 79 } 80 zoneID := "" 81 switch v := a.ZoneID.(type) { 82 case string: 83 zoneID = v 84 case int, int8, int16, int32, int64: 85 zoneID = fmt.Sprintf("%d", v) 86 case float32, float64: 87 zoneID = fmt.Sprintf("%d", int(v.(float64))) 88 } 89 90 *l = LocalRouterSettingSwitch{ 91 Code: a.Code, 92 Category: a.Category, 93 ZoneID: zoneID, 94 } 95 return nil 96 } 97 98 // LocalRouterSettingInterface インターフェース設定 99 type LocalRouterSettingInterface struct { 100 VirtualIPAddress string `json:",omitempty" yaml:",omitempty" structs:",omitempty"` 101 IPAddress []string `json:",omitempty" yaml:",omitempty" structs:",omitempty"` 102 NetworkMaskLen int `json:",omitempty" yaml:",omitempty" structs:",omitempty"` 103 VRID int `json:",omitempty" yaml:",omitempty" structs:",omitempty"` 104 } 105 106 // LocalRouterSettingPeer ピア設定 107 type LocalRouterSettingPeer struct { 108 ID string `yaml:"id"` // 文字列でないとエラーになるためtypes.IDではなくstringとする 109 SecretKey string `yaml:"secret_key"` 110 Enabled bool `yaml:"enabled"` 111 Description string `yaml:"description"` 112 } 113 114 // LocalRouterSettingStaticRoute スタティックルート 115 type LocalRouterSettingStaticRoute struct { 116 Prefix string `yaml:"prefix"` 117 NextHop string `yaml:"next_hop"` 118 } 119 120 // LocalRouterStatus ステータス 121 type LocalRouterStatus struct { 122 SecretKeys []string `json:",omitempty" yaml:",omitempty" structs:",omitempty"` 123 } 124 125 // LocalRouterHealth ローカルルータのヘルスチェック結果 126 type LocalRouterHealth struct { 127 Peers []*struct { 128 ID types.ID 129 Status types.EServerInstanceStatus 130 Routes []string 131 } `yaml:"peers"` 132 }