

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á.

# Simular os atributos de implantação e configuração de pilha no Vagrant
<a name="opsworks-opsworks-mock"></a>

**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](https://repost.aws/) ou por meio do Premium [AWS Support](https://aws.amazon.com/support).

**nota**  
Este tópico aplica-se apenas às instâncias do Linux. O Test Kitchen ainda não oferece suporte ao Windows, então você executará todos os exemplos do Windows em instâncias do OpsWorks Stacks.

OpsWorks O Stacks adiciona [atributos de configuração e implantação da pilha](workingcookbook-json.md) ao objeto de nó de cada instância em sua pilha para cada evento do ciclo de vida. Esses atributos fornecem um snapshot da configuração da pilha, incluindo a configuração de cada camada e de suas instâncias online, a configuração de cada aplicativo implantado etc. Como esses atributos estão no objeto node, eles podem ser acessados por qualquer receita; a maioria das receitas para instâncias do OpsWorks Stacks usa um ou mais desses atributos. 

Uma instância executada em uma caixa Vagrant não é gerenciada pelo OpsWorks Stacks, portanto, seu objeto de nó não inclui nenhuma configuração de pilha e atributos de implantação por padrão. No entanto, você pode adicionar um conjunto de atributos adequados ao ambiente do Test Kitchen. Em seguida, o Test Kitchen adiciona os atributos ao objeto node da instância, e suas receitas podem acessar os atributos da mesma forma que acessariam em uma instância do OpsWorks Stacks.

Este tópico mostra como obter uma cópia de atributos de implantação e configuração de pilha apropriados, instalar os atributos em uma instância e acessá-los.

**nota**  
Se você estiver usando o Test Kitchen para executar testes em suas receitas, [fauxhai](https://github.com/customink/fauxhai) fornece uma maneira alternativa para simular JSON de configuração e implantação da pilha.

**Para configurar o livro de receitas**

1. Crie um subdiretório de `opsworks_cookbooks` chamado `printjson` e navegue até ele.

1. Inicialize e configure o Test Kitchen, conforme descrito em [Exemplo 1: Instalação de pacotes](cookbooks-101-basics-packages.md).

1. Adicione dois subdiretórios a `printjson`: `recipes` e `environments`.

É possível simular atributos de implantação e configuração de pilha adicionando um arquivo de atributos ao seu livro de receitas com as definições apropriadas, mas uma abordagem melhor é usar o ambiente do Test Kitchen. Há duas abordagens básicas:
+ Adicione definições de atributos a `.kitchen.yml`.

  Essa abordagem é útil se você tiver apenas alguns atributos. Para obter mais informações, consulte [kitchen.yml](https://docs.chef.io/config_yml_kitchen.html).
+ Definir os atributos em um arquivo de ambiente e fazer referência ao arquivo em `.kitchen.yml`.

  Essa abordagem normalmente é preferível para atributos de implantação e configuração de pilha, porque o arquivo de ambiente já está no formato JSON. Você pode obter uma cópia dos atributos no formato JSON de uma instância adequada do OpsWorks Stacks e simplesmente colá-la. Todos os exemplos usam um arquivo de ambiente.

A maneira mais simples de criar atributos de implantação e configuração de pilhapara seu livro de receitas é criar uma pilha devidamente configurada e copiar os atributos resultantes de uma instância como JSON. Para manter seu arquivo de ambiente do Test Kitchen gerenciável, edite o JSON para ter apenas os atributos de que suas receitas precisam. Os exemplos neste capítulo são baseados na pilha de [Conceitos básicos das pilhas Linux do Chef 11](gettingstarted.md), que é uma pilha de servidor de aplicativo PHP simples com um load balancer, servidores de aplicativos PHP e um servidor de banco de dados MySQL.

**Para criar um JSON de configuração e implantação de pilha**

1. Crie MyStack conforme descrito em[Conceitos básicos das pilhas Linux do Chef 11](gettingstarted.md), incluindo a implantação do SimplePHPApp. Se preferir, omita a segunda instância PHP App Server solicitada em [Etapa 4: Dimensionar MyStack](gettingstarted-scale.md); os exemplos não usam esses atributos.

1. Se você ainda não tiver feito isso, inicie a instância `php-app1` e [faça login com SSH](workinginstances-ssh.md).

1. Na janela do terminal, execute o seguinte comando [agent cli](agent.md):

   ```
   sudo opsworks-agent-cli get_json
   ```

   Esse comando imprime os atributos de implantação e configuração de pilha mais recentes da instância na janela do terminal no formato JSON.

1. Copie o JSON em um arquivo `.json` e salve-o em um local conveniente na sua estação de trabalho. Os detalhes dependem de seu cliente SSH. Por exemplo, se você estiver usando PuTTY no Windows, execute o comando `Copy All to Clipboard`, que copia todo o texto na janela do terminal para a área de transferência do Windows. Em seguida, cole o conteúdo em um arquivo `.json` e edite o arquivo para remover texto adicional.

1. Edite o MyStack JSON conforme necessário. Os atributos de implantação e configuração de pilha são numerosos, mas os livros de receitas normalmente usam apenas um pequeno subconjunto deles. Para manter seu arquivo de ambiente gerenciável, edite o JSON para que ele mantenha a estrutura original, mas contenha apenas os atributos que seus livros de receitas efetivamente usam.

   Este exemplo usa uma versão altamente editada do MyStack JSON que inclui apenas dois `['opsworks']['stack']` atributos, `['id]` e. `['name']` Crie uma versão editada do MyStack JSON parecida com a seguinte:

   ```
   {
     "opsworks": {
       "stack": {
         "name": "MyStack",
         "id": "42dfd151-6766-4f1c-9940-ba79e5220b58",
       },
     },
   }
   ```

Para inserir esse JSON no objeto de nó da instância, é necessário adicioná-lo a um ambiente do Test Kitchen.

**Para adicionar atributos de implantação e configuração de pilha ao ambiente do Test Kitchen**

1. Crie um arquivo de ambiente chamado `test.json` com o seguinte conteúdo e salve-o na pasta `environments` do livro de receitas.

   ```
   {
     "default_attributes": {
       "opsworks" : {
         "stack" : {
           "name" : "MyStack",
           "id" : "42dfd151-6766-4f1c-9940-ba79e5220b58"
         }
       }
     },
     "chef_type" : "environment",
     "json_class" : "Chef::Environment"
   }
   ```

   O arquivo de ambiente tem os seguintes elementos:
   + `default_attributes`: os atributos padrão no formato JSON.

     Esses atributos são adicionados ao objeto de nó com o tipo de atributo `default`, que é o tipo usado por todos os atributos JSON de configuração e implantação de pilha. Este exemplo usa a versão editada do JSON de configuração e implantação da pilha mostrado anteriormente.
   + `chef_type`: defina esse elemento como `environment`.
   + `json_class`: defina esse elemento como `Chef::Environment`.

1. Edite `.kitchen.yml` para definir o ambiente do Test Kitchen da seguinte maneira.

   ```
   ---
   driver:
     name: vagrant
   
   provisioner:
     name: chef_solo
     environments_path: ./environments
   
   platforms:
     - name: ubuntu-12.04
   
   suites:
     - name: printjson 
       provisioner:
         solo_rb:
           environment: test
       run_list:
         - recipe[printjson::default]
       attributes:
   ```

   Para definir o ambiente, adicione os seguintes elementos ao `.kitchen.yml` padrão criado por `kitchen init`.  
**provisioner**  
Adicione os seguintes elementos.  
   + `name`: defina esse elemento como `chef_solo`.

     Para replicar o ambiente OpsWorks Stacks mais de perto, você pode usar o [modo local do cliente Chef](https://docs.chef.io/ctl_chef_client.html) em vez do Chef solo. O modo local é uma opção do cliente do Chef que usa uma versão leve do servidor do Chef (Chef Zero) que é executada localmente na instância e não em um servidor remoto. Ele permite que suas receitas usem os recursos de servidor do Chef, como pesquisa ou recipientes de dados, sem a conexão a um servidor remoto.
   + `environments_path`: o subdiretório do livro de receitas que contém o arquivo de ambiente, `./environments`, neste exemplo.  
**suites:provisioner**  
Adicione um elemento `solo_rb` com um conjunto de elementos `environment` ao nome do arquivo de ambiente, menos a extensão .json. Este exemplo define `environment` como `test`.

1. Crie um arquivo de receitas designado `default.rb` com o seguinte conteúdo e salve-o no diretório `recipes` do livro de receitas.

   ```
   log "Stack name: #{node['opsworks']['stack']['name']}"
   log "Stack id: #{node['opsworks']['stack']['id']}"
   ```

   Essa receita apenas registra os dois valores de configuração e implantação da pilha que você adicionou ao ambiente. Embora a receita esteja sendo executada localmente no Virtual Box, você faz referência a esses atributos usando a mesma sintaxe de nó que usaria se a receita estivesse sendo executada em uma instância do OpsWorks Stacks.

1. Executar `kitchen converge`. Você deve ver algo semelhante à seguinte saída de log.

   ```
   ...
   Converging 2 resources       
   Recipe: printjson::default       
     * log[Stack name: MyStack] action write[2014-07-01T23:14:09+00:00] INFO: Processing log[Stack name: MyStack] action write (printjson::default line 1)       
   [2014-07-01T23:14:09+00:00] INFO: Stack name: MyStack       
                
     * log[Stack id: 42dfd151-6766-4f1c-9940-ba79e5220b58] action write[2014-07-01T23:14:09+00:00] INFO: Processing log[Stack id: 42dfd151-6766-4f1c-9940-ba79e5220b58] action write (printjson::default line 2)       
   [2014-07-01T23:14:09+00:00] INFO: Stack id: 42dfd151-6766-4f1c-9940-ba79e5220b58       
   ...
   ```