现在,我们可以运行其它命令进一步探索其功能特性:
- [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
- }
如大家所见,以上命令旨在将/etc/myconf.conf文件复制到我们的两台托管主机当中。在复制过程中,我们还会获得一个JSON返还对象,其中包括数据以及文件归属等信息。我们还可以通过命令行调整其归属、权限以及其它变量。
我们还可以通过以下命令确保服务会在主机启动的同时开始运行:
- [ansible@ansible1: ~]$ ansible webservers -m service -a ”name=httpd state=running“ u ansible -sudo
或者重新启动这些主机: - [ansible@ansible1: ~]$ ansible webservers -m command -a ”/sbin/reboot -t now”
或者提取一份包含全部主机的清单: - [ansible@ansible1: ~]$ ansible all -m setup -u ansible –sudo
最后一行命令将输出用于描述每一台主机的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
|