Artigo
· Abr. 24 3min de leitura

Mini Dica do Dia - Pré carregando a licença na Imagem Docker IRIS

Quem nunca passou pela situação de estar desenvolvendo um belo exemplo usando uma imagem Docker do IRIS e o processo de geração da imagem falhar no Dockerfile porque a licença sob a qual a imagem foi criada não contém certas permissões?

No meu caso, o que eu estava implantando no Docker é uma pequena aplicação que usa o tipo de dado Vector. Com a versão Community, isso não é um problema porque ela já inclui o Vector Search e o armazenamento de vetores. No entanto, quando troquei a imagem do IRIS para um IRIS convencional (o latest-cd), descobri que ao construir a imagem, incluindo as classes que ele havia gerado, retornou este erro:

9.505 ERROR #15806: Vector Search not permitted with current license
9.505   > ERROR #5030: An error occurred while compiling class 'Inquisidor.Object.LicitacionOS'
9.505 Compiling class Inquisidor.Object.Licitacion
9.505 ERROR #15806: Vector Search not permitted with current license
9.505   > ERROR #5030: An error occurred while compiling class 'Inquisidor.Object.Licitacion'
9.538 Compiling class Inquisidor.Message.LicitacionResponse

Esse erro me deixou confuso, porque eu, como uma pessoa obediente, havia definido no meu docker-compose.yml o parâmetro que indica onde minha licença válida está localizada:

  iris:
    init: true
    container_name: iris
    build:
      context: .
      dockerfile: iris/Dockerfile
    ports:
      - 52774:52773
      - 51774:1972
    volumes:
    - ./iris/shared:/iris-shared
    environment:
    - ISC_DATA_DIRECTORY=/iris-shared/durable
    command: --check-caps false --ISCAgent false --key /iris-shared/iris.key

Demorei um pouco para perceber que o problema era a imagem original que eu estava usando, e não a licença que eu tinha, como você pode ver, não sou a pessoa mais esperta nesse caso.

O problema estava no ponto em que eu importava minhas classes para a imagem padrão do IRIS.

RUN \
zn "%SYS" \
do ##class(SYS.Container).QuiesceForBundling() \
do ##class(Security.Users).UnExpireUserPasswords("*") \
set sc=##class(%SYSTEM.OBJ).Load("/opt/irisapp/DemoSetup.Utilities.cls","ck") \
set helper=##class(DemoSetup.Utilities).%New() \ 
do helper.EnableSSLSuperServer() \
do ##class(Security.Applications).Import("/ApplicationInquisidor.xml",.n) \
zn "INQUISIDOR" \
set sc = $SYSTEM.OBJ.LoadDir("/opt/irisapp/src/Inquisidor", "ck", , 1) \
set production = "Inquisidor.Production" \
set ^Ens.Configuration("csp","LastProduction") = production \
do ##class(Ens.Director).SetAutoStart(production) \

A compilação do código estava retornando o erro anterior. O que eu deveria fazer para corrigir isso? Foi muito simples: eu tive que enviar a nova licença para a imagem IRIS inicial e pedir para ela atualizar a licença na primeira linha dos comandos que eu estava usando.

O primeiro passo é mover a nova licença para o diretório /mgr da instalação, o que eu fiz com este código:

COPY --chown=$ISC_PACKAGE_MGRUSER:$ISC_PACKAGE_IRISGROUP /iris/iris.key /usr/irissys/mgr
RUN chmod +x /usr/irissys/mgr/iris.key

O caminho de instalação do IRIS na nossa imagem é /usr/irissys/mgr, e o caminho /iris/iris.key é o meu diretório local. Com a licença na imagem IRIS, eu só precisei dizer ao IRIS para atualizar sua licença, então eu modifiquei os comandos anteriores adicionando a seguinte declaração:

RUN \
zn "%SYS" \
do ##class(%SYSTEM.License).Upgrade() \

Et voilà! Agora eu tenho minha imagem IRIS com minha licença carregada antes de importar e compilar minhas classes. Sem mais erros de compilação.

Espero que seja útil para você!

Discussão (0)1
Entre ou crie uma conta para continuar