Remove redundant CloudFoundry config code

These env vars can be set directly in the manifest, like we do for
Template Preview [^1].

[^1]: c08036189b/manifest.yml.j2 (L23-L26)
This commit is contained in:
Ben Thorner
2022-04-13 14:46:52 +01:00
parent 153ffd52c4
commit 95c5f0c079
3 changed files with 10 additions and 40 deletions

View File

@@ -1,25 +1,13 @@
"""
Extracts cloudfoundry config from its json and populates the environment variables that we would expect to be populated
on local/aws boxes
"""
import json import json
import os import os
def extract_cloudfoundry_config(): def extract_cloudfoundry_config():
vcap_services = json.loads(os.environ['VCAP_SERVICES']) vcap_services = json.loads(os.environ['VCAP_SERVICES'])
set_config_env_vars(vcap_services)
def set_config_env_vars(vcap_services):
# Postgres config # Postgres config
os.environ['SQLALCHEMY_DATABASE_URI'] = vcap_services['postgres'][0]['credentials']['uri'].replace('postgres', os.environ['SQLALCHEMY_DATABASE_URI'] = vcap_services['postgres'][0]['credentials']['uri'].replace('postgres',
'postgresql') 'postgresql')
# Redis config # Redis config
if 'redis' in vcap_services: if 'redis' in vcap_services:
os.environ['REDIS_URL'] = vcap_services['redis'][0]['credentials']['uri'] os.environ['REDIS_URL'] = vcap_services['redis'][0]['credentials']['uri']
vcap_application = json.loads(os.environ['VCAP_APPLICATION'])
os.environ['NOTIFY_ENVIRONMENT'] = vcap_application['space_name']
os.environ['NOTIFY_LOG_PATH'] = '/home/vcap/logs/app.log'

View File

@@ -107,8 +107,10 @@ applications:
env: env:
NOTIFY_APP_NAME: {{ app.get('NOTIFY_APP_NAME', CF_APP.replace('notify-', '')) }} NOTIFY_APP_NAME: {{ app.get('NOTIFY_APP_NAME', CF_APP.replace('notify-', '')) }}
NOTIFY_LOG_PATH: /home/vcap/logs/app.log
SQLALCHEMY_POOL_SIZE: {{ app.get('sqlalchemy_pool_size', 1) }} SQLALCHEMY_POOL_SIZE: {{ app.get('sqlalchemy_pool_size', 1) }}
FLASK_APP: application.py FLASK_APP: application.py
NOTIFY_ENVIRONMENT: {{ environment }}
# Credentials variables # Credentials variables
ADMIN_BASE_URL: '{{ ADMIN_BASE_URL }}' ADMIN_BASE_URL: '{{ ADMIN_BASE_URL }}'

View File

@@ -3,14 +3,11 @@ import os
import pytest import pytest
from app.cloudfoundry_config import ( from app.cloudfoundry_config import extract_cloudfoundry_config
extract_cloudfoundry_config,
set_config_env_vars,
)
@pytest.fixture @pytest.fixture
def cloudfoundry_config(): def vcap_services():
return { return {
'postgres': [{ 'postgres': [{
'credentials': { 'credentials': {
@@ -26,34 +23,17 @@ def cloudfoundry_config():
} }
@pytest.fixture def test_extract_cloudfoundry_config_populates_other_vars(os_environ, vcap_services):
def vcap_application(os_environ): os.environ['VCAP_SERVICES'] = json.dumps(vcap_services)
os.environ['VCAP_APPLICATION'] = '{"space_name": "🚀🌌"}'
def test_extract_cloudfoundry_config_populates_other_vars(cloudfoundry_config, vcap_application):
os.environ['VCAP_SERVICES'] = json.dumps(cloudfoundry_config)
extract_cloudfoundry_config() extract_cloudfoundry_config()
assert os.environ['SQLALCHEMY_DATABASE_URI'] == 'postgresql uri' assert os.environ['SQLALCHEMY_DATABASE_URI'] == 'postgresql uri'
assert os.environ['REDIS_URL'] == 'redis uri' assert os.environ['REDIS_URL'] == 'redis uri'
assert os.environ['NOTIFY_ENVIRONMENT'] == '🚀🌌'
assert os.environ['NOTIFY_LOG_PATH'] == '/home/vcap/logs/app.log'
def test_set_config_env_vars_ignores_unknown_configs(cloudfoundry_config, vcap_application): def test_extract_cloudfoundry_config_copes_if_redis_not_set(os_environ, vcap_services):
cloudfoundry_config['foo'] = {'credentials': {'foo': 'foo'}} del vcap_services['redis']
cloudfoundry_config['user-provided'].append({ os.environ['VCAP_SERVICES'] = json.dumps(vcap_services)
'name': 'bar', 'credentials': {'bar': 'bar'}
})
set_config_env_vars(cloudfoundry_config) extract_cloudfoundry_config()
assert 'foo' not in os.environ
assert 'bar' not in os.environ
def test_set_config_env_vars_copes_if_redis_not_set(cloudfoundry_config, vcap_application):
del cloudfoundry_config['redis']
set_config_env_vars(cloudfoundry_config)
assert 'REDIS_URL' not in os.environ assert 'REDIS_URL' not in os.environ