mounted DB_CONF file

This commit is contained in:
bohanjason 2020-05-04 02:24:33 -04:00 committed by Dana Van Aken
parent 9770fe96b4
commit 52e1674f0a
3 changed files with 28 additions and 7 deletions

View File

@ -47,7 +47,12 @@ DB_HOST = 'localhost'
# Database port # Database port
DB_PORT = '5432' DB_PORT = '5432'
# If set to True, DB_CONF file is mounted to database container file
# Only available when HOST_CONN is docker or remote_docker
DB_CONF_MOUNT = True
# Path to the configuration file on the database server # Path to the configuration file on the database server
# If DB_CONF_MOUNT is True, the path is on the host server, not docker
DB_CONF = '/etc/postgresql/9.6/main/postgresql.conf' DB_CONF = '/etc/postgresql/9.6/main/postgresql.conf'
# Path to the directory for storing database dump files # Path to the directory for storing database dump files

View File

@ -259,7 +259,7 @@ def change_conf(next_conf=None):
with open(tmp_conf_out, 'w') as f: with open(tmp_conf_out, 'w') as f:
f.write(''.join(lines)) f.write(''.join(lines))
sudo('cp {0} {0}.ottertune.bak'.format(dconf.DB_CONF)) sudo('cp {0} {0}.ottertune.bak'.format(dconf.DB_CONF), remote_only=True)
put(tmp_conf_out, dconf.DB_CONF, use_sudo=False) put(tmp_conf_out, dconf.DB_CONF, use_sudo=False)
local('rm -f {} {}'.format(tmp_conf_in, tmp_conf_out)) local('rm -f {} {}'.format(tmp_conf_in, tmp_conf_out))

View File

@ -146,10 +146,18 @@ def get(remote_path, local_path, use_sudo=False):
else: # docker or remote_docker else: # docker or remote_docker
docker_cmd = 'docker cp -L {}:{} {}'.format(dconf.CONTAINER_NAME, remote_path, local_path) docker_cmd = 'docker cp -L {}:{} {}'.format(dconf.CONTAINER_NAME, remote_path, local_path)
if dconf.HOST_CONN == 'docker': if dconf.HOST_CONN == 'docker':
res = local(docker_cmd) if dconf.DB_CONF_MOUNT is True:
pre_cmd = 'sudo ' if use_sudo else ''
opts = '-r' if os.path.isdir(remote_path) else ''
res = local('{}cp {} {} {}'.format(pre_cmd, opts, remote_path, local_path))
else:
res = local(docker_cmd)
elif dconf.HOST_CONN == 'remote_docker': elif dconf.HOST_CONN == 'remote_docker':
res = sudo(docker_cmd, remote_only=True) if dconf.DB_CONF_MOUNT is True:
res = _get(local_path, local_path, use_sudo) res = _get(remote_path, local_path, use_sudo=use_sudo)
else:
res = sudo(docker_cmd, remote_only=True)
res = _get(local_path, local_path, use_sudo)
else: else:
raise Exception('wrong HOST_CONN type {}'.format(dconf.HOST_CONN)) raise Exception('wrong HOST_CONN type {}'.format(dconf.HOST_CONN))
return res return res
@ -168,10 +176,18 @@ def put(local_path, remote_path, use_sudo=False):
else: # docker or remote_docker else: # docker or remote_docker
docker_cmd = 'docker cp -L {} {}:{}'.format(local_path, dconf.CONTAINER_NAME, remote_path) docker_cmd = 'docker cp -L {} {}:{}'.format(local_path, dconf.CONTAINER_NAME, remote_path)
if dconf.HOST_CONN == 'docker': if dconf.HOST_CONN == 'docker':
res = local(docker_cmd) if dconf.DB_CONF_MOUNT is True:
pre_cmd = 'sudo ' if use_sudo else ''
opts = '-r' if os.path.isdir(local_path) else ''
res = local('{}cp {} {} {}'.format(pre_cmd, opts, local_path, remote_path))
else:
res = local(docker_cmd)
elif dconf.HOST_CONN == 'remote_docker': elif dconf.HOST_CONN == 'remote_docker':
res = _put(local_path, local_path, use_sudo=True) if dconf.DB_CONF_MOUNT is True:
res = sudo(docker_cmd, remote_only=True) res = _put(local_path, remote_path, use_sudo=use_sudo)
else:
res = _put(local_path, local_path, use_sudo=True)
res = sudo(docker_cmd, remote_only=True)
else: else:
raise Exception('wrong HOST_CONN type {}'.format(dconf.HOST_CONN)) raise Exception('wrong HOST_CONN type {}'.format(dconf.HOST_CONN))
return res return res