Skip to content

Commit 43b1e8e

Browse files
committed
Add new region mount option to allow multiple mounts from different regions
Fixes #101
1 parent 3dd89ca commit 43b1e8e

File tree

2 files changed

+25
-18
lines changed

2 files changed

+25
-18
lines changed

src/mount_efs/__init__.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,7 @@
233233
"noocsp",
234234
"notls",
235235
"ocsp",
236+
"region",
236237
"tls",
237238
"tlsport",
238239
"verify",
@@ -352,14 +353,17 @@ def fatal_error(user_message, log_message=None, exit_code=1):
352353
sys.exit(exit_code)
353354

354355

355-
def get_target_region(config):
356+
def get_target_region(config, options):
356357
def _fatal_error(message):
357358
fatal_error(
358359
'Error retrieving region. Please set the "region" parameter '
359360
"in the efs-utils configuration file.",
360361
message,
361362
)
362363

364+
if "region" in options:
365+
return options["region"]
366+
363367
try:
364368
return config.get(CONFIG_SECTION, "region")
365369
except NoOptionError:
@@ -1572,7 +1576,7 @@ def bootstrap_tls(
15721576
cert_details = {}
15731577
security_credentials = None
15741578
client_info = get_client_info(config)
1575-
region = get_target_region(config)
1579+
region = get_target_region(config, options)
15761580

15771581
if use_iam:
15781582
aws_creds_uri = options.get("awscredsuri")
@@ -2414,7 +2418,7 @@ def _validate_replacement_field_count(format_str, expected_ct):
24142418

24152419
if "{region}" in dns_name_format:
24162420
expected_replacement_field_ct += 1
2417-
format_args["region"] = get_target_region(config)
2421+
format_args["region"] = get_target_region(config, options)
24182422

24192423
if "{dns_name_suffix}" in dns_name_format:
24202424
expected_replacement_field_ct += 1
@@ -3087,7 +3091,7 @@ def get_botocore_client(config, service, options):
30873091
botocore_config = botocore.config.Config(use_fips_endpoint=True)
30883092

30893093
session = botocore.session.get_session()
3090-
region = get_target_region(config)
3094+
region = get_target_region(config, options)
30913095

30923096
if options and options.get("awsprofile"):
30933097
profile = options.get("awsprofile")

test/mount_efs_test/test_get_target_instance_identity.py

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,9 @@ def get_config(dns_name_format, region=None):
8484
return config
8585

8686

87-
def get_target_region_helper():
87+
def get_target_region_helper(options={}):
8888
config = get_config(DEFAULT_DNS_NAME_FORMAT)
89-
return mount_efs.get_target_region(config)
89+
return mount_efs.get_target_region(config, options)
9090

9191

9292
def get_target_az_helper(options={}):
@@ -101,13 +101,13 @@ def get_target_az_helper(options={}):
101101
def test_get_target_region_with_token(mocker):
102102
mocker.patch("mount_efs.get_aws_ec2_metadata_token", return_value="ABCDEFG==")
103103
mocker.patch("mount_efs.urlopen", return_value=MockUrlLibResponse())
104-
assert "us-east-1" == get_target_region_helper()
104+
assert "us-east-1" == get_target_region_helper({})
105105

106106

107107
def test_get_target_region_without_token(mocker):
108108
mocker.patch("mount_efs.get_aws_ec2_metadata_token", return_value=None)
109109
mocker.patch("mount_efs.urlopen", return_value=MockUrlLibResponse())
110-
assert "us-east-1" == get_target_region_helper()
110+
assert "us-east-1" == get_target_region_helper({})
111111

112112

113113
# Reproduce https://github.com/aws/efs-utils/issues/46
@@ -116,7 +116,7 @@ def test_get_target_region_token_endpoint_fetching_timeout(mocker):
116116
mocker.patch(
117117
"mount_efs.urlopen", side_effect=[socket.timeout, MockUrlLibResponse()]
118118
)
119-
assert "us-east-1" == get_target_region_helper()
119+
assert "us-east-1" == get_target_region_helper({})
120120

121121

122122
def test_get_target_region_token_fetch_httperror(mocker):
@@ -127,15 +127,15 @@ def test_get_target_region_token_fetch_httperror(mocker):
127127
MockUrlLibResponse(),
128128
],
129129
)
130-
assert "us-east-1" == get_target_region_helper()
130+
assert "us-east-1" == get_target_region_helper({})
131131

