Skip to content

Commit f6cc66e

Browse files
committed
SNO-179-allow-devserver-set-es-config-dir
1 parent 0e60fc3 commit f6cc66e

2 files changed

Lines changed: 74 additions & 27 deletions

File tree

src/snovault/dev_servers.py

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424

2525
EPILOG = __doc__
26-
26+
ENCD_CONFIG_DIR = os.environ.get('ENCD_CONFIG_DIR')
2727
logger = logging.getLogger(__name__)
2828

2929

@@ -60,6 +60,14 @@ def main():
6060
parser.add_argument('--init', action="store_true", help="Init database")
6161
parser.add_argument('--load', action="store_true", help="Load test set")
6262
parser.add_argument('--datadir', default='/tmp/snovault', help="path to datadir")
63+
parser.add_argument('-c', '--encd-config-dir', default=ENCD_CONFIG_DIR, help="ES dir with config")
64+
parser.add_argument(
65+
'-e',
66+
'--es-config-version',
67+
default=5,
68+
type=int,
69+
help="ES dir with config"
70+
)
6371
args = parser.parse_args()
6472

6573
appsettings = get_appsettings(args.config_uri, name='app')
@@ -77,17 +85,38 @@ def main():
7785
from snovault.elasticsearch import create_mapping
7886
datadir = os.path.abspath(args.datadir)
7987
pgdata = os.path.join(datadir, 'pgdata')
80-
esdata = os.path.join(datadir, 'esdata')
88+
esdata = os.path.join(datadir, 'data')
89+
es_data_dir = None
90+
esconfig = None
91+
if args.encd_config_dir:
92+
es_data_dir = f"{ENCD_CONFIG_DIR}/elasticsearch/es{args.es_config_version}"
93+
es_config_dir = f"{es_data_dir}/config"
94+
es_yml_path = f"{es_config_dir}/elasticsearch.yml"
95+
if os.path.exists(es_yml_path):
96+
# es yml config overrides logs/data/host/port vars
97+
esconfig = es_config_dir
98+
esdata = es_data_dir
8199
redisdata = os.path.join(datadir, 'redisdata')
82100
if args.clear:
83-
for dirname in [pgdata, esdata, redisdata]:
101+
rm_dirs = [args.datadir]
102+
if esconfig:
103+
rm_dirs.extend([f"{es_data_dir}/data", f"{es_data_dir}/logs", f"{esconfig}/scripts"])
104+
es_keystore_path = f"{esconfig}/elasticsearch.keystore"
105+
if os.path.exists(es_keystore_path):
106+
os.remove(es_keystore_path)
107+
for dirname in rm_dirs:
84108
if os.path.exists(dirname):
85109
shutil.rmtree(dirname)
86110
if args.init:
87111
postgresql_fixture.initdb(pgdata, echo=True)
88112

89113
postgres = postgresql_fixture.server_process(pgdata, echo=True)
90-
elasticsearch = elasticsearch_fixture.server_process(esdata, echo=True)
114+
elasticsearch = elasticsearch_fixture.server_process(
115+
esdata,
116+
configdir=esconfig,
117+
echo=True,
118+
version=args.es_config_version,
119+
)
91120
nginx = nginx_server_process(echo=True)
92121
redis_config_path = redis_storage_fixture.initdb(redisdata, local_storage_port, echo=True)
93122
redis = redis_storage_fixture.server_process(redis_config_path, local_storage_port, local_storage_redis_index, echo=True)

src/snovault/tests/elasticsearch_fixture.py

Lines changed: 41 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -7,31 +7,49 @@
77
import subprocess
88

99

10-
def server_process(datadir, host='127.0.0.1', port=9201, prefix='', echo=False):
11-
args = [
12-
os.path.join(prefix, 'elasticsearch'),
13-
'-Enetwork.host=%s' % host,
14-
'-Ehttp.port=%d' % port,
15-
'-Epath.data=%s' % os.path.join(datadir, 'data'),
16-
'-Epath.logs=%s' % os.path.join(datadir, 'logs'),
17-
]
18-
if os.environ.get('TRAVIS'):
19-
print('IN TRAVIS')
20-
echo = True
21-
args.append('-Epath.conf=%s/conf' % os.environ['TRAVIS_BUILD_DIR'])
22-
elif os.path.exists('/etc/elasticsearch'):
23-
print('NOT IN TRAVIS')
24-
args.append('-Epath.conf=./conf')
25-
print(args)
26-
process = subprocess.Popen(
27-
args,
28-
close_fds=True,
29-
stdout=subprocess.PIPE,
30-
stderr=subprocess.STDOUT,
31-
)
10+
def server_process(
11+
datadir,
12+
configdir=None,
13+
echo=False,
14+
host='127.0.0.1',
15+
port=9201,
16+
prefix='',
17+
version=5,
18+
):
19+
if configdir:
20+
env = os.environ.copy()
21+
# How elasticsearch 6+ sets config path
22+
env["ES_PATH_CONF"] = configdir
23+
args = [
24+
'elasticsearch',
25+
]
26+
if version <= 5:
27+
# How elasticsearch 5 sets config path
28+
args.append(f"-Epath.conf={configdir}")
29+
process = subprocess.Popen(
30+
args,
31+
close_fds=True,
32+
stdout=subprocess.PIPE,
33+
stderr=subprocess.STDOUT,
34+
env=env,
35+
)
36+
else:
37+
args = [
38+
os.path.join(prefix, 'elasticsearch'),
39+
'-Enetwork.host=%s' % host,
40+
'-Ehttp.port=%d' % port,
41+
'-Epath.data=%s' % os.path.join(datadir, 'data'),
42+
'-Epath.logs=%s' % os.path.join(datadir, 'logs'),
43+
'-Epath.conf=./conf',
44+
]
45+
process = subprocess.Popen(
46+
args,
47+
close_fds=True,
48+
stdout=subprocess.PIPE,
49+
stderr=subprocess.STDOUT,
50+
)
3251

3352
SUCCESS_LINE = b'started\n'
34-
3553
lines = []
3654
for line in iter(process.stdout.readline, b''):
3755
if echo:

0 commit comments

Comments
 (0)