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
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 chamadoscript
e navegue até ele. -
Adicione um arquivo
metadata.rb
ascript
, 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 umcode
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
-
Crie um arquivo
default.rb
que contenha o código de exemplo anterior e o salve emrecipes
. -
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
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
-
Adicione um subdiretório
files
escript
e um subdiretóriodefault
afiles
. -
Crie um arquivo chamado
touchfile
que 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 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
-
Substitua o código em
recipes/default.rb
pelo exemplo anterior. -
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 esomefile
.
Quando terminar, execute kitchen destroy
para desligar a instância. A próxima seção usa um livro de receitas novo.