我正在创建一个新角色。在默认的角色目录中,我使用以下内容创建了main.yml
asterisk:
install: yes
branch: 16
user: pbx
group: pbx
srcdir: /usr/src/asterisk/
url: "http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-{{ asterisk.branch }}-current.tar.gz"
url_sounds: http://downloads.asterisk.org/pub/telephony/sounds/asterisk-core-sounds-en-ulaw-current.tar.gz
path_sound: /var/lib/asterisk/sounds/en
mysql_support: no
然后在host_vars中,我创建hostname.yml文件,该文件为具有以下内容的主机定义了特定变量
asterisk:
install: no
一个没有告诉我的错误是没有定义aterisk.mysql_support。所以问题是,如何正确使用默认变量?
答案 0 :(得分:0)
在角色中,您可以在main.yml文件中定义公共变量,该文件将默认为源。您可以在各自的yml文件中定义所有非通用变量
答案 1 :(得分:0)
在defaults
中,您要定义一个asterisk
变量,该变量包含一个内部具有各种键/值对的结构。在host_vars
中,为该变量定义一个新值。整体上将替换asterisk
,而不仅仅是包含的install
属性。因此,如果您有使用asterisk
中其他属性的任务而未首先检查它们是否已定义,则它们将失败。
因此,在角色中定义默认值时以使其易于使用的方式构造它们很重要。强制剧本在不使用默认值时重新定义asterisk
的剧本是否连贯甚至合适?如果是这样,则您当前的设计很好。否则,您可能希望将其拆分为定义几个不同的变量。
在您的情况下也可能发生的一件事(但有必要确保确定角色中的任务),是您不必关心{{ 1}}为asterisk
,因为在这种情况下,应该不执行这些操作。确保是否还没有为这些任务使用install = no
的情况(即使不执行该任务,我也认为when: asterisk.install
可能会得到评估,请当心)。您甚至可以将值name
时要执行的所有任务放在有条件包含/导入的单独任务文件中。