Deployment 使用Ansible将单个文件从专用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

示例场景:特定服务的配置文件在私有github repo上保持在版本控制之下。我想编写一个剧本,在远程节点上获取其中一个文件,并将其放入所需位置

我可以想出几种解决方案:

  • 在运行ansible(
    local\u action
    )的机器上执行签出,然后使用
    copy
    模块
  • 在远程节点上执行签出(使用
    git
    模块),使用
    命令:cp src dest creates=dest
    将文件复制到所需位置(可能使用处理程序执行此操作-仅当需要拉取repo更改时)
  • 使用url模块或
    命令:wgethttps://raw.github.com/repo/.../file 在剧本中创建=文件
    ,仅下载感兴趣的文件。
    命令
    模块实际上是要检查要创建的文件是否与可能已经存在的文件不同,还是只是检查文件是否存在
  • 在运行ansible(
    local_action
    )的计算机上使用wget,然后使用复制模块将其推送到远程节点

  • 这些方法的优点/缺点是什么。其中哪些(如有)可被视为良好做法。解决这个问题的最佳通用解决方案是什么?

    首先,我要说的是,我们为生产环境选择了第二个解决方案,我保证一件事——它可以正常工作。现在,对于较长的版本:

    解决方案1:

    • 简单而健壮-只会工作
    • 不会用无关文件(其他配置文件)“污染”生产服务器
    • 不将I/O加载到GitHub的生产服务器(可能可以忽略不计)
    第二种解决方案:

    • 简单而健壮-只会工作
    • 为了减少污染,我们将配置repo克隆到/tmp,并在剧本末尾将其删除
    第3/4号解决方案:

    我想它会工作的,但是在源代码管理中进行配置,然后不真正使用源代码管理特性,感觉有点奇怪。
    这些解决方案的优点是,您可以“挑选”要下载的配置文件,而不是克隆整个存储库。随着时间的推移,克隆变得越来越重,这也减少了对github的I/O。

    我决定尝试第一种解决方案,我认为这正是我想要的。我认为它的可扩展性更好(至少对于我的用例而言),因为您只需在ansible服务器上与github交谈一次,而不是每次任务调用每个远程节点一次。就可扩展性而言,我认为这实际上取决于您的用例。您希望限制Github调用还是文件副本?对于第一个解决方案,您只有一个对github的调用,但是您有X个拷贝,每个节点一个。然后,ansible playbook可能会有一点长,以根据您的连接处理许多远程节点(例如,在20台主机上复制50Mo=仅为您的控制计算机复制1Go数据),而让每个节点联系github只会在每个节点上使用50Mo,github肯定是为此而扩展的……解决方案3:只需检查文件是否存在。并且仅当add为命令创建:参数时。