nifty-cloud-sdk 1.8.beta1 → 1.9.beta1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -35,12 +35,13 @@ API Version.1.8 対応
35
35
  - run_instances で Windows のイメージ ID が指定された場合のみ :password を必須とみなすようにする (see #13)
36
36
 
37
37
  * lib/NIFTY/config.rb
38
+ * README.rdoc
38
39
  - デフォルトの API エンドポイントを https://cp.cloud.nifty.com/api/1.7/ から https://cp.cloud.nifty.com/api/ へ変更する (see #14)
39
40
 
40
41
  * test/test_*.rb
41
42
  - テストコードにマジックコメントでスクリプトエンコーディングを指定する (see #16)
42
43
 
43
- * lib/NIFTY/version.rb, README.rdoc
44
+ * lib/NIFTY/version.rb
44
45
  - VERSIONを変更
45
46
 
46
47
 
@@ -9,7 +9,7 @@ module NIFTY
9
9
  INSTANCES_DESCRIBE_ATTRIBUTE = [
10
10
  'instanceType', 'disableApiTermination', 'blockDeviceMapping', 'accountingType', 'nextMonthAccountingType',
11
11
  'loadbalancing', 'copyInfo', 'autoscaling', 'ipType', 'groupId', 'description']
12
- INSTANCES_MODIFY_ATTRIBUTE = ['instanceType', 'disableApiTermination', 'instanceName', 'description', 'ipType', 'groupId']
12
+ INSTANCES_MODIFY_ATTRIBUTE = ['instanceType', 'disableApiTermination', 'instanceName', 'description', 'ipType', 'groupId', 'accountingType']
13
13
  INSTANCES_IGNORED_PARAMS = Regexp.union(/MinCount/,
14
14
  /MaxCount/,
15
15
  /AddisionalInfo/,
@@ -74,12 +74,14 @@ module NIFTY
74
74
  # @option options [String] :instance_id サーバー名(必須)
75
75
  # @option options [String] :attribute 更新対象の項目名(必須)
76
76
  # 許可値: instanceType(サーバータイプを更新) | disableApiTermination(API からのサーバー削除可否を更新) | instanceName(サーバー名を更新) |
77
- # description(メモ情報を更新) | ipType(IP アドレスの固定化タイプを更新) | groupId(ファイアウォールグループを更新)
77
+ # description(メモ情報を更新) | ipType(IP アドレスの固定化タイプを更新) | groupId(ファイアウォールグループを更新) |
78
+ # accountingType(利用料金タイプを更新)
78
79
  #
79
80
  # @option options [String] :value 更新値(必須)
80
81
  # 許可値: (:attribute= instanceType) mini | small | small2 | small4 | small8 | medium | medium4 | medium8 | medium16 | large | large8 | large16 | large24 | large32 | extra-large16 | extra-large24 | extra-large32
81
82
  # (:attribute= disableApiTermination) true | false
82
83
  # (:attribute= ipType) static | dynamic | none
84
+ # (:attribute= accountingType) 1(月額課金) | 2(従量課金)
83
85
  # @return [Hash] レスポンスXML解析結果
84
86
  #
85
87
  # @example
@@ -93,6 +95,7 @@ module NIFTY
93
95
  raise ArgumentError, "Invalid :value provided." if options[:attribute] == 'instanceType' && !INSTANCE_TYPE.include?(options[:value].to_s)
94
96
  raise ArgumentError, "Invalid :value provided." if options[:attribute] == 'disableApiTermination' && !BOOLEAN.include?(options[:value].to_s)
95
97
  raise ArgumentError, "Invalid :value provided." if options[:attribute] == 'ipType' && !IP_TYPE.include?(options[:value].to_s)
98
+ raise ArgumentError, "Invalid :value provided." if options[:attribute] == 'accountingType' && !ACCOUNTING_TYPE.include?(options[:value].to_s)
96
99
 
97
100
  params = {'Action' => 'ModifyInstanceAttribute'}
98
101
  params.merge!(opts_to_prms(options, [:instance_id, :attribute, :value]))
@@ -386,6 +389,57 @@ module NIFTY
386
389
 
387
390
  return response_generator(params)
388
391
  end
392
+
393
+
394
+ # API「ImportInstances」を実行し、指定したOVFファイルの情報に基づいて、サーバーインポートを予約します。
395
+ # 1回のリクエストで1台のサーバーが予約可能です。
396
+ #
397
+ # イメージ(VMDKファイル)は、別途アップロード領域へアップロードしてください(このAPIのレスポンスに含まれるタスクIDを指定します)。
398
+ #
399
+ # サーバーの作成には、時間がかかることがあります。
400
+ # API「DescribeInstances」のレスポンス値「instanceState」でサーバーのステータスを確認できます。
401
+ #
402
+ # インポートしたサーバーは通常ほかのサーバー作成と同様に課金されますが、ニフティクラウドの基本ディスク容量(Linux:30GB、Windows:40GB)を超えるディスクを持つ場合は100GB単位で追加料金が発生します。
403
+ #
404
+ # ニフティクラウドがサポートしないOS製品である、複数OSのサーバーであるなどの場合はインポートできず、エラーが返されます。
405
+ #
406
+ # インポートしたサーバーは、APIからの削除が可能です。
407
+ # APIからの削除を禁止したい場合は、インポート完了後にAPI「ModifyInstanceAttribute」を実行してください。
408
+ #
409
+ # @option options [Array<String>] :security_group 適用するファイアフォールグループ名
410
+ # @option options [String] :instance_type サーバータイプ
411
+ # 許可値: mini | small | small2 | small4 | small8 | medium | medium4 | medium8 | medium16 | large | large8 | large16 | large24 | large32 | extra-large16 | extra-large24 | extra-large32
412
+ # @option options [String] :availability_zone
413
+ # @option options [Boolean] :disable_api_termination APIからのサーバー削除の可否
414
+ # 許可値: true(削除不可) | false(削除可)
415
+ # @option options [String] :instance_id サーバー名
416
+ # @option options [String] :ovf OVFデータ
417
+ # @option options [String] :accounting_type 利用料金タイプ
418
+ # 許可値: 1(月額課金) | 2(従量課金)
419
+ # @option options [String] :ip_type IPアドレスタイプ
420
+ # 許可値: static | dynamic | none
421
+ # @return [Hash] レスポンスXML解析結果
422
+ #
423
+ # @example
424
+ # cancel_copy_instances(:instance_id => 'server01')
425
+ #
426
+ def import_instance( options={} )
427
+ raise ArgumentError, "No :ovf provided." if blank?(options[:ovf])
428
+ #raise ArgumentError, "No :security_group provided." if blank?(options[:security_group])
429
+ raise ArgumentError, "Invalid :security_group provided." unless blank?(options[:security_group]) || GROUP_NAME =~ options[:security_group].to_s
430
+ raise ArgumentError, "Invalid :instance_type provided." unless blank?(options[:instance_type]) || INSTANCE_TYPE.include?(options[:instance_type].to_s)
431
+ raise ArgumentError, "Invalid :disable_api_termination provided." unless blank?(options[:disable_api_termination]) ||
432
+ BOOLEAN.include?(options[:disable_api_termination].to_s)
433
+ raise ArgumentError, "Invalid :accounting_type provided." unless blank?(options[:accounting_type]) || ACCOUNTING_TYPE.include?(options[:accounting_type].to_s)
434
+ raise ArgumentError, "Invalid :ip_type provided." unless blank?(options[:ip_type]) || IP_TYPE.include?(options[:ip_type].to_s)
435
+
436
+ params = {'Action' => 'ImportInstance'}
437
+ params.merge!(pathlist('SecurityGroup', options[:security_group]))
438
+ params.merge!(opts_to_prms(options, [:instance_type, :disable_api_termination, :instance_id, :ovf, :accounting_type, :ip_type]))
439
+ params.merge!(opts_to_prms(options, [:availability_zone], 'Placement'))
440
+
441
+ return response_generator(params)
442
+ end
389
443
  end # end of Base class
390
444
  end # end of Cloud module
391
445
  end # end of NIFTY module
@@ -9,6 +9,8 @@ module NIFTY
9
9
  LOAD_BALANCER_NAME = /^[a-zA-Z0-9]{1,15}$/
10
10
  LOAD_BALANCERS_IGNORED_PARAMS = Regexp.union(/AvailabilityZones .member.*/,
11
11
  /HealthCheck .Timeout/)
12
+ LOAD_BALANCER_SESSION_STICKINESS_EXPIRATION_PERIOD = ['3', '5', '10', '15', '30']
13
+ LOAD_BALANCER_SORRY_PAGE_STATUS_CODE = ['200', '503']
12
14
 
13
15
  # API「ConfigureHealthCheck」を実行し、指定したロードバランサーのヘルスチェックの設定を変更します。
14
16
  # ロードバランサーを指定するためには、ロードバランサー名・ポート番号が必要です。削除済みのロードバランサーを指定した、
@@ -435,6 +437,182 @@ module NIFTY
435
437
 
436
438
  return response_generator(params)
437
439
  end
440
+
441
+
442
+ # API「UpdateLoadBalancerOption」を実行し、指定したロードバランサーのオプション設定を更新します。
443
+ #
444
+ # 削除済みのロードバランサー名・待ち受けポートを指定した、管理外のロードバランサー名を指定した場合は、エラーが返されます。
445
+ #
446
+ # 各オプションの利用設定がtrueの場合は有効、falseの場合は無効へ更新します。
447
+ #
448
+ # Sorryページオプションを有効にするためには指定するロードバランサーの待ち受けポートが80番である必要があります。
449
+ #
450
+ # @option options [String] :load_balancer_name 変更対象のロードバランサー名(必須)
451
+ # @option options [Integer] :load_balancer_port 変更対象の待ち受けポート(必須)
452
+ # @option options [Integer] :instance_port 変更対象の宛先ポート(必須)
453
+ # @option options [String] :session_stickiness_policy_update セッション固定オプション
454
+ # <Hash> options [Boolean] :enable - セッション固定オプション利用設定
455
+ # <Hash> options [Integer] :expiration_period - セッション保持時間(セッション固定オプションが有効の場合必須)
456
+ # 許可値: 3 | 5 | 10 | 15 | 30
457
+ # @option options [String] :sorry_page_update Sorryページオプション
458
+ # <Hash> options [Boolean] :enable - Sorryページオプション利用設定
459
+ # <Hash> options [Integer] :status_code - レスポンスコード(Sorryページオプションが有効の場合必須)
460
+ # 許可値: 200 | 503
461
+ # @option options [String] :mobile_filter_update 携帯キャリアフィルターオプション
462
+ # <Hash> options [Boolean] :enable - 携帯キャリアフィルターオプション利用設定
463
+ # @return [Hash] レスポンスXML解析結果
464
+ #
465
+ # @example
466
+ # update_load_balancer_option(
467
+ # :load_balancer_name => 'lb0001',
468
+ # :load_balancer_port => 80,
469
+ # :instance_port => 80,
470
+ # :session_stickiness_enable => true,
471
+ # :session_stickiness_expiration_period => 10,
472
+ # :sorry_page_enable => true,
473
+ # :sorry_page_status_code => 200,
474
+ # :mobile_filter_enable => true
475
+ # )
476
+ #
477
+ def update_load_balancer_option( options={} )
478
+ raise ArgumentError, "No :load_balancer_name provided." if blank?(options[:load_balancer_name])
479
+ raise ArgumentError, "Invalid :load_balancer_name provided." unless LOAD_BALANCER_NAME =~ options[:load_balancer_name].to_s
480
+ raise ArgumentError, "No :load_balancer_port provided." if blank?(options[:load_balancer_port])
481
+ raise ArgumentError, "Invalid :load_balancer_port provided." unless blank?(options[:load_balancer_port]) ||
482
+ valid_port?(options[:load_balancer_port])
483
+ raise ArgumentError, "No :instance_port provided." if blank?(options[:instance_port]) && !blank?(options[:load_balancer_port])
484
+ raise ArgumentError, "Invalid :instance_port provided." unless blank?(options[:instance_port]) ||
485
+ valid_port?(options[:instance_port])
486
+ raise ArgumentError, "No :session_stickiness_expiration_period provided." if blank?(options[:session_stickiness_expiration_period]) &&
487
+ !blank?(options[:session_stickiness_enable]) && 'true' == options[:session_stickiness_enable].to_s
488
+ raise ArgumentError, "Invalid :session_stickiness_enable provided." unless blank?(options[:session_stickiness_enable]) ||
489
+ BOOLEAN.include?(options[:session_stickiness_enable].to_s)
490
+ raise ArgumentError, "Invalid :session_stickiness_expiration_period provided." unless blank?(options[:session_stickiness_expiration_period]) ||
491
+ LOAD_BALANCER_SESSION_STICKINESS_EXPIRATION_PERIOD.include?(options[:session_stickiness_expiration_period].to_s)
492
+ raise ArgumentError, "No :sorry_page_status_code provided." if blank?(options[:sorry_page_status_code]) &&
493
+ !blank?(options[:sorry_page_enable]) && 'true' == options[:sorry_page_enable].to_s
494
+ raise ArgumentError, "Invalid :sorry_page_enable provided." unless blank?(options[:sorry_page_enable]) ||
495
+ BOOLEAN.include?(options[:sorry_page_enable].to_s)
496
+ raise ArgumentError, "Invalid :sorry_page_status_code provided." unless blank?(options[:sorry_page_status_code]) ||
497
+ LOAD_BALANCER_SORRY_PAGE_STATUS_CODE.include?(options[:sorry_page_status_code].to_s)
498
+ raise ArgumentError, "Invalid :mobile_filter_enable provided." unless blank?(options[:mobile_filter_enable]) ||
499
+ BOOLEAN.include?(options[:mobile_filter_enable].to_s)
500
+
501
+ params = {
502
+ 'Action' => 'UpdateLoadBalancerOption',
503
+ 'SessionStickinessOptionUpdate.Enable' => options[:session_stickiness_enable].to_s,
504
+ 'SessionStickinessOptionUpdate.ExpirationPeriod' => options[:session_stickiness_expiration_period].to_s,
505
+ 'SorryPageOptionUpdate.Enable' => options[:sorry_page_enable].to_s,
506
+ 'SorryPageOptionUpdate.StatusCode' => options[:sorry_page_status_code].to_s,
507
+ 'MobileFilterOptionUpdate.Enable' => options[:mobile_filter_enable].to_s
508
+ }
509
+ params.merge!(opts_to_prms(options, [:load_balancer_name, :load_balancer_port, :instance_port]))
510
+
511
+ return response_generator(params)
512
+ end
513
+
514
+
515
+ # API「SetLoadBalancerListenerSSLCertificate」を実行し、指定したロードバランサーに対してSSL証明書を取り付けます。
516
+ #
517
+ # ロードバランサーを指定するためには、ロードバランサー名・ポート番号が必要です。
518
+ # 削除済みのロードバランサーを指定した、管理外のロードバランサーを指定したなど、無効なロードバランサーを指定した場合は、エラーが返されます。
519
+ #
520
+ # SSL証明書を指定するためには、SSL証明書の発行識別子が必要です。
521
+ # 削除済みのSSL証明書を指定した、管理外のSSL証明書を指定したなど、無効なSSL証明書を指定した場合は、エラーが返されます。
522
+ #
523
+ # 指定したSSL証明書のステータスが「有効」かつ、鍵長が1024bitかつ数量無制限の証明書のみ設定することができます。それ以外のSSL証明書を指定した場合はエラーが返されます。
524
+ #
525
+ # @option options [String] :load_balancer_name 対象のロードバランサー名(必須)
526
+ # @option options [Integer] :load_balancer_port 対象の待ち受けポート(必須)
527
+ # @option options [Integer] :instance_port 対象の宛先ポート(必須)
528
+ # @option options [String] :ssl_certificate_id SSL証明書の発行識別子(必須)
529
+ # @return [Hash] レスポンスXML解析結果
530
+ #
531
+ # @example
532
+ # set_load_balancer_listener_ssl_certificate(:load_balancer_name => 'lb0001', :load_balancer_port => 80, :instance_port => 80, :ssl_certificate_id => 111)
533
+ #
534
+ def set_load_balancer_listener_ssl_certificate( options={} )
535
+ raise ArgumentError, "No :load_balancer_name provided." if blank?(options[:load_balancer_name])
536
+ raise ArgumentError, "Invalid :load_balancer_name provided." unless LOAD_BALANCER_NAME =~ options[:load_balancer_name].to_s
537
+ raise ArgumentError, "No :load_balancer_port provided." if blank?(options[:load_balancer_port])
538
+ raise ArgumentError, "Invalid :load_balancer_port provided." unless blank?(options[:load_balancer_port]) ||
539
+ valid_port?(options[:load_balancer_port])
540
+ raise ArgumentError, "No :instance_port provided." if blank?(options[:instance_port])
541
+ raise ArgumentError, "Invalid :instance_port provided." unless blank?(options[:instance_port]) ||
542
+ valid_port?(options[:instance_port])
543
+ raise ArgumentError, "No :ssl_certificate_id provided." if blank?(options[:ssl_certificate_id])
544
+
545
+ params = {
546
+ 'Action' => 'SetLoadBalancerListenerSSLCertificate',
547
+ 'SSLCertificateId' => options[:ssl_certificate_id].to_s
548
+ }
549
+ params.merge!(opts_to_prms(options, [:load_balancer_name, :load_balancer_port, :instance_port]))
550
+
551
+ return response_generator(params)
552
+ end
553
+
554
+ # API「UnsetLoadBalancerListenerSSLCertificate」を実行し、指定したロードバランサーに設定されているSSL証明書をはずします。
555
+ #
556
+ # ロードバランサーを指定するためには、ロードバランサー名・ポート番号が必要です。
557
+ # 削除済みのロードバランサーを指定した、管理外のロードバランサーを指定したなど、無効なロードバランサーを指定した場合は、エラーが返されます。
558
+ #
559
+ # SSL証明書が設定されてないロードバランサー名を指定した場合は、エラーが返されます。
560
+ #
561
+ # @option options [String] :load_balancer_name 対象のロードバランサー名(必須)
562
+ # @option options [Integer] :load_balancer_port 対象の待ち受けポート(必須)
563
+ # @option options [Integer] :instance_port 対象の宛先ポート(必須)
564
+ # @return [Hash] レスポンスXML解析結果
565
+ #
566
+ # @example
567
+ # unset_load_balancer_listener_ssl_certificate(:load_balancer_name => 'lb0001', :load_balancer_port => 80, :instance_port => 80)
568
+ #
569
+ def unset_load_balancer_listener_ssl_certificate( options={} )
570
+ raise ArgumentError, "No :load_balancer_name provided." if blank?(options[:load_balancer_name])
571
+ raise ArgumentError, "Invalid :load_balancer_name provided." unless LOAD_BALANCER_NAME =~ options[:load_balancer_name].to_s
572
+ raise ArgumentError, "No :load_balancer_port provided." if blank?(options[:load_balancer_port])
573
+ raise ArgumentError, "Invalid :load_balancer_port provided." unless blank?(options[:load_balancer_port]) ||
574
+ valid_port?(options[:load_balancer_port])
575
+ raise ArgumentError, "No :instance_port provided." if blank?(options[:instance_port])
576
+ raise ArgumentError, "Invalid :instance_port provided." unless blank?(options[:instance_port]) ||
577
+ valid_port?(options[:instance_port])
578
+
579
+ params = {'Action' => 'UnsetLoadBalancerListenerSSLCertificate'}
580
+ params.merge!(opts_to_prms(options, [:load_balancer_name, :load_balancer_port, :instance_port]))
581
+
582
+ return response_generator(params)
583
+ end
584
+
585
+
586
+ # API「ClearLoadBalancerSession」を実行し、指定したセッション固定オプションを申し込んでいるロードバランサーのセッション情報を削除します。
587
+ #
588
+ # ロードバランサーを指定するためには、ロードバランサー名・ポート番号が必要です。
589
+ # 削除済みのロードバランサーを指定した、管理外のロードバランサーを指定したなど、無効なロードバランサーを指定した場合は、エラーが返されます。
590
+ #
591
+ # セッション固定オプションを申し込んでいないロードバランサー名を指定した場合は、エラーが返されます。
592
+ #
593
+ # @option options [String] :load_balancer_name 対象のロードバランサー名(必須)
594
+ # @option options [Integer] :load_balancer_port 対象の待ち受けポート(必須)
595
+ # @option options [Integer] :instance_port 対象の宛先ポート(必須)
596
+ # @return [Hash] レスポンスXML解析結果
597
+ #
598
+ # @example
599
+ # clear_load_balancer_session(:load_balancer_name => 'lb0001', :load_balancer_port => 80, :instance_port => 80)
600
+ #
601
+ def clear_load_balancer_session( options={} )
602
+ raise ArgumentError, "No :load_balancer_name provided." if blank?(options[:load_balancer_name])
603
+ raise ArgumentError, "Invalid :load_balancer_name provided." unless LOAD_BALANCER_NAME =~ options[:load_balancer_name].to_s
604
+ raise ArgumentError, "No :load_balancer_port provided." if blank?(options[:load_balancer_port])
605
+ raise ArgumentError, "Invalid :load_balancer_port provided." unless blank?(options[:load_balancer_port]) ||
606
+ valid_port?(options[:load_balancer_port])
607
+ raise ArgumentError, "No :instance_port provided." if blank?(options[:instance_port])
608
+ raise ArgumentError, "Invalid :instance_port provided." unless blank?(options[:instance_port]) ||
609
+ valid_port?(options[:instance_port])
610
+
611
+ params = {'Action' => 'ClearLoadBalancerSession'}
612
+ params.merge!(opts_to_prms(options, [:load_balancer_name, :load_balancer_port, :instance_port]))
613
+
614
+ return response_generator(params)
615
+ end
438
616
  end
439
617
  end
440
618
  end
@@ -0,0 +1,90 @@
1
+ module NIFTY
2
+ module Cloud
3
+ class Base < NIFTY::Base
4
+ RESOURCES_DATE = /^\d{4}(\/|\-)?\d{2}(\/|\-)?\d{2}$/
5
+ RESOURCES_YEAR_MONTH = /^\d{4}(\/|\-)?\d{2}$/
6
+
7
+ # API「DescribeResources」を実行し、サービスの稼働情報を返却します。
8
+ # コントロールパネル画面のダッシュボードに当たります。
9
+ #
10
+ # @return [Hash] レスポンスXML解析結果
11
+ #
12
+ # @example
13
+ # describe_resources()
14
+ #
15
+ def describe_resources( options={} )
16
+ params = {'Action' => 'DescribeResources'}
17
+
18
+ return response_generator(params)
19
+ end
20
+
21
+
22
+ # API「DescribeServiceStatus」を実行し、サービスの稼働情報を返却します。
23
+ # コントロールパネル画面のダッシュボードに当たります。
24
+ #
25
+ # @option options [String] :from_date 取得開始日
26
+ # @option options [String] :to_date 取得終了日
27
+ # @return [Hash] レスポンスXML解析結果
28
+ #
29
+ # @example
30
+ # describe_service_status(:from_date => '2012/02/01', :to_date => '2012/02/10')
31
+ #
32
+ def describe_service_status( options={} )
33
+ raise ArgumentError, "Invalid :from_date provided." unless blank?(options[:from_date]) || RESOURCES_DATE =~ options[:from_date].to_s
34
+ raise ArgumentError, "Invalid :to_date provided." unless blank?(options[:to_date]) || RESOURCES_DATE =~ options[:to_date].to_s
35
+
36
+ params = {'Action' => 'DescribeServiceStatus'}
37
+ params.merge!(opts_to_prms(options, [:from_date, :to_date]))
38
+
39
+ return response_generator(params)
40
+ end
41
+
42
+
43
+ # API「DescribeUsage」を実行し、リソースの利用状況を返却します。
44
+ # コントロールパネル画面の料金明細に当たりますが、金額は含まれません。
45
+ #
46
+ # 存在する情報のみ、レスポンス内にタグが生成されます。
47
+ #
48
+ # 取得対象リージョンを設定した場合はサーバー利用情報などそのリージョンに属する個別情報を、
49
+ # 指定しなかった場合はSSL証明書利用情報などリージョン共通情報と東日本リージョンの個別情報を返却します。
50
+ #
51
+ # @option options [String] :year_month 取得対象年月
52
+ # @option options [String] :region 取得対象リージョン
53
+ # @return [Hash] レスポンスXML解析結果
54
+ #
55
+ # @example
56
+ # describe_usage(:year_month => '2011-02', :region => 'east-1')
57
+ #
58
+ def describe_usage( options={} )
59
+ raise ArgumentError, "Invalid :year_month provided." unless blank?(options[:year_month]) || RESOURCES_YEAR_MONTH =~ options[:year_month].to_s
60
+
61
+ params = {'Action' => 'DescribeUsage'}
62
+ params.merge!(opts_to_prms(options, [:year_month, :region]))
63
+
64
+ return response_generator(params)
65
+ end
66
+
67
+
68
+ # API「DescribeUserActivities」を実行し、APIおよびコントロールパネルの利用履歴を返却します。
69
+ # コントロールパネル画面のログ取得に当たります。
70
+ #
71
+ # マルチアカウントの子アカウントでは、自身の利用履歴のみ返却されます。
72
+ # アップロード中のタスク情報を返却します。
73
+ #
74
+ # @option options [String] :year_month 取得対象年月
75
+ # @return [Hash] レスポンスXML解析結果
76
+ #
77
+ # @example
78
+ # describe_user_activities(:year_month => '201101')
79
+ #
80
+ def describe_user_activities( options={} )
81
+ raise ArgumentError, "Invalid :year_month provided." unless blank?(options[:year_month]) || RESOURCES_YEAR_MONTH =~ options[:year_month].to_s
82
+
83
+ params = {'Action' => 'DescribeUserActivities'}
84
+ params.merge!(opts_to_prms(options, [:year_month]))
85
+
86
+ return response_generator(params)
87
+ end
88
+ end # end of Base class
89
+ end # end of Cloud module
90
+ end # end of NIFTY module
@@ -9,6 +9,8 @@ module NIFTY
9
9
  SECURITY_GROUPS_IGNORED_PARAMS = Regexp.union(/UserId/,
10
10
  /IpPermissions\.\d+\.ToPort/,
11
11
  /IpPermissions\.\d+\.Groups\.\d+\.UserId/)
12
+ SECURITY_GROUP_COURSE = ['1', '2']
13
+ NUMERIC = /^[0-9]+$/
12
14
 
13
15
  # API「AuthorizeSecurityGroupIngress」を実行し、指定したファイアウォールグループへ許可ルールを追加します。
14
16
  # 許可ルールの上限数を超える場合は、エラーが返されます。
@@ -333,9 +335,17 @@ module NIFTY
333
335
  # ファイアウォールグループを指定するためには、ファイアウォールグループ名が必要です。削除済みのファイアウォールグループを指定した、
334
336
  # 管理外のファイアウォールグループを指定したなど、無効なファイアウォールグループを指定した場合は、エラーが返されます。
335
337
  #
336
- # @option options [String] :group_name ファイアウォールグループ名(必須)
337
- # @option options [String] :group_name_update ファイアウォールグループ名の変更
338
- # @option options [String] :group_description_update ファイアウォールグループのメモの変更
338
+ # ファイアウォールグループの設定情報の更新には、時間がかかることがあります。
339
+ #
340
+ # API「DescribeSecurityGroups」のレスポンス値「groupStatus」でファイアウォールグループのステータスを確認できます。
341
+ # また、ファイアウォールグループのステータスが「適用済み」の場合、更新した情報が正しくファイアウォールグループに反映されているかの確認が必要です。
342
+ # 同じくAPI「DescribeSecurityGroups」のレスポンス値で確認できます。
343
+ #
344
+ # @option options [String] :group_name ファイアウォールグループ名(必須)
345
+ # @option options [String] :group_name_update ファイアウォールグループ名の変更
346
+ # @option options [String] :group_description_update ファイアウォールグループのメモの変更
347
+ # @option options [Integer] :group_log_limit_update ファイアウォールグループのログ取得件数の変更
348
+ # @option options [Boolean] :group_log_filter_net_bios WindowsサーバのBroadcast通信ログの抑止状態
339
349
  # @return [Hash] レスポンスXML解析結果
340
350
  #
341
351
  # @example
@@ -345,9 +355,54 @@ module NIFTY
345
355
  raise ArgumentError, "No :group_name provided." if blank?(options[:group_name])
346
356
  raise ArgumentError, "Invalid :group_name provided." unless GROUP_NAME =~ options[:group_name].to_s
347
357
  raise ArgumentError, "Invalid :group_name_update provided." unless blank?(options[:group_name_update]) || ALPHANUMERIC =~ options[:group_name_update].to_s
358
+ raise ArgumentError, "Invalid :group_log_limit_update provided." unless blank?(options[:group_log_limit_update]) || NUMERIC =~ options[:group_log_limit_update].to_s
359
+ raise ArgumentError, "Invalid :group_log_filter_net_bios provided." unless blank?(options[:group_log_filter_net_bios]) || BOOLEAN.include?(options[:group_log_filter_net_bios].to_s)
348
360
 
349
361
  params = {'Action' => 'UpdateSecurityGroup'}
350
- params.merge!(opts_to_prms(options, [:group_name, :group_name_update, :group_description_update]))
362
+ params.merge!(opts_to_prms(options, [:group_name, :group_name_update, :group_description_update, :group_log_limit_update, :group_log_filter_net_bios]))
363
+
364
+ return response_generator(params)
365
+ end
366
+
367
+
368
+ # API「UpdateSecurityGroupOption」を実行し、ファイアウォールのオプション情報を更新します。
369
+ #
370
+ # 利用コースを変更する場合は、注意事項に同意しなければ、エラーが返されます。
371
+ #
372
+ # (※)当該APIはv1.11以降、正常応答では常に応答フィールドreturnにtrueが返されます。
373
+ #
374
+ # @option options [String] :course_update 有償・無償の指定
375
+ # 許可値: 1(無償) | 2(有償)
376
+ # @option options [Boolean] :agreement 注意事項に同意(:course_updateが2の場合は必須)
377
+ # @option options [Integer] :security_group_limit_update ファイアウォールグループ数上限
378
+ # @return [Hash] レスポンスXML解析結果
379
+ #
380
+ # @example
381
+ # update_security_group_option(:course_update => 2, :agreement => true)
382
+ #
383
+ def update_security_group_option( options={} )
384
+ raise ArgumentError, "No :agreement provided." if options[:course_update].to_s == '2' && blank?(options[:agreement])
385
+ raise ArgumentError, "Invalid :course_update provided." unless blank?(options[:course_update]) || SECURITY_GROUP_COURSE.include?(options[:course_update].to_s)
386
+ raise ArgumentError, "Invalid :agreement provided." unless blank?(options[:agreement]) || BOOLEAN.include?(options[:agreement].to_s)
387
+ raise ArgumentError, "Invalid :security_group_limit_update provided." unless blank?(options[:security_group_limit_update]) || NUMERIC =~ options[:security_group_limit_update].to_s
388
+
389
+ params = {'Action' => 'UpdateSecurityGroupOption'}
390
+ params.merge!(opts_to_prms(options, [:course_update, :security_group_limit_update]))
391
+ params.merge!(opts_to_prms(options, [:agreement], 'CourseUpdate'))
392
+
393
+ return response_generator(params)
394
+ end
395
+
396
+
397
+ # API「DescribeSecurityGroupOption」を実行し、ファイアウォールのオプション利用情報を取得します。
398
+ #
399
+ # @return [Hash] レスポンスXML解析結果
400
+ #
401
+ # @example
402
+ # describe_security_group_option()
403
+ #
404
+ def describe_security_group_option( options={} )
405
+ params = {'Action' => 'DescribeSecurityGroupOption'}
351
406
 
352
407
  return response_generator(params)
353
408
  end
@@ -0,0 +1,51 @@
1
+ module NIFTY
2
+ module Cloud
3
+ class Base < NIFTY::Base
4
+ ATTRIBUTE = 'test'
5
+
6
+ # API「DescribeUploads」を実行し、アップロード中のタスク情報を返却します。
7
+ #
8
+ # アップロードタスクを指定するためには、タスクIDが必要です。
9
+ #
10
+ # タスクIDを指定した場合、指定したIDのアップロードタスクの情報が返されます。
11
+ # タスクIDを指定しなかった場合は、現在アップロード・インポート中のすべてのタスクが返されます。
12
+ #
13
+ # すでにインポートが完了したタスクやキャンセル済みのタスクなど、無効なタスクIDを指定した場合は、エラーが返されます。
14
+ #
15
+ # @option options [Array<String>] :conversion_task_id タスクID
16
+ # @return [Hash] レスポンスXML解析結果
17
+ #
18
+ # @example
19
+ # describe_uploads(:conversion_task_id => ['d6f1ba72-0a76-4b1d-8421-a4f6089d3d7a', 'd6f1ba72-0a76-4b1d-8421-a4f6089d3d7b'])
20
+ #
21
+ def describe_uploads( options={} )
22
+ params = {'Action' => 'DescribeUploads'}
23
+ params.merge!(pathlist('ConversionTaskId', options[:conversion_task_id]))
24
+
25
+ return response_generator(params)
26
+ end
27
+
28
+
29
+ # API「CancelUpload」を実行し、サーバーインポートの処理をキャンセルします。
30
+ # アップロード済みのVMDKファイルは削除されます。
31
+ #
32
+ # アップロードタスクを指定するためには、タスクIDが必要です。
33
+ # すでにインポートが完了したタスクやキャンセル済みのタスクなど、無効なタスクIDを指定した場合は、エラーが返されます。
34
+ #
35
+ # @option options [String] :conversion_task_id タスクID(必須)
36
+ # @return [Hash] レスポンスXML解析結果
37
+ #
38
+ # @example
39
+ # cancel_upload(:conversion_task_id => 'f6dd8353-eb6b-6b4fd32e4f05')
40
+ #
41
+ def cancel_upload( options={} )
42
+ raise ArgumentError, "No :conversion_task_id provided." if blank?(options[:conversion_task_id])
43
+
44
+ params = {'Action' => 'CancelUpload'}
45
+ params.merge!(opts_to_prms(options, [:conversion_task_id]))
46
+
47
+ return response_generator(params)
48
+ end
49
+ end # end of Base class
50
+ end # end of Cloud module
51
+ end # end of NIFTY module
data/lib/NIFTY/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module NIFTY
2
- VERSION = '1.8.beta1'
2
+ VERSION = '1.9.beta1'
3
3
  end