Add basic LOC SMS support for theo-server machine

This commit is contained in:
Lance Edgar 2020-09-23 15:07:21 -05:00
parent 1b227a8d32
commit 6b88090587
12 changed files with 168 additions and 3 deletions

View file

@ -3,6 +3,7 @@
[catapult-default] [catapult-default]
host = ${env.catapult_host} host = ${env.catapult_host}
port = 2638 port = 2638
# https://www.freetds.org/userguide/ChoosingTdsProtocol.html
tds version = 5.0 tds version = 5.0
# this is to allow for product images up to 8MB # this is to allow for product images up to 8MB
text size = 8388608 text size = 8388608

View file

@ -0,0 +1,13 @@
## -*- mode: conf; -*-
[locsms-default]
host = ${env.locsms_store_server}
% if env.locsms_store_sqlinstance:
instance = ${env.locsms_store_sqlinstance}
% endif
# TODO: the rest of this needs a little polishing
# https://www.freetds.org/userguide/ChoosingTdsProtocol.html
tds version = 7.0
# tds version = 8.0
# port = 1433
# client charset = UTF-8

View file

@ -0,0 +1,7 @@
## -*- mode: conf; -*-
[locsms-default]
Description = LOC SMS
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Servername = locsms-default
Database = ${env.locsms_store_dbname}

View file

@ -0,0 +1,14 @@
## -*- mode: conf; -*-
[locsms-default]
Description = LOC SMS
Driver = ODBC Driver 17 for SQL Server
% if env.locsms_store_sqlinstance:
# note, weird port is for named instance (${env.locsms_store_sqlinstance})
# https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/connection-string-keywords-and-data-source-names-dsns?view=sql-server-2017
# https://sqlandme.com/2013/05/01/sql-server-finding-tcp-port-number-sql-instance-is-listening-on/
Server = ${env.locsms_store_server},49523
% else:
Server = ${env.locsms_store_server}
% endif
Database = ${env.locsms_store_dbname}

View file

@ -0,0 +1,17 @@
#!/bin/sh -e
# sanity check
if [ "$USER" != 'rattail' ]; then
echo ''
echo "Please run this script as 'rattail' user:"
echo ''
echo " sudo -u rattail $0"
exit 1
fi
cd ${envroot}
RATTAIL='bin/rattail -c app/quiet.conf -P'
$RATTAIL import-locsms --no-versioning --warnings
$RATTAIL import-versions --runas locsms --warnings -m "initial data from LOC SMS"

View file

@ -28,6 +28,9 @@ $RATTAIL --runas corepos import-corepos-api --delete
% elif env.theo_integrates_with == 'catapult': % elif env.theo_integrates_with == 'catapult':
# Catapult -> Theo # Catapult -> Theo
$RATTAIL --runas catapult import-catapult --delete $RATTAIL --runas catapult import-catapult --delete
% elif env.theo_integrates_with == 'locsms':
# LOC SMS -> Theo
$RATTAIL --runas locsms import-locsms --delete
% endif % endif
# make sure version data is correct # make sure version data is correct

View file

@ -5,6 +5,8 @@ extra-index-url =
https://pypi.rattailproject.org/simple/ https://pypi.rattailproject.org/simple/
% if env.theo_integrates_with == 'catapult': % if env.theo_integrates_with == 'catapult':
https://${env.restricted_pypi_username}:${env.restricted_pypi_password}@pypi-restricted.rattailproject.org/catapult/ https://${env.restricted_pypi_username}:${env.restricted_pypi_password}@pypi-restricted.rattailproject.org/catapult/
% elif env.theo_integrates_with == 'locsms':
https://${env.restricted_pypi_username}:${env.restricted_pypi_password}@pypi-restricted.rattailproject.org/locsms/
% endif % endif
log-file = ${envroot}/pip.log log-file = ${envroot}/pip.log
exists-action = i exists-action = i

View file

@ -12,6 +12,8 @@
integrate_corepos = true integrate_corepos = true
% elif env.theo_integrates_with == 'catapult': % elif env.theo_integrates_with == 'catapult':
integrate_catapult = true integrate_catapult = true
% elif env.theo_integrates_with == 'locsms':
integrate_locsms = true
% endif % endif
@ -50,6 +52,20 @@ default.url = catapult://${env.catapult_odbc_username}:${env.catapult_odbc_passw
% endif % endif
## begin locsms
% if env.theo_integrates_with == 'locsms':
<%text>##############################</%text>
# LOC SMS
<%text>##############################</%text>
[locsms.db]
default.url = mssql://${env.locsms_odbc_username}:${env.locsms_odbc_password}@locsms-default
## end locsms
% endif
<%text>##############################</%text> <%text>##############################</%text>
# rattail # rattail
<%text>##############################</%text> <%text>##############################</%text>
@ -90,6 +106,8 @@ script_location = rattail.db:alembic
version_locations = rattail_corepos.db:alembic/versions rattail.db:alembic/versions version_locations = rattail_corepos.db:alembic/versions rattail.db:alembic/versions
% elif env.theo_integrates_with == 'catapult': % elif env.theo_integrates_with == 'catapult':
version_locations = rattail_onager.db:alembic/versions rattail.db:alembic/versions version_locations = rattail_onager.db:alembic/versions rattail.db:alembic/versions
% elif env.theo_integrates_with == 'locsms':
version_locations = rattail_luckysmores.db:alembic/versions rattail.db:alembic/versions
% else: % else:
version_locations = rattail.db:alembic/versions version_locations = rattail.db:alembic/versions
% endif % endif

