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 - 待ち受けポート