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 $exit
Este $@ 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.