diff --git a/CHANGELOG.rst b/CHANGELOG.rst index ed5a20d4fc..d0ab486ab3 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -5,6 +5,7 @@ CHANGELOG 1.16.3.dev ========== +* bug-fix: Local Mode: Allow support for SSH in local mode * bug-fix: Append retry id to default Airflow job name to avoid name collisions in retry * bug-fix: Local Mode: No longer requires s3 permissions to run local entry point file * bug-fix: Local Mode: Move dependency on sagemaker_s3_output from rl.estimator to model diff --git a/src/sagemaker/local/image.py b/src/sagemaker/local/image.py index 31f130f220..b0e6800552 100644 --- a/src/sagemaker/local/image.py +++ b/src/sagemaker/local/image.py @@ -79,7 +79,7 @@ def __init__(self, instance_type, instance_count, image, sagemaker_session=None) self.image = image # Since we are using a single docker network, Generate a random suffix to attach to the container names. # This way multiple jobs can run in parallel. - suffix = ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(5)) + suffix = ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(5)) self.hosts = ['{}-{}-{}'.format(CONTAINER_PREFIX, i, suffix) for i in range(1, self.instance_count + 1)] self.container_root = None self.container = None diff --git a/tests/unit/test_image.py b/tests/unit/test_image.py index 4e6123583b..01c478c80b 100644 --- a/tests/unit/test_image.py +++ b/tests/unit/test_image.py @@ -86,6 +86,23 @@ def sagemaker_session(): return sms +def test_sagemaker_container_hosts_should_have_lowercase_names(): + random.seed(a=42) + + def assert_all_lowercase(hosts): + for host in hosts: + assert host.lower() == host + + sagemaker_container = _SageMakerContainer('local', 2, 'my-image', sagemaker_session=Mock()) + assert_all_lowercase(sagemaker_container.hosts) + + sagemaker_container = _SageMakerContainer('local', 10, 'my-image', sagemaker_session=Mock()) + assert_all_lowercase(sagemaker_container.hosts) + + sagemaker_container = _SageMakerContainer('local', 1, 'my-image', sagemaker_session=Mock()) + assert_all_lowercase(sagemaker_container.hosts) + + @patch('sagemaker.local.local_session.LocalSession') def test_write_config_file(LocalSession, tmpdir): sagemaker_container = _SageMakerContainer('local', 2, 'my-image')