Class: OpenPortChecker::SecurityGroupsRetrievedState

Inherits:
OpenPortCheckerState show all
Defined in:
lib/scripts/ec2/open_port_checker.rb

Overview

Got all instances. If there are some, check security groups

Instance Attribute Summary

Attributes inherited from ScriptExecutionState

#context, #logger

Instance Method Summary collapse

Methods inherited from OpenPortCheckerState

load_state

Methods inherited from ScriptExecutionState

#done?, #end_state, #failed?, #get_superclass_name, #initialize, #register_state_change_listener, #start_state_machine, #to_s

Methods included from StateTransitionHelper

#attach_volume, #connect, #copy_distribution, #create_fs, #create_image_from_instance, #create_labeled_fs, #create_security_group_with_rules, #create_snapshot, #create_volume, #create_volume_from_snapshot, #delete_security_group, #delete_snapshot, #delete_volume, #describe_instance, #detach_volume, #determine_file, #disable_ssh_tty, #disconnect, #ec2_handler, #ec2_handler=, #enable_ssh_tty, #get_aws_kernel_image_aki, #get_aws_region_from_endpoint, #get_partition_count, #get_partition_fs_type, #get_partition_fs_type_and_label, #get_partition_label, #get_partition_table, #get_root_device_name, #get_root_partition_fs_type, #get_root_partition_fs_type_and_label, #get_root_partition_label, #get_root_volume_id, #launch_instance, #local_decompress_and_dump_file_to_device, #local_dump_and_compress_device_to_file, #local_dump_device_to_file, #local_dump_file_to_device, #mount_fs, #mount_fs_old, #register_snapshot, #remote_copy, #remote_copy_old, #remote_handler, #remote_handler=, #retrieve_instances, #retrieve_security_groups, #set_partition_table, #shut_down_instance, #snapshot_accessible, #start_instance, #stop_instance, #unmount_fs, #upload_file, #zip_volume

Methods included from VCloudTransitionHelper

#retrieve_ip_services

Constructor Details

This class inherits a constructor from ScriptExecutionState

Instance Method Details

#enterObject



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/scripts/ec2/open_port_checker.rb', line 63

def enter
  @context[:result][:port_checks] = []
  ec2_helper = Ec2Helper.new(@context[:ec2_api_handler])
  unless @context[:ec2_instances]['reservationSet'] == nil
    @context[:ec2_instances]['reservationSet']['item'].each() do |instance_info|
      instance_id = ec2_helper.get_instance_id(instance_info)
      @logger.debug("instance_info = #{instance_info.inspect}")
      vpc_instance = ec2_helper.get_instance_prop(instance_info, 'vpcId')
      if !vpc_instance.nil? && !vpc_instance.empty?
        post_message("ignore VPC instance #{instance_id}")
        next
      end
      instance_ip = ec2_helper.get_instance_prop(instance_info, 'dnsName')
      instance_state = ec2_helper.get_instance_prop(instance_info, 'instanceState')['name']
      if instance_state != "running"
        post_message("ignore instance #{instance_id} since not running")
        next
      end
      sec_groups = ec2_helper.lookup_security_group_names(instance_info)
      @logger.debug("group lookup for #{instance_id} => #{sec_groups.inspect}")
      sec_groups.each() do |group_name|
        port_infos = ec2_helper.lookup_open_ports(group_name, @context[:security_groups])
        @logger.debug("port_infos for group #{group_name} #{port_infos.inspect}")
        port_infos.each() do |port_info|
          result = false
          begin
            result = @context[:remote_command_handler].is_port_open?(instance_ip, port_info[:port])
            post_message("check port #{port_info[:port]} for instance #{instance_id} (on #{instance_ip}) #{result ? "successful" : "failed"}")
          rescue Exception => e
            @logger.warn("exception during executing port check: #{e}")
          end
          @context[:result][:port_checks] << {:instance => instance_id, :protocol => port_info[:protocol],
            :port => port_info[:port], :success => result, :group_name => group_name
          }
        end
      end
    end
  end
  AnalysisDone.new(@context)
end