1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
|
Asterisk
========
Description
-----------
The `asterisk` role installs and configures the
[Asterisk](https://www.asterisk.org/) PBX.
Variables
---------
This role **accepts** the following variables:
Variable | Default | Description
---------------------------------------|----------------------------------------------------|------------
`asterisk_local_nets` | `['10.0.0.0/8', '172.16.0.0/12', 192.168.0.0/16']` | Networks local to the Asterisk server (see [documentation](https://wiki.asterisk.org/wiki/display/AST/Asterisk+17+Configuration_res_pjsip#Asterisk17Configuration_res_pjsip-transport_external_media_address))
`asterisk_external_ip` | | External IP address of the Asterisk server (see [documentation](https://wiki.asterisk.org/wiki/display/AST/Asterisk+17+Configuration_res_pjsip#Asterisk17Configuration_res_pjsip-transport_external_media_address))
`asterisk_timezone` | `{{ timezone }}` | Timezone used for voicemail metadata
`asterisk_locale` | `en_US.UTF-8` | Locale used for voicemail prompts
`asterisk_public_fqdn` | `{{ ansible_fqdn }}` | Public FQDN of the Asterisk server (used for SIP TLS client certificate)
`asterisk_from_domain` | `{{ email_domain }}` | Domain used in SIP `From` header
`asterisk_rtp_port_start` | 10000 | Minimum port used for RTP dynamic port range
`asterisk_rtp_port_end` | 10999 | Maximum port used for RTP dynamic port range
`asterisk_sip_port` | 5060 | Source port for SIP connections
`asterisk_sip_tls_port` | 5061 | Source port for SIP TLS connections
`asterisk_http_port` | 8088 | Listening port for the Asterisk HTTP server
`asterisk_https_port` | 8089 | Listening port for the Asterisk HTTP server (HTTPS)
`asterisk_voicemail_formats` | `['wav49', 'gsm', 'wav']` | Audio formats used for voicemail recordings
`asterisk_mail_from` | `asterisk-noreply@{{ email_domain }}` | Email address used for new voicemail notifications
`asterisk_voicemail_email_subject` | see [default vars](defaults/main.yml) | Email subject line for new voicemail notifications
`asterisk_voicemail_email_body` | see [default vars](defaults/main.yml) | Email body used for new voicemail notifications
`asterisk_voicemail_email_date_format` | `%A, %B %d, %Y at %r` | Email date format used for new voicemail notifications
`asterisk_voicemail_min_password` | 4 | Minimum voicemail password length
`asterisk_voicemail_max_message_count` | 100 | Maximum number of messages in each voice mailbox
`asterisk_voicemail_max_message_secs` | 300 | Maximum length of voicemail message (seconds)
`asterisk_voicemail_max_greeting_secs` | 60 | Maximum length of voicemail greeting (seconds)
`asterisk_voicemail_max_failed_logins` | 3 | Maximum number of failed voicemail logins before lockout
`asterisk_dialplan` | | Raw dialplan to place in `extensions.conf` (see [documentation](https://wiki.asterisk.org/wiki/display/AST/Contexts%2C+Extensions%2C+and+Priorities))
`asterisk_password_salt` | | Salt used for generating SHA-512 password hashes
`asterisk_sip_trunks` | `[]` | Upstream SIP trunks (see [format](#asterisk_sip_trunks) below)
`asterisk_sip_extensions` | `[]` | Local SIP extensions (see [format](#asterisk_sip_extensions) below)
`asterisk_queues` | `[]` | Local call queues (see [format](#asterisk_queues) below)
`asterisk_ari_users` | `[]` | User accounts for the Asterisk REST Interface (see [format](#asterisk_ari_users) below)
`asterisk_voicemail_contexts` | `{}` | Dictionary of [voicemail contexts](https://wiki.asterisk.org/wiki/display/AST/Configuring+Voice+Mail+Boxes) (see [format](#asterisk_voicemail_contexts) below)
### asterisk\_sip\_trunks
The `asterisk_sip_trunks` variable describes your upstream SIP trunks. It should
contain a list of dictionaries of the following format:
Key | Default | Description
-------------------|---------|------------
`name` | | Name of the trunk (no spaces)
`transport` | `udp` | Network transport
`host` | | Remote SIP host (comma-separated `host:port`, or list)
`codecs` | | Allowed codecs (comma-separated, or list)
`media_encryption` | `"no"` | Force media encryption (see [documentation](https://wiki.asterisk.org/wiki/display/AST/Asterisk+13+Configuration_res_pjsip#Asterisk13Configuration_res_pjsip-endpoint_media_encryption))
`username` | | SIP account username
`password` | | SIP account password
Note that incoming calls from a SIP trunk will be assigned the dialplan context
`from-TRUNKNAME`.
### asterisk\_sip\_extensions
The `asterisk_sip_extensions` variable describes your internal SIP extensions
(AKA your internal phone numbers). It should contain a list of dictionaries of
the following format:
Key | Default | Description
-------------------|------------------|------------
`name` | | Name of the extension (usually a 3- or 4-digit number)
`codecs` | | Allowed codecs (comma-separated, or list)
`context` | | Dialplan context for inbound calls
`mailbox` | | Mailbox name (comma-separated, or list)
`cid_name` | | Caller ID name
`cid_number` | `{{ ext.name }}` | Caller ID number
`username` | `{{ ext.name }}` | Extension SIP username
`password` | | Extension SIP password
`max_contacts` | 1 | Maximum simultaneous logins
### asterisk\_queues
The `asterisk_queues` variable describes your [call queues](https://wiki.asterisk.org/wiki/display/AST/Building+Queues).
It should contain a list of dictionaries of the following format:
Key | Default | Description
-------------------------|------------------|------------
`name` | | Name of the queue (no spaces)
`music_class` | | Set hold music
`strategy` | | Ring strategy
`context` | | Dialplan context used when someone "dials out" of the queue
`timeout` | 15 | Queue timeout in seconds (see [documentation](https://github.com/asterisk/asterisk/blob/master/configs/samples/queues.conf.sample))
`retry` | 5 | Queue retry time in seconds (see [documentation](https://github.com/asterisk/asterisk/blob/master/configs/samples/queues.conf.sample))
`weight` | | Relative weight of queue (see [documentation](https://github.com/asterisk/asterisk/blob/master/configs/samples/queues.conf.sample))
`maxlen` | | Maximum number of callers in queue
`announce_holdtime` | no | Periodically inform callers of estimated hold time
`announce_position` | no | Periodically inform callers of their position in the queue
`announce_frequency` | 0 | Frequency (in seconds) to play holdtime announcement
`min_announce_frequency` | 15 | Minimum time (in seconds) between holdtime announcements
`periodic_announce` | | Sounds to play periodically (comma-separated, or list)
`monitor_format` | | Audio formats used to record calls (list)
`join_empty` | yes | Allow callers to join queue when no members are available (see [documentation](https://github.com/asterisk/asterisk/blob/master/configs/samples/queues.conf.sample))
`leave_when_empty` | no | Drop callers from queue when no members are available (see [documentation](https://github.com/asterisk/asterisk/blob/master/configs/samples/queues.conf.sample))
`ring_in_use` | yes | Send calls to queue members even when their device state is "in use"
`members` | [] | List of local extensions having membership in the queue
### asterisk\_ari\_users
The `asterisk_ari_users` variable describes user accounts for the [Asterisk REST Interface](https://wiki.asterisk.org/wiki/pages/viewpage.action?pageId=29395573).
It should contain a list of dictionaries of the following format:
Key | Default | Description
------------|---------|------------
`name` | | Username
`password` | | Password
`read_only` | yes | Limit account to read-only requests
### asterisk\_voicemail\_contexts
The `asterisk_voicemail_contexts` variable describes your [voicemail contexts](https://wiki.asterisk.org/wiki/display/AST/Configuring+Voice+Mail+Boxes).
It should contain a mapping of context names to dictionaries of the following format:
Key | Default | Description
-----------|---------|------------
`address` | | Mailbox address (usually a 3- or 4-digit number)
`password` | | Initial mailbox password (usually a numeric PIN)
`name` | | Human-readable mailbox name
`email` | | Email address for new voicemail notifications (or list)
### Exports
This role **exports** the following variables:
Variable | Description
-------------------------|------------
`asterisk_archive_shell` | Shell command for generating tarball of Asterisk data
Usage
-----
Example playbook:
````yaml
- hosts: asterisk_servers
roles:
- role: asterisk
vars:
asterisk_local_nets:
- 192.168.1.0/24
asterisk_external_ip: 203.0.113.42
asterisk_public_fqdn: pbx.example.com
asterisk_password_salt: foobar
asterisk_sip_trunks:
- name: upstream-provider
host: 'sip.example.com:5060'
username: myusername
password: s3cret
vault_asterisk_sip_extensions:
- name: 7001
context: from-home
mailbox: 7000@default
cid_name: Living Room
password: s3cret
- name: 7002
context: from-home
mailbox: 7000@default
cid_name: Kitchen
password: s3cret
- name: 7003
context: from-home
mailbox: 7000@default
cid_name: Office
password: s3cret
asterisk_queues:
- name: home
strategy: ringall
retry: 1
timeout: 30
members:
- 7001
- 7002
- 7003
asterisk_ari_users:
- name: nagios
readonly: yes
password: s3cret
asterisk_voicemail_contexts:
default:
- address: 7000
password: 1234
name: Doe Family
email:
- johndoe@example.com
- janedoe@example.com
asterisk_dialplan: |
[from-upstream-provider]
; Ring all house phones for incoming PSTN calls, if no answer send to voicemail.
exten => _X.,1,Queue(home,nr,,,25)
same => n,Answer(500)
same => n,Voicemail(7000@default,su)
same => n,Hangup()
[from-home]
; local voicemail access
exten => *99,1,Answer(500)
same => n,VoiceMailMain(7000@default,s)
same => n,Hangup()
; pstn
exten => _+1NXXNXXXXXX,1,Set(CALLERID(all)=John Doe <5555555555>)
same => n,Dial(PJSIP/${EXTEN}@upstream-provider)
same => n,Hangup()
````
|