Skip to content

Commit 37422fd

Browse files
committed
provider: add get_session method and convert all hooks and lookups
This makes hooks respect the universal region and profile settings add in the config.
1 parent 395685e commit 37422fd

File tree

23 files changed

+608
-566
lines changed

23 files changed

+608
-566
lines changed

stacker/hooks/aws_lambda.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@
1111
import hashlib
1212
from io import BytesIO as StringIO
1313
from zipfile import ZipFile, ZIP_DEFLATED
14+
1415
import botocore
1516
import formic
1617
from troposphere.awslambda import Code
17-
from stacker.session_cache import get_session
1818

1919
from stacker.util import (
2020
get_config_directory,
@@ -508,7 +508,7 @@ def create_template(self):
508508
payload_acl = kwargs.get('payload_acl', 'private')
509509

510510
# Always use the global client for s3
511-
session = get_session(bucket_region)
511+
session = provider.get_session(region=bucket_region)
512512
s3_client = session.client('s3')
513513

514514
ensure_s3_bucket(s3_client, bucket_name, bucket_region)

stacker/hooks/ecs.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
from past.builtins import basestring
88
import logging
99

10-
from stacker.session_cache import get_session
1110

1211
logger = logging.getLogger(__name__)
1312

@@ -26,7 +25,7 @@ def create_clusters(provider, context, **kwargs):
2625
Returns: boolean for whether or not the hook succeeded.
2726
2827
"""
29-
conn = get_session(provider.region).client('ecs')
28+
conn = provider.get_session().client('ecs')
3029

3130
try:
3231
clusters = kwargs["clusters"]

stacker/hooks/iam.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import copy
66
import logging
77

8-
from stacker.session_cache import get_session
98
from botocore.exceptions import ClientError
109

1110
from awacs.aws import Statement, Allow, Policy
@@ -32,7 +31,7 @@ def create_ecs_service_role(provider, context, **kwargs):
3231
3332
"""
3433
role_name = kwargs.get("role_name", "ecsServiceRole")
35-
client = get_session(provider.region).client('iam')
34+
client = provider.get_session().client('iam')
3635

3736
try:
3837
client.create_role(
@@ -125,7 +124,7 @@ def get_cert_contents(kwargs):
125124

126125

127126
def ensure_server_cert_exists(provider, context, **kwargs):
128-
client = get_session(provider.region).client('iam')
127+
client = provider.get_session().client('iam')
129128
cert_name = kwargs["cert_name"]
130129
status = "unknown"
131130
try:

stacker/hooks/keypair.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88

99
from botocore.exceptions import ClientError
1010

11-
from stacker.session_cache import get_session
1211
from stacker.hooks import utils
1312
from stacker.ui import get_raw_input
1413

@@ -220,8 +219,8 @@ def ensure_keypair_exists(provider, context, **kwargs):
220219
"specified at the same time")
221220
return False
222221

223-
session = get_session(region=provider.region,
224-
profile=kwargs.get("profile"))
222+
session = provider.get_session(
223+
profile=kwargs.get("profile"))
225224
ec2 = session.client("ec2")
226225

227226
keypair = get_existing_key_pair(ec2, keypair_name)

stacker/hooks/route53.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
from __future__ import absolute_import
44
import logging
55

6-
from stacker.session_cache import get_session
7-
86
from stacker.util import create_route53_zone
97

108
logger = logging.getLogger(__name__)
@@ -21,7 +19,7 @@ def create_domain(provider, context, **kwargs):
2119
Returns: boolean for whether or not the hook succeeded.
2220
2321
"""
24-
session = get_session(provider.region)
22+
session = provider.get_session()
2523
client = session.client("route53")
2624
domain = kwargs.get("domain")
2725
if not domain:

stacker/lookups/handlers/ami.py

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from __future__ import print_function
22
from __future__ import division
33
from __future__ import absolute_import
4-
from stacker.session_cache import get_session
4+
55
import re
66
import operator
77

@@ -22,31 +22,31 @@ def __init__(self, search_string):
2222

2323
class AmiLookup(LookupHandler):
2424
@classmethod
25-
def handle(cls, value, provider, **kwargs):
25+
def handle(cls, value, context, provider):
2626
"""Fetch the most recent AMI Id using a filter
27-
27+
2828
For example:
29-
29+
3030
${ami [<region>@]owners:self,account,amazon name_regex:serverX-[0-9]+ architecture:x64,i386}
31-
31+
3232
The above fetches the most recent AMI where owner is self
3333
account or amazon and the ami name matches the regex described,
3434
the architecture will be either x64 or i386
35-
35+
3636
You can also optionally specify the region in which to perform the
3737
AMI lookup.
38-
38+
3939
Valid arguments:
40-
40+
4141
owners (comma delimited) REQUIRED ONCE:
4242
aws_account_id | amazon | self
43-
43+
4444
name_regex (a regex) REQUIRED ONCE:
4545
e.g. my-ubuntu-server-[0-9]+
46-
46+
4747
executable_users (comma delimited) OPTIONAL ONCE:
4848
aws_account_id | amazon | self
49-
49+
5050
Any other arguments specified are sent as filters to the aws api
5151
For example, "architecture:x86_64" will add a filter
5252
""" # noqa
@@ -57,13 +57,13 @@ def handle(cls, value, provider, **kwargs):
5757
else:
5858
region = provider.region
5959

60-
ec2 = get_session(region).client('ec2')
60+
ec2 = provider.get_session(region=region).client('ec2')
6161

6262
values = {}
6363
describe_args = {}
6464

6565
# now find any other arguments that can be filters
66-
matches = re.findall('([0-9a-zA-z_-]+:[^\s$]+)', value)
66+
matches = re.findall(r'([0-9a-zA-z_-]+:[^\s$]+)', value)
6767
for match in matches:
6868
k, v = match.split(':', 1)
6969
values[k] = v
@@ -77,10 +77,9 @@ def handle(cls, value, provider, **kwargs):
7777
raise Exception("'name_regex' value required when using ami")
7878
name_regex = values.pop('name_regex')
7979

80-
executable_users = None
81-
if values.get('executable_users'):
82-
executable_users = values.pop('executable_users').split(',')
83-
describe_args["ExecutableUsers"] = executable_users
80+
executable_users = values.get('executable_users')
81+
if executable_users:
82+
describe_args["ExecutableUsers"] = executable_users.split(',')
8483

8584
filters = []
8685
for k, v in values.items():

stacker/lookups/handlers/dynamodb.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
from builtins import str
55
from botocore.exceptions import ClientError
66
import re
7-
from stacker.session_cache import get_session
87

98
from . import LookupHandler
109
from ...util import read_value_from_path
@@ -14,7 +13,7 @@
1413

1514
class DynamodbLookup(LookupHandler):
1615
@classmethod
17-
def handle(cls, value, **kwargs):
16+
def handle(cls, value, context, provider):
1817
"""Get a value from a dynamodb table
1918
2019
dynamodb field types should be in the following format:
@@ -53,7 +52,7 @@ def handle(cls, value, **kwargs):
5352
projection_expression = _build_projection_expression(clean_table_keys)
5453

5554
# lookup the data from dynamodb
56-
dynamodb = get_session(region).client('dynamodb')
55+
dynamodb = provider.get_session(region=region).client('dynamodb')
5756
try:
5857
response = dynamodb.get_item(
5958
TableName=table_name,

stacker/lookups/handlers/kms.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
from __future__ import division
33
from __future__ import absolute_import
44
import codecs
5-
from stacker.session_cache import get_session
65

76
from . import LookupHandler
87
from ...util import read_value_from_path
@@ -12,7 +11,7 @@
1211

1312
class KmsLookup(LookupHandler):
1413
@classmethod
15-
def handle(cls, value, **kwargs):
14+
def handle(cls, value, context, provider):
1615
"""Decrypt the specified value with a master key in KMS.
1716
1817
kmssimple field types should be in the following format:
@@ -55,7 +54,7 @@ def handle(cls, value, **kwargs):
5554
if "@" in value:
5655
region, value = value.split("@", 1)
5756

58-
kms = get_session(region).client('kms')
57+
kms = provider.get_session(region=region).client('kms')
5958

6059
# encode str value as an utf-8 bytestring for use with codecs.decode.
6160
value = value.encode('utf-8')

stacker/lookups/handlers/output.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
class OutputLookup(LookupHandler):
1919
@classmethod
20-
def handle(cls, value, context, provider, **kwargs):
20+
def handle(cls, value, context, provider):
2121
"""Fetch an output from the designated stack."""
2222

2323
d = deconstruct(value)

stacker/lookups/handlers/rxref.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
class RxrefLookup(LookupHandler):
2424
@classmethod
25-
def handle(cls, value, provider=None, context=None, **kwargs):
25+
def handle(cls, value, context, provider):
2626
"""Fetch an output from the designated stack.
2727
2828
Args:

stacker/lookups/handlers/ssmstore.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
from __future__ import absolute_import
44
from builtins import str
55

6-
from stacker.session_cache import get_session
7-
86
from . import LookupHandler
97
from ...util import read_value_from_path
108

@@ -13,7 +11,7 @@
1311

1412
class SsmstoreLookup(LookupHandler):
1513
@classmethod
16-
def handle(cls, value, **kwargs):
14+
def handle(cls, value, context, provider):
1715
"""Retrieve (and decrypt if applicable) a parameter from
1816
AWS SSM Parameter Store.
1917
@@ -48,7 +46,7 @@ def handle(cls, value, **kwargs):
4846
if "@" in value:
4947
region, value = value.split("@", 1)
5048

51-
client = get_session(region).client("ssm")
49+
client = provider.get_session(region=region).client("ssm")
5250
response = client.get_parameters(
5351
Names=[
5452
value,

stacker/lookups/handlers/xref.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
class XrefLookup(LookupHandler):
2323
@classmethod
24-
def handle(cls, value, provider=None, **kwargs):
24+
def handle(cls, value, context, provider):
2525
"""Fetch an output from the designated stack.
2626
2727
Args:
@@ -34,9 +34,6 @@ def handle(cls, value, provider=None, **kwargs):
3434
str: output from the specified stack
3535
"""
3636

37-
if provider is None:
38-
raise ValueError('Provider is required')
39-
4037
d = deconstruct(value)
4138
stack_fqn = d.stack_name
4239
output = provider.get_output(stack_fqn, d.output_name)

0 commit comments

Comments
 (0)