Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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
        )
Exemplo n.º 3
0
 def setUp(self):
     self.file_name = './container_transform/tests/task.json'
     self.transformer = ECSTransformer(self.file_name)
Exemplo n.º 4
0
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)
Exemplo n.º 5
0
 def setUp(self):
     self.file_name = './container_transform/tests/task.json'
     self.transformer = ECSTransformer(self.file_name)
Exemplo n.º 6
0
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)
Exemplo n.º 7
0
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"]
        )