这是我的剧本:
- name: Install MySQL with replication
hosts: mysql-master:mysql-slave
user: root
sudo: false
roles:
- common
- admin-users
- generic-directories
- { role: iptables, tags: [ 'mysql-iptables'] }
- mysql
我有不同端口的ip表任务,我想根据服务器组运行任务。
我已根据该组标记了iptables任务。 当我运行剧本而不是播放标记任务时,它会运行iptables角色中定义的所有任务。
如果我在这里做错了,请告诉我。
答案 0 :(得分:2)
在实践中,角色不应包含仅由您使用的代码/配置。尝试开发角色,如果你要发布它们,这样做你将创建更多通用/有用的角色
使用iptable角色,您最终想要的是打开端口/更改防火墙配置。 该角色应包含允许在剧本中进行配置的任务:
---
- name: iptables | Open ports
command: 'open port {{item.protocol}} {{item.port}}
with_items: 'iptable_conf'
tags:
- iptables
那你就是剧本
- name: Install MySQL with replication
hosts: mysql-master:mysql-slave
user: root
sudo: false
vars:
- iptables_conf:
- {protocol: tcp, port: 3307}
- {protocol: tcp, port: 3306}
roles:
- common
- admin-users
- generic-directories
- iptables
- mysql
答案 1 :(得分:1)
希望您一直喜欢固执己见的软件:https://github.com/ansible/ansible/issues/3283。
如果我正确阅读,您将体验到一项功能,该角色中的所有内容都会为您标记,您的CLI标记规范随后会匹配所有这些任务。我讨厌这个功能。这很愚蠢。 "用途"与#34;选择"当你最初暴露给Ansible标签时,w / r / t到标签是一个明显的第一个问题。它应该有一个更灵活的答案,或至少在文档中点头。
我建议采用不同的方式来组织多功能 iptables 角色。首先,如果它包含非常少量的任务,则考虑不具备该角色。 我建议角色对你有意义,而不是模块适配器。因此,sql角色可以在单独的任务文件中处理特定于sql的规则。
否则,可以使用角色参数动态加载变量(例如防火墙规则列表)。这就是看起来的样子,抄写:
剧本:
---
- hosts: loc
roles:
- { role: does-too-much, focus_on: 'specific-kind' }
角色任务/ main.yml:
---
- include_vars: "{{ focus_on }}.yml"
- debug:
msg: "ok - {{ item }}"
with_items: stuff
Variables vars / specific-kind.yml:
---
stuff:
- b
- c