Cómo programar Dockerfile con InterSystems ObjectScript
¡Hola desarrolladores!
Los que usáis Dockerfile para trabajar con InterSystems IRIS a menudo tenéis que ejecutar varias líneas de ObjectScript. Para mí, esto era el juego de "escapar de esto y aquello" cada vez, solo para ejecutar unos pocos comandos en ObjectScript a IRIS. Idealmente, preferiría programar en ObjectScript sin usar comillas o caracteres de escape.
Recientemente he encontrado un buen "hack" sobre cómo esto podría ser mejorado a exactamente este estado. Lo cogí del repositorio de @Dmitry Maslennikov y te permite usar Objectscript de una forma como si lo escribieras en el terminal de IRIS.
Esto es lo que tienes en dockerfile:
///
COPY irissession.sh /
SHELL ["/irissession.sh"]
RUN \
do $SYSTEM.OBJ.Load("Installer.cls", "ck") \
set sc = ##class(App.Installer).setup()
# bringing the standard shell back
SHELL ["/bin/bash", "-c"]
CMD [ "-l", "/usr/irissys/mgr/messages.log" ]
///
El truco es que antes de ejecutar ObjectScript, ejecutemos el comando irisession.sh que hace lo siguiente:
1. Inicia IRIS
2. Ejecuta unos comandos "estándar" de ObjectScript y toma el control de Dockerfile para dejarte introducir líneas en ObjectScript - instrucción "$@".
3. Para IRIS
Comprueba el contenido de irissession.sh:
#!/bin/bash
iris start $ISC_PACKAGE_INSTANCENAME quietly
cat << EOF | iris session $ISC_PACKAGE_INSTANCENAME -U %SYS
do ##class(%SYSTEM.Process).CurrentDirectory("$PWD")
$@
if '\$Get(sc) do ##class(%SYSTEM.Process).Process.Terminate(, 1)
do ##class(SYS.Container).QuiesceForBundling()
do ##class(SYS.Container).SetMonitorStateOK("irisowner")
Do ##class(Security.Users).UnExpireUserPasswords("*")
halt
EOF
exit=$?
iris stop $ISC_PACKAGE_INSTANCENAME quietly
exit $exitEste $@ espera un comando RUN en Dockerfile que contendrá solo ObjectScript. Si necesitas utilizar algunos comandos más en Dockerfile, devuelve el control con shell estándar:
# bringing the standard shell back SHELL ["/bin/bash", "-c"] CMD [ "-l", "/usr/irissys/mgr/messages.log" ]
Este código está introducido en la community template de IRIS para que puedas empezar a usar ObjectScript en tus soluciones IRIS con un código preciso y legible.
Aprende cómo usar las plantillas Github con IRIS en este vídeo.