本地ansible-playbook与angular色的变数运行剧本

我很聪明,所以我可能会设置错误的东西。 我的想法是我有一定的服务器类。 (显示器,networking,数据库为例)

我想对他们运行一个本地的无效的运行,所以我的监视器看起来像这样

--- # plays/monitor.yaml - hosts: mongo connection: local hosts: localhost become: yes become_user: root roles: - ../roles/users - ../roles/monitor vars: sensu_install_client: true sensu_install_server: true 

我的roles/monitor/tasks/main.yml看起来像

 --- # roles/monitor/tasks/main.yaml - include: common.yml - include: server.yml when: sensu_install_server - include: client.yml when: sensu_install_client 

我希望能够通过变数,所以包括会在angular色中发生。 所以当我设置我的api实例时,我可以做类似的事情

 vars: sensu_install_client: true 

在这个游戏中,它只包含来自监视器angular色的client.yml。

我不清楚为什么这不起作用。 我看不到问题。 但是,让我给你一些一般的build议,也许这也会帮助你。

最好的做法是让你的手册在根目录上。 看看这个结构 。 使用该设置,您不需要指定angular色的path,因为Ansible自动期望roles目录中的roles相对于剧本。 那么剧本中的angular色部分就更清洁了:

 roles: - users - monitor 

除了定义全局variables来触发angular色内部的动作外,还可以使用其他两种方法。

1.angular色参数

angular色可以有参数。 如果你想传递参数,你只需要将它转换成字典:

 roles: - users - role: monitor sensu_install_client: true sensu_install_server: true 

然后,variablessensu_install_clientsensu_install_server仅在angular色monitor中可用。 这是一个更清洁的小组,也使任何人都清楚这些variables将用于这个angular色,而不是usersangular色。

2.标签

标签实际上是如何触发剧本/angular色的特定部分的方式。 标签虽然是从命令行传递的,而不是通过剧本中的硬编码variables传递的。 想象一下你的angular色main.yml看起来像这样:

 --- # roles/monitor/tasks/main.yaml - include: common.yml tags: always - include: server.yml tags: server - include: client.yml tags: client 

标签always特殊的,会运行标签化的任务…好吧,你猜对了…总是。

现在你可以像这样调用你的剧本:

 ansible-playbook monitor.yml --tags server 

要么

 ansible-playbook monitor.yml --tags client 

或者,如果你想运行,你甚至可以这样做:

 ansible-playbook monitor.yml --tags "client,server" 

如果你使用这个,不要忘了标记你的用户angular色,否则它不会被运行。

如果你没有指定任何--tags所有的任务都被执行,如果你想过滤特定的标签,你可以使用--skip-tags选项

 ansible-playbook monitor.yml --skip-tags "server" 

你甚至可以过滤总是标签。

 ansible-playbook monitor.yml --tags "server" --skip-tags "always"