我们也可以在Playbook中使用各种变量:
除了前面列举的例子之外,我们还可以使用模板。大家可以在建立的模板中引用变量,而后从Playbook当中调用这些模板、从而构建需要的文件。最后,为Apache配置创建一个模板文件,将该配置利用Playbook所指定的变量添加到客户机当中:
当然,我们可能还需要在稍后重新启动服务——这一点可以通过notify及handler函数实现。
在Playbook中包含上述命令能够确保虚拟主机配置文件被保存在客户机中的正确位置,而后重启Apache、从而使全部配置变更正常生效。 与大家的期望相同,我们可以在Playbook中包含文件。我们可以创建一个包含全部必要handler的文件,而后将该文件添加到新Playbook当中。如此一来,我们就能够集中对所有handler进行配置、同时又确保它们适用于全部Playbook。 更进一步,大家还可以通过配置角色在Playbook中收集handler、任务以及各种变量,从而供其它角色引用。举例来说,大家可能在数据库服务器 的日常使用中涉及一系列handler与任务,这时就需要在数据库角色中包含这些文件,而后将角色添加到Playbook当中以容纳全部配置元素。大家还 可以根据需要对关联性进行配置,从而使其它角色引用现有配置方案。 总而言之,Playbook的创建过程并不太直观,但精心调教出来的Playbook也确实能带来出色的扩展能力与顺畅的组织方式。值得一提的是,Playbookr运行非常便捷:
这条命令将并行运行十次Playbook的myplaybook.yml文件,也就是说服务器将一次性与十台客户机连接并在其中运行myplaybook.yml。
由于Ansible使用的是paramiko,一种Python SSH2方案,或者原生SSH与客户机通信,因此当对应的客户机数量过大时有可能出现扩展性问题。为了解决这一弊端,Ansible 1.3版本提供一套加速模式,通过在SSH上启动后台程序实现与客户机之间的直接加密通信。 Ansible模块 Ansible当中包含一系列模块,旨在实现其它扩展功能,例如针对云服务(以Amazon EC2为代表)的配置与管理以及针对各主流数据库服务器、文件操作以及网络设备的专用模块等。大家还可以通过创建自己的模块来满足特定需求。我们几乎能够 使用任何一种编程语言来创建此类模块,除了Python之外、还包括Perl、Bash乃至C++。 我们可以通过编码让模块接纳变量,并要求其输出JSON对象以指明包括命令在内的各种能够在运行过程中收集到的相关状态信息。 AnsibleWorks AWX Ansible也支持一套特定的Web UI,这就是AnsibleWorks AWX。这是一套付费解决方案,能够围绕Ansible提供清晰而简洁的Web UI。不过这套Web UI无法在默认状态下被直接添加到Ansible配置当中;如果大家已经在服务器上广泛安装了Ansible,那么直接将AWX添加进去并不能立刻获得 Web样式的预期结构。相反,大家可以利用命令行工具将现有Ansible Inventory导入到AWX当中——如果需要让命令行与AWX保持一致,我们还需要在此后不断对二者加以同步。 一旦安装并开始运行AWX,大家可以根据自己的基础设施状况对用户、团队、Inventory、项目以及工作模板等进行配置。不过需要注意的是,大家必 须以新增形式添加这些对象,它们并不以那些包含着全部主机及配置的现有配置文件为基础。AWX还提供RESTful API,并集成了LDAP与Active Directory以实现验证及授权功能。这种集成能够帮助大家更便捷地在UI当中将用户及群组与全局组织进行映射。 |