Deployment 使用Ansible将单个文件从专用github repo下载到远程主机
示例场景:特定服务的配置文件在私有github repo上保持在版本控制之下。我想编写一个剧本,在远程节点上获取其中一个文件,并将其放入所需位置 我可以想出几种解决方案:Deployment 使用Ansible将单个文件从专用github repo下载到远程主机,deployment,github,wget,configuration-management,ansible,Deployment,Github,Wget,Configuration Management,Ansible,示例场景:特定服务的配置文件在私有github repo上保持在版本控制之下。我想编写一个剧本,在远程节点上获取其中一个文件,并将其放入所需位置 我可以想出几种解决方案: 在运行ansible(local\u action)的机器上执行签出,然后使用copy模块 在远程节点上执行签出(使用git模块),使用命令:cp src dest creates=dest将文件复制到所需位置(可能使用处理程序执行此操作-仅当需要拉取repo更改时) 使用url模块或命令:wgethttps://raw.gi
local\u action
)的机器上执行签出,然后使用copy
模块git
模块),使用命令:cp src dest creates=dest
将文件复制到所需位置(可能使用处理程序执行此操作-仅当需要拉取repo更改时)命令:wgethttps://raw.github.com/repo/.../file 在剧本中创建=文件
,仅下载感兴趣的文件。命令
模块实际上是要检查要创建的文件是否与可能已经存在的文件不同,还是只是检查文件是否存在李>
local_action
)的计算机上使用wget,然后使用复制模块将其推送到远程节点这些方法的优点/缺点是什么。其中哪些(如有)可被视为良好做法。解决这个问题的最佳通用解决方案是什么?首先,我要说的是,我们为生产环境选择了第二个解决方案,我保证一件事——它可以正常工作。现在,对于较长的版本: 解决方案1:
- 简单而健壮-只会工作
- 不会用无关文件(其他配置文件)“污染”生产服务器
- 不将I/O加载到GitHub的生产服务器(可能可以忽略不计)
- 简单而健壮-只会工作
- 为了减少污染,我们将配置repo克隆到/tmp,并在剧本末尾将其删除
这些解决方案的优点是,您可以“挑选”要下载的配置文件,而不是克隆整个存储库。随着时间的推移,克隆变得越来越重,这也减少了对github的I/O。我决定尝试第一种解决方案,我认为这正是我想要的。我认为它的可扩展性更好(至少对于我的用例而言),因为您只需在ansible服务器上与github交谈一次,而不是每次任务调用每个远程节点一次。就可扩展性而言,我认为这实际上取决于您的用例。您希望限制Github调用还是文件副本?对于第一个解决方案,您只有一个对github的调用,但是您有X个拷贝,每个节点一个。然后,ansible playbook可能会有一点长,以根据您的连接处理许多远程节点(例如,在20台主机上复制50Mo=仅为您的控制计算机复制1Go数据),而让每个节点联系github只会在每个节点上使用50Mo,github肯定是为此而扩展的……解决方案3:只需检查文件是否存在。并且仅当add为命令创建:参数时。