2014-09-04 99 views
36

在Ansible 1.7中,我可以使用命令行中的--tags来仅运行该剧本任务的一个子集。Ansible:在剧本中,通过标记过滤角色而不通过命令行

但是我想烘焙到我的剧本中,只运行匹配标签的任务来运行一组角色。也就是说,我不想通过命令行来传递它,因为它每次都是一样的。

起初我以为是这个命令,但是这却做了相反的事情:用这些标签标记任务,而不是基于这些标签过滤出来。

roles: 
    - { role: webserver, port: 5000, tags: [ 'web', 'foo' ] } 

我可以想象实现这个使用条件,但标签将是一个更加优雅的方式来实现这一点。

+0

顺便说一句,我想这样做的原因是跨多个角色运行所有软件包安装任务,所以我可以创建一个缓存所有更新/升级/安装的AMI。然后我可以使用它作为我的基础AMI。让脚本正常工作,现在只需通过命令行指定 – 2014-09-04 23:36:27

回答

39

你只需要与当前版本Ansible以下选项:

  1. 指定命令行
  2. 使用一个变量,而不是标签上的标签来有条件地运行任务
  3. 分割你的网络服务器角色转换为多个角色并对常见任务使用角色依赖关系

此功能请求has come up on the mailing list a few times我还没有看到开发团队的任何指示t它将被添加为新功能。

+14

惊讶的是,更多的人不为此而吵闹!感谢你的回答 – 2014-09-04 23:34:23

0

使用条件可以满足您的需求。

你可以在我的回答中看到更多的信息,他人的同类问题here