Omgevingsvariabelen gebruiken voor argumenten
Robkromwijk opened this issue · 5 comments
Wij gebruiken NLextract voor meerdere registraties (BAG, BGT, BRT). Per registratie is er eigen *.args betanden voor de input parameters, waardoor deze op meerdere plaatsen moeten worden bijgehouden. Onze voorkeur zou hebben om met omgevingsvariabelen te werken in onze OTAP-straat, zodat de paramterwaardes maar op 1 plek hoeft worden bijgehouden.
Daarvoor zouden de *.args bestanden deze omgevingsvariabelen moeten kunnen inlezen. Is dit al mogelijk? Zo ja, hoe werkt dit? Zo nee, dan een feature voor op de backlog wat mij betreft.
Het gebruik van environment variabelen wordt al ondersteund. Althans heb dit zelf ooit in een Kubernetes project gebruikt met Stetl (basis ETL framework van NLExtract), zie bijv hier
https://github.com/smartemission/kubernetes-se/tree/master/smartemission/cronjobs.
Het is een faciliteit van Stetl, ik meen zelfs dat e.e.a. gemixed kan worden, dus zowel uit environment als een .args
bestand, er zijn wel conventies, om name-clashes te voorkomen:
- in het
.cfg
bestand zitten variabelen als{var_naam}
- de omgevings-variable moet beginnen met
stetl_
(ofSTETL_
) dus bijvstetl_var_naam
Dit is een gebruikelijke conventie in de Docker wereld.
Zie net dat dit ook netjes gedocumenteerd is: https://www.stetl.org/en/latest/using.html#reusable-stetl-configs
Hoewel ik niet gecharmeerd ben van het feit dat de omgevingsvariabelen moeten beginnen met stetl_
, lost dit inderdaad wel mijn issue op.
Ik kies ervoor om stetl package te installeren en rechtstreeks aan te roepen. Op deze manier kan ik de nl-extract onaangepast laten, zodat bij een eventuele nieuwe versie ik geen aanpassingen binnen deze package hoef te doen
stetl -c $p_nlextract_dir/bgt/etl/conf/etl-imgeo-v2.1.1.cfg -a $p_nlextract_dir/bgt/etl/options/default.args -a host=$DB_HOST -a port=$DB_PORT -a database=$DB_NAME -a user=$DB_USER -a password=$DB_PASSWORD -a schema=$DB_SCHEMA -a input_dir=/Users/robkromwijk/git/basisstatistiek_bronnen/data/bgtnl/20220419 -a spatial_extent=
Helaas krijg ik nog wel foutmelding:
2022-04-20 10:34:32,043 util INFO Found lxml.etree, native XML parsing, fabulous!
2022-04-20 10:34:32,281 util INFO Found GDAL/OGR Python bindings, super!!
2022-04-20 10:34:32,295 main INFO Stetl version = 2.0
2022-04-20 10:34:32,303 main INFO Found args file at: /Users/robkromwijk/git/basisstatistiek_bronnen/syntax/bgtnl/../../src/nlextract-1.5.3/bgt/etl/options/default.args
2022-04-20 10:34:32,304 ETL INFO INIT - Stetl version is 2.0
2022-04-20 10:34:32,304 ETL INFO Config/working dir = /Users/robkromwijk/git/basisstatistiek_bronnen/src/nlextract-1.5.3/bgt/etl/conf
2022-04-20 10:34:32,304 ETL INFO Reading config_file = /Users/robkromwijk/git/basisstatistiek_bronnen/syntax/bgtnl/../../src/nlextract-1.5.3/bgt/etl/conf/etl-imgeo-v2.1.1.cfg
2022-04-20 10:34:32,305 ETL INFO Substituting 11 args in config file from args_dict: ['gfs_template', 'multi_opts', 'database', 'host', 'temp_dir', 'user', 'port', 'schema', 'password', 'spatial_extent', 'input_dir']
2022-04-20 10:34:32,305 ETL INFO Substituting args OK
2022-04-20 10:34:32,306 ETL INFO START
2022-04-20 10:34:32,306 util INFO Timer start: total ETL
2022-04-20 10:34:32,306 chain INFO Assembling Chain: input_sql_pre|schema_name_filter|output_postgres...
2022-04-20 10:34:32,329 input INFO cfg = {'class': 'stetl.inputs.fileinput.StringFileInput', 'file_path': 'sql/create-schema.sql,sql/drop-tables-v2.1.1.sql,sql/drop-final-tables-v2.1.1.sql'}
2022-04-20 10:34:32,329 fileinput INFO file_list=[]
2022-04-20 10:34:32,329 factory ERROR cannot create object instance from class 'stetl.inputs.fileinput.StringFileInput' e=File list is empty!!
Hoewel ik niet gecharmeerd ben van het feit dat de omgevingsvariabelen moeten beginnen met
stetl_
, lost dit inderdaad wel mijn issue op.
Dit is toch echt de conventie voor veel (Docker) componenten, zeker in een Kubernetes-omgeving. Anders gaan namen "clashen" bijv als een variable "HOST" heet o.i.d. veel voorbeelden bijv Grafana heeft GF_
.
Ik kies ervoor om stetl package te installeren en rechtstreeks aan te roepen. Op deze manier kan ik de nl-extract onaangepast laten, zodat bij een eventuele nieuwe versie ik geen aanpassingen binnen deze package hoef te doen
Ik weet niet of dit verstandig is: de Stetl versie die met NLExtract meekomt als Git Submodule is verzekerd te werken met alle NLExtract processen.
stetl -c $p_nlextract_dir/bgt/etl/conf/etl-imgeo-v2.1.1.cfg -a $p_nlextract_dir/bgt/etl/options/default.args -a host=$DB_HOST -a port=$DB_PORT -a database=$DB_NAME -a user=$DB_USER -a password=$DB_PASSWORD -a schema=$DB_SCHEMA -a input_dir=/Users/robkromwijk/git/basisstatistiek_bronnen/data/bgtnl/20220419 -a spatial_extent=
Kan niet zien wat hier fout gaat, maar lijkt alsof the input bestanden niet worden gevonden.
Hi @justb4 ,
inderdaad kunnen de input bestanden niet gevonden worden. De relatieve paden in etl-imgeo-v2.1.1.cfg kunnen niet vinden, omdat stetl niet weet relatief vanaf welke map.
Om de meegeleverde stetl te draaien, moet ik toch onderstaande commando's gebruiken? Stetl lijkt niet gevonden, maar met "pip install stetl" wel. Daarnaast vormen de relatieve paden nog steeds het probleem voor een succesvolle run.
export STETL_HOME=$p_current_dir/../../src/nlextract-1.5.3/externals/stetl
python $STETL_HOME/stetl/main.py -c $p_nlextract_dir/bgt/etl/conf/etl-imgeo-v2.1.1.cfg -a $p_nlextract_dir/bgt/etl/options/default.args -a host=$BSK_DB_HOST -a port=$BSK_DB_PORT -a database=$BSK_DB_NAME -a user=$BSK_DB_USER -a password=$BSK_DB_PASSWORD -a schema=adhoc -a input_dir=/Users/robkromwijk/git/basisstatistiek_bronnen/data/bgtnl/20220419 -a spatial_extent=