wakame-adapters-tengine 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +9 -0
- data/Gemfile.lock +31 -0
- data/README +74 -0
- data/Rakefile +28 -0
- data/VERSION +1 -0
- data/lib/apis/ec2.rb +145 -0
- data/lib/apis/wakame.rb +206 -0
- data/lib/controllers/controller.rb +70 -0
- data/lib/tama.rb +23 -0
- data/test/calltama +93 -0
- data/test/calltama.yml +25 -0
- data/test/generic_test.rb +13 -0
- data/test/spec/config.yml +31 -0
- data/test/spec/real_api_spec.rb +39 -0
- data/test/spec/spec_helper.rb +101 -0
- data/test/test_files/describe_images.json +65 -0
- data/test/test_files/describe_instances.json +115 -0
- data/test/test_files/host_nodes.json +22 -0
- data/test/test_files/run_instances.json +30 -0
- data/test/test_files/show_instance_specs.json +23 -0
- data/test/test_files/terminate_instances.json +3 -0
- data/wakame-adapters-tengine.gemspec +65 -0
- metadata +114 -0
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
diff-lcs (1.1.2)
|
5
|
+
git (1.2.5)
|
6
|
+
jeweler (1.6.4)
|
7
|
+
bundler (~> 1.0)
|
8
|
+
git (>= 1.2.5)
|
9
|
+
rake
|
10
|
+
json (1.6.1)
|
11
|
+
rake (0.9.2.2)
|
12
|
+
right_aws (2.1.0)
|
13
|
+
right_http_connection (>= 1.2.5)
|
14
|
+
right_http_connection (1.3.0)
|
15
|
+
rspec (2.5.0)
|
16
|
+
rspec-core (~> 2.5.0)
|
17
|
+
rspec-expectations (~> 2.5.0)
|
18
|
+
rspec-mocks (~> 2.5.0)
|
19
|
+
rspec-core (2.5.2)
|
20
|
+
rspec-expectations (2.5.0)
|
21
|
+
diff-lcs (~> 1.1.2)
|
22
|
+
rspec-mocks (2.5.0)
|
23
|
+
|
24
|
+
PLATFORMS
|
25
|
+
ruby
|
26
|
+
|
27
|
+
DEPENDENCIES
|
28
|
+
jeweler (~> 1.6.4)
|
29
|
+
json
|
30
|
+
right_aws (= 2.1.0)
|
31
|
+
rspec
|
data/README
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
Tama
|
2
|
+
====
|
3
|
+
TamaはアマゾンEC2とWakame-vdcを呼び出すソフトウェアです。Tamaでは、一つのAPIからどちも呼び出すことが出来るようになります。
|
4
|
+
|
5
|
+
必要なRuby Gem
|
6
|
+
=============
|
7
|
+
rubygems
|
8
|
+
json
|
9
|
+
right_aws
|
10
|
+
|
11
|
+
セットアップ
|
12
|
+
==========
|
13
|
+
必要なgemをインストールすために、バンドルを使って下さい。
|
14
|
+
|
15
|
+
gem install bundler
|
16
|
+
|
17
|
+
そのあとで、Tamaのダイレクトリーでこのコマンドをして下さい。
|
18
|
+
|
19
|
+
bundle install
|
20
|
+
|
21
|
+
これでTamaを使えるようになります。
|
22
|
+
|
23
|
+
Tamaの使い方
|
24
|
+
==========
|
25
|
+
Tamaを使うのだったら、Tamaのオブジェクトが作らなければなりません。
|
26
|
+
|
27
|
+
t = Tama::Tama.new(Account,Ec2_host,Ec2_port,Ec2_protocol,Wakame_host,Wakame_port,Wakame_protocol)
|
28
|
+
|
29
|
+
パラメータの説明:
|
30
|
+
*Account: Wakame-vdcで使うaccount-idです。例えば:'a-shpoolxx'
|
31
|
+
*Ec2_host:Ec2のWebAPIのIPアドレス。例えば:"192.168.2.22"
|
32
|
+
*Ec2_port:Ec2のWebAPIのポート。例えば:9005
|
33
|
+
*Ec2_protocol:Ec2が使うプロトコル。例えば:"http"や"https"
|
34
|
+
*Wakame_host:Wakame-vdcのWebAPIのIPアドレス。例えば:"192.168.2.22"
|
35
|
+
*Wakame_port:Wakame-vdcのWebAPIのポート。例えば:9001
|
36
|
+
*Wakame_protocol:Wakame-vdcが使うプロトコル。例えば:"http"や"https"
|
37
|
+
|
38
|
+
そのあとでこのメソッドが呼び出せます。
|
39
|
+
|
40
|
+
t.run_instances(Image_id,Min,Max,Security_Groups,SSH_Key, User_Data, Addressing_Type, Instance_Type)
|
41
|
+
t.describe_instances([])
|
42
|
+
t.terminate_instances([])
|
43
|
+
t.describe_images([])
|
44
|
+
t.describe_host_nodes
|
45
|
+
|
46
|
+
run_instancesのパラメーターの説明
|
47
|
+
*Image_id:マシンイメージのIDです。このイメージのインスタンスを立ち上がります。例えば:'wmi-lucid5'
|
48
|
+
*Min:立ち上がるインスタンスのミニマムです。例えば3だったら、インスタンスを3台立ち上がります。
|
49
|
+
*Max:立ち上がるインスタンスのマクシマムです。例えば5だったら、出来れば5台を立ち上がります。
|
50
|
+
*Security_Groups:セキュリティーグループの名前が入っているArrayです。例えば:['group1','group2']
|
51
|
+
*SSH_Key:立ち上がるインスタンスで使いたいSSHキーペアの名前です。例えば:"demokey"
|
52
|
+
*User_Data:ユーザーが何でも入れても良いのデータです。例えば:"ワカメが大好きです"
|
53
|
+
*Addressing_Type:Wakame-vdcのアダプターで使うと、これは何もしませんが、Tamaはright_awsを使っているので、必要です。何でも入れても良いです。
|
54
|
+
*Instance_Type:どんなInstance-specでインスタンスを立ち上がるのはここで決めます。例えば:"is-demospec"
|
55
|
+
|
56
|
+
describe_instancesとterminate_instancesとdescribe_imagesのパラメーターはみんなインスタンスやイメージIDが入っているArrayです。describeだったら、そのIDのデータを返すとterminateだったら、そのIDのインスタンスをターミネートします。例えば:['i-9slepd2d','i-yfhvndlp','i-74mcdk49']
|
57
|
+
|
58
|
+
Tamaのテストの使い方
|
59
|
+
=================
|
60
|
+
TamaはWakameやEc2を呼び出せるだけではなく、見せ物のデータでテストをすることも出来ます。そうする場合は、こうやってTamaのオブジェクトを作って下さい。
|
61
|
+
|
62
|
+
t = Tama::Tama.new(:test)
|
63
|
+
|
64
|
+
メソッドはふつうのように呼び出せますが、Wakame-vdcやEc2を呼び出さない。その代わりにデータをファイルから読みます。そのファイルはJSONで書いてあるとディフォルトではTama_directory/test/test_filesにあるます。
|
65
|
+
|
66
|
+
*本当にインスタンスを立ち上がりませんので、t.run_instancesはパラメーターが必要がありません。
|
67
|
+
|
68
|
+
欲しければ、JSONのファイルのパースも決められます。
|
69
|
+
|
70
|
+
t.api[0].describe_instances_file = "/path/to/file"
|
71
|
+
t.api[0].describe_images_file = "/path/to/file"
|
72
|
+
t.api[0].run_instances_file = "/path/to/file"
|
73
|
+
t.api[0].terminate_instances_file = "/path/to/file"
|
74
|
+
t.api[1].host_nodes_file = "/path/to/file"
|
data/Rakefile
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'bundler'
|
5
|
+
begin
|
6
|
+
Bundler.setup(:default, :development)
|
7
|
+
rescue Bundler::BundlerError => e
|
8
|
+
$stderr.puts e.message
|
9
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
10
|
+
exit e.status_code
|
11
|
+
end
|
12
|
+
require 'rake'
|
13
|
+
|
14
|
+
require 'jeweler'
|
15
|
+
Jeweler::Tasks.new do |gem|
|
16
|
+
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
17
|
+
gem.name = "wakame-adapters-tengine"
|
18
|
+
gem.homepage = "https://github.com/axsh-dev/wakame-adapters-tengine"
|
19
|
+
# gem.license = "MIT"
|
20
|
+
gem.summary = %Q{wakame-adapters-tengine is ...}
|
21
|
+
gem.description = %Q{wakame-adapters-tengine is ...}
|
22
|
+
gem.email = "axsh"
|
23
|
+
gem.authors = ["axsh"]
|
24
|
+
# gem.bindir = 'bin'
|
25
|
+
# gem.executables = []
|
26
|
+
# dependencies defined in Gemfile
|
27
|
+
end
|
28
|
+
Jeweler::RubygemsDotOrgTasks.new
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.1
|
data/lib/apis/ec2.rb
ADDED
@@ -0,0 +1,145 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'json'
|
5
|
+
|
6
|
+
module Tama
|
7
|
+
module Apis
|
8
|
+
|
9
|
+
# Reads JSON files and returns Hash maps similar to right_aws
|
10
|
+
class Ec2ApiTest #< ec2Api
|
11
|
+
attr_accessor :describe_instances_file
|
12
|
+
attr_accessor :describe_images_file
|
13
|
+
attr_accessor :run_instances_file
|
14
|
+
attr_accessor :terminate_instances_file
|
15
|
+
attr_accessor :account
|
16
|
+
|
17
|
+
def initialize
|
18
|
+
self.terminate_instances_file = "#{File.expand_path(File.dirname(__FILE__))}/../../test/test_files/terminate_instances.json"
|
19
|
+
self.describe_images_file = "#{File.expand_path(File.dirname(__FILE__))}/../../test/test_files/describe_images.json"
|
20
|
+
self.describe_instances_file = "#{File.expand_path(File.dirname(__FILE__))}/../../test/test_files/describe_instances.json"
|
21
|
+
self.run_instances_file = "#{File.expand_path(File.dirname(__FILE__))}/../../test/test_files/run_instances.json"
|
22
|
+
self.account = "a-shpoolxx"
|
23
|
+
end
|
24
|
+
|
25
|
+
def describe_instances(list=[])
|
26
|
+
File.open(self.describe_instances_file) { |file|
|
27
|
+
res = JSON.parse(file.readlines.join.to_s).first["results"]
|
28
|
+
res.delete_if {|item| not list.member?(item["id"])} unless list.empty?
|
29
|
+
res.map { |inst_map|
|
30
|
+
dns_name = inst_map["network"].first["nat_dns_name"] unless inst_map["network"].nil? || inst_map["network"].empty?
|
31
|
+
private_dns_name = inst_map["network"].first["dns_name"] unless inst_map["network"].nil? || inst_map["network"].empty?
|
32
|
+
ip_address = inst_map["vif"].first["ipv4"]["nat_address"] unless inst_map["vif"].nil? || inst_map["vif"].empty? || inst_map["vif"].first["ipv4"].nil?
|
33
|
+
private_ip_address = inst_map["vif"].first["ipv4"]["address"] unless inst_map["vif"].nil? || inst_map["vif"].empty? || inst_map["vif"].first["ipv4"].nil?
|
34
|
+
{:aws_kernel_id=>"",
|
35
|
+
:aws_launch_time=>inst_map["created_at"],
|
36
|
+
:tags=>{},
|
37
|
+
:aws_reservation_id=>"",
|
38
|
+
:aws_owner=>self.account,
|
39
|
+
:instance_lifecycle=>"",
|
40
|
+
:block_device_mappings=>[{:ebs_volume_id=>"", :ebs_status=>"", :ebs_attach_time=>"", :ebs_delete_on_termination=>false, :device_name=>""}],
|
41
|
+
:ami_launch_index=>"",
|
42
|
+
:root_device_name=>"",
|
43
|
+
:aws_ramdisk_id=>"",
|
44
|
+
:aws_availability_zone=>inst_map["host_node"],
|
45
|
+
:aws_groups=>inst_map["netfilter_group_id"],
|
46
|
+
:spot_instance_request_id=>"",
|
47
|
+
:ssh_key_name=>"",
|
48
|
+
:virtualization_type=>"",
|
49
|
+
:placement_group_name=>"",
|
50
|
+
:requester_id=>"",
|
51
|
+
:aws_instance_id=>inst_map["id"],
|
52
|
+
:aws_product_codes=>[],
|
53
|
+
:client_token=>"",
|
54
|
+
:private_ip_address=>private_ip_address,
|
55
|
+
:architecture=>inst_map["arch"],
|
56
|
+
:aws_state_code=>0,
|
57
|
+
:aws_image_id=>inst_map["image_id"],
|
58
|
+
:root_device_type=>"",
|
59
|
+
:ip_address=>ip_address,
|
60
|
+
:dns_name=>dns_name,
|
61
|
+
:monitoring_state=>"",
|
62
|
+
:aws_instance_type=>inst_map["instance_spec_id"],
|
63
|
+
:aws_state=>inst_map["state"],
|
64
|
+
:private_dns_name=>private_dns_name,
|
65
|
+
:aws_reason=>""
|
66
|
+
}
|
67
|
+
}
|
68
|
+
}
|
69
|
+
end
|
70
|
+
|
71
|
+
def describe_images(list=[], image_type=nil)
|
72
|
+
File.open(self.describe_images_file) { |file|
|
73
|
+
res = JSON.parse(file.readlines.join.to_s).first["results"]
|
74
|
+
res.delete_if {|item| not list.member?(item["id"])} unless list.empty?
|
75
|
+
res.map { |img_map|
|
76
|
+
{:root_device_name=>"",
|
77
|
+
:aws_ramdisk_id=>"",
|
78
|
+
:block_device_mappings=>[{:ebs_snapshot_id=>"",
|
79
|
+
:ebs_volume_size=>0,
|
80
|
+
:ebs_delete_on_termination=>false,
|
81
|
+
:device_name=>""}],
|
82
|
+
:aws_is_public=>img_map["is_public"],
|
83
|
+
:virtualization_type=>"",
|
84
|
+
:image_owner_alias=>"",
|
85
|
+
:aws_id=>img_map["uuid"],
|
86
|
+
:aws_architecture=>img_map["arch"],
|
87
|
+
:root_device_type=>"",
|
88
|
+
:aws_location=>img_map["source"],
|
89
|
+
:aws_image_type=>"",
|
90
|
+
:name=>"",
|
91
|
+
:aws_state=>img_map["state"],
|
92
|
+
:description=>img_map["description"],
|
93
|
+
:aws_kernel_id=>"",
|
94
|
+
:tags=>{},
|
95
|
+
:aws_owner=>img_map["account_id"]
|
96
|
+
}
|
97
|
+
}
|
98
|
+
}
|
99
|
+
end
|
100
|
+
|
101
|
+
# The arguments here are just placeholders to match the real
|
102
|
+
# run_instances method. The output is read from a file as usual.
|
103
|
+
def run_instances(image_id=nil, min_count=nil, max_count=nil, group_ids=nil, key_name=nil, user_data='', addressing_type = nil, instance_type = nil, kernel_id = nil, ramdisk_id = nil, availability_zone = nil, block_device_mappings = nil)
|
104
|
+
File.open(self.run_instances_file) { |file|
|
105
|
+
JSON.parse(file.readlines.join.to_s).map { |inst_map|
|
106
|
+
dns_name = inst_map["network"].first["nat_dns_name"] unless inst_map["network"].nil? || inst_map["network"].empty?
|
107
|
+
private_dns_name = inst_map["network"].first["dns_name"] unless inst_map["network"].nil? || inst_map["network"].empty?
|
108
|
+
{:aws_launch_time=>inst_map["created_at"],
|
109
|
+
:tags=>{},
|
110
|
+
:aws_reservation_id=>"",
|
111
|
+
:aws_owner=>self.account,
|
112
|
+
:ami_launch_index=>"",
|
113
|
+
:aws_availability_zone=>"",
|
114
|
+
:aws_groups=>inst_map["netfilter_group_id"],
|
115
|
+
:ssh_key_name=>inst_map["ssh_key_pair"],
|
116
|
+
:virtualization_type=>"",
|
117
|
+
:placement_group_name=>"",
|
118
|
+
:aws_instance_id=>inst_map["id"],
|
119
|
+
:aws_product_codes=>[],
|
120
|
+
:client_token=>"",
|
121
|
+
:aws_state_code=>0,
|
122
|
+
:aws_image_id=>inst_map["image_id"],
|
123
|
+
:dns_name=>dns_name,
|
124
|
+
:aws_instance_type=>inst_map["instance_spec_id"],
|
125
|
+
:aws_state=>inst_map["state"],
|
126
|
+
:private_dns_name=>private_dns_name,
|
127
|
+
:aws_reason=>""}
|
128
|
+
}
|
129
|
+
}
|
130
|
+
end
|
131
|
+
|
132
|
+
def terminate_instances(list=[])
|
133
|
+
File.open(self.terminate_instances_file) { |file|
|
134
|
+
JSON.parse(file.readlines.join.to_s).map { |instance_id|
|
135
|
+
{:aws_current_state_name=>"",
|
136
|
+
:aws_prev_state_name=>"",
|
137
|
+
:aws_prev_state_code=>0,
|
138
|
+
:aws_current_state_code=>0,
|
139
|
+
:aws_instance_id=>instance_id}
|
140
|
+
}
|
141
|
+
}
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
data/lib/apis/wakame.rb
ADDED
@@ -0,0 +1,206 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'net/https'
|
3
|
+
|
4
|
+
module Tama
|
5
|
+
module Apis
|
6
|
+
module InstanceHashBuilder
|
7
|
+
# Takes the response from wakame-vdc's /api/instances
|
8
|
+
# and builds a hash similar to right_aws' describe_instances
|
9
|
+
# but changes the layout of IP addresses
|
10
|
+
def build_instances_hash(w_response,account_id)
|
11
|
+
w_response.first["results"].map { |inst_map|
|
12
|
+
# Build the final hash to return
|
13
|
+
# This hash is based on right_aws' describe_instances but
|
14
|
+
# changes the ip_address format
|
15
|
+
{:aws_kernel_id=>"",
|
16
|
+
:aws_launch_time=>inst_map["created_at"],
|
17
|
+
:tags=>{},
|
18
|
+
:aws_reservation_id=>"",
|
19
|
+
:aws_owner=>account_id,
|
20
|
+
:instance_lifecycle=>"",
|
21
|
+
:block_device_mappings=>[{:ebs_volume_id=>"", :ebs_status=>"", :ebs_attach_time=>"", :ebs_delete_on_termination=>false, :device_name=>""}],
|
22
|
+
:ami_launch_index=>"",
|
23
|
+
:root_device_name=>"",
|
24
|
+
:aws_ramdisk_id=>"",
|
25
|
+
:aws_availability_zone=>inst_map["host_node"],
|
26
|
+
:aws_groups=>inst_map["security_groups"],
|
27
|
+
:spot_instance_request_id=>"",
|
28
|
+
:ssh_key_name=>inst_map["ssh_key_pair"],
|
29
|
+
:virtualization_type=>"",
|
30
|
+
:placement_group_name=>"",
|
31
|
+
:requester_id=>"",
|
32
|
+
:aws_instance_id=>inst_map["id"],
|
33
|
+
:aws_product_codes=>[],
|
34
|
+
:client_token=>"",
|
35
|
+
:private_ip_address=>private_ip(inst_map),
|
36
|
+
:architecture=>inst_map["arch"],
|
37
|
+
:aws_state_code=>0,
|
38
|
+
:aws_image_id=>inst_map["image_id"],
|
39
|
+
:root_device_type=>"",
|
40
|
+
:ip_address=>ip_list(inst_map),
|
41
|
+
:dns_name=>dns_list(inst_map),
|
42
|
+
:monitoring_state=>"",
|
43
|
+
:aws_instance_type=>inst_map["instance_spec_id"],
|
44
|
+
:aws_state=>inst_map["state"],
|
45
|
+
:private_dns_name=>private_dns(inst_map),
|
46
|
+
:aws_reason=>""
|
47
|
+
}
|
48
|
+
}
|
49
|
+
end
|
50
|
+
|
51
|
+
def dns_list(inst_map, separator = ",")
|
52
|
+
ip_address = []
|
53
|
+
inst_map["network"].each { |network|
|
54
|
+
ip_address << "#{network["network_name"]}=#{network["dns_name"]}" unless network["network_name"].nil? || network["dns_name"].nil?
|
55
|
+
ip_address << "#{network["nat_network_name"]}=#{network["nat_#{"dns_name"}"]}" unless network["nat_network_name"].nil? || network["nat_dns_name"].nil?
|
56
|
+
}
|
57
|
+
ip_address.uniq.join(separator)
|
58
|
+
end
|
59
|
+
|
60
|
+
def ip_list(inst_map, separator = ",")
|
61
|
+
ip_address = []
|
62
|
+
inst_map["network"].each { |network|
|
63
|
+
ip_address << "#{network["network_name"]}=#{network["ipaddr"].first}" unless network["network_name"].nil? || network["ipaddr"].nil?
|
64
|
+
ip_address << "#{network["nat_network_name"]}=#{network["nat_ipaddr"].first}" unless network["nat_network_name"].nil? || network["nat_ipaddr"].nil?
|
65
|
+
}
|
66
|
+
ip_address.uniq.join(separator)
|
67
|
+
end
|
68
|
+
|
69
|
+
def private_dns(inst_map, private_network = self.private_network_name)
|
70
|
+
output = inst_map["network"].find(lambda { {"dns_name" => ""} }) { |network|
|
71
|
+
network["network_name"] == private_network
|
72
|
+
}
|
73
|
+
output["dns_name"]
|
74
|
+
end
|
75
|
+
|
76
|
+
def private_ip(inst_map, private_network = self.private_network_name)
|
77
|
+
output = inst_map["network"].find(lambda { {"ipaddr" => [""]} }) { |network|
|
78
|
+
network["network_name"] == private_network
|
79
|
+
}
|
80
|
+
output["ipaddr"].first
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
class WakameApi
|
85
|
+
attr_accessor :host
|
86
|
+
attr_accessor :port
|
87
|
+
attr_accessor :protocol
|
88
|
+
attr_accessor :account
|
89
|
+
attr_accessor :private_network_name
|
90
|
+
|
91
|
+
Protocols = ["http","https"]
|
92
|
+
|
93
|
+
include InstanceHashBuilder
|
94
|
+
|
95
|
+
def initialize(account = nil,host = nil, port = nil, protocol = "http",private_network_name = "nw-data")
|
96
|
+
raise ArgumentError, "Unknown protocol: #{protocol}. Can be either of the following: #{Protocols.join(",")}" unless Protocols.member?(protocol)
|
97
|
+
|
98
|
+
self.host = host
|
99
|
+
self.port = port
|
100
|
+
self.protocol = protocol
|
101
|
+
self.account = account
|
102
|
+
|
103
|
+
self.private_network_name = private_network_name
|
104
|
+
end
|
105
|
+
|
106
|
+
def show_host_nodes(list = [], account = self.account)
|
107
|
+
make_request("#{self.web_api}/api/host_nodes",Net::HTTP::Get,account, list).first["results"]
|
108
|
+
end
|
109
|
+
alias :describe_host_nodes :show_host_nodes
|
110
|
+
|
111
|
+
def show_instance_specs(list = [], account = self.account)
|
112
|
+
make_request("#{self.web_api}/api/instance_specs",Net::HTTP::Get,account, list).first["results"]
|
113
|
+
end
|
114
|
+
alias :describe_instance_specs :show_instance_specs
|
115
|
+
|
116
|
+
# This method could be taken care of by the EC2 adapter but since we
|
117
|
+
# want to show ip addresses differently from EC2, we add it to the
|
118
|
+
# Wakame part of Tama
|
119
|
+
def show_instances(list = [])
|
120
|
+
instances = make_request("#{self.web_api}/api/instances",Net::HTTP::Get,account, list)
|
121
|
+
build_instances_hash(instances,account)
|
122
|
+
end
|
123
|
+
alias :describe_instances :show_instances
|
124
|
+
|
125
|
+
def make_request(uri,type,accesskey,list = [])
|
126
|
+
api = URI.parse(uri)
|
127
|
+
|
128
|
+
req = type.new(api.path)
|
129
|
+
req.add_field("X_VDC_ACCOUNT_UUID", accesskey)
|
130
|
+
|
131
|
+
req.body = ""
|
132
|
+
#req.set_form_data(form_data) unless form_data.nil?
|
133
|
+
|
134
|
+
session = Net::HTTP.new(api.host, api.port)
|
135
|
+
session.use_ssl = (self.protocol == "https")
|
136
|
+
|
137
|
+
res = session.start do |http|
|
138
|
+
http.request(req)
|
139
|
+
end
|
140
|
+
|
141
|
+
body = JSON.parse(res.body)
|
142
|
+
body.first["results"].delete_if {|item| not list.member?(item["id"])} unless list.empty?
|
143
|
+
|
144
|
+
body
|
145
|
+
end
|
146
|
+
|
147
|
+
def web_api
|
148
|
+
protocol.to_s + "://" + host.to_s + ":" + port.to_s
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
class WakameApiTest
|
153
|
+
attr_accessor :host_nodes_file
|
154
|
+
attr_accessor :show_instance_specs_file
|
155
|
+
attr_accessor :show_instances_file
|
156
|
+
attr_accessor :private_network_name
|
157
|
+
attr_accessor :account
|
158
|
+
|
159
|
+
alias :describe_instance_specs_file :show_instance_specs_file
|
160
|
+
alias :describe_instance_specs_file= :show_instance_specs_file=
|
161
|
+
alias :describe_instances_file :show_instances_file
|
162
|
+
alias :describe_instances_file= :show_instances_file=
|
163
|
+
alias :describe_host_nodes_file :host_nodes_file
|
164
|
+
alias :describe_host_nodes_file= :host_nodes_file=
|
165
|
+
|
166
|
+
include InstanceHashBuilder
|
167
|
+
|
168
|
+
def initialize
|
169
|
+
self.host_nodes_file = "#{File.expand_path(File.dirname(__FILE__))}/../../test/test_files/host_nodes.json"
|
170
|
+
self.show_instance_specs_file = "#{File.expand_path(File.dirname(__FILE__))}/../../test/test_files/show_instance_specs.json"
|
171
|
+
self.show_instances_file = "#{File.expand_path(File.dirname(__FILE__))}/../../test/test_files/describe_instances.json"
|
172
|
+
|
173
|
+
self.account = "a-shpoolxx"
|
174
|
+
self.private_network_name = "nw-data"
|
175
|
+
end
|
176
|
+
|
177
|
+
def show_host_nodes(list = [])
|
178
|
+
read_file(self.host_nodes_file, list).first["results"]
|
179
|
+
end
|
180
|
+
alias :describe_host_nodes :show_host_nodes
|
181
|
+
|
182
|
+
def show_instance_specs(list = [])
|
183
|
+
read_file(self.show_instance_specs_file, list).first["results"]
|
184
|
+
end
|
185
|
+
alias :describe_instance_specs :show_instance_specs
|
186
|
+
|
187
|
+
# This method could be taken care of by the EC2 adapter but since we
|
188
|
+
# want to show ip addresses differently from EC2, we add it to the
|
189
|
+
# Wakame part of Tama
|
190
|
+
def show_instances(list = [])
|
191
|
+
instances = read_file(self.show_instances_file, list)
|
192
|
+
build_instances_hash(instances,self.account)
|
193
|
+
end
|
194
|
+
alias :describe_instances :show_instances
|
195
|
+
|
196
|
+
private
|
197
|
+
def read_file(file,list = [])
|
198
|
+
File.open(file) { |file|
|
199
|
+
res = JSON.parse(file.readlines.join.to_s)
|
200
|
+
res.first["results"].delete_if {|item| not list.member?(item["id"])} unless list.empty?
|
201
|
+
res
|
202
|
+
}
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|
206
|
+
end
|