Пример #1
0
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
Пример #2
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()
Пример #3
0
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()
Пример #4
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()
Пример #5
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()
Пример #6
0
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()
Пример #7
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()
Пример #8
0
 def test_query_instance_by_tag(self):
     self.assertEqual(self.instance_id, query_instance('dummy-instance', ec2=self.ec2))
Пример #9
0
 def test_query_instance_ec2_unitialized(self):
     with self.assertRaises(ValueError):
         query_instance('18.205.215.108')
Пример #10
0
 def test_query_instance_by_id(self):
     self.assertEqual(self.instance_id, query_instance(self.instance_id, ec2=self.ec2))
Пример #11
0
 def test_query_instance_by_ip_address(self):
     self.assertEqual(self.instance_id,
                      query_instance('18.202.215.108', ec2=self.ec2))
Пример #12
0
 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))
Пример #13
0
 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))
Пример #14
0
 def test_query_instance_by_private_ip_address(self):
     self.assertEqual(self.instance_id, query_instance("10.69.104.49", ec2=self.ec2))
Пример #15
0
def test_query_instance_ec2_unitialized():
    with pytest.raises(ValueError):
        query_instance("18.205.215.108")
Пример #16
0
def test_query_instance(name, instance_id, ec2):
    assert query_instance(name, ec2=ec2) == instance_id