diff --git a/filter_plugins/has_env.py b/filter_plugins/has_env.py new file mode 100644 index 00000000..3a93b298 --- /dev/null +++ b/filter_plugins/has_env.py @@ -0,0 +1,14 @@ +import os + +def has_env(application_id, base_dir='.'): + """ + Check if env.j2 exists under roles/{{ application_id }}/templates/env.j2 + """ + path = os.path.join(base_dir, 'roles', application_id, 'templates', 'env.j2') + return os.path.isfile(path) + +class FilterModule(object): + def filters(self): + return { + 'has_env': has_env, + } diff --git a/roles/docker-container/templates/base.yml.j2 b/roles/docker-container/templates/base.yml.j2 index e9164393..ce44783f 100644 --- a/roles/docker-container/templates/base.yml.j2 +++ b/roles/docker-container/templates/base.yml.j2 @@ -1,8 +1,10 @@ {# Base for docker services #} restart: {{docker_restart_policy}} +{% if application_id | has_env %} env_file: - "{{docker_compose.files.env}}" +{% endif %} logging: driver: journald diff --git a/tests/unit/filter_plugins/test_has_env.py b/tests/unit/filter_plugins/test_has_env.py new file mode 100644 index 00000000..3004976d --- /dev/null +++ b/tests/unit/filter_plugins/test_has_env.py @@ -0,0 +1,35 @@ +import unittest +import os +import shutil + +# Import the filter directly +from filter_plugins.has_env import has_env + +class TestHasEnvFilter(unittest.TestCase): + def setUp(self): + # Create a test directory structure + self.base_dir = './testdata' + self.app_with_env = 'app_with_env' + self.app_without_env = 'app_without_env' + os.makedirs(os.path.join(self.base_dir, 'roles', self.app_with_env, 'templates'), exist_ok=True) + os.makedirs(os.path.join(self.base_dir, 'roles', self.app_without_env, 'templates'), exist_ok=True) + + # Create an empty env.j2 file + with open(os.path.join(self.base_dir, 'roles', self.app_with_env, 'templates', 'env.j2'), 'w') as f: + f.write('') + + def tearDown(self): + # Clean up the test data + if os.path.exists(self.base_dir): + shutil.rmtree(self.base_dir) + + def test_env_exists(self): + """Test that has_env returns True if env.j2 exists.""" + self.assertTrue(has_env(self.app_with_env, base_dir=self.base_dir)) + + def test_env_not_exists(self): + """Test that has_env returns False if env.j2 does not exist.""" + self.assertFalse(has_env(self.app_without_env, base_dir=self.base_dir)) + +if __name__ == '__main__': + unittest.main()