Ansible基于Windows的管理架构

2017-10-13  本文已影响0人  木纳哥

一、前言

如《第1章Ansible发展史》介绍,作为关注度最高的集中化管理工具,Ansible同样支持Windows系统,只是相对Linux发行版无论在配置还是管理方式都有较大差别,本章来为大家详细介绍。

二、Windows下Ansible工作原理

Ansible 从1.7+版本开始支持Windows,但前提是管理机必须为Linux系统,远程主机的通信方式也由SSH变更为PowerShell,基于Kerberos认证方式,同时管理机必须预安装Python的Winrm模块,方可和远程Windows主机正常通信,但PowerShell需3.0+版本且Management Framework 3.0+版本,实测Windows 7 SP1和Windows Server 2008 R2及以上版本系统经简单配置可正常与Ansible通信。简单总结如下:

如上条件满足后,方可正常和Ansible通信,下面章节我们逐步深入。

三、 Ansible管理机(linux)部署安装

如上节介绍,基于Windows管理但管理机系统需为Linux系统,且需预先安装Python 的Winrm模块:

pip install "pywinrm>=0.1.1"

如远程Windows主机是基于Active Directory(后文统一简称为AD)的管理方式,管理机和远程主机基于Kerbero认证,需额外安装python-kerbero和MIT krb5依赖库。

步骤1、 安装python-kerberos依赖,命令如下:

Yum方式(Centos,RedHat,Fedora)

yum -y install python-devel krb5-devel krb5-libs krb5-workstation

Apt方式 (Ubuntu)

sudo apt-get install python-dev libkrb5-dev

Portage方式 (Gentoo)

emerge -av app-crypt/mit-krb5emerge -av dev-python/setuptools

pkg 方式(FreeBSD)

sudo pkg install security/krb5

OpenCSW方式 (Solaris)

pkgadd -d http://get.opencsw.org/now/opt/csw/bin/pkgutil -U/opt/csw/bin/pkgutil -y -i libkrb5_3

Pacman方式 (Arch Linux)

pacman -S krb5
步骤2 、安装python-kerberos,OSX和Linux发行版均默认安装,安装命令如下:
pip install Kerberos
步骤3、配置Kerberos,配置/etc/krb5.conf,添加如下内容
[realms] MY.DOMAIN.COM = {  kdc = domain-controller1.my.domain.com  kdc = domain-controller2.my.domain.com }

之后于 [domain_realm] 后添加如下内容:

[domain_realm]    .my.domain.com = MY.DOMAIN.COM

通过以下命令验证域账户认证情况:

kinit user@MY.DOMAIN.COM
步骤4、同理配置Inventory主机信息和group_vars/windows.yml变量信息,Inventory添加如下信息:
[windows]win1.magedu.comwin2.magedu.com

group_vars/windows.yml添加如下信息:

ansible_user: Administratoransible_password: magedu@beijingansible_port: 5986ansible_connection: winrmansible_winrm_server_cert_validation: ignore

若windows使用本地账号连接,则可直接在/etc/ansible/hosts上配置(如下 ):

xw-win ansible_user="Administrator" ansible_password="0" ansible_port="5986" ansible_connection="winrm" ansible_winrm_server_cert_validation="ignore"

至此,服务端配置完毕,如需和远程Windows正常通信仍需对Windows做一定配置修改。详细如下

四、Windows系统预配置

(使用ansible官方自动配置脚本ConfigureRemotingForAnsible.ps1和自动升级powershell的脚本upgrade_to_ps3.ps1即可完成配置,记录要允许powershell执行脚本:set-executionpolicy -executionpolicy unrestricted)
和Linux发版版稍有区别,远程主机系统如为Windows需预先如下配置:

我们逐一介绍:

安装Framework 3.0+

下载链接为:http://download.microsoft.com/download/B/A/4/BA4A7E71-2906-4B2D-A0E1-80CF16844F5F/dotNetFx45_Full_x86_x64.exe。 下载至本地后双击左键安装即可,期间可能会多次重启,电脑需正常连接Internet。

设置PowerShell本地脚本运行权限为remotesigned

因Windows系统默认不允许非Adminitor外的普通用户执行SP脚本,即使是管理员,如下开放P脚本执行权限。
步骤1 打开CMD输入regedit.exe 如下图打开注册表。


步骤2 设置SP脚本系统可运行。

依次打开注册表目录HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell
如图下图修改SP脚本可执行权限为remotesigned。


或者,打开PowerShell执行命令:set-executionpolicy -executionpolicy unrestricted 返回结果如图


这里共4种权限:

升级PowerShell至3.0+

