我当前的Ansible项目设置如下:
backup-gitlab.yml
roles/
aws_backups/
tasks/
main.yml
backup-vm.yml
gitlab/
tasks/
main.yml
start.yml
stop.yml
backup-gitlab.yml
需要执行以下操作:
stop.yml
。backup-gitlab.yml
。start.yml
。我遇到的问题是Ansible似乎不支持选择在同一个剧本中的同一角色中运行哪些任务文件的方法。在我使用标签来控制Ansible会做什么之前,但在这种情况下标记start.yml
和stop.yml
的包含语句不起作用,因为Ansible似乎没有办法动态更改通过命令行设置后运行的应用标记。
我无法想出一个优雅的方法来实现这一目标。
有些选择是:
include
与硬编码路径一起使用。随着事物的变化,这很容易出错。此外,由于Ansible不赞成将with_items
与include
结合使用(或使用include
使用任何类型的动态循环),因此我无法再快速更改正在运行的任务文件。我的工作流程中的任何微小变化都需要大量的编码更改我真的很想坚持使用命令行中的标签来控制Ansible所做的事情。when
上使用条件(action
子句),并通过设置变量来控制运行的内容。虽然有几个人在SO上推荐了这个,但听起来很糟糕。我将不得不将条件添加到数百个动作中,并且每次我运行一个剧本时,输出都会被数百个“跳过”的行为混乱。语句。local_connection
动态构建静态main.yml
文件,其中包含正确顺序中包含的所有必需任务文件(使用计算的相对路径)。然后调用该计算的main.yml
文件。这是危险和令人费解的。Ansible努力将虚拟机带入幂等国家,但这并不是非常有用,而且在我看来是一种过时的思维方式(如果这是我想要的话,我会坚持使用Chef)。我想利用Ansible来实际执行以下操作:主动更改配置状态,启动进程,监控事件,对事件做出反应等等。基本上我希望它尽可能地自动化我的工作。当前的角色' Ansible建议的结构(具有静态配置)并不适合这种范例,即使他们通过SSH使用远程命令执行使我们如此接近梦想。
答案 0 :(得分:0)
只需使用剧本进行这些类型的管理任务。
当然,跳过语句会使输出混乱。如果您希望修复此问题,可以将角色进一步细分为aws_backups-setup
和aws_backups-managment
。
此外,roles documentation还提供了有关如何在角色上投放pre_tasks
和post_tasks
的信息。