一:Ansible 简介


AUTOMATION FOR EVERYONE (摘自Ansible官网),自行理解其中意思,Ansible是一款自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:
(1) 连接插件connection plugins:负责和被监控端实现通信;
(2) host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
(3) 各种模块核心模块、command模块、自定义模块;
(4) 借助于插件完成记录日志邮件等功能;
(5) playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务 

二:Ansible的安装


Ansible的安装方式有很多,可以使用源码安装(github),也可以使用pip安装或者采用yum 安装,此文档采用yum安装

系统环境:CentOS6.5
软件环境:Python2.6   (Ansible使用Python语言编写,安装Ansible之前请确认服务器已经安装了Python,默认已经安装)


worddavdac01374f0ce9a1203fe88fde0808b0b.

# yum install ansible


成功安装后可以使用ansible  -h 命令查看帮助,

 worddav93ce976f2fc84132bcb542ce16e01939.


ansible  查看版本  

# ansible --version


worddav90a9890f25baecf13b7e0f723565e7a2.


使用rpm -ql   ansible  查看相关ansible文件


worddav0553b03c4aeda580a916f529d43a215e.

三:配置Ansible 


Ansible 的主要配置文件在/etc/ansible   下面(yum 安装的) 

#cd /etc/ansible &&tree #ansible配置文件    #tree命令默认没有,需要安装



worddav6560dbfea7c187081a7ea81766d1c96e.

我这里只对hosts 和ansible.cfg 做了简单的更改,hosts 主要是定义主机的,ansible.cfg 是ansible的主配置文件
下面我们对本机做个简单的PING测试,执行下面命令

echo  -e  "[lo]\n127.0.0.1 ansible_user=root ansible_password=passw0rd ansible_port=40022"  >>hosts

注意:如果是默认端口不要填写,Ansible 2.0版本之前的格式有点不一样,如果使用YUM安装的话,基本上都是2.0以后的版本,强烈不建议使用明文密码的格式填写,可以使用key或者sudo的方式

  # ansible lo -m ping  


worddavd98364c33aa64bd3bc04f9ce7ad5d803.

linux 机器的测试请参考linux项目组,我这里主要介绍如何使用Ansible来控制Windows主机

四:管理windows主机


就如你刚所了解到的,Ansible默认是通过SSH协议来管理Linux/Unix服务器.
从1.7版本开始,Ansible也开始支持Windows机器的管理.不过是通过本机的PowerShell来实现远程管理,而不是SSH.
Ansible仍然通过一台Linux系统机器来进行集中管理,使用Python的 "winrm" 模块来和远程主机交互.
在管理的过程是 Ansible无需在远程主机上安装任何额外的软件,Ansible仍然使用 agentless(非c/s架构) 来保证其在 Linux/Unix的流行度 


必要条件:
(1) 必须开启以及配置Powershell 
https://github.com/ansible/ansible/blob/devel/examples/scripts/ConfigureRemotingForAnsible.ps1

(2)Powershell版本必须3.0 or higer

如果您的系统是window7或者Windows Server 2008,那么PowerShell 2.0已经内置了,可以升级为3.0,4.0

如果您的系统是Windows 8 或者Windows server 2012,那么PowerShell 3.0已经内置了,可以升级为4.0

如果您的系统为Windows 8.1或者Windows server 2012 R2,那默认已经是4.0了。

#查看Powershell版本,powershell 界面下输入 $psversiontable

 

  •  Ansible控制机配置 
    在Ansible控制机上执行下面指令安装pywinrm模块 pip install "pywinrm>=0.1.1" 我这里已经安装过,版本是0.2.2

worddavc624054f9528570737ebad223c641f20.

  • 被管windows主机配置

 开启以及配置Powershell      

Ansible 官方提供初始化脚本

https://github.com/ansible/ansible/blob/devel/examples/scripts/ConfigureRemotingForAnsible.ps1

脚本主要完成如下操作:

  1. 检查最后安装证书的指纹

  2. 配置错误处理

  3. 检测Power shell版本

  4. 检查/启动WimRM服务

  5. 确保WinRM运行之后,检查有PS会话配置

  6. 确保有SSL监听

  7. 检查基本鉴权

  8. 配置防火墙允许WinRM HTTPS链接

  9. 本地测试通过网络方式连接是否正常

 注意:如果提示系统中禁止执行脚本,可以在Powershell 命令行界面输入 set-ExecutionPolicy RemoteSigned 然后输入Y,在执行脚本就不会报

Ansible支持windows需要依赖于少量标准变量来表明远程主机的username, password, and connection type (windows).这些变量大部分都很容易被设置好.在 Ansible 中通过用来代替 SSH-keys 或 密码输入

mkdir  -p windows /group_vars/
cd   !$


p_w_picpath2017-4-21%2015%3A33%3A36.png?versio

vim windows.yml
ansible_user: administrator
ansible_password: p@ssw0rd
ansible_port: 5986
ansible_connection: winrm
ansible_winrm_server_cert_validation: ignore

 

p_w_picpath2017-4-21%2015%3A36%3A16.png?versio

vim host
[windows]
10.200.7.50

 

p_w_picpath2017-4-21%2015%3A34%3A57.png?versio

ansible windows -i host -m win_ping

 

 p_w_picpath2017-4-21%2015%3A35%3A17.png?versio

使用ansible-playbook执行相关脚本

# vim  ip.yml
- name:  test  script module
   hosts: windows
   tasks:
     - name: run  test  script
       script:  /etc/ansible/windows/script/ip .bat

 

 

p_w_picpath2017-4-21%2015%3A36%3A49.png?versio 

p_w_picpath2017-4-21%2015%3A36%3A56.png?versio

ansible-playbook  group_vars /ip .yml  -i host

 

 

 p_w_picpath2017-4-21%2015%3A37%3A8.png?version

  • 远程登陆客户端验证

 p_w_picpath2017-4-21%2015%3A43%3A33.png?versio