ansible-asterisk-cisco-inte.../roles/asterisk/tasks/main.yml
2025-05-09 23:45:18 +01:00

140 lines
3.9 KiB
YAML

- 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