View file

@ -82,6 +82,30 @@ $PIP install $QUIET --editable .
## end catapult ## end catapult
% endif % endif
## begin locsms
% if env.theo_integrates_with == 'locsms':
# luckysmores
cd $SRC/luckysmores
git pull $QUIET
find . -name '*.pyc' -delete
$PIP install $QUIET --editable .
# rattail-luckysmores
cd $SRC/rattail-luckysmores
git pull $QUIET
find . -name '*.pyc' -delete
$PIP install $QUIET --editable .
# tailbone-locsms
cd $SRC/tailbone-locsms
git pull $QUIET
find . -name '*.pyc' -delete
$PIP install $QUIET --editable .
## end locsms
% endif
# theo # theo
cd $SRC/theo cd $SRC/theo
git pull $QUIET git pull $QUIET
@ -96,6 +120,8 @@ $PIP install $QUIET --editable .
$PIP install $QUIET --upgrade --upgrade-strategy eager tailbone-theo[app,corepos] $PIP install $QUIET --upgrade --upgrade-strategy eager tailbone-theo[app,corepos]
% elif env.theo_integrates_with == 'catapult': % elif env.theo_integrates_with == 'catapult':
$PIP install $QUIET --upgrade --upgrade-strategy eager tailbone-theo[app,catapult] $PIP install $QUIET --upgrade --upgrade-strategy eager tailbone-theo[app,catapult]
% elif env.theo_integrates_with == 'locsms':
$PIP install $QUIET --upgrade --upgrade-strategy eager tailbone-theo[app,locsms]
% else: % else:
$PIP install $QUIET --upgrade --upgrade-strategy eager tailbone-theo[app] $PIP install $QUIET --upgrade --upgrade-strategy eager tailbone-theo[app]
% endif % endif

View file

@ -29,6 +29,7 @@ env.timezone = 'America/Chicago'
env.theo_integrates_with = None env.theo_integrates_with = None
#env.theo_integrates_with = 'corepos' #env.theo_integrates_with = 'corepos'
#env.theo_integrates_with = 'catapult' #env.theo_integrates_with = 'catapult'
#env.theo_integrates_with = 'locsms'
# default admin user credentials for Theo web app # default admin user credentials for Theo web app
env.theo_admin_username = 'username' env.theo_admin_username = 'username'
@ -91,3 +92,33 @@ env.catapult_host = 'INSTANCE.catapultweboffice.com'
# these credentials are used to access the ODBC DSN for ECRS Catapult # these credentials are used to access the ODBC DSN for ECRS Catapult
env.catapult_odbc_username = 'username' env.catapult_odbc_username = 'username'
env.catapult_odbc_password = 'password' env.catapult_odbc_password = 'password'
##############################
# LOC SMS
##############################
# this is the hostname (or IP) for your SMS store server
env.locsms_store_server = 'locsms-server.example.com'
# this is your SMS SQL Server "instance" name, if applicable
env.locsms_store_sqlinstance = None
#env.locsms_store_sqlinstance = 'SQLEXPRESS'
# this is your SMS DB name
env.locsms_store_dbname = 'STORESQL'
# these credentials are used to access the ODBC DSN for LOC SMS
env.locsms_odbc_username = 'username'
env.locsms_odbc_password = 'password'
# which ODBC driver to use? note that 'mssql' is generally recommended where
# possible, however is not selected by default b/c it is not open source, and
# can be trickier to get working in some situations
# https://docs.sqlalchemy.org/en/13/dialects/mssql.html#driver-unicode-support
# cf. also this issue at https://github.com/microsoft/msphpsql/issues/1112
env.locsms_odbc_driver = 'freetds'
#env.locsms_odbc_driver = 'mssql'
# if using the 'mssql' driver, you must also accept its EULA
env.mssql_driver_accept_eula = False

View file

