Base de conhecimento  /  Gerenciador de aplicativos em nuvem  /  Automatização de implementações
Base de conhecimento  /  Gerenciador de aplicativos em nuvem  /  Automatização de implementações

Executar um código fora de uma instância com variáveis de tarefa


Código do artigo: kb/1041

Os scripts de eventos são executados, por definição, na instância à qual pertencem. Pode haver a necessidade, no entanto, de executar algum código fora do sistema operacional da instância, seja porque o código deve ser executado antes da provisão da instância ou porque ela já foi finalizada. Nesses casos, você pode usar as variáveis de tarefa.

Esses recursos estão disponíveis para as caixas que foram publicadas no catálogo.

Fundamentos

As variáveis de tarefa definem o código e um evento associado. Quando uma caixa com uma variável de tarefa é implementada, o CAM executará este código dentro do ciclo de vida da instância, no momento indicado pelo evento da variável de tarefa:

  • implementar como a primeira etapa após clicar em Implementar, antes que qualquer provisionamento seja executado no provedor; é executado uma vez por instância.
  • pós_implantação: assim que uma máquina é ligada e aparece no CAM; isso pode ocorrer durante a implementação, quando a instância é acionada após um evento de desligamento (iniciado pelo CAM ou pelo console do provedor de nuvem) ou quando uma instância é exibida durante um evento de autoescala para cima.
  • descer: sempre que uma máquina é desligada; isso pode ocorrer durante um evento de desligamento, quando uma instância é encerrada durante um evento de autoescala para baixo ou durante um evento de encerramento.
  • ( remover ) como a última etapa, uma vez que a instância tenha sido encerrada no provedor; é executado uma vez por instância.

Tanto deploy quanto remove estão associados à vida útil da instância ponta a ponta, enquanto post_deploy e teardown estão associados à vida útil de cada máquina. Isso é especialmente útil para instâncias com várias máquinas (conforme definido em uma caixa de política de implementação) ou para instâncias com autoescala em que as máquinas podem aparecer e desaparecer automaticamente.

Embora não sejam executadas dentro da própria instância, as variáveis de tarefa se comportam de maneira semelhante aos scripts de evento:

  • A sintaxe de templates Jinja está disponível, então você pode acessar variáveis de dentro do script.
  • Os comandos elasticbox set e elasticbox config estão disponíveis.
  • Ao usar a composição de caixa, as variáveis de tarefa de caixas secundárias são executadas primeiro durante os eventos deploy e post_deploy, enquanto são executadas por último durante os eventos teardown e remove.
  • Uma falha durante a execução de uma variável de tarefa resultará em um estado indisponível. Uma falha pode surgir de dentro do script com um código de saída diferente de 0 ou pode ocorrer se o script demorar muito para ser concluído e for interrompido à força.
  • Os scripts devem ser idempotentes, iguais aos scripts de eventos, caso sejam executados várias vezes devido a um erro de instância.
  • A saída do script aparecerá no registro de atividades da instância.
  • Pode haver apenas uma variável de tarefa de cada evento por caixa (até quatro variáveis de tarefas por caixa, uma por evento). Você pode adicionar diversas variáveis de arquivo, mas no máximo uma por evento será convertida em variável de tarefa durante o processo de verificação (abaixo, mais detalhes sobre isso).

Linguagens

O ambiente suporta scripts bash, python3 e nodejs. Por padrão, no entanto, todos os scripts devem iniciar como scripts shell. Você pode, então, incorporar código em outras linguagens e executá-lo dentro do script shell.

Disponibilidade e visibilidade

As variáveis de tarefa estão disponíveis apenas para caixas públicas, com controle de versão e verificadas. Devido a esse processo de verificação, não há uma opção variável de tarefa na seção de código de uma caixa: você deve criar uma variável de arquivo e depois enviar uma solicitação de publicação. Essa solicitação deve mencionar quais variáveis de arquivo devem ser convertidas em variáveis de tarefa e sob qual evento de tarefa elas serão executadas. As variáveis serão marcadas como privadas e não aparecerão no editor de ciclo de vida.

Exemplo

