Exemplo 7: Execução de comandos e scripts - AWS OpsWorks

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Exemplo 7: Execução de comandos e scripts

Importante

A ferramenta AWS OpsWorks Stacks o serviço chegou ao fim da vida útil em 26 de maio de 2024 e foi desativado para clientes novos e existentes. É altamente recomendável que os clientes migrem suas cargas de trabalho para outras soluções o mais rápido possível. Se você tiver dúvidas sobre migração, entre em contato com o AWS Support Equipe em AWS Re:post ou através de AWS Premium Support.

Os recursos do Chef podem processar uma grande variedade de tarefas em uma instância, mas, às vezes, é preferível usar um comando do shell ou um script. Por exemplo, você talvez já tenha scripts que usa para realizar determinadas tarefas, e será mais fácil continuar usando eles do que implementar um código novo. Esta seção mostra como executar comandos ou scripts em uma instância.

Execução de comandos

O recurso script executa um ou mais comandos. Como dá suporte a interpretadores de comando csh, bash, Perl, Python e Ruby, ele pode ser usado nos sistemas Linux ou Windows, desde que estes tenham os interpretadores apropriados instalados. Este tópico mostra como executar um comando bash simples em uma instância do Linux. O Chef também dá suporte aos recursos powershell_script e batch para executar scripts no Windows. Para obter mais informações, consulte Executando um PowerShell script do Windows.

Para começar
  1. No diretório opsworks_cookbooks, crie um diretório chamado script e navegue até ele.

  2. Adicione um arquivo metadata.rb a script, com o seguinte conteúdo.

    name "script" version "0.1.0"
  3. Inicialize e configure o Test Kitchen, conforme descrito em Exemplo 1: Instalação de pacotes e remova CentOS da lista platforms.

  4. Em script, crie um diretório chamado recipes.

Você pode executar comandos usando o recurso script propriamente dito, mas o Chef também dá suporte a um conjunto de versões específicas do interpretador de comandos do recurso, nomeadas segundo o interpretador. A receita a seguir usa um recurso bash para executar um script bash simples.

bash "install_something" do user "root" cwd "/tmp" code <<-EOH touch somefile EOH not_if do File.exists?("/tmp/somefile") end end

O recurso bash é configurado da maneira a seguir.

  • Ele usa a ação padrão, run, que executa os comandos no bloco code.

    Este exemplo tem um comando touch somefile, mas um code bloco pode conter vários comandos.

  • O atributo user especifica o usuário que executa o comando.

  • O atributo cwd especifica o diretório de trabalho.

    Para este exemplo, touch cria um arquivo no diretório /tmp.

  • O atributo de proteção not_if leva o recurso a não tomar ação alguma caso o arquivo já exista.

Para executar a receita
  1. Crie um arquivo default.rb que contenha o código de exemplo anterior e o salve em recipes.

  2. Execute kitchen converge e faça logon na instância para verificar se o arquivo está em /tmp.

Execução de scripts

O recurso script é prático, especialmente caso você precise executar apenas um ou dois comandos, mas normalmente é preferível armazenar o script em um arquivo e executar o arquivo. O recurso execute executa um arquivo executável especificado, inclusive arquivos de script, no Linux ou no Windows. Este tópico modifica o livro de receitas script do exemplo anterior a fim de usar execute para executar um script de shell simples. Você pode estender facilmente o exemplo para scripts mais complexos ou outros tipos de arquivo executável.

Para configurar o arquivo de script
  1. Adicione um subdiretório files e script e um subdiretório default a files.

  2. Crie um arquivo chamado touchfile que contenha o seguinte e adicione-o a files/default. Uma linha do interpretador do Bash comum é usada nesse exemplo, mas substitua um interpretador que funcione para o ambiente do shell, caso necessário.

    #!/usr/bin/env bash touch somefile

    O arquivo de script pode conter qualquer número de comandos. Por uma questão de comodidade, esse script de exemplo tem apenas um único comando touch.

A receita a seguir executa o script.

cookbook_file "/tmp/touchfile" do source "touchfile" mode 0755 end execute "touchfile" do user "root" cwd "/tmp" command "./touchfile" end

O recurso cookbook_file copia o arquivo de script para /tmp e define o modo para tornar o arquivo executável. O recurso execute acaba executando o arquivo da seguinte forma:

  • O atributo user especifica o usuário do comando (root neste exemplo).

  • O atributo cwd especifica o diretório de trabalho (/tmp neste exemplo).

  • O atributo command especifica o script a ser executado (touchfile, neste exemplo), localizado no diretório de trabalho.

Para executar a receita
  1. Substitua o código em recipes/default.rb pelo exemplo anterior.

  2. Execute kitchen converge e faça logon na instância para verificar se /tmp já contém o arquivo de script, com o modo definido como 0755 e somefile.

Quando terminar, execute kitchen destroy para desligar a instância. A próxima seção usa um livro de receitas novo.