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=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 test_fetch_instance_details_from_config_with_empty_config(empty_config): expected_instance_name = "instance_name" expected_profile = "profile" expeted_region = "region" instance_name, profile, region = fetch_instance_details_from_config( empty_config, expected_instance_name, expected_profile, expeted_region) assert expected_instance_name == instance_name assert expected_profile == profile assert expeted_region == region
def test_fetch_instance_details_from_config(config): expected_instance_name = config.get_host()["name"] expected_profile = config.get_host()["profile"] expeted_region = config.get_host()["region"] instance_name, profile, region = fetch_instance_details_from_config( config, "instance_name", "profile", "region") assert expected_instance_name == instance_name assert expected_profile == profile assert expeted_region == region
def test_fetch_instance_details_from_config_with_empty_config(self): expected_instance_name = 'instance_name' expected_profile = 'profile' expeted_region = 'region' instance_name, profile, region = fetch_instance_details_from_config(self.empty_config, expected_instance_name, expected_profile, expeted_region) self.assertEqual(expected_instance_name, instance_name) self.assertEqual(expected_profile, profile) self.assertEqual(expeted_region, region)
def test_fetch_instance_details_from_config(self): expected_instance_name = self.config_data['name'] expected_profile = self.config_data['profile'] expeted_region = self.config_data['region'] instance_name, profile, region = fetch_instance_details_from_config(self.config, 'instance_name', 'profile', 'region') self.assertEqual(expected_instance_name, instance_name) self.assertEqual(expected_profile, profile) self.assertEqual(expeted_region, region)
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 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()