17
17
18
18
from rpdk .core .jsonutils .pointer import fragment_decode
19
19
20
- from .boto_helpers import create_sdk_session
20
+ from .boto_helpers import create_sdk_session , get_temporary_credentials
21
21
from .contract .contract_plugin import ContractPlugin
22
22
from .contract .interface import Action
23
23
from .contract .resource_client import ResourceClient
@@ -57,9 +57,12 @@ def temporary_ini_file():
57
57
yield str (path )
58
58
59
59
60
- def get_cloudformation_exports (region_name , endpoint_url ):
60
+ def get_cloudformation_exports (region_name , endpoint_url , role_arn ):
61
61
session = create_sdk_session (region_name )
62
- cfn_client = session .client ("cloudformation" , endpoint_url = endpoint_url )
62
+ temp_credentials = get_temporary_credentials (session , role_arn = role_arn )
63
+ cfn_client = session .client (
64
+ "cloudformation" , endpoint_url = endpoint_url , ** temp_credentials
65
+ )
63
66
paginator = cfn_client .get_paginator ("list_exports" )
64
67
pages = paginator .paginate ()
65
68
exports = {}
@@ -68,12 +71,12 @@ def get_cloudformation_exports(region_name, endpoint_url):
68
71
return exports
69
72
70
73
71
- def render_jinja (overrides_string , region_name , endpoint_url ):
74
+ def render_jinja (overrides_string , region_name , endpoint_url , role_arn ):
72
75
env = Environment (autoescape = True )
73
76
parsed_content = env .parse (overrides_string )
74
77
variables = meta .find_undeclared_variables (parsed_content )
75
78
if variables :
76
- exports = get_cloudformation_exports (region_name , endpoint_url )
79
+ exports = get_cloudformation_exports (region_name , endpoint_url , role_arn )
77
80
invalid_exports = variables - exports .keys ()
78
81
if len (invalid_exports ) > 0 :
79
82
invalid_exports_message = (
@@ -89,14 +92,14 @@ def render_jinja(overrides_string, region_name, endpoint_url):
89
92
return to_return
90
93
91
94
92
- def get_overrides (root , region_name , endpoint_url ):
95
+ def get_overrides (root , region_name , endpoint_url , role_arn ):
93
96
if not root :
94
97
return empty_override ()
95
98
96
99
path = root / "overrides.json"
97
100
try :
98
101
with path .open ("r" , encoding = "utf-8" ) as f :
99
- overrides_raw = render_jinja (f .read (), region_name , endpoint_url )
102
+ overrides_raw = render_jinja (f .read (), region_name , endpoint_url , role_arn )
100
103
except FileNotFoundError :
101
104
LOG .debug ("Override file '%s' not found. No overrides will be applied" , path )
102
105
return empty_override ()
@@ -123,7 +126,7 @@ def get_overrides(root, region_name, endpoint_url):
123
126
124
127
125
128
# pylint: disable=R0914
126
- def get_inputs (root , region_name , endpoint_url , value ):
129
+ def get_inputs (root , region_name , endpoint_url , value , role_arn ):
127
130
inputs = {}
128
131
if not root :
129
132
return None
@@ -144,7 +147,9 @@ def get_inputs(root, region_name, endpoint_url, value):
144
147
145
148
file_path = path / file
146
149
with file_path .open ("r" , encoding = "utf-8" ) as f :
147
- overrides_raw = render_jinja (f .read (), region_name , endpoint_url )
150
+ overrides_raw = render_jinja (
151
+ f .read (), region_name , endpoint_url , role_arn
152
+ )
148
153
overrides = {}
149
154
for pointer , obj in overrides_raw .items ():
150
155
overrides [pointer ] = obj
@@ -175,13 +180,17 @@ def test(args):
175
180
project .load ()
176
181
177
182
overrides = get_overrides (
178
- project .root , args .region , args .cloudformation_endpoint_url
183
+ project .root , args .region , args .cloudformation_endpoint_url , args . role_arn
179
184
)
180
185
181
186
index = 1
182
187
while True :
183
188
inputs = get_inputs (
184
- project .root , args .region , args .cloudformation_endpoint_url , index
189
+ project .root ,
190
+ args .region ,
191
+ args .cloudformation_endpoint_url ,
192
+ index ,
193
+ args .role_arn ,
185
194
)
186
195
if not inputs :
187
196
break
0 commit comments