Artículo
· 8 sep, 2022 Lectura de 2 min

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.
 

Comentarios (0)1
Inicie sesión o regístrese para continuar