def test_query_instance_by_tag_parsing(mocker, name, expected, ec2): mock = mocker.patch("aws_gate.query._query_aws_api") query_instance(name, ec2=ec2) assert mock.called assert mock.call_args[1]["filters"][0]["Name"] == expected
def exec( config, instance_name, command, profile_name=AWS_DEFAULT_PROFILE, region_name=AWS_DEFAULT_REGION, ): instance, profile, region = fetch_instance_details_from_config( config, instance_name, profile_name, region_name) ssm = get_aws_client("ssm", region_name=region, profile_name=profile) ec2 = get_aws_resource("ec2", region_name=region, profile_name=profile) instance_id = query_instance(name=instance, ec2=ec2) if instance_id is None: raise ValueError(f"No instance could be found for name: {instance}") logger.info( 'Executing command "%s" on instance %s (%s) via profile %s', " ".join(command), instance_id, region, profile, ) with ExecSession(instance_id, command, region_name=region, ssm=ssm) as sess: sess.open()
def session(config, instance_name, profile_name='default', region_name='eu-west-1'): if not is_existing_profile(profile_name): raise ValueError('Invalid profile provided: {}'.format(profile_name)) if not is_existing_region(region_name): raise ValueError('Invalid region provided: {}'.format(profile_name)) config_data = config.get_host(instance_name) if config_data and config_data['name'] and config_data[ 'profile'] and config_data['region']: region = config_data['region'] profile = config_data['profile'] instance = config_data['name'] else: region = region_name profile = profile_name instance = instance_name ssm = get_aws_client('ssm', region_name=region, profile_name=profile) ec2 = get_aws_resource('ec2', region_name=region, profile_name=profile) instance_id = query_instance(name=instance, ec2=ec2) if instance_id is None: raise ValueError( 'No instance could be found for name: {}'.format(instance)) logger.info('Opening session on instance %s (%s) via profile %s', instance_id, region_name, profile_name) with Session(instance_id, region_name=region_name, ssm=ssm) as sess: sess.open()
def session( config, instance_name, profile_name=AWS_DEFAULT_PROFILE, region_name=AWS_DEFAULT_REGION, ): instance, profile, region = fetch_instance_details_from_config( config, instance_name, profile_name, region_name ) ssm = get_aws_client("ssm", region_name=region, profile_name=profile) ec2 = get_aws_resource("ec2", region_name=region, profile_name=profile) instance_id = query_instance(name=instance, ec2=ec2) if instance_id is None: raise ValueError("No instance could be found for name: {}".format(instance)) logger.info( "Opening session on instance %s (%s) via profile %s", instance_id, region, profile, ) with SSMSession(instance_id, region_name=region, ssm=ssm) as sess: sess.open()
def ssh( config, instance_name, user=DEFAULT_OS_USER, port=DEFAULT_SSH_PORT, key_type=DEFAULT_KEY_ALGORITHM, key_size=DEFAULT_KEY_SIZE, profile_name=AWS_DEFAULT_PROFILE, region_name=AWS_DEFAULT_REGION, command=None, forwarding=None, ): instance, profile, region = fetch_instance_details_from_config( config, instance_name, profile_name, region_name) ssm = get_aws_client("ssm", region_name=region, profile_name=profile) ec2 = get_aws_resource("ec2", region_name=region, profile_name=profile) ec2_ic = get_aws_client("ec2-instance-connect", region_name=region, profile_name=profile) instance_id = query_instance(name=instance, ec2=ec2) if instance_id is None: raise ValueError( "No instance could be found for name: {}".format(instance)) az = get_instance_details(instance_id=instance_id, ec2=ec2)["availability_zone"] logger.info( "Opening SSH session on instance %s (%s) via profile %s", instance_id, region, profile, ) with SshKey(key_type=key_type, key_size=key_size) as ssh_key: with SshKeyUploader(instance_id=instance_id, az=az, user=user, ssh_key=ssh_key, ec2_ic=ec2_ic): with SshSession( instance_id, region_name=region, profile_name=profile, ssm=ssm, port=port, user=user, command=command, forwarding=forwarding, ) as ssh_session: ssh_session.open()
def session(instance_name, profile_name=None, region_name='eu-west-1'): ssm = get_aws_client('ssm', region_name=region_name, profile_name=profile_name) ec2 = get_aws_resource('ec2', region_name=region_name, profile_name=profile_name) instance_id = query_instance(name=instance_name, ec2=ec2) if instance_id is None: raise ValueError( 'No instance could be found for name: {}'.format(instance_name)) logger.info('Opening session on instance %s (%s) via profile %s', instance_id, region_name, profile_name) with Session(instance_id, region_name=region_name, ssm=ssm) as sess: sess.open()
def ssh_proxy(config, instance_name, user=DEFAULT_OS_USER, port=DEFAULT_SSH_PORT, key_type=DEFAULT_KEY_ALGORITHM, key_size=DEFAULT_KEY_SIZE, profile_name=AWS_DEFAULT_PROFILE, region_name=AWS_DEFAULT_REGION): instance, profile, region = fetch_instance_details_from_config(config, instance_name, profile_name, region_name) ssm = get_aws_client('ssm', region_name=region, profile_name=profile) ec2 = get_aws_resource('ec2', region_name=region, profile_name=profile) ec2_ic = get_aws_client('ec2-instance-connect', region_name=region, profile_name=profile) instance_id = query_instance(name=instance, ec2=ec2) if instance_id is None: raise ValueError('No instance could be found for name: {}'.format(instance)) az = get_instance_details(instance_id=instance_id, ec2=ec2)['availability_zone'] logger.info('Opening SSH proxy session on instance %s (%s) via profile %s', instance_id, region, profile) with SshKey(key_type=key_type, key_size=key_size) as ssh_key: with SshKeyUploader(instance_id=instance_id, az=az, user=user, ssh_key=ssh_key, ec2_ic=ec2_ic): with SshProxySession(instance_id, region_name=region, profile_name=profile, ssm=ssm, port=port, user=user) as ssh_proxy_session: ssh_proxy_session.open()
def test_query_instance_by_tag(self): self.assertEqual(self.instance_id, query_instance('dummy-instance', ec2=self.ec2))
def test_query_instance_ec2_unitialized(self): with self.assertRaises(ValueError): query_instance('18.205.215.108')
def test_query_instance_by_id(self): self.assertEqual(self.instance_id, query_instance(self.instance_id, ec2=self.ec2))
def test_query_instance_by_ip_address(self): self.assertEqual(self.instance_id, query_instance('18.202.215.108', ec2=self.ec2))
def test_query_instance_by_private_dns_name(self): self.assertEqual(self.instance_id, query_instance('ip-10-69-104-49.eu-west-1.compute.internal', ec2=self.ec2))
def test_query_instance_by_dns_name(self): self.assertEqual(self.instance_id, query_instance("ec2-18-202-215-108.eu-west-1.compute.amazonaws.com", ec2=self.ec2))
def test_query_instance_by_private_ip_address(self): self.assertEqual(self.instance_id, query_instance("10.69.104.49", ec2=self.ec2))
def test_query_instance_ec2_unitialized(): with pytest.raises(ValueError): query_instance("18.205.215.108")
def test_query_instance(name, instance_id, ec2): assert query_instance(name, ec2=ec2) == instance_id