我尝试使用Ansible为Windows Server 2016进行设置

虽然现在可能有点晚了,但我决定尝试使用Ansible来配置Windows服务器。
我会在Linux上构建Ansible服务器。

安装Ansible的环境

我已经在以下环境中创建了一个Ansible执行环境。

バージョンOSCentOS 8.1Ansible2.9.7pywinrm0.4.1
Ansible環境.png

在CentOS8中安装Ansible。
在CentOS8中安装用于操作WinRM的pywinrm。
WinRM(Windows Remote Management)是一种用于远程操作Windows的服务。
在Windows2016中,默认情况下已安装并自动启动。

如果在Windows 2016的服务列表中进行确认,会得到以下结果。

WS000042.jpg

Windows服务器版本

Windows2016 -> Windows2016操作系统

安装Ansible

首先,在CentOS 8的服务器上安装Ansible。这应该是一种非常常见的步骤,以下是具体的操作步骤。
由于使用的是CentOS 8,我们使用dnf命令进行安装,如果是CentOS 7的情况,则将其替换为yum并执行相应的命令。
最后,我们将确认Ansible的版本。

# dnf install epel-release.noarch
# dnf install ansible
# ansible --version

安装pywinrm

当完成Ansible的安装后,我们需要安装pywinrm来操作Windows服务器上的WinRM。最后我们要确认pywinrm的版本。

# pip3 install pywinrm
# pip3 list | grep pywinrm
pywinrm (0.4.1)

在CentOS 7上,需要单独安装pip(Python的包管理工具),而在CentOS 8上则无需额外步骤。

Windows服务器的准备工作

为了响应Ansible服务器对Windows服务器的访问,将以下配置项添加到Windows服务器端。请以管理员模式启动Windows服务器的”PowerShell”,并执行以下命令。

PS C:\Users\Administrator> $url = "https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1"
PS C:\Users\Administrator> $file = "$env:temp\ConfigureRemotingForAnsible.ps1"
PS C:\Users\Administrator> (New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file)
PS C:\Users\Administrator> powershell.exe -ExecutionPolicy ByPass -File $file

执行上述的4个命令后,确认以下内容被显示出来。

PS C:\Users\Administrator> winrm enumerate winrm/config/Listener
Listener
    Address = *
    Transport = HTTP
    Port = 5985
    Hostname
    Enabled = true
    URLPrefix = wsman
    CertificateThumbprint
    ListeningOn = 127.0.0.1, 192.168.0.20, ::1, 2001:0:348b:fb58:3cb0:35ed:8ed4:1d9d, fe80::5efe:172.18.254.60%8, fe80::3cb0:35ed:8ed4:1d9d%25

Listener
    Address = *
    Transport = HTTPS
    Port = 5986
    Hostname = WIN-DOHTBU19QH6
    Enabled = true
    URLPrefix = wsman
    CertificateThumbprint = 7DCCEC302FD098025C97F0092516C7469838471E
    ListeningOn = 127.0.0.1, 192.168.0.20, ::1, 2001:0:348b:fb58:3cb0:35ed:8ed4:1d9d, fe80::5efe:172.18.254.60%8, fe80::3cb0:35ed:8ed4:1d9d%25

可以确认5985和5986端口已经被允许用于WinRM。

准备工作已经做好了。

到这里为止,准备工作完成了。接下来将会创建Ansible执行文件。我们将略过Ansible的语法细节等。

Ansible配置

首先创建一个用于Ansible的目录,并创建一个名为hosts的文件作为Windows服务器的执行目标。
在以下示例中,我们使用vi编辑器创建了一个名为hosts的文件,但如果您拥有自己喜欢的可执行Ansible的环境,文件名并不一定需要是hosts。

# mkdir ansible
# cd ansible
# vi hosts
[windows]
192.168.0.20

[windows:vars]
ansible_user=Administrator
ansible_password=xxxxxx
ansible_connection=winrm
ansible_port=5986
ansible_winrm_server_cert_validation=ignore

请在ansible_password=xxxxxx中填写Windows服务器的登录密码。

示例简报

接下来我们要创建Playbook。使用名为test.yml的文件进行创建。
这是一个执行以下3个步骤的Playbook。

・创建了一个名为ksawada1979的用户
・禁用了主题
・通过Windows更新进行了安全更新

# vi test.yml
- hosts: windows
  tasks:
    - win_user:
        name: ksawada1979
        password: xxxxxx
        state: present
        groups:
          - Administrators
          - Users

    - name: Themes disabled
      win_service:
        name: Themes
        start_mode: disabled

    - name: Install all security, critical, and rollup updates without a scheduled task
      win_updates:
        category_names:
          - SecurityUpdates

密码:请用户输入密码。

执行Ansible

# ansible-playbook -i ./hosts test.yml

Windows模块列表

在这个示例中,我们提到了用户创建和服务禁用,但是Windows模块似乎有各种各样。我们希望继续尝试,因为以下官方文档中有相关说明。
https://docs.ansible.com/ansible/2.9/modules/list_of_windows_modules.html

请参考以下网站

非常感谢您在上述网站上提供的帮助。在遇到各种问题后,在经过一番寻找后我才找到了上述的网站,但是如果一开始就按照这个网站的指示,事情可能会更顺利。