class ECSTransformerTests(TestCase): """ Tests for ECS Transformer """ def setUp(self): self.file_name = './container_transform/tests/task.json' self.transformer = ECSTransformer(self.file_name) @patch.object(uuid, 'uuid4', return_value='2e9c3538-b9d3-4f47-8a23-2a19315b370b') def test_validate(self, mock_uuid): """ Test .validate() """ container = {'image': 'postgres:9.3', 'cpu': 200, 'memory': 40} validated = self.transformer.validate(container) self.assertEqual(validated['name'], mock_uuid.return_value) self.assertTrue(validated['essential']) def test_ingest_cpu(self): cpu = 100 self.assertEqual(self.transformer.ingest_cpu(cpu), cpu) def test_emit_cpu(self): cpu = 100 self.assertEqual(self.transformer.emit_cpu(cpu), cpu)
class ECSTransformerTests(TestCase): """ Tests for ECS Transformer """ def setUp(self): self.file_name = './container_transform/tests/task.json' self.transformer = ECSTransformer(self.file_name) @patch.object(uuid, 'uuid4', return_value='2e9c3538-b9d3-4f47-8a23-2a19315b370b') def test_validate(self, mock_uuid): """ Test .validate() """ container = { 'image': 'postgres:9.3', 'cpu': 200, 'memory': 40 } validated = self.transformer.validate(container) self.assertEqual( validated['name'], mock_uuid.return_value ) self.assertTrue(validated['essential']) def test_ingest_cpu(self): cpu = 100 self.assertEqual( self.transformer.ingest_cpu(cpu), cpu ) def test_emit_cpu(self): cpu = 100 self.assertEqual( self.transformer.emit_cpu(cpu), cpu )
def setUp(self): self.file_name = './container_transform/tests/task.json' self.transformer = ECSTransformer(self.file_name)
class ECSTransformerTests(TestCase): """ Tests for ECS Transformer """ def setUp(self): self.file_name = './container_transform/tests/task.json' self.transformer = ECSTransformer(self.file_name) @patch.object(uuid, 'uuid4', return_value='2e9c3538-b9d3-4f47-8a23-2a19315b370b') def test_validate(self, mock_uuid): """ Test .validate() """ container = { 'image': 'postgres:9.3', 'cpu': 200, 'memory': 40, 'essential': True } validated = self.transformer.validate(container) self.assertEqual(validated['name'], mock_uuid.return_value) def test_ingest_cpu(self): cpu = 100 self.assertEqual(self.transformer.ingest_cpu(cpu), cpu) def test_emit_cpu(self): cpu = 100 self.assertEqual(self.transformer.emit_cpu(cpu), cpu) def test_command_list(self): """ Test .ingest_command() should respect that list items are single command args Test .emit_command() should split correctly if an argument contains a space """ command = ["/bin/echo", "Hello world"] self.assertEqual(self.transformer.ingest_command(command), "/bin/echo 'Hello world'") command = "/bin/echo 'Hello world'" self.assertEqual(self.transformer.emit_command(command), ["/bin/echo", "Hello world"]) def test_emit_essential(self): self.assertEqual(self.transformer.emit_essential('testing'), 'testing') def test_emit_containers(self): """ Test .emit_containers() output with and without a networkmode """ containers = [{ 'image': 'postgres:9.3', 'cpu': 200, }] # test with no networkmode output = self.transformer.emit_containers(containers) expected = ('{\n' ' "containerDefinitions": [\n' ' {\n' ' "cpu": 200,\n' ' "image": "postgres:9.3"\n' ' }\n' ' ],\n' ' "family": "pythonapp",\n' ' "volumes": []\n' '}') self.assertEqual(expected, output) self.transformer.ecs_network_mode = 'awsvpc' output = self.transformer.emit_containers(containers) expected = ('{\n' ' "containerDefinitions": [\n' ' {\n' ' "cpu": 200,\n' ' "image": "postgres:9.3"\n' ' }\n' ' ],\n' ' "family": "pythonapp",\n' ' "networkMode": "awsvpc",\n' ' "volumes": []\n' '}') self.assertEqual(expected, output)
def generateConfigAWS(envName='dev', path='.', logger=None, secretEnv=None, keyEnv=None): configInputPath = '{}/{}/docker-compose.yml'.format(path, envName) if logger: logger.info( 'Reading configuration from {} file'.format(configInputPath)) transformer = ComposeTransformer(configInputPath) normalized_keys = transformer.ingest_containers() secrets = loadSecrets(secretEnv, keyEnv) awsKey = secrets["awsKey"] awsSecret = secrets["awsSecret"] global_envs = [{ 'name': 'AWS_ACCESS_KEY', 'value': awsKey }, { 'name': 'AWS_SECRET_KEY', 'value': awsSecret }] ecs_config = json.loads(ECSTransformer().emit_containers(normalized_keys)) ecs_config['AWSEBDockerrunVersion'] = 2 for container in ecs_config['containerDefinitions']: container['cpu'] = 1 container['essential'] = True container['memory'] = 525 container['name'] = container['hostname'] = container['container_name'] if 'links' in container: newLinks = [] for linkSpec in container['links']: newLinks.append("{}:{}".format(linkSpec, linkSpec)) container['links'] = newLinks if 'ports' in container: newPorts = [] for portSpec in container['ports']: portTokens = portSpec.split(':') newPorts.append({ "hostPort": portTokens[0], "containerPort": portTokens[1] }) container['portMappings'] = newPorts container.pop('ports') newEnv = global_envs + [{ 'name': 'HOSTNAME', 'value': container['container_name'] }] if 'environment' in container: if type(container['environment']) is list: for var in container['environment']: varTokens = var.split('=') newEnv.append({ 'name': varTokens[0], 'value': varTokens[1] }) else: for k, v in container['environment'].items(): newEnv.append({'name': k, 'value': v}) container['environment'] = newEnv if logger: logger.info( 'Generated configuration from {} file'.format(configInputPath)) return json.dumps(ecs_config, indent=4, sort_keys=True)
class ECSTransformerTests(TestCase): """ Tests for ECS Transformer """ def setUp(self): self.file_name = './container_transform/tests/task.json' self.transformer = ECSTransformer(self.file_name) @patch.object(uuid, 'uuid4', return_value='2e9c3538-b9d3-4f47-8a23-2a19315b370b') def test_validate(self, mock_uuid): """ Test .validate() """ container = { 'image': 'postgres:9.3', 'cpu': 200, 'memory': 40 } validated = self.transformer.validate(container) self.assertEqual( validated['name'], mock_uuid.return_value ) self.assertTrue(validated['essential']) def test_ingest_cpu(self): cpu = 100 self.assertEqual( self.transformer.ingest_cpu(cpu), cpu ) def test_emit_cpu(self): cpu = 100 self.assertEqual( self.transformer.emit_cpu(cpu), cpu ) def test_command_list(self): """ Test .ingest_command() should respect that list items are single command args Test .emit_command() should split correctly if an argument contains a space """ command = [ "/bin/echo", "Hello world" ] self.assertEqual( self.transformer.ingest_command(command), "/bin/echo 'Hello world'" ) command = "/bin/echo 'Hello world'" self.assertEqual( self.transformer.emit_command(command), ["/bin/echo", "Hello world"] )