Exemple #1
0
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()
Exemple #2
0
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()
Exemple #3
0
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
Exemple #4
0
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
Exemple #5
0
    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)
Exemple #6
0
    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)
Exemple #7
0
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()
Exemple #8
0
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()