@ -76,9 +76,27 @@ def bootstrap_base(c):
# which cause it to use too much memory, so we use a more stable branch # which cause it to use too much memory, so we use a more stable branch
from rattail_fabric2 import freetds from rattail_fabric2 import freetds
freetds.install_from_source(c, user='rattail', branch='Branch-1_2') freetds.install_from_source(c, user='rattail', branch='Branch-1_2')
deploy(c, 'rattail/freetds.conf.mako', '/usr/local/etc/freetds.conf', deploy(c, 'rattail/catapult/freetds.conf.mako', '/usr/local/etc/freetds.conf',
use_sudo=True, context={'env': env})
deploy(c, 'rattail/catapult/odbc.ini', '/etc/odbc.ini', use_sudo=True)
# locsms extras
elif env.theo_integrates_with == 'locsms':
apt.install(c, 'unixodbc', 'unixodbc-dev')
# mssql odbc
if env.locsms_odbc_driver == 'mssql':
from rattail_fabric2 import mssql
mssql.install_mssql_odbc(c, accept_eula=env.mssql_driver_accept_eula)
deploy(c, 'rattail/locsms/mssql/odbc.ini.mako', '/etc/odbc.ini',
use_sudo=True, context={'env': env})
else: # freetds odbc
apt.install(c, 'tdsodbc')
deploy(c, 'rattail/locsms/freetds/freetds.conf.mako', '/etc/freetds/freetds.conf',
use_sudo=True, context={'env': env})
deploy(c, 'rattail/locsms/freetds/odbc.ini.mako', '/etc/odbc.ini',
use_sudo=True, context={'env': env}) use_sudo=True, context={'env': env})
deploy(c, 'rattail/odbc.ini', '/etc/odbc.ini', use_sudo=True)
@task @task
@ -134,6 +152,8 @@ def install_theo_app(c, envname, production, port, from_source=False,
pkgname = 'tailbone-theo[app,corepos]' pkgname = 'tailbone-theo[app,corepos]'
elif env.theo_integrates_with == 'catapult': elif env.theo_integrates_with == 'catapult':
pkgname = 'tailbone-theo[app,catapult]' pkgname = 'tailbone-theo[app,catapult]'
elif env.theo_integrates_with == 'locsms':
pkgname = 'tailbone-theo[app,locsms]'
else: else:
pkgname = 'tailbone-theo[app]' pkgname = 'tailbone-theo[app]'
c.sudo("bash -c 'PIP_CONFIG_FILE={0}/pip.conf cd {0} && bin/pip install {1}'".format(envroot, pkgname), c.sudo("bash -c 'PIP_CONFIG_FILE={0}/pip.conf cd {0} && bin/pip install {1}'".format(envroot, pkgname),
@ -180,6 +200,10 @@ def install_theo_app(c, envname, production, port, from_source=False,
deploy(c, 'theo-common/import-catapult-first.sh.mako', '{}/app/import-catapult-first.sh'.format(envroot), deploy(c, 'theo-common/import-catapult-first.sh.mako', '{}/app/import-catapult-first.sh'.format(envroot),
use_sudo=True, owner='rattail:', mode='0755', use_sudo=True, owner='rattail:', mode='0755',
context={'envroot': envroot}) context={'envroot': envroot})
elif env.theo_integrates_with == 'locsms':
deploy(c, 'theo-common/import-locsms-first.sh.mako', '{}/app/import-locsms-first.sh'.format(envroot),
use_sudo=True, owner='rattail:', mode='0755',
context={'envroot': envroot})
# theo db # theo db
if not postgresql.db_exists(c, dbname): if not postgresql.db_exists(c, dbname):
@ -213,6 +237,9 @@ def install_theo_app(c, envname, production, port, from_source=False,
elif env.theo_integrates_with == 'catapult': elif env.theo_integrates_with == 'catapult':
c.sudo("bash -c 'cd {} && bin/rattail -c app/quiet.conf --runas theo make-user --no-password catapult'".format(envroot), c.sudo("bash -c 'cd {} && bin/rattail -c app/quiet.conf --runas theo make-user --no-password catapult'".format(envroot),
user='rattail') user='rattail')
elif env.theo_integrates_with == 'locsms':
c.sudo("bash -c 'cd {} && bin/rattail -c app/quiet.conf --runas theo make-user --no-password locsms'".format(envroot),
user='rattail')
# supervisor # supervisor
deploy(c, 'theo-common/supervisor.conf.mako', '/etc/supervisor/conf.d/{}.conf'.format(safename), deploy(c, 'theo-common/supervisor.conf.mako', '/etc/supervisor/conf.d/{}.conf'.format(safename),
@ -247,11 +274,17 @@ def install_theo_source(c, envroot):
install_source_package(c, envroot, 'tailbone-corepos') install_source_package(c, envroot, 'tailbone-corepos')
# catapult # catapult
if env.theo_integrates_with == 'catapult': elif env.theo_integrates_with == 'catapult':
install_source_package(c, envroot, 'onager', restricted=True) install_source_package(c, envroot, 'onager', restricted=True)
install_source_package(c, envroot, 'rattail-onager', restricted=True) install_source_package(c, envroot, 'rattail-onager', restricted=True)
install_source_package(c, envroot, 'tailbone-onager', restricted=True) install_source_package(c, envroot, 'tailbone-onager', restricted=True)
# locsms
elif env.theo_integrates_with == 'locsms':
install_source_package(c, envroot, 'luckysmores', restricted=True)
install_source_package(c, envroot, 'rattail-luckysmores', restricted=True)
install_source_package(c, envroot, 'tailbone-locsms', restricted=True)
# theo # theo
install_source_package(c, envroot, 'theo') install_source_package(c, envroot, 'theo')