-
Notifications
You must be signed in to change notification settings - Fork 41
/
Copy pathsession.py
67 lines (57 loc) · 1.77 KB
/
session.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import logging
from aws_gate.constants import AWS_DEFAULT_PROFILE, AWS_DEFAULT_REGION
from aws_gate.decorators import (
plugin_version,
plugin_required,
valid_aws_profile,
valid_aws_region,
)
from aws_gate.query import query_instance
from aws_gate.session_common import BaseSession
from aws_gate.utils import (
get_aws_client,
get_aws_resource,
fetch_instance_details_from_config,
)
logger = logging.getLogger(__name__)
class SSMSession(BaseSession):
def __init__(
self,
instance_id,
region_name=AWS_DEFAULT_REGION,
profile_name=AWS_DEFAULT_PROFILE,
ssm=None,
):
self._instance_id = instance_id
self._region_name = region_name
self._profile_name = profile_name if profile_name is not None else ""
self._ssm = ssm
self._session_parameters = {"Target": self._instance_id}
@plugin_required
@plugin_version("1.1.23.0")
@valid_aws_profile
@valid_aws_region
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(f"No instance could be found for name: {instance}")
logger.info(
"Opening session on instance %s (%s) via profile %s",
instance_id,
region,
profile,
)
with SSMSession(
instance_id, region_name=region, profile_name=profile, ssm=ssm
) as sess:
sess.open()