向已经定义的节添加内容
[section]
label = value
[section](+)
label2 = value2
在 这个例子里,加号表示同名的第二个配置节点的内容是对第一个节点的补充。后一个配置节点可以存在于另一个文件中(通过#include包含)。需要注意的 是,包含加号的这个配置项不是一个独立的项目,也就是说,它的存在必需依赖于前面已定义的同名节点,如果那个节点不存在,那么Asterisk PBX的配置解析器在解析带"+"节点时就会发生错误而中止。
定义一个模板节点
[section](!)
label = value
在这个例子中,节点后面加上了一个叹号,表示这是一个模板节点,模板节点本身并不代表一个实质生效的配置,模板只能被其它节点引用,作为其它节点的一部份来使用。引用关系(下面要介绍)类似于C++的继承,而模板则类似于C++中的虚类。
引用配置模板或另一个配置
[section](name[,name1])
label = value
在这个示例中,括号里面的名称 name, name1...是一个配置模板或另一个配置节点的名称。这种配置方式表示,将括号中节点的名称加入到当前配置节点配置项的前面。也就是说,这个配置节点 中的配置项目会包括name, name1的内容,然后再是这个节点下面的配置项。这有点像C++或其它面向对象程序语言中对象的继承,而且与之相类似,这个节点本身还可以被其它节点引 用(继承)。例如下面的配置:
[foo]
permit=192.168.0.2
host=asdf
deny=192.168.0.1
[bar]
permit=192.168.1.2
host=jkl deny=192.168.1.1
[baz](foo,bar)
permit=192.168.3.1
host=bnm
在这个例子里面,节点 baz引用了节点foo和节点bar,因此被解析成如下的样子:
[baz]
permit=192.168.0.2
host=asdf
deny=192.168.0.1
permit=192.168.1.2
host=jkl
deny=192.168.1.1
permit=192.168.3.1
host=bnm
示例
下面我们给出一个Asterisk PBX中SIP配置示例,并简单说明其作用。在 sip.conf 中的定义如下:
[defaults](!)
type=friend
nat=yes
qualify=on
dtmfmode=rfc2833
disallow=all
allow=alaw
#include accounts/*/sip.conf
在这个配置文件中,定义了一个模板 default,然后通过 #include 引用了account目录下所有子目录中的sip.conf。其中一个子目录 account/redice/sip.conf 的内容如下:
[redice_tmpl](!,defaults)
secret=this_is_not_secret
context=from-redice-grp
callerid=RediceGrp <300>
accountcode=0001
[redice](redice_tmpl)
mailbox=redice@at-zone.com
[redice1](redice_tmpl)
mailbox=redice1@at-zone.com
这 个配置文件 sip.conf 中定义了两个SIP电话,redice和redice1,其配置都来自于模板 redice_tmpl,唯一不同是的使用了不相同的语音邮箱。而模板 redice_tmpl 则是包含另一个模板defaults(定义于主目录中的 sip.conf 中)的模板。
从这个示例不难看出,新的Asterisk PBX 配置能力大大增强了,配置可以写得更加简单和灵活,而通过第三方软件来对 Asterisk PBX 进行配置也会变得更加容易。