vcloud-walker 3.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. data/.gitignore +9 -0
  2. data/Gemfile +12 -0
  3. data/LICENSE +20 -0
  4. data/README.md +55 -0
  5. data/Rakefile +21 -0
  6. data/bin/vcloud-walk +41 -0
  7. data/docs/examples/catalogs.json +40 -0
  8. data/docs/examples/edgegateways.json +285 -0
  9. data/docs/examples/networks.json +53 -0
  10. data/docs/examples/vdcs.json +221 -0
  11. data/jenkins.sh +9 -0
  12. data/jenkins_integration_tests.sh +11 -0
  13. data/lib/vcloud/walker/fog_interface.rb +48 -0
  14. data/lib/vcloud/walker/resource/catalog.rb +29 -0
  15. data/lib/vcloud/walker/resource/catalog_item.rb +25 -0
  16. data/lib/vcloud/walker/resource/collection.rb +13 -0
  17. data/lib/vcloud/walker/resource/entity.rb +27 -0
  18. data/lib/vcloud/walker/resource/gateway_ipsec_vpn_service.rb +46 -0
  19. data/lib/vcloud/walker/resource/network.rb +38 -0
  20. data/lib/vcloud/walker/resource/organization.rb +45 -0
  21. data/lib/vcloud/walker/resource/vapp.rb +46 -0
  22. data/lib/vcloud/walker/resource/vdc.rb +35 -0
  23. data/lib/vcloud/walker/resource/vm.rb +85 -0
  24. data/lib/vcloud/walker/resource.rb +11 -0
  25. data/lib/vcloud/walker/vcloud_session.rb +13 -0
  26. data/lib/vcloud/walker/version.rb +5 -0
  27. data/lib/vcloud/walker.rb +23 -0
  28. data/scripts/configure_walker_ci_vse.rb +31 -0
  29. data/scripts/data/walker_ci/carrenza.yaml +17 -0
  30. data/scripts/data/walker_ci/skyscape.yaml +17 -0
  31. data/scripts/generate_fog_conf_file.sh +6 -0
  32. data/spec/fog_interface_spec.rb +93 -0
  33. data/spec/integration/vcloud_walker_spec.rb +74 -0
  34. data/spec/spec_helper.rb +45 -0
  35. data/spec/stubs/service_layer_stub.rb +109 -0
  36. data/spec/stubs/stubs.rb +46 -0
  37. data/spec/vcloud/walker_spec.rb +59 -0
  38. data/spec/walk/catalogs_spec.rb +31 -0
  39. data/spec/walk/entity_spec.rb +69 -0
  40. data/spec/walk/gateway_ipsec_vpn_service_spec.rb +157 -0
  41. data/spec/walk/network_spec.rb +70 -0
  42. data/spec/walk/organization_spec.rb +53 -0
  43. data/spec/walk/vapp_spec.rb +24 -0
  44. data/spec/walk/vdcs_spec.rb +30 -0
  45. data/spec/walk/vm_spec.rb +122 -0
  46. data/vcloud-walker.gemspec +31 -0
  47. metadata +274 -0
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+ require 'rspec/mocks'
3
+
4
+ describe Vcloud::Walker::Resource::Catalogs do
5
+
6
+ it "should summarize catalogs" do
7
+ set_login_credential
8
+ mock_fog_item = double(:catalog_item,
9
+ :id => "12345",
10
+ :name => 'ubuntu 11.04',
11
+ :description => 'image for ubuntu 11.04',
12
+ :vapp_template_id => 'vapp-template-01')
13
+ mock_fog_catalog = double(:catalog,
14
+ :id => 'catalog_id_1',
15
+ :name => 'Default catalog',
16
+ :description => 'default catalog for infrastructure',
17
+ :catalog_items => double(:catalog_items, :all => [mock_fog_item]))
18
+
19
+ catalog_summary = Vcloud::Walker::Resource::Catalogs.new([mock_fog_catalog]).to_summary
20
+ catalog_summary.count.should == 1
21
+ catalog_summary.first[:items].count.should == 1
22
+ catalog_summary.should == [{
23
+ :id => "catalog_id_1",
24
+ :name => "Default catalog",
25
+ :description => "default catalog for infrastructure",
26
+ :items => [
27
+ {:id => "12345", :name => "ubuntu 11.04", :description => "image for ubuntu 11.04", :vapp_template_id => "vapp-template-01"}
28
+ ]
29
+ }]
30
+ end
31
+ end
@@ -0,0 +1,69 @@
1
+ require 'spec_helper'
2
+
3
+ module Vcloud
4
+ module Walker
5
+ module Resource
6
+
7
+ class TestData < Entity
8
+ attr_accessor :name
9
+
10
+ def initialize data
11
+ self.name = data.name
12
+ end
13
+ end
14
+
15
+ class TestDataCollection < Collection
16
+ def initialize coll
17
+ coll.each do |c|
18
+ self << Vcloud::Walker::Resource::TestData.new(c)
19
+ end
20
+ end
21
+
22
+ end
23
+
24
+ class TestClass < Entity
25
+ attr_accessor :test_data
26
+ attr_accessor :description
27
+
28
+ def initialize test
29
+ self.test_data = TestDataCollection.new(test.collection)
30
+ self.description = test.description
31
+ end
32
+ end
33
+
34
+ class TestNestedEntity < Entity
35
+ attr_accessor :test_data
36
+ def initialize data
37
+ self.test_data = TestData.new(data)
38
+ end
39
+ end
40
+
41
+ end
42
+ end
43
+
44
+ describe Vcloud::Walker::Resource::Entity do
45
+ it 'should be able to nested collections inside entities' do
46
+ collection = [double(:name => 'collection 1'), double(:name => 'collection 2')]
47
+ test_class = Vcloud::Walker::Resource::TestClass.new(double(:description => 'test class desc', :collection => collection))
48
+
49
+ test_class.to_summary.should == {:test_data => [{:name => "collection 1"}, {:name => "collection 2"}], :description => "test class desc"}
50
+ end
51
+
52
+ it 'should summaries a class as a hash and remove @ from the symbol names' do
53
+ collection = [double(:name => 'collection 1'), double(:name => 'collection 2')]
54
+ test_class = Vcloud::Walker::Resource::TestClass.new(double(:description => 'test class desc', :collection => collection))
55
+ test_class.instance_variables.should eq([:@test_data, :@description])
56
+ test_summary = test_class.to_summary
57
+ test_summary.keys.should eq([:test_data, :description])
58
+ end
59
+
60
+ it 'should be able to nest entity inside entity' do
61
+ nested_entities = Vcloud::Walker::Resource::TestNestedEntity.new(double(:data, :name => 'Data 1'))
62
+ expect(nested_entities.to_summary).to eq({:test_data=>{:name=>"Data 1"}})
63
+
64
+ end
65
+
66
+ end
67
+ end
68
+
69
+
@@ -0,0 +1,157 @@
1
+ require 'spec_helper'
2
+
3
+ describe Vcloud::Walker::Resource::GatewayIpsecVpnService do
4
+ context "vpn service with single tunnel" do
5
+ before(:all) do
6
+ fog_vpn_service = {
7
+ IsEnabled: true,
8
+ Tunnel: {
9
+ Name: "ss_one",
10
+ Description: "desc one",
11
+ IpsecVpnThirdPartyPeer: {
12
+ PeerId: "1"
13
+ },
14
+ PeerIpAddress: "8.8.8.8",
15
+ PeerId: "1",
16
+ LocalIpAddress: "192.0.2.1",
17
+ LocalId: "1",
18
+ LocalSubnet: {
19
+ Name: "Default",
20
+ Gateway: "192.168.0.1",
21
+ Netmask: "255.255.0.0"
22
+ },
23
+ PeerSubnet: {
24
+ Name: "8.8.8.0/8",
25
+ Gateway: "8.8.8.0",
26
+ Netmask: "255.0.0.0"
27
+ },
28
+ SharedSecret: "DoNotDiscloseDoNotDiscloseDoNotDiscloseDoNotDiscloseDoNotDisclose",
29
+ SharedSecretEncrypted: "false",
30
+ EncryptionProtocol: "AES256",
31
+ Mtu: "1500",
32
+ AdditionalDetails: {
33
+ shared_network: true
34
+ },
35
+ IsEnabled: "true",
36
+ IsOperational: "false"
37
+ }
38
+ }
39
+
40
+ @gateway_vpn_service = Vcloud::Walker::Resource::GatewayIpsecVpnService.new(fog_vpn_service)
41
+ end
42
+ it "should report status of vpn service" do
43
+ expect(@gateway_vpn_service.IsEnabled).to eq(true)
44
+ expect(@gateway_vpn_service.Tunnels).not_to be_empty
45
+ end
46
+
47
+ context "report tunnel info" do
48
+ before(:all) do
49
+ @tunnel = @gateway_vpn_service.Tunnels.first
50
+ end
51
+
52
+ it "with peer details" do
53
+ expect(@tunnel[:PeerId]).to eq('1')
54
+ expect(@tunnel[:PeerIpAddress]).to eq('8.8.8.8')
55
+ expect(@tunnel[:PeerSubnet]).to eq({
56
+ Name: "8.8.8.0/8",
57
+ Gateway: "8.8.8.0",
58
+ Netmask: "255.0.0.0"
59
+ })
60
+ end
61
+
62
+ it "with local network details" do
63
+ expect(@tunnel[:LocalId]).to eq('1')
64
+ expect(@tunnel[:LocalIpAddress]).to eq('192.0.2.1')
65
+ expect(@tunnel[:LocalSubnet]).to eq({
66
+ Name: "Default",
67
+ Gateway: "192.168.0.1",
68
+ Netmask: "255.255.0.0"
69
+ })
70
+ end
71
+
72
+ it "with maximum transmission unit" do
73
+ expect(@tunnel[:Mtu]).to eq('1500')
74
+ end
75
+
76
+ it "with masked vpn shared secret information" do
77
+ expect(@tunnel[:SharedSecret]).to eq("*" * 65)
78
+ expect(@tunnel[:SharedSecretEncrypted]).to eq("******")
79
+ expect(@tunnel[:EncryptionProtocol]).to eq("******")
80
+ end
81
+
82
+ it "should skip any addditional vpn details provided by fog" do
83
+ expect(@tunnel[:AdditionalDetails]).to be_nil
84
+ end
85
+ end
86
+
87
+ end
88
+
89
+ it "should report vpn service with multiple tunnels" do
90
+ fog_vpn_service = {
91
+ IsEnabled: true,
92
+ Tunnel: [
93
+ {
94
+ Name: "remove vpn 1",
95
+ Description: "describe me",
96
+ IpsecVpnThirdPartyPeer: {
97
+ PeerId: "1"
98
+ },
99
+ PeerIpAddress: "8.8.8.8",
100
+ PeerId: "1",
101
+ LocalIpAddress: "192.0.2.1",
102
+ LocalId: "1",
103
+ LocalSubnet: {
104
+ Name: "Default",
105
+ Gateway: "192.168.0.1",
106
+ Netmask: "255.255.0.0"
107
+ },
108
+ PeerSubnet: {
109
+ Name: "8.8.8.0/8",
110
+ Gateway: "8.8.8.0",
111
+ Netmask: "255.0.0.0"
112
+ },
113
+ SharedSecret: "DoNotDiscloseDoNotDiscloseDoNotDiscloseDoNotDiscloseDoNotDisclose",
114
+ SharedSecretEncrypted: "false",
115
+ EncryptionProtocol: "AES256",
116
+ Mtu: "1500",
117
+ AdditionalDetails: {
118
+ shared_network: true
119
+ },
120
+ IsEnabled: "true",
121
+ IsOperational: "false"
122
+ },
123
+ {
124
+ Name: "remote vpn 2",
125
+ Description: "describe me",
126
+ IpsecVpnThirdPartyPeer: {
127
+ PeerId: "2"
128
+ },
129
+ PeerIpAddress: "8.8.4.4",
130
+ PeerId: "2",
131
+ LocalIpAddress: "172.26.2.3",
132
+ LocalId: "2",
133
+ LocalSubnet: {
134
+ Name: "Default",
135
+ Gateway: "192.168.0.1",
136
+ Netmask: "255.255.0.0"
137
+ },
138
+ PeerSubnet: {
139
+ Name: "8.8.4.4/8",
140
+ Gateway: "8.8.4.4",
141
+ Netmask: "255.0.0.0"
142
+ },
143
+ SharedSecret: "PrivyPrivyPrivyPrivyPrivyPrivyPrivyPrivyPrivyPrivy",
144
+ SharedSecretEncrypted: "false",
145
+ EncryptionProtocol: "AES256",
146
+ Mtu: "1500",
147
+ IsEnabled: "true",
148
+ IsOperational: "false"
149
+ }
150
+ ]
151
+ }
152
+
153
+ gateway_vpn_service = Vcloud::Walker::Resource::GatewayIpsecVpnService.new(fog_vpn_service)
154
+ expect(gateway_vpn_service.Tunnels.count).to eq(2)
155
+ end
156
+
157
+ end
@@ -0,0 +1,70 @@
1
+ require 'spec_helper'
2
+ require 'rspec/mocks'
3
+ require 'fog'
4
+
5
+ describe Vcloud::Walker::Resource::Networks do
6
+
7
+ context "Summary" do
8
+ before(:each) do
9
+ set_login_credential
10
+ end
11
+
12
+ it "should walk all networks within given org" do
13
+
14
+ mock_fog_network = mock_fog_network_object
15
+
16
+ networks = Vcloud::Walker::Resource::Networks.new([mock_fog_network, mock_fog_network])
17
+
18
+ networks.count.should == 2
19
+ end
20
+
21
+
22
+ it "should be happy with one network" do
23
+
24
+ mock_fog_network = mock_fog_network_object
25
+
26
+ networks = Vcloud::Walker::Resource::Networks.new([mock_fog_network])
27
+
28
+ networks.count.should == 1
29
+ end
30
+
31
+ it "should handle having no networks" do
32
+ networks = Vcloud::Walker::Resource::Networks.new([])
33
+
34
+ networks.count.should == 0
35
+ end
36
+
37
+
38
+ it "should map parameters of a network to the local entity" do
39
+ mock_fog_network = mock_fog_network_object
40
+ expect(mock_fog_network).to receive(:dns1).and_return('sausage')
41
+
42
+ networks = Vcloud::Walker::Resource::Networks.new([mock_fog_network])
43
+
44
+ networks.count.should == 1
45
+ networks.first.id.should == :network_id_1
46
+ networks.first.name.should == :name
47
+ networks.first.dns_suffix == :dns_suffix
48
+ networks.first.dns1 == 'sausage'
49
+
50
+ end
51
+
52
+ end
53
+
54
+ private
55
+ def mock_fog_network_object
56
+ double(:fog_network,
57
+ :id => :network_id_1,
58
+ :name => :name,
59
+ :description => :default,
60
+ :is_inherited => false,
61
+ :gateway => false,
62
+ :netmask => :default,
63
+ :dns_suffix => :dns_suffix,
64
+ :dns2 => :default,
65
+ :dns1 => :default,
66
+ :ip_ranges => :default)
67
+ end
68
+
69
+
70
+ end
@@ -0,0 +1,53 @@
1
+ require 'spec_helper'
2
+
3
+ describe Vcloud::Walker::Resource::Organization do
4
+
5
+ it "should retrieve networks" do
6
+ fog_networks = double(:fog_networks)
7
+ Vcloud::Walker::FogInterface.should_receive(:get_networks).and_return(fog_networks)
8
+ Vcloud::Walker::Resource::Networks.should_receive(:new).with(fog_networks).and_return(double(:walker_networks, :to_summary => [:network => "Network 1"]))
9
+ Vcloud::Walker::Resource::Organization.networks.should == [:network => "Network 1"]
10
+ end
11
+
12
+ it "should retrieve catalogs" do
13
+ fog_catalogs = double(:fog_catalogs)
14
+ Vcloud::Walker::FogInterface.should_receive(:get_catalogs).and_return(fog_catalogs)
15
+ Vcloud::Walker::Resource::Catalogs.should_receive(:new).with(fog_catalogs).and_return(double(:walker_catalogs, :to_summary => [:catalog => "Catalog 1"]))
16
+ Vcloud::Walker::Resource::Organization.catalogs.should == [:catalog => "Catalog 1"]
17
+ end
18
+
19
+ it "should retrieve vdcs" do
20
+ fog_vdcs = double(:fog_vdcs)
21
+ Vcloud::Walker::FogInterface.should_receive(:get_vdcs).and_return(fog_vdcs)
22
+ Vcloud::Walker::Resource::Vdcs.should_receive(:new).with(fog_vdcs).and_return(double(:walker_vdcs, :to_summary => [:vdc => "VDC 1"]))
23
+ Vcloud::Walker::Resource::Organization.vdcs.should == [:vdc => "VDC 1"]
24
+ end
25
+
26
+ it "should retrieve edgegateways" do
27
+ fog_edgegateways = [{:id => 'urn:vcloud:gateway:1', :href => 'host/1', :name => 'Gateway 1',
28
+ :Configuration => { :EdgeGatewayServiceConfiguration => {}}}]
29
+ Vcloud::Walker::FogInterface.should_receive(:get_edge_gateways).and_return(fog_edgegateways)
30
+
31
+ Vcloud::Walker::Resource::Organization.edgegateways.should == [{:id => '1',
32
+ name: 'Gateway 1',
33
+ :href => 'host/1',
34
+ :Configuration => {
35
+ :EdgeGatewayServiceConfiguration => {}}
36
+ }]
37
+ end
38
+
39
+ it "should retrive entire organization" do
40
+ Vcloud::Walker::Resource::Organization.should_receive(:edgegateways).and_return([:edgegateway => 'Gateway 1'])
41
+ Vcloud::Walker::Resource::Organization.should_receive(:vdcs).and_return([:vdc => "VDC 1"])
42
+ Vcloud::Walker::Resource::Organization.should_receive(:catalogs).and_return([:catalog => "Catalog 1"])
43
+ Vcloud::Walker::Resource::Organization.should_receive(:networks).and_return([:network => "Network 1"])
44
+
45
+ Vcloud::Walker::Resource::Organization.organization.should == {
46
+ :vdcs => [{ :vdc => "VDC 1" }],
47
+ :networks => [{ :network => "Network 1" }],
48
+ :catalogs => [{ :catalog => "Catalog 1" }],
49
+ :edgegateways => [{ :edgegateway => "Gateway 1" }]
50
+ }
51
+ end
52
+ end
53
+
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe Vcloud::Walker::Resource::VApp do
4
+
5
+ context 'populate summary vapp model' do
6
+ before(:each) do
7
+ fog_vapp = Fog::ServiceLayerStub.vapp_body
8
+ @metadata = {:name => 'web-app-1', :shutdown => true}
9
+ Vcloud::Core::Vapp.should_receive(:get_metadata).with("vapp-aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee").and_return(@metadata)
10
+ Vcloud::Walker::Resource::Vms.should_receive(:new).with(fog_vapp[:Children][:Vm])
11
+
12
+ @vapp_summary = Vcloud::Walker::Resource::VApp.new(fog_vapp)
13
+ end
14
+
15
+ it 'should report id from the href' do
16
+ @vapp_summary.id.should == 'vapp-aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
17
+ end
18
+
19
+ it "should report metadata" do
20
+ @vapp_summary.metadata.count.should == 2
21
+ @vapp_summary.metadata.should == @metadata
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+ require 'fog'
3
+
4
+ describe Vcloud::Walker::Resource::Vdcs do
5
+ let(:api_session) { double(:fog_session) }
6
+
7
+ context 'vdcs' do
8
+
9
+ it "should summarize vdcs" do
10
+ Fog::Compute::VcloudDirector.should_receive(:new).with(any_args()).and_return(api_session)
11
+ mock_fog_vdcs = StubCollectionBuilders.vdcs(StubVdc.new.vapps([mock_vapp]).build)
12
+ api_session.should_receive(:get_vapp).with(1).and_return(Fog::ServiceLayerStub.mock_vapp)
13
+ Vcloud::Core::Vm.should_receive(:get_metadata).with("vm-d19d84a5-c950-4497-a638-23eccc4226a5").and_return({})
14
+ Vcloud::Core::Vapp.should_receive(:get_metadata).with("vapp-aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee").and_return({})
15
+
16
+ vdcs_summary = Vcloud::Walker::Resource::Vdcs.new(mock_fog_vdcs).to_summary
17
+
18
+ vdc_summary = vdcs_summary.first
19
+ vdc_summary[:vapps].count.should == 1
20
+ vdc_summary[:vapps].first[:vms].count == 1
21
+ end
22
+
23
+ private
24
+
25
+ def mock_vapp
26
+ double(:vapp, :id => 1)
27
+ end
28
+
29
+ end
30
+ end
@@ -0,0 +1,122 @@
1
+ require 'spec_helper'
2
+
3
+ describe Vcloud::Walker::Resource::Vm do
4
+
5
+ context 'populate summary vm model' do
6
+ before(:each) do
7
+ fog_vm = {
8
+ :deployed => "true",
9
+ :status => "8",
10
+ :name => "ubuntu-testing-template",
11
+ :id => "urn:vcloud:vm:aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
12
+ :href => 'https://myvdc.carrenza.net/api/vApp/vm-aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee',
13
+ :"ovf:VirtualHardwareSection" =>
14
+ {:"ovf:Info" => "Virtual hardware requirements",
15
+ :"ovf:System" => {:"vssd:ElementName" => "Virtual Hardware Family", :"vssd:VirtualSystemType" => "vmx-08"},
16
+ :'ovf:Item' => Fog::ServiceLayerStub.hardware_resources
17
+ },
18
+ :"ovf:OperatingSystemSection" =>
19
+ {
20
+ :vmw_osType => "ubuntu64Guest",
21
+ :"ovf:Info" => "Specifies the operating system installed",
22
+ :"ovf:Description" => "Ubuntu Linux (64-bit)"
23
+ },
24
+ :NetworkConnectionSection =>
25
+ {
26
+ :type => "application/vnd.vmware.vcloud.networkConnectionSection+xml",
27
+ :ovf_required => "false",
28
+ :"ovf:Info" => "Specifies the available VM network connections",
29
+ :PrimaryNetworkConnectionIndex => "0",
30
+ :NetworkConnection =>
31
+ [
32
+ {
33
+ :network => "Default",
34
+ :needsCustomization => "true",
35
+ :NetworkConnectionIndex => "0",
36
+ :IpAddress => "192.168.254.100",
37
+ :IsConnected => "true",
38
+ :MACAddress => "00:50:56:00:00:01",
39
+ :IpAddressAllocationMode => "MANUAL"
40
+ },
41
+ ]
42
+ },
43
+ :RuntimeInfoSection => {:VMWareTools => {:version => "2147483647"}},
44
+ :StorageProfile =>
45
+ {
46
+ :type=>"application/vnd.vmware.vcloud.vdcStorageProfile+xml",
47
+ :name=>"TEST-STORAGE-PROFILE",
48
+ :href=>"https://api.vcd.portal.examplecloud.com/api/vdcStorageProfile/00000000-aaaa-bbbb-aaaa-000000000000"
49
+ }
50
+ }
51
+
52
+ @metadata = {:name => 'web-app-1', :shutdown => true}
53
+ Vcloud::Core::Vm.should_receive(:get_metadata).with("vm-aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee").and_return(@metadata)
54
+
55
+ @vm_summary = Vcloud::Walker::Resource::Vm.new(fog_vm)
56
+ end
57
+
58
+ it 'should report id from the href' do
59
+ @vm_summary.id.should == 'vm-aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
60
+ end
61
+
62
+ it "should populate vmware tool version" do
63
+ @vm_summary.vmware_tools.should == {:version => "2147483647"}
64
+ end
65
+
66
+ it "should populate virtual system type" do
67
+ @vm_summary.virtual_system_type.should == "vmx-08"
68
+ end
69
+
70
+ it "should populate operating system" do
71
+ @vm_summary.operating_system.should == 'Ubuntu Linux (64-bit)'
72
+ end
73
+
74
+ it "should populate network connection interface" do
75
+ @vm_summary.primary_network_connection_index.should == '0'
76
+ @vm_summary.network_connections.count.should == 1
77
+ @vm_summary.network_connections.first[:network].should == 'Default'
78
+ end
79
+
80
+ it "should populate storage profile" do
81
+ @vm_summary.storage_profile[:name].should == "TEST-STORAGE-PROFILE"
82
+ end
83
+
84
+ it "should populate storage profile id" do
85
+ @vm_summary.storage_profile[:id].should == "00000000-aaaa-bbbb-aaaa-000000000000"
86
+ end
87
+
88
+ context "hardware resource info" do
89
+
90
+ it "report cpu" do
91
+ @vm_summary.cpu.should == '2 virtual CPU(s)'
92
+ end
93
+
94
+ it "report memory" do
95
+ @vm_summary.memory.should == '4096 MB of memory'
96
+ end
97
+
98
+ it "report disk info" do
99
+ @vm_summary.disks.count.should == 2
100
+ @vm_summary.disks.first.should == {:name => "Hard disk 1", :size => 11265}
101
+ @vm_summary.disks.last.should == {:name => "Hard disk 2", :size => 307200}
102
+ end
103
+
104
+ it "report network card info" do
105
+ @vm_summary.network_cards.count.should == 1
106
+ @vm_summary.network_cards[0].should == {
107
+ :mac_address => '00:50:56:00:00:01',
108
+ :name => "Network adapter 0",
109
+ :type => "E1000"
110
+ }
111
+ end
112
+
113
+ end
114
+
115
+ it "report metadata" do
116
+ @vm_summary.metadata.count.should == 2
117
+ @vm_summary.metadata.should == @metadata
118
+ end
119
+
120
+ end
121
+ end
122
+
@@ -0,0 +1,31 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "vcloud/walker/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = 'vcloud-walker'
7
+ s.version = Vcloud::Walker::VERSION
8
+ s.authors = ['Government Digital Service']
9
+ s.homepage = 'https://github.com/alphagov/vcloud-walker'
10
+ s.summary = %q{Command line tool to describe vCloud entities}
11
+ s.description = %q{Vcloud-walker is a command line tool to describe different vCloud entities.
12
+ This tool is a thin layer around fog api, which exposes summarized vCloud entities
13
+ in the form of JSON}
14
+ s.license = 'MIT'
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.executables = s.files.grep(%r{^bin/}) {|f| File.basename(f)}
18
+ s.test_files = s.files.grep(%r{^(test|spec|features)/})
19
+ s.require_paths = ["lib"]
20
+
21
+ s.add_development_dependency 'rake'
22
+ s.add_development_dependency 'rspec', '~> 2.14.1'
23
+ s.add_development_dependency 'rspec-mocks', '~> 2.14.3'
24
+ s.add_development_dependency 'json_spec', '~> 1.1.1'
25
+ s.add_runtime_dependency 'json', '~> 1.8.0'
26
+ s.add_runtime_dependency 'methadone'
27
+ s.add_runtime_dependency 'fog', '>= 1.19.0'
28
+ s.add_runtime_dependency 'vcloud-core', '>= 0.0.5'
29
+ s.add_development_dependency 'simplecov', '~> 0.8.2'
30
+ s.add_development_dependency 'gem_publisher', '1.2.0'
31
+ end