Mesmo que Ansible seja conhecido por gerenciar nós Linux usando SSH, você sabia que o Ansible no Windows funciona tão bem quanto? Usando 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 executar 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 contra ele.
Pré-requisitos
Se você deseja acompanhar o tutorial, certifique-se de ter o seguinte antes de começar:
- Um host controlador do 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.
- O Python instalado no seu host controlador do Ansible – Este tutorial usará o Python v2, mas o v3 deve funcionar igualmente bem.
- O pacote pip instalado no controlador do 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 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 comunicar-se com um nó remoto do Windows, é necessário que ele seja capaz de estabelecer uma conexão com o mesmo. Ele faz isso através do protocolo da Microsoft, o WinRM. O WinRM é o mesmo protocolo que o PowerShell Remoting utiliza para executar comandos remotos de dentro do PowerShell.
Até o momento desta escrita, o Ansible dá suporte ao SSH como um protocolo de gerenciamento, mas é uma funcionalidade experimental no momento.
Para que o Ansible utilize o WinRM para se comunicar com o nó do Windows, é necessário configurar o WinRM. Para fazer 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 elevado, o que ele está fazendo.
Sua primeira tarefa será baixar o script de configuração e executar o Ansible no nó do Windows. Para fazer isso, supondo que você já tenha ativado o PowerShell Remoting no seu computador Windows de destino e esteja em uma estação de trabalho do Windows:
Baixe o script 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 irá executar o comando nas duas máquinas de demonstração do tutorial e solicitará a senha da conta adminuser local nos nós Windows.
Por padrão, o script de configuração configurará o WinRM para autenticação básica HTTP. Se desejar 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ó 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 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 hosts via protocolo WinRM.
Defina os nós Windows remotos em um arquivo de inventário do Ansible. Um inventário Ansible é uma coleção de hosts remotos definidos em um arquivo, seja pelo nome do host ou pelo endereço IP. Uma vez definidos, você pode então direcionar os inventários Ansible com comandos e playbooks, como verá em breve.
O arquivo de inventário Ansible padrão está localizado no diretório /etc/ansible/hosts.
O arquivo de inventário de exemplo abaixo está criando um windows
grupo de hosts que contém cada nó Windows. O tutorial está usando um grupo de hosts aqui para facilitar o direcionamento de todos os nós Windows (se você tiver mais de um) de uma vez mais tarde.
Em seguida, defina algumas variáveis necessárias que o Ansible usará ao se conectar aos hosts Windows no arquivo de inventário como um grupo windows:vars
.
5. Agora, utilize o módulo win_ping do Ansible para executar um simples teste de conexão nos hosts dentro do grupo de hosts windows
definido no passo #3.
Após executar, você poderá 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 do Windows
Neste ponto, você está pronto para o Ansible começar a controlar seus nós do Windows. Vamos agora testar isso executando um comando ad-hoc nos nós do Windows para modificá-los. Comandos ad-hoc são ótimos quando você precisa executar um comando simples nos nós sem criar primeiro um playbook.
Vamos demonstrar comandos ad-hoc instalando um recurso do Windows nos nós do Windows definidos no arquivo de inventário no grupo de hosts windows
. Para fazer isso, presumindo que você ainda está conectado ao seu nó controlador do Ansible via SSH:
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 que você deseja que ele esteja.
Ao executar o comando acima, se tudo correr bem, o Ansible deve se conectar 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á agora instalado. Em sua estação de trabalho local do Windows, execute Invoke-Command
para executar o comando PowerShell Get-WindowsFeature
em cada computador 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 tenha dominado 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 ainda esteja conectado ao seu host controlador do Ansible:
1. Crie uma pasta em seu diretório pessoal 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 Windows netstat usando o módulo Windows do Ansible win_command em todos os hosts dentro do grupo de hosts windows
.
O módulo win_command executa comandos no host remoto do Windows. Ele não permite comandos que incluam variáveis como caracteres especiais, quebra de linha, sinal de maior que, etc.
4. Invocar 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 abaixo.

Executando Comandos Remotos do PowerShell com o Módulo win_shell
Você criou um playbook para executar um comando remoto cmd.exe (netstat
) nos nós gerenciados do Windows
no exemplo anterior. Vamos aumentar um pouco 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
Em sua estação de trabalho local do Windows:
1. Primeiro, abra o seu editor de texto favorito no seu ambiente de trabalho local do Windows e crie um exemplo de script do PowerShell e copie o seguinte código nele, 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 do PowerShell one.ps1 para 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 script do PowerShell de exemplo 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 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 de 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 do Linux, ele também pode ser facilmente usado para o Windows!
Quais playbooks e módulos do Windows você começará a usar para gerenciar o Windows com o Ansible?