github.com/sacloud/iaas-api-go@v1.12.0/naked/appliance.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 20 "github.com/sacloud/iaas-api-go/types" 21 ) 22 23 // ApplianceRemark アプライアンスの設定/ステータスなど 24 // 25 // Appliance.Remarkを表現する 26 type ApplianceRemark struct { 27 Zone *ApplianceRemarkZone `json:",omitempty" yaml:"zone,omitempty" structs:",omitempty"` 28 Switch *ApplianceRemarkSwitch `json:",omitempty" yaml:"switch,omitempty" structs:",omitempty"` 29 VRRP *ApplianceVRRP `json:",omitempty" yaml:"vrrp,omitempty" structs:",omitempty"` 30 Network *ApplianceRemarkNetwork `json:",omitempty" yaml:"network,omitempty" structs:",omitempty"` 31 Servers ApplianceRemarkServers `yaml:"servers"` 32 Plan *AppliancePlan `json:",omitempty" yaml:"plan,omitempty" structs:",omitempty"` 33 DBConf *ApplianceRemarkDBConf `json:",omitempty" yaml:"db_conf,omitempty" structs:",omitempty"` // for database 34 SourceAppliance *ApplianceSource `json:",omitempty" yaml:"db_conf,omitempty" structs:",omitempty"` // for database 35 MobileGateway *ApplianceRemarkMobileGateway `json:",omitempty" yaml:"mobile_gateway,omitempty" structs:",omitempty"` // for mobile gateway 36 Router *ApplianceRemarkRouter `json:",omitempty" yaml:"router,omitempty" structs:",omitempty"` // for vpc router 37 } 38 39 // ApplianceRemarkMobileGateway モバイルゲートウェイのグローバルIP 40 type ApplianceRemarkMobileGateway struct { 41 GlobalAddress string 42 } 43 44 // ApplianceRemarkRouter VPCルータのバージョンなど 45 type ApplianceRemarkRouter struct { 46 VPCRouterVersion int `json:",omitempty" yaml:"vpc_router_version,omitempty" structs:",omitempty"` 47 } 48 49 // ApplianceSource クローン元アプライアンス データベースのクローン時に利用 50 type ApplianceSource struct { 51 ID types.ID `json:",omitempty" yaml:"id,omitempty" structs:",omitempty"` 52 } 53 54 // UnmarshalJSON 配列/オブジェクトが混在することへの対応 55 func (s *ApplianceSource) UnmarshalJSON(b []byte) error { 56 if string(b) == "[]" { 57 return nil 58 } 59 type alias ApplianceSource 60 61 var a alias 62 if err := json.Unmarshal(b, &a); err != nil { 63 return err 64 } 65 *s = ApplianceSource(a) 66 return nil 67 } 68 69 // AppliancePlan アプライアンスプラン 70 type AppliancePlan struct { 71 ID types.ID `json:",omitempty" yaml:"id,omitempty" structs:",omitempty"` 72 } 73 74 // ApplianceVRRP アプライアンスのVRRPの設定 75 type ApplianceVRRP struct { 76 VRID int `json:",omitempty" yaml:"vrid,omitempty" structs:",omitempty"` 77 } 78 79 // ApplianceRemarkNetwork Appliance ネットワーク設定 80 type ApplianceRemarkNetwork struct { 81 DefaultRoute string `json:",omitempty" yaml:"default_route,omitempty" structs:",omitempty"` 82 NetworkMaskLen int `json:",omitempty" yaml:"network_mask_len,omitempty" structs:",omitempty"` 83 } 84 85 // ApplianceRemarkServers Applianceの稼働している仮想サーバのIPアドレス 86 type ApplianceRemarkServers []*ApplianceRemarkServer 87 88 // ApplianceRemarkServer Applianceの稼働している仮想サーバのIPアドレス 89 type ApplianceRemarkServer struct { 90 IPAddress string `json:",omitempty" yaml:"ip_address,omitempty" structs:",omitempty"` 91 } 92 93 // ApplianceRemarkSwitch Applianceに接続されているスイッチのID 94 type ApplianceRemarkSwitch struct { 95 ID types.ID `json:",omitempty" yaml:"id,omitempty" structs:",omitempty"` 96 Scope types.EScope `json:",omitempty" yaml:"scope,omitempty" structs:",omitempty"` 97 } 98 99 // ApplianceRemarkZone Applianceの属するゾーンのID 100 type ApplianceRemarkZone struct { 101 ID types.ID `json:",omitempty" yaml:"id,omitempty" structs:",omitempty"` 102 } 103 104 // UnmarshalJSON 配列/オブジェクトが混在することへの対応 105 func (s *ApplianceRemarkNetwork) UnmarshalJSON(b []byte) error { 106 if string(b) == "[]" { 107 return nil 108 } 109 type alias ApplianceRemarkNetwork 110 111 var a alias 112 if err := json.Unmarshal(b, &a); err != nil { 113 return err 114 } 115 *s = ApplianceRemarkNetwork(a) 116 return nil 117 } 118 119 // UnmarshalJSON 配列/オブジェクトが混在することへの対応 120 func (s *ApplianceRemarkServer) UnmarshalJSON(b []byte) error { 121 if string(b) == "[]" { 122 return nil 123 } 124 type alias ApplianceRemarkServer 125 126 var a alias 127 if err := json.Unmarshal(b, &a); err != nil { 128 return err 129 } 130 *s = ApplianceRemarkServer(a) 131 return nil 132 } 133 134 // UnmarshalJSON 配列/オブジェクトが混在することへの対応 135 func (s *ApplianceRemarkServers) UnmarshalJSON(b []byte) error { 136 if string(b) == "[[]]" { 137 return nil 138 } 139 if string(b) == `[""]` { 140 return nil 141 } 142 type alias ApplianceRemarkServers 143 144 var a alias 145 if err := json.Unmarshal(b, &a); err != nil { 146 return err 147 } 148 *s = ApplianceRemarkServers(a) 149 return nil 150 } 151 152 // MarshalJSON APIの要求するJSONフォーマットへの変換 153 // 154 // 値がからの場合に配列、かつ内部に空オブジェクトを指定する。(主にVPCルータへの対応) 155 func (s *ApplianceRemarkServers) MarshalJSON() ([]byte, error) { 156 if s == nil || len(*s) == 0 { 157 return []byte("[{}]"), nil 158 } 159 160 type alias ApplianceRemarkServers 161 162 a := alias(*s) 163 return json.Marshal(a) 164 } 165 166 // ApplianceRemarkDBConf データベース設定 167 type ApplianceRemarkDBConf struct { 168 Common *ApplianceRemarkDBConfCommon `json:",omitempty" yaml:"common,omitempty" structs:",omitempty"` 169 } 170 171 // ApplianceRemarkDBConfCommon データベース設定 172 type ApplianceRemarkDBConfCommon struct { 173 DatabaseName string `json:",omitempty" yaml:"database_name,omitempty" structs:",omitempty"` 174 DatabaseVersion string `json:",omitempty" yaml:"database_version,omitempty" structs:",omitempty"` 175 DatabaseRevision string `json:",omitempty" yaml:"database_revision,omitempty" structs:",omitempty"` 176 DefaultUser string `json:",omitempty" yaml:"default_user,omitempty" structs:",omitempty"` 177 UserPassword string `json:",omitempty" yaml:"user_password,omitempty" structs:",omitempty"` 178 }