使用Ansible OSS

时间:2015-09-22 07:35:07

标签: cron ansible operation

请注意:对此处的任何企业/付费( Tower ?)解决方案感兴趣,只有Ansible提供的解决方案OSS提供。

好的,所以我的Ansible项目配置完好,工作得很好,喔!看起来像这样:

myansible01.example.com:/opt/ansible/
    site.yml
    fizz.yml
    buzz.yml
    group_vars/
    roles/
        common/
            tasks/
                main.yml
            handlers
                main.yml
        foos/
            tasks/
                main.yml
            handlers/
                main.yml

为了让它在生产环境中运行,我需要做几件事:

  • 我需要能够自动部署对此项目的更改
  • 我需要安排播放手册,比方说,每隔30秒(确保所有受管节点始终符合规定)

所以我担心:

  • 如何将更改部署到Ansible项目中?假设项目位于myansible01.example.com:/opt/ansible(我的Ansible服务器)。是否足以简单地删除Ansible项目根目录(rm -rf /opt/ansible),然后将最新(包含更改)Ansible项目复制回同一位置?如果我执行此“ drop-n-swap ”时Ansible当前正在运行任何播放会发生什么?
  • 看起来商业产品(Ansible Tower)内置了一个调度功能,但不是OSS产品。如何安排Ansible OSS在特定时间运行播放?例如,我可能希望每隔30秒运行一次播放,以确保节点始终符合规定。 cron是否足以做到这一点,还是有更标准的方法?

1 个答案:

答案 0 :(得分:1)

对于这类任务,您通常需要一个编排引擎(例如Jenkins)来完成您的所有业务流程。

您可以将Jenkins设置为在计时器或其他事件上运行playbooks,例如推送到SCM(如git)。

通常,作业首先检查我们的Ansible代码库的标记/分支,然后将其应用于我们所有指定的服务器,这样您就可以随时了解正在运行的内容。如果你愿意,这可以简单地掌握在主人身上(用git术语),所以它总是应用最新的变化。如果您还要将其挂钩到SCM仓库中,那么简单的推送将强制将这些更改应用于您的所有服务器。

由于这种即时性,您可能只想考虑在某些测试服务器上执行此操作,然后对它们进行某种形式的测试(例如Serverspec),以便在将它们推出之前验证您的更改是否正常一个生产环境。

默认情况下,Jenkins在同一个作业运行时不会运行作业(或者如果你在执行程序插槽中占用最多),那么你总是可以确保它只会在你的作业之后拉出回购(包括任何更改)。 Ansible运行完成。如果您有多个作业正在运行,您可以使用阻止来阻止作业同时运行(两者都尝试将可能不同的配置应用于服务器)但您不必担心新作业开始并将回购拉入詹金斯将这些工作分成不同的工作空间。

我们使用Jenkins手动运行Ansible来对抗我们的环境,但我们也进行了自我修复" Jenkins的工作只是针对我们的环境运行我们的Ansible代码库的标记提交,迫使它进入幂等状态以防止配置的自然漂移。当我们需要对环境做一些不同的事情或者稍微向前提交我们的代码库时,我们可以轻松地禁用自我修复工作,直到我们对事情满意为止,然后重新启用将事情放回原处或推进Jenkins正在使用的标签现在使用更近期的提交。