技术开发 频道

Ansible:老牌Unix管理员的梦想级方案

        【IT168 技术】大部分服务器自动化及流程解决方案,例如Puppet与Chef,都依赖于特定方案编码、Web UI以及命令行工具等要素的综合体,从而使整套体系正常运转。Ansible则有所不同。尽管也能够支持Web UI,Ansible在Unix管理员的监管范围内同样作用良好,即使用大量通用脚本以及命令行机制。

  Ansible是一款极为灵活的开源工具套件,能够大大简化Unix管理员的自动化配置管理与流程控制方式。它利用推送方式对客户系统加以配置,这样所有工作都可在主服务器端完成。其命令行机制同样非常强大,允许大家利用商业许可Web UI实现授权管理与配置。

  安装Ansible

  安装Ansible非常简单。大家可以直接从Git资源库中克隆镜像,或者利用Linux或者Unix环境下的软件包管理工具下载并安装Ansible软件包。管理工具能保证大家获取必要的软件包以及Python 2.6可执行文件,而且前后只需数分钟,我们就能完成Ansible主服务器的配置任务。

  总体而言,大家需要将Ansible部署在中央服务器当中,同时在Ansible主机文件内配置所需管理的客户端群组以及主机名称。托管主机的配置流程也非常精简,只需要安装功能性Python 2.4或者2.6并为连入的Ansible主服务器及各台主机配置SSH authorized_keys文件。

  大家可以采取多种途径实现这一步骤,例如作为特定用户或者在主服务器上运行命令的用户将Ansible配置到全部接入主机当中。各位当然可以通过root权限用户搞定一切,但很多朋友可能更倾向于利用普通用户账户进行连接并使用sudo命令实现root权限。

  举例来说,我们可以在自己的主服务器上建立一个名为“ansible”的用户;接下来将一个“ansible”用户添加至托管主机并为该用户提供无需密码的sudo使用能力。另外,我们也可以为主机上的sudo命令设定密码,或者指定一个其它用户名专门用于连接。总而言之,我们的最终目标在于保证Ansible的控制可执行文件通过SSH及运行命令接入同一台经过配置的主机。到这里,我们已经讲完了关于Ansible主服务器及客户机的全部配置流程。

  Ansible如何运行

  主服务器与托管主机的配置工作完成之后,现在我们可以着手了解Ansible的具体功能。下面举一个简单的例子:

[ansible@ansible1: ~]$ ansible all -m ping -u ansible -sudo
ansiblecentos.iwlabs.net | success
>> {
    
"changed": false,  
    
"ping": "pong"}

ansibleubuntu.iwlabs.net | success
>> {
    
"changed": false,  
    
"ping": "pong"
}

  上述命令的作用在于确保我们的托管主机已经完成配置并能够正确应答请求。根据返回的结果,可以看到我们的目标主机已经准备好应对日常任务了。

  现在,我们可以运行其它命令进一步探索其功能特性:

[ansible@ansible1: ~]$ ansible all -m copy -a "src=/etc/myconf.conf dest=/etc/myconf.conf" -u ansible -sudo
ansiblecentos.iwlabs.net | success
>> {
    
"changed": true,  
    
"dest": "/etc/myconf.conf",  
    
"gid": 500,  
    
"group": "ansible",  
    
"md5sum": "e47397c0881a57e89fcf5710fb98e566",  
    
"mode": "0664",  
    
"owner": "ansible",  
    
"size": 200,  
    
"src": "/home/ansible/.ansible/tmp/ansible-1379430225.64-138485144147818/source",  
    
"state": "file",  
    
"uid": 500
}
ansibleubuntu.iwlabs.net | success
>> {
    
"changed": true,  
    
"gid": 1000,  
    
"group": "ansible",  
    
"mode": "0664",  
    
"owner": "ansible",  
    
"path": "/etc/myconf.conf",  
    
"size": 200,  
    
"state": "file",  
    
"uid": 1000
}
0