我是一个新的Ansible用户,并享受到目前为止。 我正在使用Ansible来定义和应用networking服务器configuration。 我正在使用剧本。 假设我有一个angular色来安装和configurationNginx,那么这些任务在roles/nginx/tasks/main.yml中定义,并从./site.yml引用,所以当我configuration新的服务器时,它们总是运行。 像这样的例子: https : //github.com/ansible/ansible-examples/tree/master/wordpress-nginx/roles/nginx 。 这工作很好,但有时我想明确地停止,启动或重新启动Nginx。 我知道如何使用Ansible来实现这一点,但是我的问题是围绕着约定或惯例。 我是不是该…
A.在Nginxangular色文件夹内创build启动,停止和重新启动任务? 如果是的话,我应该如何申报和援引。 显然,我不应该把它们添加到main.yml中,否则每当我提供一个新的服务器时它们都会被调用。 我应该创buildroles/nginx/tasks/start.yml , roles/nginx/tasks/stop.yml等,并调用他们像ansible-playbook -i staging nginx/roles/stop.yml 。
B.或者我不应该在剧本中声明这些内容,而是应该用一个完美的方式来执行它们,比如ansible webservers -i staging -a "nginx stop" -s 。
C.有关完成此任务的最佳方法的任何其他build议。
非常感谢 ( :
如果这是一个特别的行动,你的环境很小,不是很复杂,每个参与者都被告知,你希望在两分钟内恢复正常,而且你不介意下一个可行的运行是否会改变这个(例如停止服务重新启动,因为在你的剧本中的服务状态定义是这样说的),然后继续B.注意,你改变了系统状态与你的描述相反的说法。
如果你想使事情更清楚,解决schemeA是一个很好的起点。 你可以为nginx停止,启动等创build适当的定义,但总的来说,它就像B一样,只是这些任务是在一些文件中定义的。
至于C,你可以进一步开发A:使状态依赖于一个variables。 通过这种方式,您可以在理想的configuration中使所需的状态变得明确。 为什么一个variables而不改变服务定义中的状态? 在更复杂的情况下(比如开始/停止多个服务)可以帮助你保持清晰和简单。 如果您有多个环境(登台,制作,…),则只需在一个环境中更改状态即可轻松地保持定义相同。
使事情明确提供一些优势:
这是logging为其他人(和你的未来自己)看到的
独立运行是不会干涉的(因为每个人都有现状)
如果你自动运行 – 从版本控制触发 – 你可以用这个来改变你的状态,也可以改回来
保持每个任务在一个angular色是不需要的。 另外,如果你涉及到一个任务的一个子集,那就像是一个丑陋的抽象违背。 我知道,我已经做到了。
例如,networking更新剧本可以用自己的任务将内容复制到networking根目录,并在需要时重新启动nginx。
特别强大的是在一个剧本中描述整个状态。 调用angular色nginx,并在post_tasks中也复制这个特定网站的内容。 您的网站将在那里,如果需要安装nginx。 当处理程序任务被调用时,那个nginx重启只是一个副作用。