Add Ansible template
This commit is contained in:
parent
1115e86296
commit
fa1a1138d6
22 changed files with 699 additions and 3 deletions
4
roles/asterisk/handlers/main.yml
Normal file
4
roles/asterisk/handlers/main.yml
Normal file
|
@ -0,0 +1,4 @@
|
|||
- name: Reload Asterisk
|
||||
ansible.builtin.service:
|
||||
name: asterisk
|
||||
state: reloaded
|
140
roles/asterisk/tasks/main.yml
Normal file
140
roles/asterisk/tasks/main.yml
Normal file
|
@ -0,0 +1,140 @@
|
|||
- name: Check if Asterisk is already installed
|
||||
ansible.builtin.stat:
|
||||
path: /usr/sbin/asterisk
|
||||
register: asterisk_installed
|
||||
|
||||
- name: Set external signaling address
|
||||
ansible.builtin.set_fact:
|
||||
external_signaling_address: "{{ hostvars[groups['asterisk'][0]].ansible_host }}"
|
||||
when: external_signaling_address is not defined or external_signaling_address == ""
|
||||
|
||||
- name: Install build dependencies for Asterisk
|
||||
ansible.builtin.apt:
|
||||
name:
|
||||
- build-essential
|
||||
- libasound2-dev
|
||||
- libedit-dev
|
||||
- libjansson-dev
|
||||
- libncurses5-dev
|
||||
- libsqlite3-dev
|
||||
- libssl-dev
|
||||
- libxml2-dev
|
||||
- uuid-dev
|
||||
- wget
|
||||
state: present
|
||||
update_cache: true
|
||||
|
||||
- name: Create a directory for PJSIP source
|
||||
ansible.builtin.file:
|
||||
path: /usr/local/src/pjsip
|
||||
state: directory
|
||||
mode: '0755'
|
||||
when: not asterisk_installed.stat.exists
|
||||
|
||||
- name: Download PJSIP source
|
||||
ansible.builtin.get_url:
|
||||
url: https://github.com/pjsip/pjproject/archive/refs/tags/2.14.tar.gz
|
||||
dest: /usr/local/src/pjsip/pjproject-2.14.tar.gz
|
||||
mode: '0644'
|
||||
when: not asterisk_installed.stat.exists
|
||||
|
||||
- name: Extract PJSIP source
|
||||
ansible.builtin.unarchive:
|
||||
src: /usr/local/src/pjsip/pjproject-2.14.tar.gz
|
||||
dest: /usr/local/src/pjsip/
|
||||
remote_src: yes
|
||||
when: not asterisk_installed.stat.exists
|
||||
|
||||
- name: Build and install PJSIP
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
./configure CFLAGS="-DNDEBUG -DPJ_HAS_IPV6=1" --prefix=/usr --libdir=/usr/lib
|
||||
make -j$(nproc)
|
||||
make install
|
||||
chdir: /usr/local/src/pjsip/pjproject-2.14
|
||||
args:
|
||||
creates: /usr/lib/libpj.so
|
||||
when: not asterisk_installed.stat.exists
|
||||
|
||||
- name: Download Asterisk source
|
||||
ansible.builtin.get_url:
|
||||
url: "https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-{{ asterisk_version }}.tar.gz"
|
||||
dest: "/usr/local/src/asterisk-{{ asterisk_version }}.tar.gz"
|
||||
mode: '0644'
|
||||
when: not asterisk_installed.stat.exists
|
||||
|
||||
- name: Extract Asterisk source
|
||||
ansible.builtin.unarchive:
|
||||
src: "/usr/local/src/asterisk-{{ asterisk_version }}.tar.gz"
|
||||
dest: /usr/local/src/
|
||||
remote_src: true
|
||||
creates: "/usr/local/src/asterisk-{{ asterisk_version }}"
|
||||
when: not asterisk_installed.stat.exists
|
||||
|
||||
- name: Configure Asterisk
|
||||
ansible.builtin.command:
|
||||
cmd: ./configure
|
||||
chdir: "{{ asterisk_src_dir }}"
|
||||
when: not asterisk_installed.stat.exists
|
||||
|
||||
- name: Enable PJSIP modules
|
||||
ansible.builtin.command:
|
||||
cmd: make menuselect.makeopts
|
||||
chdir: "{{ asterisk_src_dir }}"
|
||||
when: not asterisk_installed.stat.exists
|
||||
|
||||
- name: Compile Asterisk
|
||||
ansible.builtin.command:
|
||||
cmd: make
|
||||
chdir: "{{ asterisk_src_dir }}"
|
||||
when: not asterisk_installed.stat.exists
|
||||
|
||||
- name: Install Asterisk
|
||||
ansible.builtin.command:
|
||||
cmd: make install
|
||||
chdir: "{{ asterisk_src_dir }}"
|
||||
when: not asterisk_installed.stat.exists
|
||||
|
||||
- name: Verify that PJSIP modules are installed
|
||||
ansible.builtin.stat:
|
||||
path: /usr/lib/asterisk/modules/chan_pjsip.so
|
||||
register: pjsip_module
|
||||
|
||||
- name: Fail if PJSIP modules are missing
|
||||
ansible.builtin.fail:
|
||||
msg: "PJSIP module not found! Check if libpjsip-dev was installed before building."
|
||||
when: not pjsip_module.stat.exists
|
||||
|
||||
- name: Install Asterisk samples
|
||||
ansible.builtin.command:
|
||||
cmd: make samples
|
||||
chdir: "{{ asterisk_src_dir }}"
|
||||
|
||||
- name: Install Asterisk startup scripts
|
||||
ansible.builtin.command:
|
||||
cmd: make config
|
||||
chdir: "{{ asterisk_src_dir }}"
|
||||
|
||||
- name: Enable and start the Asterisk service
|
||||
ansible.builtin.service:
|
||||
name: asterisk
|
||||
state: started
|
||||
enabled: true
|
||||
|
||||
- name: Deploy PJSIP configuration
|
||||
ansible.builtin.template:
|
||||
src: pjsip.conf.j2
|
||||
dest: "{{ asterisk_config_dir }}/pjsip.conf"
|
||||
owner: root
|
||||
group: root
|
||||
mode: '0644'
|
||||
notify: Reload Asterisk
|
||||
|
||||
- name: Deploy extensions configuration
|
||||
ansible.builtin.template:
|
||||
src: extensions.conf.j2
|
||||
dest: "{{ asterisk_config_dir }}/extensions.conf"
|
||||
owner: root
|
||||
group: root
|
||||
mode: '0644'
|
||||
notify: Reload Asterisk
|
7
roles/asterisk/templates/extensions.conf.j2
Normal file
7
roles/asterisk/templates/extensions.conf.j2
Normal file
|
@ -0,0 +1,7 @@
|
|||
[phones]
|
||||
{% for extension in extensions %}
|
||||
exten => {{ extension.number }},1,Dial(PJSIP/{{ extension.number }})
|
||||
exten => {{ extension.number }},n,Voicemail({{ extension.voicemail }})
|
||||
exten => {{ extension.number }},n,Hangup()
|
||||
exten => {{ extension.number }},hint,PJSIP/{{ extension.number }}
|
||||
{% endfor %}
|
42
roles/asterisk/templates/pjsip.conf.j2
Normal file
42
roles/asterisk/templates/pjsip.conf.j2
Normal file
|
@ -0,0 +1,42 @@
|
|||
[global]
|
||||
realm=asterisk
|
||||
external_signaling_port=5060
|
||||
|
||||
[transport-udp]
|
||||
type=transport
|
||||
protocol=udp
|
||||
bind=0.0.0.0:5060
|
||||
|
||||
{% for extension in extensions %}
|
||||
[{{ extension.number }}]
|
||||
type=endpoint
|
||||
transport=transport-udp
|
||||
context=phones
|
||||
disallow=all
|
||||
allow=ulaw,alaw
|
||||
aors={{ extension.number }}
|
||||
auth={{ extension.number }}-auth
|
||||
direct_media=no
|
||||
rtp_symmetric=yes
|
||||
force_rport=no
|
||||
rewrite_contact=no
|
||||
|
||||
[{{ extension.number }}]
|
||||
type=aor
|
||||
max_contacts=1
|
||||
remove_existing=yes
|
||||
contact=sip:{{ extension.number }}@{{ extension.ipv4_address }}
|
||||
qualify_frequency=10
|
||||
|
||||
[{{ extension.number }}-auth]
|
||||
type=auth
|
||||
auth_type=userpass
|
||||
username={{ extension.number }}
|
||||
password={{ extension.password }}
|
||||
|
||||
[{{ extension.number }}-identify]
|
||||
type=identify
|
||||
endpoint={{ extension.number }}
|
||||
match={{ extension.ipv4_address }}
|
||||
|
||||
{% endfor %}
|
Loading…
Add table
Add a link
Reference in a new issue