1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00
fog--fog/lib/fog/aws/parsers/emr/describe_job_flows.rb
Bob Briski 0449132e12 Adding tests
* Few small changed to instance group parsing
* A bug in instance group request
* Added tests for all requests
2011-11-03 10:57:21 -07:00

140 lines
4.9 KiB
Ruby

module Fog
module Parsers
module AWS
module EMR
class DescribeJobFlows < Fog::Parsers::Base
def reset
@context = []
@contexts = ['BootstrapActions', 'ExecutionStatusDetail', 'Instances', 'Steps', 'InstanceGroups', 'Args']
@response = { 'JobFlows' => [] }
@bootstrap_actions = {'ScriptBootstrapActionConfig' => {'Args' => []}}
@instance = { 'InstanceGroups' => [], 'Placement' => {}}
@step = {
'ExecutionStatusDetail' => {},
'StepConfig' => {
'HadoopJarStepConfig' => {
'Args' => [],
'Properties' => []
}
}
}
@flow = {'Instances' => [], 'ExecutionStatusDetail' => {}, 'BootstrapActions' => [], 'Steps' => []}
@instance_group_detail = {}
@execution_status_detail = {}
end
def start_element(name, attrs = [])
super
if @contexts.include?(name)
@context.push(name)
end
end
def end_element(name)
if @context.last == 'BootstrapActions'
case name
when 'Name'
@bootstrap_actions[name] = value
when 'Path'
@bootstrap_actions['ScriptBootstrapActionConfig'][name] = value
when 'BootstrapActions'
@flow['BootstrapActions'] = @bootstrap_actions
@bootstrap_actions = {'ScriptBootstrapActionConfig' => {'Args' => []}}
end
end
if @context.last == 'ExecutionStatusDetail'
case name
when 'CreationDateTime', 'EndDateTime', 'LastStateChangeReason',
'ReadyDateTime', 'StartDateTime', 'State'
@execution_status_detail[name] = value
when 'ExecutionStatusDetail'
if @context.include?('Steps')
@step['ExecutionStatusDetail'] = @execution_status_detail
else
@flow['ExecutionStatusDetail'] = @execution_status_detail
end
@execution_status_detail = {}
end
end
if @context.last == 'Instances'
case name
when 'AvailabilityZone'
@instance['Placement'][name] = value
when 'Ec2KeyName', 'HadoopVersion', 'InstanceCount', 'KeepJobFlowAliveWhenNoSteps',
'MasterInstanceId', 'MasterInstanceType', 'MasterPublicDnsName', 'NormalizedInstanceHours',
'SlaveInstanceType', 'TerminationProtected'
@instance[name] = value
when 'member'
@instance['InstanceGroups'] << @instance_group_detail
@instance_group_detail = {}
when 'Instances'
@flow['Instances'] = @instance
@instance = { 'InstanceGroups' => [], 'Placement' => {}}
end
end
if @context.last == 'InstanceGroups'
case name
when 'member'
@instance['InstanceGroups'] << @instance_group_detail
@instance_group_detail = {}
else
@instance_group_detail[name] = value
end
end
if @context.last == 'Args'
if name == 'member'
if @context.include?('Steps')
@step['StepConfig']['HadoopJarStepConfig']['Args'] << value.strip
else
@bootstrap_actions['ScriptBootstrapActionConfig']['Args'] << value
end
end
end
if @context.last == 'Steps'
case name
when 'ActionOnFailure', 'Name'
@step[name] = value
when 'Jar', 'MainClass'
@step['StepConfig']['HadoopJarStepConfig'][name] = value
when 'member'
@flow['Steps'] << @step
@step = {
'ExecutionStatusDetail' => {},
'StepConfig' => {
'HadoopJarStepConfig' => {
'Args' => [],
'Properties' => []
}
}
}
end
end
if @context.empty?
case name
when 'AmiVersion', 'JobFlowId', 'LogUri', 'Name'
@flow[name] = value
when 'member'
@response['JobFlows'] << @flow
@flow = {'Instances' => [], 'ExecutionStatusDetail' => {}, 'BootstrapActions' => [], 'Steps' => []}
end
end
if @context.last == name
@context.pop
end
end
end
end
end
end
end