Class: AwsEc2Environment::SsmPortForwardingSession
- Inherits:
-
Object
- Object
- AwsEc2Environment::SsmPortForwardingSession
- Defined in:
- lib/aws_ec2_environment/ssm_port_forwarding_session.rb
Defined Under Namespace
Classes: SessionIdNotFoundError, SessionProcessError, SessionTimedOutError
Instance Attribute Summary collapse
- #instance_id ⇒ String readonly
- #pid ⇒ String readonly
- #remote_port ⇒ Number readonly
Instance Method Summary collapse
- #close ⇒ Object
-
#initialize(instance_id, remote_port, document: "AWS-StartPortForwardingSession", local_port: nil, logger: Logger.new($stdout), timeout: 15, reason: nil, extra_params: {}) ⇒ SsmPortForwardingSession
constructor
rubocop:disable Metrics/ParameterLists.
- #wait_for_local_port ⇒ Object
Constructor Details
#initialize(instance_id, remote_port, document: "AWS-StartPortForwardingSession", local_port: nil, logger: Logger.new($stdout), timeout: 15, reason: nil, extra_params: {}) ⇒ SsmPortForwardingSession
rubocop:disable Metrics/ParameterLists
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/aws_ec2_environment/ssm_port_forwarding_session.rb', line 23 def initialize( instance_id, remote_port, document: "AWS-StartPortForwardingSession", local_port: nil, logger: Logger.new($stdout), timeout: 15, reason: nil, extra_params: {} ) # rubocop:enable Metrics/ParameterLists @logger = logger @instance_id = instance_id @remote_port = remote_port @local_port = nil @timeout = timeout @reader, @writer, @pid = PTY.spawn(ssm_port_forward_cmd(local_port, reason, document, extra_params)) @cmd_output = +"" @session_id = wait_for_session_id @logger.info("SSM session #{@session_id} opening, forwarding port #{remote_port} on #{instance_id}") end |
Instance Attribute Details
#instance_id ⇒ String (readonly)
14 15 16 |
# File 'lib/aws_ec2_environment/ssm_port_forwarding_session.rb', line 14 def instance_id @instance_id end |
#pid ⇒ String (readonly)
20 21 22 |
# File 'lib/aws_ec2_environment/ssm_port_forwarding_session.rb', line 20 def pid @pid end |
#remote_port ⇒ Number (readonly)
17 18 19 |
# File 'lib/aws_ec2_environment/ssm_port_forwarding_session.rb', line 17 def remote_port @remote_port end |
Instance Method Details
#close ⇒ Object
44 45 46 47 48 49 50 51 |
# File 'lib/aws_ec2_environment/ssm_port_forwarding_session.rb', line 44 def close @logger.info "Terminating SSM session #{@session_id}..." resp = Aws::SSM::Client.new.terminate_session({ session_id: @session_id }) @logger.info "Terminated SSM session #{resp.session_id} successfully" @reader.close @writer.close end |
#wait_for_local_port ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/aws_ec2_environment/ssm_port_forwarding_session.rb', line 53 def wait_for_local_port _, local_port = expect_cmd_output(/Port (\d+) opened for sessionId #{@session_id}.\r?\n/, @timeout) || [] if local_port.nil? raise( SessionTimedOutError, "SSM session #{@session_id} did not become ready within #{@timeout} seconds (maybe increase the timeout?)" ) end local_port.to_i end |