traefik/vendor/github.com/sacloud/libsacloud/sacloud/disk.go
Ludovic Fernandez 139f280f35 ACME TLS ALPN
2018-07-03 12:44:04 +02:00

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
}