如大家所见,以上命令旨在将/etc/myconf.conf文件复制到我们的两台托管主机当中。在复制过程中,我们还会获得一个JSON返还对象,其中包括数据以及文件归属等信息。我们还可以通过命令行调整其归属、权限以及其它变量。
我们还可以通过以下命令确保服务会在主机启动的同时开始运行:
或者重新启动这些主机:
或者提取一份包含全部主机的清单:
最后一行命令将输出用于描述每一台主机的JSON对象,其中包括总体内存、已使用内存、CPU、网络、磁盘信息、操作系统版本以及内核版本等等。
如各位所见,Ansible允许用户通过调整命令行参数执行命令、收集数据并向目标位置复制文件。
这项功能本身也可以单独通过SSH外加一些脚本来实现,毕竟利用远程主机上的SSH实现命令执行早已不是什么新闻。Ansible的进取之处在于有能力通过一条短短的参数集同时实现命令执行、分组、清单以及其它更高级别的主机管理功能。每一项Ansible命令行功能都提供多种选项,包括引用多个分组或者在单一子集(例如将前五十台服务器构建为一个分组子集)中运行命令。
Unix管理员当然能够立即上手这些功能,并快速利用Ansible的工具编写脚本、从而以非常简便的方式实现任务处理的自动化与流程化。除此之外,我们还可以创建Playbook以收集命令与任务集,这样能够大大降低管理工作的复杂程度。
Ansible Playbook
Playbook采用YAML语法结构,因此它们一般比较易于阅读并加以配置。举例来说,下面这条简单的Playbook能够确保NTPD始终以“ansible”用户身份运行在全部主机上、且利用sudo进行连接。
- hosts: all
remote_user: ansible
tasks:
- service: name=ntpd state=started
sudo: yes
我们还可以利用Playbook实现文件复制。如下所示为Playbook文件复制版本,其中同时对归属及文件所在客户机的权限做出了指定:
- hosts: all
remote_user: ansible
tasks:
- name: Copy file to client
copy: src=/etc/myconf.conf dest=/etc/myconf.conf
owner=root group=root mode=0644
我们也可以在Playbook中使用各种变量:
- hosts: webservers
remote_user: root
vars:
ntp_service: 'ntpd'
tasks:
- service: name={{ ntp_service }} state=started
sudo: yes
除了前面列举的例子之外,我们还可以使用模板。大家可以在建立的模板中引用变量,而后从Playbook当中调用这些模板、从而构建需要的文件。最后,为Apache配置创建一个模板文件,将该配置利用Playbook所指定的变量添加到客户机当中:
当然,我们可能还需要在稍后重新启动服务——这一点可以通过notify及handler函数实现。
restart apache
handlers:
- name: restart apache
service: name=apache state=restarted
在Playbook中包含上述命令能够确保虚拟主机配置文件被保存在客户机中的正确位置,而后重启Apache、从而使全部配置变更正常生效。