Este exemplo guiará você pelas etapas de criação de uma caixa, adição de um script, publicação dela com o script como uma variável de tarefa e sua execução.

  • Primeiro, crie uma script box como faria normalmente.
  • Vá para a guia Código, clique em Novo e, em seguida, clique na guia Arquivo.
  • Digite um nome descritivo para a variável e clique em Criar arquivo vazio*. Você pode inserir um nome de arquivo com a extensão sh, embora não seja estritamente necessário.
    nova variável de arquivo
  • A variável surgirá na lista. Clique no nome do arquivo e um editor aparecerá.
    variável de arquivo pronta
  • Digite o código que você quer executar. Ele deve iniciar com a sentença #!/bin/bash. Após isso, você pode usar bash, nodejs ou python. Você pode incorporar códigos como HEREDOCs e executá-los. Outras variáveis de caixa são acessíveis através da sintaxe Jinja. Por exemplo, o código abaixo imprime o valor da variável1. Uma vez pronto, salve o código.
    editor de código

O código usado no exemplo é listado aqui para referência.

#!/bin/bash

echo "printing from bash"

pythonfile=/tmp/pythontest.py
nodefile=/tmp/nodetest.js

cat <<PYTHON> $pythonfile
#!/usr/bin/python3
print("printing from python")

PYTHON

chmod +x $pythonfile
$pythonfile

cat <<NODE> $nodefile
console.log('printing from node the value of variable1: {{ variable1 }}')

NODE

node $nodefile

elasticbox set variable1 value_set_from_task

  • Vá para a guia Versões e clique no botão Novo. Adicione uma descrição e clique em Salvar.
    nova versão
  • A versão que você acabou de adicionar aparecerá na lista. Clique no botão de engrenagem na extremidade direita da linha e, em seguida, clique em Publicar caixa.
    publicar caixa
  • Digite os detalhes da caixa como você deseja que eles apareçam no catálogo. Especifique as variáveis de arquivo que você deseja converter em variáveis de tarefa.
    publicar detalhes
  • Sua caixa passará por um processo de verificação e, se aprovada, será publicada e aparecerá no catálogo. Você será notificado sobre os resultados da análise. Quando você acessar a caixa, uma marca de verificação verde aparecerá perto da versão publicada.
    versão publicada
  • Depois disso, a script box pode ser implementada a partir do catálogo com uma política de implementação, como você faria normalmente. As variáveis da tarefa não são visíveis durante a implementação e não podem ser alteradas. Observe que somente a caixa publicada e com controle de versão executará os scripts como variáveis de tarefa. Se você tentar executar o rascunho da caixa, ele será implantado normalmente, mas o código nas variáveis de arquivo não será executado.
    nova instância da versão publicada
  • Depois de clicar em Implementar, a instância será criada e você será transferido para a página Atividade da instância. Cada variável de tarefa de implementação aparecerá em sua própria etapa de atividade, onde a saída do script será impressa. Depois que todas as variáveis da tarefa forem concluídas com êxito, uma nova VM será provisionada no provedor e todos os scripts de evento serão executados normalmente.
    implementação de uma instância com variáveis de tarefa
  • Se o script definir um valor de variável durante a execução da variável de tarefa, esses valores estarão acessíveis pelos scripts de evento. Observe que as variáveis da tarefa não estão acessíveis no Editor de ciclo de vida.
    editor de ciclo de vida
  • Quando terminar a instância, as variáveis de tarefa para o evento remover serão executadas após a instância ter sido interrompida e excluída do provedor.

Falhas de script

O código de saída das variáveis da tarefa afeta o estado da instância, pois os scripts do evento são: qualquer valor diferente de 0 colocará a instância em indisponível estado:

  • Se isso ocorrer durante a operação deploy, nenhuma VM será provisionada e a ação Repetir implementação estará disponível.
  • Um erro que ocorra na operação post_deploy deixará a instância como indisponível. Se isso ocorreu durante a implementação inicial, a ação Repetir implementação estará disponível. Se ocorreu durante uma operação de autoescala ou ativação, você precisará reconfigurar ou reinstalar.
  • Se isso ocorrer durante a operação teardown, a VM estará no estado indisponível e será necessário Reconfigurar ou Forçar o término.
  • Se isso ocorrer durante a operação terminate, a VM será excluída, mas a instância aparecerá como indisponível. Neste ponto, você pode Forçar o término da instância, acionando as variáveis da tarefa ou Excluir, removendo a instância da área de trabalho sem executar as variáveis da tarefa novamente.

falha na variável de tarefa

As variáveis de tarefa também podem falhar se o script não terminar em tempo hábil: o limite de tempo de execução atual é de 30 segundos. Se isso ocorrer, o script será morto à força e a mensagem Variável de tarefa demorou demais, terminando... aparecerá no registro.

tempo limite da variável de tarefa

Powered by Translations.com GlobalLink OneLink SoftwarePowered By OneLink