132132

133133
def test_get_target_region_token_fetch_unknownerror(mocker):
134134
mocker.patch(
135135
"mount_efs.urlopen",
136136
side_effect=[Exception("Unknown Exception"), MockUrlLibResponse()],
137137
)
138-
assert "us-east-1" == get_target_region_helper()
138+
assert "us-east-1" == get_target_region_helper({})
139139

140140

141141
def test_get_target_region_py3_no_charset(mocker):
@@ -144,7 +144,7 @@ def test_get_target_region_py3_no_charset(mocker):
144144
"mount_efs.urlopen",
145145
return_value=MockUrlLibResponse(data=bytearray(INSTANCE_DOCUMENT, "us-ascii")),
146146
)
147-
assert "us-east-1" == get_target_region_helper()
147+
assert "us-east-1" == get_target_region_helper({})
148148

149149

150150
def test_get_target_region_py3_utf8_charset(mocker):
@@ -155,22 +155,22 @@ def test_get_target_region_py3_utf8_charset(mocker):
155155
return_value=MockUrlLibResponse(data=bytearray(INSTANCE_DOCUMENT, charset)),
156156
headers=MockHeaders(content_charset=charset),
157157
)
158-
assert "us-east-1" == get_target_region_helper()
158+
assert "us-east-1" == get_target_region_helper({})
159159

160160

161161
def test_get_target_region_from_metadata(mocker):
162162
mocker.patch("mount_efs.get_aws_ec2_metadata_token", return_value=None)
163163
mocker.patch("mount_efs.urlopen", return_value=MockUrlLibResponse())
164164
config = get_config("{fs_id}.efs.{region}.{dns_name_suffix}", None)
165-
assert TARGET_REGION == mount_efs.get_target_region(config)
165+
assert TARGET_REGION == mount_efs.get_target_region(config, {})
166166

167167

168168
def test_get_target_region_config_metadata_unavailable(mocker, capsys):
169169
mocker.patch("mount_efs.get_aws_ec2_metadata_token", return_value=None)
170170
mocker.patch("mount_efs.urlopen", side_effect=URLError("test error"))
171171
config = get_config("{fs_id}.efs.{region}.{dns_name_suffix}")
172172
with pytest.raises(SystemExit) as ex:
173-
mount_efs.get_target_region(config)
173+
mount_efs.get_target_region(config, {})
174174

175175
assert 0 != ex.value.code
176176
out, err = capsys.readouterr()
@@ -187,7 +187,7 @@ def _test_get_target_region_error(mocker, capsys, response=None, error=None):
187187
mocker.patch("mount_efs.urlopen", side_effect=error)
188188

189189
with pytest.raises(SystemExit) as ex:
190-
get_target_region_helper()
190+
get_target_region_helper({})
191191

192192
assert 0 != ex.value.code
193193

@@ -228,13 +228,13 @@ def test_get_target_region_missing_region(mocker, capsys):
228228

229229
def test_get_target_region_from_config_variable(mocker):
230230
config = get_config("{az}.{fs_id}.efs.us-east-2.{dns_name_suffix}", TARGET_REGION)
231-
assert TARGET_REGION == mount_efs.get_target_region(config)
231+
assert TARGET_REGION == mount_efs.get_target_region(config, {})
232232

233233

234234
def _test_get_target_region_from_dns_format(mocker, config):
235235
mocker.patch("mount_efs.get_aws_ec2_metadata_token", return_value=None)
236236
mocker.patch("mount_efs.urlopen", side_effect=URLError("test error"))
237-
assert TARGET_REGION == mount_efs.get_target_region(config)
237+
assert TARGET_REGION == mount_efs.get_target_region(config, {})
238238

239239

240240
def test_get_target_region_from_legacy_dns_name_format(mocker):
@@ -270,6 +270,9 @@ def test_get_target_az_not_present_in_options_and_instance_metadata(mocker):
270270
Get target region from options
271271
"""
272272

273+
def test_get_target_region_from_options(mocker):
274+
assert TARGET_REGION == get_target_region_helper(options={"region": TARGET_REGION})
275+
273276

274277
def test_get_target_az_from_options(mocker):
275278
assert TARGET_AZ == get_target_az_helper(options={"az": TARGET_AZ})

0 commit comments

Comments
 (0)