Mesmo que o Ansible seja conhecido por gerenciar nós Linux usando SSH, você sabia que o Ansible no Windows também funciona muito bem? Utilizando Windows Remote Management (WinRM), o Ansible no Windows pode gerenciar efetivamente todos os seus nós Windows também!
Com o Ansible no Windows, você pode realizar tarefas como implantar patches, gerenciar servidores Windows, executar scripts do PowerShell e muito mais.
Neste tutorial, você aprenderá como configurar seu primeiro nó Windows para ser gerenciado com o Ansible e verá como executar comandos e playbooks nele.
Pré-requisitos
Se você deseja acompanhar o tutorial, certifique-se de ter o seguinte antes de começar:
- Um host controlador Ansible – Este tutorial usará o Ansible v2.9.18 em uma máquina Ubuntu 18.04.5 LTS com o endereço IP 10.111.4.53. Note que o Windows não é suportado como um nó de controle, apenas como um nó gerenciado.
- Python instalado em seu host controlador Ansible – Este tutorial usará o Python v2, mas v3 também deve funcionar muito bem.
- O pacote pip instalado no controlador Ansible.
- A Windows 2012 R2 or greater computer for Ansible to manage – This tutorial will use two Windows Server 2012 R2 Standard machines as remote nodes with IP addresses of 52.242.251.213 and 10.111.4.106.
- A Windows workstation – This tutorial will perform some basic pre-configuration to the node that Windows will manage with Ansible and will require you to sitting at a Windows workstation.
- O servidor Windows que será gerenciado tem o PowerShell Remoting habilitado
- A user account in the local Administrators group on the Windows computer. This tutorial will use an account called adminuser.
Configurando o ouvinte WinRM no Windows
Antes que o Ansible possa se comunicar com um nó Windows remoto, ele deve ser capaz de estabelecer uma conexão com ele. Ele faz isso através do protocolo da Microsoft WinRM. WinRM é o mesmo protocolo que o PowerShell Remoting usa para executar comandos remotos de dentro do PowerShell.
No momento desta escrita, o Ansible não suporta SSH como protocolo de gerenciamento, mas é um recurso experimental neste momento.
Para o Ansible usar o WinRM para se comunicar com o nó Windows, você deve configurar o WinRM. Para isso, o Ansible fornece um script do PowerShell que define várias opções do WinRM.
Embora o script do PowerShell fornecido pela Red Hat para configurar o WinRM tenha sido testado e seja seguro, você deve lê-lo e entender, em um nível alto, o que ele está fazendo.
Sua primeira tarefa será baixar o script de configuração e executar o Ansible no nó Windows. Para fazer isso, assumindo que você já tenha habilitado o PowerShell Remoting no seu computador Windows de destino e esteja em uma estação de trabalho Windows:
Baixe o script PowerShell ConfigureRemotingForAnsible.ps1 para o seu computador Windows local. Este tutorial assumirá que ele está salvo em ~\Downloads.
Execute o script de configuração no nó Windows que o Ansible irá gerenciar usando o comando Invoke-Command
. O comando abaixo executará o comando nas duas máquinas de demonstração do tutorial e solicitará a senha para a conta local adminuser nos nós Windows.
Por padrão, o script de configuração configurará o WinRM para autenticação básica HTTP. Se você deseja que o Ansible use uma conexão mais segura, aprenda Como Configurar o WinRM sobre HTTPS para o Ansible.
Configurando o Controlador do Ansible no Windows
Agora que o nó Windows está pronto para o Ansible, vamos configurar o controlador do Ansible para mostrar como o Ansible deve se comunicar com ele.
1. Conecte-se ao host do controlador do Ansible via SSH usando seu cliente SSH favorito.
2. Instale o módulo Python pywinrm. O módulo Python pywinrm é necessário para que o Ansible no Windows se comunique com os hosts via protocolo WinRM.
3. Defina os nós remotos do Windows em um arquivo de inventário do Ansible. Um inventário do Ansible é uma coleção de hosts remotos definidos em um arquivo, seja por seu nome de host ou endereço IP. Uma vez definidos, você pode direcionar comandos e playbooks para esses inventários do Ansible, como verá em breve.
O arquivo de inventário padrão do Ansible está localizado no diretório /etc/ansible/hosts.
O exemplo de arquivo de inventário abaixo cria um grupo windows
de hosts que contém cada nó do Windows. O tutorial está utilizando um grupo de hosts aqui para facilitar o direcionamento de todos os nós do Windows (se você tiver mais de um) de uma vez posteriormente.
4. Em seguida, defina algumas variáveis necessárias que o Ansible usará ao se conectar aos hosts do Windows no arquivo de inventário como um grupo windows:vars
.
5. Agora, use o módulo Ansible win_ping para executar um teste de conexão simples aos hosts dentro do grupo de hosts windows
definido no passo #3.
Uma vez executado, você pode ver abaixo que o Ansible retorna texto verde com uma mensagem de SUCESSO indicando a tentativa de ping bem-sucedida.

