示例方案:某个服务的配置文件保存在私人github存储库上的版本控制下。我想编写一本剧本,该剧本在远程节点上获取这些文件之一并将其放入所需的位置。
我可以想到一些解决方案:
- 在运行Ansible(
local_action
)的计算机上进行结帐,然后使用copy
模块 - 在远程节点上进行结帐(使用
git
模块),使用command: cp src dest creates=dest
将文件复制到所需的位置(也许使用处理程序进行此操作 - 只有在Repo具有更改要更改时) - 在剧本中使用URL模块或
command: wget https://raw.github.com/repo/.../file creates=file
仅下载感兴趣的文件。command
模块实际上要检查要创建的文件是否与已经存在的文件不同,还是仅检查文件存在? - 在运行Ansible(
local_action
)的计算机上使用WGET,然后使用复制模块将其推到远程节点
这些的优点/缺点是什么。其中(如果有)可以被视为好实践。最佳的一般解决方案是什么?
我首先要说我们为生产环境选择了第二个解决方案,我保证一件事 - 它只是有效的。现在为更长的版本:
解决方案编号。1:
- 简单而健壮 - 只能工作
- 不使用无关的文件(其他配置文件)"污染"生产服务器
- 不用I/O加载生产服务器到GitHub(可能可以忽略不计)
解决方案编号。2:
- 简单而健壮 - 只能工作
- 要减少污染,我们将配置存储库克隆到/tmp并在剧本结束时删除
解决方案编号。3/4:
我的猜测会起作用,但是将您的配置在源控件中进行,然后实际使用源控制功能有点奇怪。这些解决方案的优点是您可以"樱桃挑选"要下载的配置文件而不是克隆整个存储库。随着克隆的变化,这也会减少I/O对GitHub的I/O。