Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions lib/fog/azurerm/compute.rb
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ class AzureRM < Fog::Service
request :create_image
request :delete_image
request :get_image
request :list_virtual_machine_sizes

model_path 'fog/azurerm/models/compute'
model :availability_set
Expand All @@ -52,6 +53,8 @@ class AzureRM < Fog::Service
collection :servers
model :virtual_machine_extension
collection :virtual_machine_extensions
model :virtual_machine_size
collection :virtual_machine_sizes
model :managed_disk
collection :managed_disks
model :data_disk
Expand Down
6 changes: 6 additions & 0 deletions lib/fog/azurerm/docs/compute.md
Original file line number Diff line number Diff line change
Expand Up @@ -501,5 +501,11 @@ Destroy the given extension from the virtual machine
vm_extension.destroy
```

## List Virtual Machine Size

```ruby
fog_compute_service.virtual_machine_sizes(location: '<Location>').all
```

## Support and Feedback
Your feedback is appreciated! If you have specific issues with the fog ARM, you should file an issue via Github.
18 changes: 18 additions & 0 deletions lib/fog/azurerm/models/compute/virtual_machine_size.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
module Fog
module Compute
class AzureRM
class VirtualMachineSize < Fog::Model
identity :name
attribute :max_data_disk_count
attribute :number_of_cores
attribute :os_disk_size_in_mb
attribute :resource_disk_size_in_mb
attribute :memory_in_mb

def self.parse(virtual_machine_size)
get_hash_from_object(virtual_machine_size)
end
end
end
end
end
18 changes: 18 additions & 0 deletions lib/fog/azurerm/models/compute/virtual_machine_sizes.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
module Fog
module Compute
class AzureRM
class VirtualMachineSizes < Fog::Collection
attribute :location
model Fog::Compute::AzureRM::VirtualMachineSize

def all
requires :location
virtual_machine_sizes = service.list_virtual_machine_sizes(location).map do |virtual_machine_size|
Fog::Compute::AzureRM::VirtualMachineSize.parse(virtual_machine_size)
end
load(virtual_machine_sizes)
end
end
end
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ def list_available_sizes_for_virtual_machine(resource_group, name, async)
end
end
end

# This class provides the mock implementation for unit tests.
class Mock
def list_available_sizes_for_virtual_machine(*)
Expand Down
67 changes: 67 additions & 0 deletions lib/fog/azurerm/requests/compute/list_virtual_machine_sizes.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
module Fog
module Compute
class AzureRM
# Real class for Compute Request
class Real
def list_virtual_machine_sizes(location, async = false)
msg = 'Listing all VirtualMachineSize'
Fog::Logger.debug msg
begin
if async
response = @compute_mgmt_client.virtual_machine_sizes.list_async(location)
else
virtual_machine_sizes = @compute_mgmt_client.virtual_machine_sizes.list(location)
end
rescue MsRestAzure::AzureOperationError => e
raise_azure_exception(e, msg)
end
if async
response
else
Fog::Logger.debug 'VirtualMachineSizes listed successfully.'
virtual_machine_sizes.value
end
end
end

# Mock class for Compute Request
class Mock
def list_virtual_machine_sizes(*)
virtual_machine_sizes = [
{
'max_data_disk_count' => 1,
'memory_in_mb' => 768,
'name' => 'Standard_A0',
'number_of_cores' => 1,
'os_disk_size_in_mb' => 1_047_552,
'resource_disk_size_in_mb' => 20_480
}, {
'max_data_disk_count' => 2,
'memory_in_mb' => 1_792,
'name' => 'Standard_A1',
'number_of_cores' => 1,
'os_disk_size_in_mb' => 1_047_552,
'resource_disk_size_in_mb' => 71_680
}, {
'max_data_disk_count' => 4,
'memory_in_mb' => 3_584,
'name' => 'Standard_A2',
'number_of_cores' => 2,
'os_disk_size_in_mb' => 1_047_552,
'resource_disk_size_in_mb' => 138_240
}, {
'max_data_disk_count' => 1,
'memory_in_mb' => 768,
'name' => 'Basic_A0',
'number_of_cores' => 1,
'os_disk_size_in_mb' => 1_047_552,
'resource_disk_size_in_mb' => 20_480
}
]
virtual_machine_size_mapper = Azure::ARM::Compute::Models::VirtualMachineSizeListResult.mapper
@compute_mgmt_client.deserialize(virtual_machine_size_mapper, virtual_machine_sizes, 'result.body').value
end
end
end
end
end
2 changes: 2 additions & 0 deletions test/api_stub.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ module Compute
autoload :AvailabilitySet, File.expand_path('api_stub/models/compute/availability_set', __dir__)
autoload :VirtualMachineExtension, File.expand_path('api_stub/models/compute/virtual_machine_extension', __dir__)
autoload :ManagedDisk, File.expand_path('api_stub/models/compute/managed_disk', __dir__)
autoload :VirtualMachineSize, File.expand_path('api_stub/models/compute/virtual_machine_size', __dir__)
end

# Load test Resources models
Expand Down Expand Up @@ -79,6 +80,7 @@ module Compute
autoload :VirtualMachineExtension, File.expand_path('api_stub/requests/compute/virtual_machine_extension', __dir__)
autoload :ManagedDisk, File.expand_path('api_stub/requests/compute/managed_disk', __dir__)
autoload :Image, File.expand_path('api_stub/requests/compute/image', __dir__)
autoload :VirtualMachineSize, File.expand_path('api_stub/requests/compute/virtual_machine_size', __dir__)
end

# Load test Resources requests
Expand Down
49 changes: 49 additions & 0 deletions test/api_stub/models/compute/virtual_machine_size.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@

module ApiStub
module Models
module Compute
class VirtualMachineSize
def self.virtual_machine_sizes(sdk_compute_client)
virtual_machine_sizes = {
'value' => [
{
'max_data_disk_count' => 1,
'memory_in_mb' => 768,
'name' => 'Standard_A0',
'number_of_cores' => 1,
'os_disk_size_in_mb' => 1_047_552,
'resource_disk_size_in_mb' => 20_480
},
{
'max_data_disk_count' => 2,
'memory_in_mb' => 1_792,
'name' => 'Standard_A1',
'number_of_cores' => 1,
'os_disk_size_in_mb' => 1_047_552,
'resource_disk_size_in_mb' => 71_680
},
{
'max_data_disk_count' => 4,
'memory_in_mb' => 3_584,
'name' => 'Standard_A2',
'number_of_cores' => 2,
'os_disk_size_in_mb' => 1_047_552,
'resource_disk_size_in_mb' => 138_240
},
{
'max_data_disk_count' => 1,
'memory_in_mb' => 768,
'name' => 'Basic_A0',
'number_of_cores' => 1,
'os_disk_size_in_mb' => 1_047_552,
'resource_disk_size_in_mb' => 20_480
}
]
}
virtual_machine_size_mapper = Azure::ARM::Compute::Models::VirtualMachineSizeListResult.mapper
sdk_compute_client.deserialize(virtual_machine_size_mapper, virtual_machine_sizes, 'result.body').value
end
end
end
end
end
42 changes: 42 additions & 0 deletions test/api_stub/requests/compute/virtual_machine_size.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
module ApiStub
module Requests
module Compute
# Mock class for VirtualMachineSize Requests
class VirtualMachineSize
def self.list_response(sdk_compute_client)
body = '{ "value": [{
"max_data_disk_count": "1",
"memory_in_mb": "768",
"name": "standard_a0",
"number_of_cores": "1",
"os_disk_size_in_mb": "1_047_552",
"resource_disk_size_in_mb": "20_480"
}, {
"max_data_disk_count": "2",
"memory_in_mb": "1_792",
"name": "Standard_A1",
"number_of_cores": "1",
"os_disk_size_in_mb": "1_047_552",
"resource_disk_size_in_mb": "71_680"
}, {
"max_data_disk_count": "4",
"memory_in_mb": "3_584",
"name": "Standard_A2",
"number_of_cores": "2",
"os_disk_size_in_mb": "1_047_552",
"resource_disk_size_in_mb": "138_240"
}, {
"max_data_disk_count": "1",
"memory_in_mb": "768",
"name": "Basic_A0",
"number_of_cores": "1",
"os_disk_size_in_mb": "1_047_552",
"resource_disk_size_in_mb": "20_480"
}]}'
mapper = Azure::ARM::Compute::Models::VirtualMachineSizeListResult.mapper
sdk_compute_client.deserialize(mapper, Fog::JSON.decode(body), 'result.body')
end
end
end
end
end
27 changes: 27 additions & 0 deletions test/integration/virtual_machine_size.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
require 'fog/azurerm'
require 'yaml'

azure_credentials = YAML.load_file(File.expand_path('credentials/azure.yml', __dir__))

compute = Fog::Compute::AzureRM.new(
tenant_id: azure_credentials['tenant_id'],
client_id: azure_credentials['client_id'],
client_secret: azure_credentials['client_secret'],
subscription_id: azure_credentials['subscription_id']
)

begin
########################################################################################################################
###################### List virtual machine sizes ######################
########################################################################################################################

puts 'List of virtual machine sizes:'
virtual_machine_sizes = compute.virtual_machine_sizes(location: LOCATION)
virtual_machine_sizes.each do |virtual_machine_size|
puts "- #{virtual_machine_size.name}"
end

puts 'Integration Test for virtual machine size ran successfully!'
rescue StandardError
puts 'Integration Test for virtual machine size is failing!'
end
29 changes: 29 additions & 0 deletions test/models/compute/test_virtual_machine_size.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
require File.expand_path '../../test_helper', __dir__
# Test class for VirtualMachineSize Model
class TestVirtualMachineSize < Minitest::Test
def setup
@service = Fog::Compute::AzureRM.new(credentials)
@virtual_machine_size = virtual_machine_size(@service)
end

def test_model_attributes
attributes = %i(
name
max_data_disk_count
number_of_cores
os_disk_size_in_mb
resource_disk_size_in_mb
memory_in_mb
)
attributes.each do |attribute|
assert_respond_to @virtual_machine_size, attribute
end
end

def test_parse_method
virtual_machine_size_hash = Fog::Compute::AzureRM::VirtualMachineSize.parse(@response)
@response.instance_variables.each do |attribute|
assert_equal @response.instance_variable_get(attribute), virtual_machine_size_hash[attribute.to_s.delete('@')]
end
end
end
33 changes: 33 additions & 0 deletions test/models/compute/test_virtual_machine_sizes.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
require File.expand_path '../../test_helper', __dir__
# Test class for Managed Disk Collection
class TestVirtualMachineSizes < Minitest::Test
def setup
@service = Fog::Compute::AzureRM.new(credentials)
@virtual_machine_sizes = Fog::Compute::AzureRM::VirtualMachineSizes.new(location: 'location', service: @service)
@compute_client = @service.instance_variable_get(:@compute_mgmt_client)
@response = ApiStub::Models::Compute::VirtualMachineSize.virtual_machine_sizes(@compute_client)
end

def test_collection_attributes
assert_respond_to @virtual_machine_sizes, :location
end

def test_collection_methods
methods = %i(all)
methods.each do |method|
assert_respond_to @virtual_machine_sizes, method
end
end

def test_all_method_response
@service.stub :list_virtual_machine_sizes, @response do
sizes = @virtual_machine_sizes.all

assert_instance_of Fog::Compute::AzureRM::VirtualMachineSizes, sizes
assert sizes.size >= 1
sizes.each do |size|
assert_instance_of Fog::Compute::AzureRM::VirtualMachineSize, size
end
end
end
end
29 changes: 29 additions & 0 deletions test/requests/compute/test_list_virtual_machine_sizes.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
require File.expand_path '../../test_helper', __dir__
# Test class for List VirtualMachineSizes#

class TestListVirtualMachineSizes < Minitest::Test
def setup
@service = Fog::Compute::AzureRM.new(credentials)
@client = @service.instance_variable_get(:@compute_mgmt_client)
@virtual_machine_sizes = @client.virtual_machine_sizes
end

def test_list_virtual_machine_sizes_success
mocked_response = ApiStub::Requests::Compute::VirtualMachineSize.list_response(@client)
@virtual_machine_sizes.stub :list, mocked_response do
assert_equal mocked_response.value, @service.list_virtual_machine_sizes('location')
end

async_response = Concurrent::Promise.execute { 10 }
@virtual_machine_sizes.stub :list, async_response do
assert @service.list_virtual_machine_sizes('location', true)
end
end

def test_list_virtual_machine_sizes_failure
response = proc { raise MsRestAzure::AzureOperationError.new(nil, nil, 'error' => { 'message' => 'mocked exception' }) }
@virtual_machine_sizes.stub :list, response do
assert_raises(MsRestAzure::AzureOperationError) { @service.list_virtual_machine_sizes('location') }
end
end
end
12 changes: 12 additions & 0 deletions test/test_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,18 @@ def virtual_machine_extension(service)
)
end

def virtual_machine_size(service)
Fog::Compute::AzureRM::VirtualMachineSize.new(
name: 'Standard_A0',
max_data_disk_count: 1,
memory_in_mb: 768,
number_of_cores: 1,
os_disk_size_in_mb: 1_047_552,
resource_disk_size_in_mb: 20_480,
service: service
)
end

def availability_set(service)
Fog::Compute::AzureRM::AvailabilitySet.new(
name: 'availability-set',
Expand Down