容器化技术:Ansible与CICD的高效实践
1. 使用Ansible模块
在刚开始编写Ansible剧本和角色时,人们往往会倾向于在几乎每个任务中都使用shell或command模块。如果你对BASH以及大多数基于Linux的操作系统原生自带的GNU/Linux工具和实用程序有深入的了解,那么想用shell或command模块来构建剧本是合乎逻辑的。但这种方法的问题在于,它忽略了Ansible自带的一千多个独特模块。
虽然shell和command在某些情况下有其用武之地,但你应该首先查看是否有一个Ansible模块可以以编程方式完成你想要实现的任务。使用Ansible模块而不是直接在shell上运行命令的好处是,Ansible模块能够评估幂等性,并且只有在目标未处于所需状态时才采取行动。虽然也可以幂等地使用命令行模块,但这要困难得多。
此外,Ansible模块具有在内存中存储和检索任务元数据的独特能力。例如,你可以在任务定义中添加register行,将任务元数据存储到一个名为task_output的变量中。在剧本的后续部分,你可以通过检查task_output.changed == true来查看该任务是否对系统进行了更改,并相应地采取行动。同样,这种逻辑也可用于检查任务的返回码、搜索元数据或在任务失败时采取行动。使用模块可以让你自由地按照自己的意愿使用Ansible。 <