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
O AWS OpsWorks Stacks 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 a AWS Support equipe no AWS re:POST
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
Para começar
-
No diretório
opsworks_cookbooks, crie um diretório chamadoscripte navegue até ele. -
Adicione um arquivo
metadata.rbascript, com o seguinte conteúdo.name "script" version "0.1.0" -
Inicialize e configure o Test Kitchen, conforme descrito em Exemplo 1: Instalação de pacotes e remova CentOS da lista
platforms. -
Em
script, crie um diretório chamadorecipes.
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
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 blococode.Este exemplo tem um comando
touch somefile, mas umcodebloco pode conter vários comandos. -
O atributo
userespecifica o usuário que executa o comando. -
O atributo
cwdespecifica o diretório de trabalho.Para este exemplo,
touchcria um arquivo no diretório/tmp. -
O atributo de proteção
not_ifleva o recurso a não tomar ação alguma caso o arquivo já exista.
Para executar a receita
-
Crie um arquivo
default.rbque contenha o código de exemplo anterior e o salve emrecipes. -
Execute
kitchen convergee 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 executescript 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
-
Adicione um subdiretório
filesescripte um subdiretóriodefaultafiles. -
Crie um arquivo chamado
touchfileque contenha o seguinte e adicione-o afiles/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 somefileO 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
userespecifica o usuário do comando (rootneste exemplo). -
O atributo
cwdespecifica o diretório de trabalho (/tmpneste exemplo). -
O atributo
commandespecifica o script a ser executado (touchfile, neste exemplo), localizado no diretório de trabalho.
Para executar a receita
-
Substitua o código em
recipes/default.rbpelo exemplo anterior. -
Execute
kitchen convergee faça logon na instância para verificar se/tmpjá contém o arquivo de script, com o modo definido como 0755 esomefile.
Quando terminar, execute kitchen destroy para desligar a instância. A próxima seção usa um livro de receitas novo.