commit
6edd53f510
|
@ -69,6 +69,8 @@ module Fog
|
||||||
request :terminate_instances
|
request :terminate_instances
|
||||||
request :start_instances
|
request :start_instances
|
||||||
request :stop_instances
|
request :stop_instances
|
||||||
|
request :monitor_instances
|
||||||
|
request :unmonitor_instances
|
||||||
|
|
||||||
class Mock
|
class Mock
|
||||||
|
|
||||||
|
@ -134,6 +136,7 @@ module Fog
|
||||||
|
|
||||||
@aws_access_key_id = options[:aws_access_key_id]
|
@aws_access_key_id = options[:aws_access_key_id]
|
||||||
@region = options[:region] || 'us-east-1'
|
@region = options[:region] || 'us-east-1'
|
||||||
|
|
||||||
reset_data
|
reset_data
|
||||||
@owner_id = @data[:owner_id]
|
@owner_id = @data[:owner_id]
|
||||||
end
|
end
|
||||||
|
|
|
@ -215,6 +215,29 @@ module Fog
|
||||||
connection.volumes(:server => self)
|
connection.volumes(:server => self)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
#I tried to call it monitoring= and be smart with attributes[]
|
||||||
|
#but in #save a merge_attribute is called after run_instance
|
||||||
|
#thus making an un-necessary request. Use this until finding a clever solution
|
||||||
|
def monitor=(boolean)
|
||||||
|
|
||||||
|
#we don't have a server yet. the status silently goes in the attributes for run_instances
|
||||||
|
if !identity
|
||||||
|
self.monitoring=boolean
|
||||||
|
end
|
||||||
|
|
||||||
|
case boolean
|
||||||
|
when true
|
||||||
|
response = connection.monitor_instances(identity)
|
||||||
|
when false
|
||||||
|
response = connection.unmonitor_instances(identity)
|
||||||
|
else
|
||||||
|
raise ArgumentError.new("only Boolean allowed here")
|
||||||
|
end
|
||||||
|
|
||||||
|
#set the attribute, there is only one instance_id here
|
||||||
|
response.body['instancesSet'][0]['monitoring'] == 'enabled' ? self.monitoring=true : self.monitoring=false
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
module Fog
|
||||||
|
module Parsers
|
||||||
|
module AWS
|
||||||
|
module Compute
|
||||||
|
|
||||||
|
class MonitorUnmonitorInstances < Fog::Parsers::Base
|
||||||
|
|
||||||
|
def reset
|
||||||
|
@response = {}
|
||||||
|
@instance_set = []
|
||||||
|
@current_instance_set = {}
|
||||||
|
end
|
||||||
|
|
||||||
|
def end_element(name)
|
||||||
|
case name
|
||||||
|
when 'requestId'
|
||||||
|
@response['requestId'] = @value
|
||||||
|
when 'instanceId'
|
||||||
|
@current_instance_set['instanceId'] = @value
|
||||||
|
when 'item'
|
||||||
|
@instance_set << @current_instance_set
|
||||||
|
@current_instance_set = {}
|
||||||
|
when 'state'
|
||||||
|
@current_instance_set['monitoring'] = @value
|
||||||
|
when 'instancesSet'
|
||||||
|
@response['instancesSet'] = @instance_set
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,52 @@
|
||||||
|
module Fog
|
||||||
|
module AWS
|
||||||
|
class Compute
|
||||||
|
|
||||||
|
class Real
|
||||||
|
|
||||||
|
require 'fog/compute/parsers/aws/monitor_unmonitor_instances'
|
||||||
|
|
||||||
|
# Monitor specified instance
|
||||||
|
# http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-MonitorInstances.html
|
||||||
|
#
|
||||||
|
# ==== Parameters
|
||||||
|
# * instance_ids<~Array> - Arrays of instances Ids to monitor
|
||||||
|
#
|
||||||
|
# ==== Returns
|
||||||
|
# * response<~Excon::Response>:
|
||||||
|
# * body<~Hash>:
|
||||||
|
# * 'requestId'<~String> - Id of request
|
||||||
|
# * 'instancesSet': http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-ItemType-MonitorInstancesResponseSetItemType.html
|
||||||
|
def monitor_instances(instance_ids)
|
||||||
|
params = AWS.indexed_param('InstanceId', instance_ids)
|
||||||
|
request({
|
||||||
|
'Action' => 'MonitorInstances',
|
||||||
|
:idempotent => true,
|
||||||
|
:parser => Fog::Parsers::AWS::Compute::MonitorUnmonitorInstances.new
|
||||||
|
}.merge!(params))
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
class Mock
|
||||||
|
|
||||||
|
def monitor_instances(instance_ids)
|
||||||
|
response = Excon::Response.new
|
||||||
|
response.status = 200
|
||||||
|
[*instance_ids].each do |instance_id|
|
||||||
|
if instance = @data[:instances][instance_id]
|
||||||
|
instance['monitoring']['state'] = 'enabled'
|
||||||
|
else
|
||||||
|
raise Fog::AWS::Compute::NotFound.new("The instance ID '#{instance_ids}' does not exist")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
instances_set = [*instance_ids].inject([]) { |memo, id| memo << {'instanceId' => id, 'monitoring' => 'enabled'} }
|
||||||
|
response.body = {'requestId' => 'some_request_id', 'instancesSet' => instances_set}
|
||||||
|
response
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,53 @@
|
||||||
|
module Fog
|
||||||
|
module AWS
|
||||||
|
class Compute
|
||||||
|
|
||||||
|
class Real
|
||||||
|
|
||||||
|
require 'fog/compute/parsers/aws/monitor_unmonitor_instances'
|
||||||
|
|
||||||
|
# UnMonitor specified instance
|
||||||
|
# http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-UnmonitorInstances.html
|
||||||
|
#
|
||||||
|
# ==== Parameters
|
||||||
|
# * instance_ids<~Array> - Arrays of instances Ids to monitor
|
||||||
|
#
|
||||||
|
# ==== Returns
|
||||||
|
# * response<~Excon::Response>:
|
||||||
|
# * body<~Hash>:
|
||||||
|
# * 'requestId'<~String> - Id of request
|
||||||
|
# * 'instancesSet': http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-ItemType-MonitorInstancesResponseSetItemType.html
|
||||||
|
def unmonitor_instances(instance_ids)
|
||||||
|
params = AWS.indexed_param('InstanceId', instance_ids)
|
||||||
|
request({
|
||||||
|
'Action' => 'UnmonitorInstances',
|
||||||
|
:idempotent => true,
|
||||||
|
:parser => Fog::Parsers::AWS::Compute::MonitorUnmonitorInstances.new
|
||||||
|
}.merge!(params))
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
class Mock
|
||||||
|
|
||||||
|
def unmonitor_instances(instance_ids)
|
||||||
|
response = Excon::Response.new
|
||||||
|
response.status = 200
|
||||||
|
[*instance_ids].each do |instance_id|
|
||||||
|
if instance = @data[:instances][instance_id]
|
||||||
|
instance['monitoring']['state'] = 'enabled'
|
||||||
|
else
|
||||||
|
raise Fog::AWS::Compute::NotFound.new("The instance ID '#{instance_ids}' does not exist")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
instances_set = [*instance_ids].inject([]) { |memo, id| memo << {'instanceId' => id, 'monitoring' => 'disabled'} }
|
||||||
|
response.body = {'requestId' => 'some_request_id', 'instancesSet' => instances_set}
|
||||||
|
response
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,47 @@
|
||||||
|
Shindo.tests("AWS::Compute::Server | monitor", ['aws']) do
|
||||||
|
|
||||||
|
config = compute_providers[AWS]
|
||||||
|
|
||||||
|
if !Fog.mocking? || config[:mocked]
|
||||||
|
@instance = AWS[:compute].servers.new(config[:server_attributes])
|
||||||
|
end
|
||||||
|
|
||||||
|
tests('new instance') do
|
||||||
|
|
||||||
|
test('monitor') do
|
||||||
|
@instance.monitoring = true
|
||||||
|
@instance.attributes[:monitoring] == true
|
||||||
|
end
|
||||||
|
|
||||||
|
test('unmonitor') do
|
||||||
|
@instance.monitoring = false
|
||||||
|
@instance.attributes[:monitoring] == false
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
tests('existing instance') do
|
||||||
|
|
||||||
|
@instance.save
|
||||||
|
|
||||||
|
test('monitor') do
|
||||||
|
#what I'd really like to test is if connection.monitor_instances is being called
|
||||||
|
#this is a safeguard
|
||||||
|
@instance.identity != nil
|
||||||
|
@instance.monitoring = false
|
||||||
|
@instance.monitor = true
|
||||||
|
@instance.monitoring == true
|
||||||
|
end
|
||||||
|
|
||||||
|
test('unmonitor') do
|
||||||
|
#what I'd really like to test is if connection.monitor_instances is being called
|
||||||
|
#this is a safeguard
|
||||||
|
@instance.identity != nil
|
||||||
|
@instance.monitoring = true
|
||||||
|
@instance.monitor = false
|
||||||
|
@instance.monitoring == false
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
|
@ -4,29 +4,13 @@ for provider, config in compute_providers
|
||||||
|
|
||||||
server_tests(provider[:compute], (config[:server_attributes] || {}), config[:mocked]) do
|
server_tests(provider[:compute], (config[:server_attributes] || {}), config[:mocked]) do
|
||||||
|
|
||||||
tests('responds_to(:bootstrap)') do
|
if Fog.mocking? && !config[:mocked]
|
||||||
pending if Fog.mocking? && !config[:mocked]
|
pending
|
||||||
@instance.responds_to(:bootstrap)
|
else
|
||||||
end
|
responds_to(:boostrap)
|
||||||
|
responds_to(:public_ip_address)
|
||||||
tests('responds_to(:private_ip_address)') do
|
responds_to(:scp)
|
||||||
pending if Fog.mocking? && !config[:mocked]
|
responds_to(:ssh)
|
||||||
@instance.responds_to(:public_ip_address)
|
|
||||||
end
|
|
||||||
|
|
||||||
tests('responds_to(:public_ip_address)') do
|
|
||||||
pending if Fog.mocking? && !config[:mocked]
|
|
||||||
@instance.responds_to(:public_ip_address)
|
|
||||||
end
|
|
||||||
|
|
||||||
tests('responds_to(:scp)') do
|
|
||||||
pending if Fog.mocking? && !config[:mocked]
|
|
||||||
@instance.responds_to(:ssh)
|
|
||||||
end
|
|
||||||
|
|
||||||
tests('responds_to(:ssh)') do
|
|
||||||
pending if Fog.mocking? && !config[:mocked]
|
|
||||||
@instance.responds_to(:ssh)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
require 'fog/compute/parsers/aws/monitor_unmonitor_instances'
|
||||||
|
|
||||||
|
Shindo.tests('AWS::Compute::MonitorUnmonitorInstances | monitor/unmonitor parser') do
|
||||||
|
|
||||||
|
tests('success') do
|
||||||
|
|
||||||
|
tests('#parse') do
|
||||||
|
|
||||||
|
aws_result = <<-AWS
|
||||||
|
<UnmonitorInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2010-11-15/">
|
||||||
|
<requestId>59dbff89-35bd-4eac-99ed-be587EXAMPLE</requestId>
|
||||||
|
<instancesSet>
|
||||||
|
<item>
|
||||||
|
<instanceId>i-43a4412a</instanceId>
|
||||||
|
<monitoring>
|
||||||
|
<state>enabled</state>
|
||||||
|
</monitoring>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<instanceId>i-23a3397d</instanceId>
|
||||||
|
<monitoring>
|
||||||
|
<state>disabled</state>
|
||||||
|
</monitoring>
|
||||||
|
</item>
|
||||||
|
</instancesSet>
|
||||||
|
</UnmonitorInstancesResponse>
|
||||||
|
AWS
|
||||||
|
|
||||||
|
parser = Fog::Parsers::AWS::Compute::MonitorUnmonitorInstances.new
|
||||||
|
body = Nokogiri::XML::SAX::PushParser.new(parser)
|
||||||
|
body << aws_result
|
||||||
|
|
||||||
|
test('requestId') { parser.response['requestId'] == '59dbff89-35bd-4eac-99ed-be587EXAMPLE' }
|
||||||
|
|
||||||
|
test('enabled') do
|
||||||
|
selected = parser.response['instancesSet'].select { |item| item['instanceId'] == 'i-43a4412a' }[0]
|
||||||
|
selected['monitoring'] == 'enabled'
|
||||||
|
end
|
||||||
|
|
||||||
|
test('disabled') do
|
||||||
|
selected = parser.response['instancesSet'].select { |item| item['instanceId'] == 'i-23a3397d' }[0]
|
||||||
|
selected['monitoring'] == 'disabled'
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
Loading…
Reference in New Issue