forked from TrueCloudLab/lego
202 lines
5.9 KiB
Go
202 lines
5.9 KiB
Go
package sacloud
|
|
|
|
import "fmt"
|
|
|
|
// Disk ディスク
|
|
type Disk struct {
|
|
*Resource // ID
|
|
propAvailability // 有功状態
|
|
propName // 名称
|
|
propDescription // 説明
|
|
propSizeMB // サイズ(MB単位)
|
|
propMigratedMB // コピー済みデータサイズ(MB単位)
|
|
propCopySource // コピー元情報
|
|
propJobStatus // マイグレーションジョブステータス
|
|
propBundleInfo // バンドル情報
|
|
propServer // サーバー
|
|
propIcon // アイコン
|
|
propTags // タグ
|
|
propCreatedAt // 作成日時
|
|
propPlanID // プランID
|
|
propDiskConnection // ディスク接続情報
|
|
propDistantFrom // ストレージ隔離対象ディスク
|
|
|
|
ReinstallCount int `json:",omitempty"` // 再インストール回数
|
|
|
|
Storage struct { // ストレージ
|
|
*Resource // ID
|
|
Name string `json:",omitempty"` // 名称
|
|
DiskPlan ProductDisk `json:",ommitempty"` // ディスクプラン
|
|
MountIndex int64 `json:",omitempty"` // マウント順
|
|
Class string `json:",omitempty"` // クラス
|
|
}
|
|
}
|
|
|
|
// DiskPlanID ディスクプランID
|
|
type DiskPlanID int64
|
|
|
|
const (
|
|
// DiskPlanHDDID HDDプランID
|
|
DiskPlanHDDID = DiskPlanID(2)
|
|
// DiskPlanSSDID SSDプランID
|
|
DiskPlanSSDID = DiskPlanID(4)
|
|
// DiskConnectionVirtio 準仮想化モード(virtio)
|
|
DiskConnectionVirtio EDiskConnection = "virtio"
|
|
// DiskConnectionIDE IDE
|
|
DiskConnectionIDE EDiskConnection = "ide"
|
|
)
|
|
|
|
var (
|
|
// DiskPlanHDD HDDプラン
|
|
DiskPlanHDD = &Resource{ID: int64(DiskPlanHDDID)}
|
|
// DiskPlanSSD SSDプラン
|
|
DiskPlanSSD = &Resource{ID: int64(DiskPlanSSDID)}
|
|
)
|
|
|
|
// ToResource ディスクプランIDからリソースへの変換
|
|
func (d DiskPlanID) ToResource() *Resource {
|
|
return &Resource{ID: int64(d)}
|
|
}
|
|
|
|
// CreateNewDisk ディスクの作成
|
|
func CreateNewDisk() *Disk {
|
|
return &Disk{
|
|
propPlanID: propPlanID{Plan: DiskPlanSSD},
|
|
propDiskConnection: propDiskConnection{Connection: DiskConnectionVirtio},
|
|
propSizeMB: propSizeMB{SizeMB: 20480},
|
|
}
|
|
}
|
|
|
|
// SetDiskPlan プラン文字列(ssd or sdd)からプラン設定
|
|
func (d *Disk) SetDiskPlan(strPlan string) {
|
|
switch strPlan {
|
|
case "ssd":
|
|
d.Plan = DiskPlanSSD
|
|
case "hdd":
|
|
d.Plan = DiskPlanHDD
|
|
default:
|
|
panic(fmt.Errorf("Invalid plan:%s", strPlan))
|
|
}
|
|
}
|
|
|
|
// SetDiskPlanToHDD HDDプラン 設定
|
|
func (d *Disk) SetDiskPlanToHDD() {
|
|
d.Plan = DiskPlanHDD
|
|
}
|
|
|
|
// SetDiskPlanToSSD SSDプラン 設定
|
|
func (d *Disk) SetDiskPlanToSSD() {
|
|
d.Plan = DiskPlanSSD
|
|
}
|
|
|
|
// DiskEditValue ディスクの修正用パラメータ
|
|
//
|
|
// 設定を行う項目のみ値をセットする。値のセットにはセッターを利用すること。
|
|
type DiskEditValue struct {
|
|
Password *string `json:",omitempty"` // パスワード
|
|
SSHKey *SSHKey `json:",omitempty"` // 公開鍵(単体)
|
|
SSHKeys []*SSHKey `json:",omitempty"` // 公開鍵(複数)
|
|
DisablePWAuth *bool `json:",omitempty"` // パスワード認証無効化フラグ
|
|
HostName *string `json:",omitempty"` // ホスト名
|
|
Notes []*Resource `json:",omitempty"` // スタートアップスクリプト
|
|
UserIPAddress *string `json:",omitempty"` // IPアドレス
|
|
UserSubnet *struct { // サブネット情報
|
|
DefaultRoute string `json:",omitempty"` // デフォルトルート
|
|
NetworkMaskLen string `json:",omitempty"` // ネットワークマスク長
|
|
} `json:",omitempty"`
|
|
}
|
|
|
|
// SetHostName ホスト名 設定
|
|
func (d *DiskEditValue) SetHostName(value string) {
|
|
d.HostName = &value
|
|
}
|
|
|
|
// SetPassword パスワード 設定
|
|
func (d *DiskEditValue) SetPassword(value string) {
|
|
d.Password = &value
|
|
}
|
|
|
|
// AddSSHKeys 公開鍵 設定
|
|
func (d *DiskEditValue) AddSSHKeys(keyID string) {
|
|
if d.SSHKeys == nil {
|
|
d.SSHKeys = []*SSHKey{}
|
|
}
|
|
d.SSHKeys = append(d.SSHKeys, &SSHKey{Resource: NewResourceByStringID(keyID)})
|
|
}
|
|
|
|
// SetSSHKeys 公開鍵 設定
|
|
func (d *DiskEditValue) SetSSHKeys(keyIDs []string) {
|
|
if d.SSHKeys == nil {
|
|
d.SSHKeys = []*SSHKey{}
|
|
}
|
|
for _, keyID := range keyIDs {
|
|
d.SSHKeys = append(d.SSHKeys, &SSHKey{Resource: NewResourceByStringID(keyID)})
|
|
}
|
|
}
|
|
|
|
// AddSSHKeyByString 公開鍵(文字列) 追加
|
|
func (d *DiskEditValue) AddSSHKeyByString(key string) {
|
|
if d.SSHKeys == nil {
|
|
d.SSHKeys = []*SSHKey{}
|
|
}
|
|
d.SSHKeys = append(d.SSHKeys, &SSHKey{PublicKey: key})
|
|
}
|
|
|
|
// SetSSHKeyByString 公開鍵(文字列) 設定
|
|
func (d *DiskEditValue) SetSSHKeyByString(keys []string) {
|
|
if d.SSHKeys == nil {
|
|
d.SSHKeys = []*SSHKey{}
|
|
}
|
|
for _, key := range keys {
|
|
d.SSHKeys = append(d.SSHKeys, &SSHKey{PublicKey: key})
|
|
}
|
|
}
|
|
|
|
// SetDisablePWAuth パスワード認証無効化フラグ 設定
|
|
func (d *DiskEditValue) SetDisablePWAuth(disable bool) {
|
|
d.DisablePWAuth = &disable
|
|
}
|
|
|
|
// SetNotes スタートアップスクリプト 設定
|
|
func (d *DiskEditValue) SetNotes(noteIDs []string) {
|
|
d.Notes = []*Resource{}
|
|
for _, noteID := range noteIDs {
|
|
d.Notes = append(d.Notes, NewResourceByStringID(noteID))
|
|
}
|
|
|
|
}
|
|
|
|
// AddNote スタートアップスクリプト 追加
|
|
func (d *DiskEditValue) AddNote(noteID string) {
|
|
if d.Notes == nil {
|
|
d.Notes = []*Resource{}
|
|
}
|
|
d.Notes = append(d.Notes, NewResourceByStringID(noteID))
|
|
}
|
|
|
|
// SetUserIPAddress IPアドレス 設定
|
|
func (d *DiskEditValue) SetUserIPAddress(ip string) {
|
|
d.UserIPAddress = &ip
|
|
}
|
|
|
|
// SetDefaultRoute デフォルトルート 設定
|
|
func (d *DiskEditValue) SetDefaultRoute(route string) {
|
|
if d.UserSubnet == nil {
|
|
d.UserSubnet = &struct {
|
|
DefaultRoute string `json:",omitempty"`
|
|
NetworkMaskLen string `json:",omitempty"`
|
|
}{}
|
|
}
|
|
d.UserSubnet.DefaultRoute = route
|
|
}
|
|
|
|
// SetNetworkMaskLen ネットワークマスク長 設定
|
|
func (d *DiskEditValue) SetNetworkMaskLen(length string) {
|
|
if d.UserSubnet == nil {
|
|
d.UserSubnet = &struct {
|
|
DefaultRoute string `json:",omitempty"`
|
|
NetworkMaskLen string `json:",omitempty"`
|
|
}{}
|
|
}
|
|
d.UserSubnet.NetworkMaskLen = length
|
|
}
|