A saída confirma que o host controlador do Ansible pode se comunicar com o host remoto do Windows com sucesso através do WinRM.
Executando Comandos Ad-Hoc em Hosts Windows
Neste ponto, você está pronto para o Ansible começar a controlar seus nós Windows. Vamos testar isso agora executando um comando ad-hoc nos nós Windows para alterá-los. Comandos ad-hoc são ótimos quando você precisa executar um comando simples em nós sem criar primeiro um playbook.
Vamos demonstrar comandos ad-hoc instalando um recurso do Windows nos nós Windows definidos no arquivo de inventário no grupo de hosts windows
. Para fazer isso, assumindo que você ainda está conectado via SSH no seu nó controlador do Ansible:
1. Em vez do módulo win_ping desta vez, chame o módulo win_feature (-m
), passando dois argumentos (-a
) de name
e state
indicando o nome do recurso do Windows e o estado desejado.
Ao executar o comando acima, se tudo correr bem, o Ansible deve conectar-se a todos os nós no grupo de hosts windows
e executar o comando win_feature em cada um, verificando e, se não estiver presente, instalando o recurso do Windows Telnet-Client
.

2. O Ansible mostra sucesso, mas para ter certeza, conecte-se manualmente aos nós do Windows com o PowerShell e verifique se o recurso do Windows Telnet Client está agora instalado. Em sua estação de trabalho local do Windows, execute o Invoke-Command
para executar o comando PowerShell Get-WindowsFeature
em cada computador com Windows.
Neste ponto, você pode executar qualquer módulo do Windows que desejar como comandos ad-hoc!
Criando e Executando Playbooks Ansible no Windows
Uma vez que você dominou a arte de executar comandos ad-hoc em nós gerenciados do Windows, sua próxima tarefa é criar e executar playbooks.. Um playbook do Ansible combina comandos em um único lugar e permite que você escreva lógica complexa para realizar cenários de automação complexos.
Executando Comandos Remotos do Windows com o Módulo win_command
Supondo que você ainda esteja conectado ao seu host controlador do Ansible:
1. Crie uma pasta em seu diretório home chamada ansible-windows-demo e mude para ela. Esta pasta conterá seu playbook.
2. Abra seu editor de texto favorito e crie e salve um arquivo chamado ansible-windows.yml no diretório ~/ansible-windows-demo.
Os playbooks do Ansible são escritos em YAML
3. Agora, copie o playbook abaixo para o arquivo ansible-windows.yml para criar uma única tarefa. Este playbook executará o comando do Windows netstat usando o módulo do Ansible do Windows win_command em todos os hosts dentro do grupo de hosts windows
.
O módulo win_command executa comandos em um host remoto do Windows. Ele não permite comandos que incluam variáveis como caracteres especiais, quebra de linha, símbolo maior que, etc.
4. Invoque o playbook ansible-windows.yml, que executa a tarefa no host remoto, executando o seguinte comando.
Se tudo ocorrer bem, você deverá ver uma saída como a abaixo.

Executando comandos do PowerShell remoto com o módulo win_shell
Você criou um playbook para executar um comando cmd.exe remoto (netstat
) em nós gerenciados do Windows
no exemplo anterior. Vamos agora aumentar um pouco o nível e executar comandos do PowerShell usando o módulo win_shell.
Por padrão, o módulo win_shell é executado no PowerShell no host do Windows
No seu workstation local do Windows:
1. Primeiro, abra o seu editor de texto favorito na sua estação de trabalho local com Windows e crie um exemplo de script PowerShell e copie o seguinte código para ele, salvando-o como one.ps1. Este tutorial irá salvar o script em ~\one.ps1.
O código abaixo cria um arquivo de texto em branco chamado test2.txt no diretório C:\temp.
2. Copie o script PowerShell one.ps1 para os seus nós gerenciados do Windows usando o seu método preferido. Este tutorial irá assumir que você copiou o script one.ps1 para a pasta C:\Temp em cada nó do Windows.
3. Uma vez que o exemplo do script PowerShell estiver no(s) nó(s) do Windows, conecte-se ao seu host controlador do Ansible e abra novamente o seu editor de texto favorito. Desta vez, crie e salve outro playbook chamado ansible-windows-shell.yml no mesmo diretório ~/ansible-windows-demo.
4. Copie e cole o seguinte playbook no arquivo ansible-windows-shell.yml. Este playbook irá executar duas tarefas para demonstrar o módulo win_shell. Ele invoca o script PowerShell acabado de copiar do passo #2 e insere o código PowerShell diretamente no playbook para demonstrar que o script não é necessário.
Para passar várias linhas de código PowerShell para o módulo win_shell, use o caractere
|
pipe.
5. Agora, invoque o segundo playbook ansible-windows-shell.yml, que é executado no host remoto mas com PowerShell.

6. Se necessário, no seu posto de trabalho local do Windows, verifique se o playbook executou o script existente e o código PowerShell no playbook.
Se o playbook do Ansible foi executado com sucesso, o PowerShell deve retornar dois afirmativos True
indicando que os ficheiros agora existem.
Conclusão
Neste tutorial, aprendeu como configurar o seu primeiro nó gerido do Windows no Ansible. Mesmo que o Ansible seja tradicionalmente conhecido como uma ferramenta Linux, pode ser facilmente utilizado para o Windows também!
Que playbooks e módulos do Windows irá começar a utilizar para gerir o Windows com o Ansible?