lib/NIFTY/Cloud/instances.rb in nifty-cloud-sdk-1.7 vs lib/NIFTY/Cloud/instances.rb in nifty-cloud-sdk-1.8.beta1
- old
+ new
@@ -1,14 +1,15 @@
module NIFTY
module Cloud
class Base < NIFTY::Base
- INSTANCE_TYPE = ['mini', 'small', 'small2', 'small4', 'medium', 'medium4', 'medium8', 'large', 'large8', 'large16']
+ INSTANCE_TYPE = ['mini', 'small', 'small2', 'small4', 'small8', 'medium', 'medium4', 'medium8', 'medium16',
+ 'large', 'large8', 'large16', 'large24', 'large32', 'extra-large16', 'extra-large24', 'extra-large32']
ACCOUNTING_TYPE = ['1', '2']
BOOLEAN = ['true', 'false']
- IP_TYPE = ['static', 'dynamic']
+ IP_TYPE = ['static', 'dynamic', 'none']
INSTANCES_DESCRIBE_ATTRIBUTE = [
- 'instanceType', 'disableApiTermination', 'blockDeviceMapping', 'accountingType',
+ 'instanceType', 'disableApiTermination', 'blockDeviceMapping', 'accountingType', 'nextMonthAccountingType',
'loadbalancing', 'copyInfo', 'autoscaling', 'ipType', 'groupId', 'description']
INSTANCES_MODIFY_ATTRIBUTE = ['instanceType', 'disableApiTermination', 'instanceName', 'description', 'ipType', 'groupId']
INSTANCES_IGNORED_PARAMS = Regexp.union(/MinCount/,
/MaxCount/,
/AddisionalInfo/,
@@ -19,18 +20,19 @@
/RamdiskId/,
/BlockDeviceMapping.*/,
/Monitoring\.Enabled/,
/SubnetId/,
/InstanceInitiatedShutdownBehavior/)
+ WINDOWS_IMAGE_ID = ['12', '16']
# API「DescribeInstanceAttribute」を実行し、指定したサーバーの詳細情報を取得します。1回のリクエストで、指定したサーバーのどれか1つの詳細情報を取得できます。
# サーバーを指定するためには、サーバー名が必要です。削除済みのサーバーを指定した、管理外のサーバーを指定したなど、
# 無効なサーバーを指定した場合は、エラーが返されます。
#
# @option options [String] :instance_id サーバー名(必須)
# @option options [String] :attribute 取得対象の項目名
- # 許可値: instanceType | disableApiTermination | blockDeviceMapping | accountingType | loadbalancing | copyInfo | autoscaling | ipType | groupId | description
+ # 許可値: instanceType | disableApiTermination | blockDeviceMapping | accountingType | nextMonthAccountingType | loadbalancing | copyInfo | autoscaling | ipType | groupId | description
# @return [Hash] レスポンスXML解析結果
#
# @example
# describe_instance_attribute(:instance_id => 'server01', :attribute => 'instanceType')
#
@@ -73,13 +75,13 @@
# @option options [String] :attribute 更新対象の項目名(必須)
# 許可値: instanceType(サーバータイプを更新) | disableApiTermination(API からのサーバー削除可否を更新) | instanceName(サーバー名を更新) |
# description(メモ情報を更新) | ipType(IP アドレスの固定化タイプを更新) | groupId(ファイアウォールグループを更新)
#
# @option options [String] :value 更新値(必須)
- # 許可値: (:attribute= instanceType) mini | small | small2 | small4 | medium | medium4 | medium8 | large | large8 | large16
+ # 許可値: (:attribute= instanceType) mini | small | small2 | small4 | small8 | medium | medium4 | medium8 | medium16 | large | large8 | large16 | large24 | large32 | extra-large16 | extra-large24 | extra-large32
# (:attribute= disableApiTermination) true | false
- # (:attribute= ipType) static | dynamic
+ # (:attribute= ipType) static | dynamic | none
# @return [Hash] レスポンスXML解析結果
#
# @example
# modify_instance_attribute(:instance_id => 'server01', :attribute => 'instanceType', :value => 'mini')
#
@@ -106,24 +108,31 @@
# 「instanceState」で確認できます。
#
# @option options [Array<String>] :instance_id サーバー名(必須)
# @option options [Boolean] :force 強制オプション
# 許可値: true(強制実行) | false(強制実行しない)
+ # @option options [String] :user_data サーバー起動時スクリプト
+ # @option options [Boolean] :base64_encoded サーバー起動時スクリプトを自動的にBase64 エンコードするかどうか
+ # 許可値: true(base64エンコーディングする) | false(base64エンコーディングしない)
# @return [Hash] レスポンスXML解析結果
#
# @example
# reboot_instances(:instance_id => ['server01', 'server02'], :force => false)
#
def reboot_instances( options={} )
raise ArgumentError, "No :instance_id provided." if blank?(options[:instance_id])
raise ArgumentError, "Invalid :force provided." unless blank?(options[:force]) || BOOLEAN.include?(options[:force].to_s)
+ user_data = extract_user_data(options)
+ options[:user_data] = user_data
+
params = {
'Action' => 'RebootInstances',
'Force' => options[:force].to_s
}
params.merge!(pathlist('InstanceId', options[:instance_id]))
+ params.merge!(opts_to_prms(options, [:user_data]))
return response_generator(params)
end
@@ -134,22 +143,25 @@
# またファイアウォール機能を提供していない環境でファイアウォールグループを指定して実行した場合は、エラーが返されます。
#
# @option options [String] :image_id OSイメージID名(必須)
# @option options [String] :key_name SSHキー名
# @option options [Array<String>] :security_group 適用するファイアフォールグループ名
+ # @option options [String] :user_data サーバー起動時スクリプト
+ # @option options [Boolean] :base64_encoded サーバー起動時スクリプトを自動的にBase64 エンコードするかどうか
+ # 許可値: true(base64エンコーディングする) | false(base64エンコーディングしない)
# @option options [String] :instance_type サーバータイプ
- # 許可値: mini | small | small2 | small4 | medium | medium4 | medium8 | large | large8 | large16
+ # 許可値: mini | small | small2 | small4 | small8 | medium | medium4 | medium8 | medium16 | large | large8 | large16 | large24 | large32 | extra-large16 | extra-large24 | extra-large32
# @option options [Boolean] :disable_api_termination APIからのサーバー削除の可否
# 許可値: true(削除不可) | false(削除可)
# @option options [String] :accounting_type 利用料金タイプ
# 許可値: 1(月額課金) | 2(従量課金)
# @option options [String] :instance_id サーバー名
# @option options [String] :admin 管理者アカウント
# @option options [String] :password 管理者アカウントパスワード
# 許可値: 半角英数字
# @option options [String] :ip_type IPアドレスタイプ
- # 許可値: static | dynamic
+ # 許可値: static | dynamic | none
# @return [Hash] レスポンスXML解析結果
#
# @example
# run_instances(:image_id => 1, :key_name => 'foo', :security_group => ['gr1', 'gr2'], :instance_type => 'mini',
# :instance_id => 'server01', :password => 'pass', :ip_type => 'static')
@@ -160,11 +172,11 @@
raise ArgumentError, "No :image_id provided." if blank?(options[:image_id])
raise ArgumentError, "Invalid :image_id provided." unless options[:image_id].to_s.to_i > 0
raise ArgumentError, "Invalid :key_name provided." unless blank?(options[:key_name]) || ALPHANUMERIC =~ options[:key_name].to_s
#raise ArgumentError, "No :security_group provided." if blank?(options[:security_group])
raise ArgumentError, "Invalid :security_group provided." unless blank?(options[:security_group]) || GROUP_NAME =~ options[:security_group].to_s
- raise ArgumentError, "No :password provided." if options[:image_id].to_s.to_i < 10000 && blank?(options[:password])
+ raise ArgumentError, "No :password provided." if WINDOWS_IMAGE_ID.include?(options[:image_id].to_s) && blank?(options[:password])
raise ArgumentError, "Invalid :password provided." unless blank?(options[:password]) || ALPHANUMERIC =~ options[:password].to_s
raise ArgumentError, "Invalid :instance_type provided." unless blank?(options[:instance_type]) || INSTANCE_TYPE.include?(options[:instance_type].to_s)
raise ArgumentError, "Invalid :disable_api_termination provided." unless blank?(options[:disable_api_termination]) ||
BOOLEAN.include?(options[:disable_api_termination].to_s)
raise ArgumentError, "Invalid :accounting_type provided." unless blank?(options[:accounting_type]) || ACCOUNTING_TYPE.include?(options[:accounting_type].to_s)
@@ -200,12 +212,15 @@
# サーバーの起動には、時間がかかることがあります。このAPI のレスポンス「currentState.name」を確認して「pending」が返ってきた場
# 合は、API「DescribeInstances」のレスポンス値「instanceState」でサーバーのステータスを確認できます。
#
# @option options [Array<String>] :instance_id サーバー名(必須)
# @option options [Array<String>] :instance_type サーバータイプ
- # 許可値: mini | small | small2 | small4 | medium | medium4 | medium8 | large | large8 | large16
+ # 許可値: mini | small | small2 | small4 | small8 | medium | medium4 | medium8 | medium16 | large | large8 | large16 | large24 | large32 | extra-large16 | extra-large24 | extra-large32
# @option options [Array<String>] :accounting_type 利用料金タイプ
+ # @option options [String] :user_data サーバー起動時スクリプト
+ # @option options [Boolean] :base64_encoded サーバー起動時スクリプトを自動的にBase64 エンコードするかどうか
+ # 許可値: true(base64エンコーディングする) | false(base64エンコーディングしない)
# @return [Hash] レスポンスXML解析結果
#
# @example
# start_instances(:instance_id => ['server01', 'server02'], :instance_type => ['mini', 'small'], :accounting_type => 2)
#
@@ -216,14 +231,18 @@
end unless blank?(options[:instance_type])
[options[:accounting_type]].flatten.each do |p|
raise ArgumentError, "Invalid :accounting_type provided." unless ACCOUNTING_TYPE.include?(p.to_s)
end unless blank?(options[:accounting_type])
+ user_data = extract_user_data(options)
+ options[:user_data] = user_data
+
params = {'Action' => 'StartInstances'}
params.merge!(pathlist('InstanceId', options[:instance_id]))
params.merge!(pathlist('InstanceType', options[:instance_type]))
params.merge!(pathlist('AccountingType', options[:accounting_type]))
+ params.merge!(opts_to_prms(options, [:user_data]))
return response_generator(params)
end
@@ -288,10 +307,10 @@
# またファイアウォール機能を提供していない環境でファイアウォールグループを指定して実行した場合は、エラーが返されます。
#
# @option options [String] :instance_id コピー元のサーバー名(必須)
# @option options [String] :instance_name コピー後のサーバー名(必須)
# @option options [String] :instance_type サーバータイプ
- # 許可値: mini | small | small2 | small4 | medium | medium4 | medium8 | large | large8 | large16
+ # 許可値: mini | small | small2 | small4 | small8 | medium | medium4 | medium8 | medium16 | large | large8 | large16 | large24 | large32 | extra-large16 | extra-large24 | extra-large32
# @option options [String] :accounting_type 利用料金タイプ
# 許可値: 1(月額課金) | 2(従量課金)
# @option options [Array<Hash>] :load_balancers ロードバランサー設定
# <Hash> options [String] :load_balancer_name - ロードバランサー名
# [Integer] :load_balancer_port - 待ち受けポート