PowerShell 3.0+ 需基于Windows 7 Sp1安装,Windows7系统Sp1补丁升级请参考http://windows.microsoft.com/installwindows7sp1,这里不作详细介绍。Window 7和Windows Server 2008 R2默认安装的有PowerShell,但版本号一般为2.0版本,所以我们需升级至3.0+,如下图中数字1部分表示PowerShell版本过低需3.0+版本,数字2部分表示当前PowerShell版本为2.0

PowerShell至3.0+版本,下载地址如下:
https://github.com/cchurch/ansible/blob/devel/examples/scripts/upgrade_to_ps3.ps1。下载至本地后,如图10-5右键选择“使用PowerShell运行”,执行完毕重启系统后,在PowerShell执行Get-Host命令结果如下图所示PowerShell版本为3.0为正常。


步骤4、自动设置Windows远端管理(WS-Management,WinRM)

下载补丁脚本

https://github.com/ansible/ansible/blob/devel/examples/scripts/ConfigureRemotingForAnsible.ps1,下载至本地,右击后选择“使用PowerShell运行”,执行结果没有返回错误即为正常。
如执行出现“由于此计算机上的网络连接类型之一设置为公用,因此 WinRM防火墙例外将不运行”类似报错,请在PowerShell中执行命令尝试解决。

Enable-PSRemoting – SkipNetworkProfileCheck –Force

好了,远程Windows主机配置到此结束,我们验证配置的是否有问题,在Master机做如下设置:
步骤1、配置Inventory 添加/etc/ansible/hosts配置。

[windows]192.168.37.146 ansible_ssh_user="Administrator" ansible_ssh_pass="magedu@beijing" ansible_ssh_port=5986 ansible_connection="winrm"

步骤2、在Master上执行命令:

ansible windows -m win_ping

返回结果如下图所示:



注意:Windows系统建议使用Administrator用户,避免不可预知的问题。命令运行前请设置Administrator可登录且登录密码为magedu@beijjing。

五、Windows下可用模块

更多模块及详细功能介绍请参考官网:http://docs.ansible.com/ansible/list_of_windows_modules.html除win开头的模块外,scripts,raw,slurp,setup模块在Windows 下也可正常使用。

六、Windows Ansible模块使用实战

本节通过几个实战案例为大家演示一些常用模块用法。

案例1: 传输/etc/passwd文件至远程E:\file\目录下

执行命令:

ansible windows -m win_copy -a 'src=/etc/passwd dest=E:\file\passwd'

返回结果:

192.168.37.146 | success >> {    "changed": true,    "checksum": "896d4c79f49b42ff24f93abc25c38bc1aa20afa0",    "operation": "file_copy",    "original_basename": "passwd",    "size": 2563}

部分返回结果诠释:

Playbook写法如下:

---- name: windows module example  hosts: windows  tasks:     - name: Move file on remote Windows Server from one location to another       win_file: src=/etc/passwd dest=E:\file\passwd
案例2: 删除案例1中的E:\file\passwd。

执行命令:

ansible windows -m win_file -a "path=E:\file\passwd state=absent"

返回结果:

192.168.37.146 | success >> {    "changed": true}
案例3: 新增用户stanley,密码为magedu@123,属组为Administrators。

执行命令:

ansible windows -m win_user -a "name=stanley passwd=magedu@123 group=Administrators"

返回结果:

192.168.37.146 | success >> {    "account_disabled": false,    "account_locked": false,    "changed": true,    "description": "",    "fullname": "stanley",    "groups": [        {            "name": "Administrators",            "path": "WinNT://WORKGROUP/LINUXLST/Administrators"        }    ],    "name": "stanley",    "password_expired": true,    "password_never_expires": false,    "path": "WinNT://WORKGROUP/LINUXLST/stanley",    "sid": "S-1-5-21-3965499365-1200628009-3594530176-1004",    "state": "present", "user_cannot_change_password": false}

部分返回结果诠释:

案例4:重启Windows spooler服务

执行命令:

ansible windows -m win_service -a "name=spooler state=restarted"

返回结果:

192.168.37.146 | success >> {    "changed": true,    "display_name": "Print Spooler",    "name": "spooler",    "start_mode": "auto",    "state": "running"}

本章小结

本章为大家介绍了当远程主机为Windows时Ansible的管理机制,从整体配置复杂程度上相对Linux要麻烦些,现如今服务器市场Linux大为流行的背景下,各软件对Windows的支持力度确实不如预期,也曾收到业界Windows应用者反馈Ansible管理Windows期间存在意想不到的问题,其实何止Ansible,现流行的集中化管理工具对Windows的支持力度均一般。笔者Windows的维护经历提醒各位:珍爱生命,远离Windows。

上一篇 下一篇

猜你喜欢

热点阅读