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!
Com o Ansible no Windows, você pode realizar tarefas como implantar patches, gerenciar servidores Windows, executar scripts PowerShell e muito mais.
Neste tutorial, você aprenderá como configurar o seu primeiro nó Windows para ser gerenciado pelo Ansible e verá como executar comandos e playbooks nele.
Pré-requisitos
Se deseja seguir 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. Observe que o Windows não é suportado como um nó de controle, apenas como um nó gerenciado.
- Python instalado no host controlador Ansible – Este tutorial usará o Python v2, mas o v3 também deve funcionar igualmente 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 a ser gerenciado deve ter o PowerShell Remoting ativado
- 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. Isso é feito por meio do protocolo Microsoft WinRM. O WinRM é o mesmo protocolo usado pelo PowerShell Remoting para executar comandos remotos de dentro do PowerShell.
Até o momento desta redação, o Ansible não suporta SSH como protocolo de gerenciamento, mas é uma funcionalidade experimental neste momento.
Para que o Ansible use o WinRM para se comunicar com o nó Windows, é necessário configurar o WinRM. Para fazer isso, o Ansible fornece um script PowerShell que define várias opções do WinRM.
Mesmo que o script PowerShell fornecido pela Red Hat para configurar o WinRM tenha sido testado e seja seguro, é recomendável lê-lo e entender, em termos gerais, 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, supondo 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ó do 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 do Windows.
Por padrão, o script de configuração configurará o WinRM para autenticação HTTP básica. Se você deseja que o Ansible use uma conexão mais segura, aprenda Como Configurar o WinRM via HTTPS para o Ansible.
Configurando o Controlador do Ansible no Windows
Agora que o nó do Windows está pronto para o Ansible, vamos configurar o controlador do Ansible para mostrar ao Ansible como se comunicar com ele.
1. Conecte-se ao seu host 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 o Ansible no Windows se comunicar com 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 os inventários do Ansible com comandos e playbooks, como verá em breve.
O arquivo de inventário padrão do Ansible está localizado no diretório /etc/ansible/hosts.
O arquivo de inventário de exemplo abaixo cria um grupo de windows
de hosts que contém cada nó do Windows. O tutorial está usando 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 mais tarde.
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, utilize o módulo win_ping do Ansible para executar um teste de conexão simples com os hosts dentro do grupo de hosts windows
definido no passo #3.
Uma vez executado, você pode ver abaixo que o Ansible retorna um 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 Windows com sucesso através do WinRM.
Executando Comandos Ad-hoc em Hosts Windows
Neste ponto, você está totalmente preparado para o Ansible começar a controlar seus nós Windows. Vamos agora testar isso 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 antes criar um playbook.
Vamos demonstrar comandos ad-hoc instalando um recurso do Windows nos nós Windows definidos no grupo de hosts windows
no arquivo de inventário. Para fazer isso, assumindo que você ainda esteja conectado via SSH ao 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 deverá 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 Telnet Client do Windows está instalado agora. Em sua estação de trabalho local do Windows, execute 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 do 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 win_command do Ansible para Windows em todos os hosts dentro do grupo de hosts windows
.
O módulo win_command executa comandos no host remoto do Windows. Não permite comandos que incluam variáveis como caracteres especiais, quebra de linha, sinal de maior, etc.
4. Invoque o playbook ansible-windows.yml, que executa a tarefa no host remoto executando o seguinte comando.
Se tudo correr bem, você deverá ver uma saída como a abaixo.

Executando Comandos Remotos do PowerShell com o Módulo win_shell
Você criou um playbook para executar um comando remoto do cmd.exe (netstat
) nos nós gerenciados do Windows
no exemplo anterior. Vamos agora aumentar um pouco o nível e executar comandos do PowerShell usando o win_shell módulo.
Por padrão, o módulo win_shell é executado no PowerShell no host do Windows
Em sua estação de trabalho local do Windows:
1. Primeiro, abra seu editor de texto favorito em sua estação de trabalho local do Windows e crie um script de exemplo do PowerShell e copie o seguinte código para ele, salvando-o como one.ps1. Este tutorial 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 do PowerShell one.ps1 para seus nós gerenciados do Windows usando o método de sua preferência. Este tutorial assumirá que você copiou o script one.ps1 para a pasta C:\Temp em cada nó Windows.
3. Uma vez que o script de exemplo do PowerShell está no(s) nó(s) Windows, conecte-se ao seu host controlador do Ansible e abra novamente 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 executará duas tarefas para demonstrar o módulo win_shell. Ele invoca o script do PowerShell recém-copiado do passo #2 e insere o código do 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 o PowerShell.

6. Se necessário, em sua estação 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 duas declarações True
indicando que os arquivos agora existem.
Conclusão
Neste tutorial, você aprendeu como configurar seu primeiro nó gerenciado do Windows no Ansible. Mesmo que o Ansible tenha sido tradicionalmente conhecido como uma ferramenta Linux, ele pode ser facilmente usado para o Windows também!
Quais playbooks e módulos do Windows você começará a usar para gerenciar o Windows com o Ansible?