mirror of
				https://git.lapiole.org/dani/ansible-roles.git
				synced 2025-10-26 08:21:28 +01:00 
			
		
		
		
	Update to 2022-02-24 10:00
This commit is contained in:
		| @@ -37,8 +37,10 @@ fpbx_prov_tcp_ports: [ 21 ] | ||||
| fpbx_prov_udp_ports: [ 69 ] | ||||
| fpbx_http_ports: | ||||
|   - 80     # Normal HTTP | ||||
|   - 8088   # UCP node | ||||
|   - 8001   # ast WS | ||||
|   - 8088   # asterisk http endpoint | ||||
|   - 8089   # asterisk https endpoint | ||||
|   - 8001   # NodeJS UCP http endpoint | ||||
|   - 8003   # NodeJS UCP https endpoint | ||||
| fpbx_mgm_src_ip: [] | ||||
| fpbx_voip_src_ip: [] | ||||
| fpbx_http_src_ip: "{{ httpd_src_ip }}" | ||||
| @@ -50,3 +52,6 @@ fpbx_prov_src_ip: "{{ fpbx_voip_src_ip }}" | ||||
|  | ||||
| # Set to your vhost if you use one | ||||
| # fpbx_vhost: https://tel.domain.net | ||||
|  | ||||
| # If letsencrypt role is also installed, you can get a certificate by uncommenting this | ||||
| # fpbx_letsencrypt_cert: "{{ inventory_hostname }}" | ||||
|   | ||||
| @@ -1,6 +1,7 @@ | ||||
| --- | ||||
|  | ||||
| dependencies: | ||||
|   - role: mkdir | ||||
|   - role: repo_asterisk | ||||
|   - role: repo_elrepo | ||||
|   - role: repo_nodejs | ||||
|   | ||||
							
								
								
									
										8
									
								
								roles/freepbx/tasks/archive_post.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								roles/freepbx/tasks/archive_post.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| --- | ||||
|  | ||||
| - import_tasks: ../includes/webapps_post.yml | ||||
|   vars: | ||||
|     - root_dir: "{{ fpbx_root_dir }}" | ||||
|     - version: "{{ fpbx_version }}" | ||||
|   tags: fpbx | ||||
|  | ||||
							
								
								
									
										9
									
								
								roles/freepbx/tasks/archive_pre.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								roles/freepbx/tasks/archive_pre.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| --- | ||||
|  | ||||
| - import_tasks: ../includes/webapps_archive.yml | ||||
|   vars: | ||||
|     - root_dir: "{{ fpbx_root_dir }}" | ||||
|     - version: "{{ fpbx_current_version }}" | ||||
|     - db_name: "{{ fpbx_db_name }}" | ||||
|     - db_server: "{{ fpbx_db_server }}" | ||||
|   tags: fpbx | ||||
							
								
								
									
										10
									
								
								roles/freepbx/tasks/cleanup.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								roles/freepbx/tasks/cleanup.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| --- | ||||
|  | ||||
| - name: Remove temp and obsolete files | ||||
|   file: path={{ item }} state=absent | ||||
|   loop: | ||||
|     - "{{ fpbx_root_dir }}/tmp/freepbx-{{ fpbx_version }}-latest.tgz" | ||||
|     - "{{ fpbx_root_dir }}/tmp/freepbx" | ||||
|     - "{{ fpbx_root_dir }}/db_dumps" | ||||
|   tags: fpbx | ||||
|  | ||||
							
								
								
									
										77
									
								
								roles/freepbx/tasks/conf.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								roles/freepbx/tasks/conf.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,77 @@ | ||||
| --- | ||||
|  | ||||
| - name: Configure vsftpd | ||||
|   template: src=vsftpd/{{ item }}.j2 dest=/etc/vsftpd/{{ item }} | ||||
|   loop: | ||||
|     - user_list | ||||
|     - vsftpd.conf | ||||
|     - chroot_list | ||||
|   notify: restart vsftpd | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Deploy PAM config for vsftpd | ||||
|   template: src=vsftpd/pam.j2 dest=/etc/pam.d/vsftpd | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Deploy configuration | ||||
|   template: src={{ item }}.j2 dest=/etc/{{ item }} | ||||
|   loop: | ||||
|     - freepbx.conf | ||||
|   notify: | ||||
|     - reload freepbx | ||||
|     - fpbx chown | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Configure manager.conf and extensions.conf | ||||
|   lineinfile: | ||||
|     path: "{{ item.file }}" | ||||
|     regexp: '^{{ item.param }}\s*=.*' | ||||
|     line: '{{ item.param }} = {{ item.value }}' | ||||
|   loop: | ||||
|     - param: secret | ||||
|       value: "{{ fpbx_manager_pass }}" | ||||
|       file: /etc/asterisk/manager.conf | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Set amportal settings | ||||
|   command: /usr/local/bin/fwconsole setting {{ item.param }} {{ item.value }} | ||||
|   loop: | ||||
|     - param: AMPMGRUSER | ||||
|       value: admin | ||||
|     - param: AMPMGRPASS | ||||
|       value: "{{ fpbx_manager_pass }}" | ||||
|     - param: PROXY_ENABLED | ||||
|       value: "{{ (system_proxy is defined and system_proxy != '') | ternary('TRUE','FALSE') }}" | ||||
|     - param: PROXY_ADDRESS | ||||
|       value: "'{{ (system_proxy is defined and system_proxy != '') | ternary(system_proxy,'') }}'" | ||||
|     - param: AUTHTYPE | ||||
|       value: "{{ fpbx_auth_type }}" | ||||
|     - param: PHPTIMEZONE | ||||
|       value: "{{ system_tz | default('UTC') }}" | ||||
|     - param: HTTPENABLED | ||||
|       value: TRUE | ||||
|     - param: HTTPBINDADDRESS | ||||
|       value: 0.0.0.0 | ||||
|     - param: HTTPBINDPORT | ||||
|       value: 8088 | ||||
|     - param: HTTPPREFIX | ||||
|       value: asterisk | ||||
|     - param: NODEJSBINDADDRESS | ||||
|       value: 0.0.0.0 | ||||
|     - param: NODEJSHTTPSBINDADDRESS | ||||
|       value: 0.0.0.0 | ||||
|   changed_when: False | ||||
|   tags: fpbx | ||||
|  | ||||
| # Configure httpd / PHP | ||||
| - import_tasks: ../includes/webapps_webconf.yml | ||||
|   vars: | ||||
|     - app_id: freepbx | ||||
|     - php_version: "{{ fpbx_php_version }}" | ||||
|     - php_fpm_pool: "{{ fpbx_php_fpm_pool | default('') }}" | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Install logrotate config | ||||
|   template: src=logrotate.conf.j2 dest=/etc/logrotate.d/asterisk | ||||
|   tags: fpbx | ||||
|  | ||||
							
								
								
									
										27
									
								
								roles/freepbx/tasks/directories.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								roles/freepbx/tasks/directories.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | ||||
| --- | ||||
|  | ||||
| - name: Create directories | ||||
|   file: path={{ fpbx_root_dir }}/{{ item.dir }} state=directory owner={{ item.owner | default(omit) }} group={{ item.group | default(omit) }} mode={{ item.mode | default(omit) }} | ||||
|   loop: | ||||
|     - dir: web | ||||
|     - dir: cgi-bin | ||||
|     - dir: meta | ||||
|       mode: 700 | ||||
|     - dir: backup | ||||
|       mode: 700 | ||||
|     - dir: tmp | ||||
|     - dir: sessions | ||||
|     - dir: archives | ||||
|     - dir: web/admin/modules/ucp/ | ||||
|     - dir: provisioning/contacts | ||||
|     - dir: provisioning/logs | ||||
|     - dir: provisioning/overrides | ||||
|     - dir: provisioning/licenses | ||||
|     - dir: provisioning/bmp | ||||
|     - dir: provisioning/config_bkup/contacts | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Create /tftpboot | ||||
|   file: dest=/tftpboot src={{ fpbx_root_dir }}/provisioning state=link | ||||
|   tags: fpbx | ||||
|  | ||||
							
								
								
									
										85
									
								
								roles/freepbx/tasks/facts.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								roles/freepbx/tasks/facts.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,85 @@ | ||||
| --- | ||||
|  | ||||
| - include_vars: "{{ item }}" | ||||
|   with_first_found: | ||||
|     - vars/{{ ansible_distribution }}-{{ ansible_distribution_major_version }}.yml | ||||
|     - vars/{{ ansible_os_family }}-{{ ansible_distribution_major_version }}.yml | ||||
|     - vars/{{ ansible_distribution }}.yml | ||||
|     - vars/{{ ansible_os_family }}.yml | ||||
|     - vars/defaults.yml | ||||
|   tags: fpbx | ||||
|  | ||||
| # Detect if it's an install, upgrade, or none | ||||
| - block: | ||||
|     - import_tasks: ../includes/webapps_set_install_mode.yml | ||||
|       vars: | ||||
|         - root_dir: "{{ fpbx_root_dir }}" | ||||
|         - version: "{{ fpbx_version }}" | ||||
|         - manage_upgrade: False | ||||
|     - set_fact: fpbx_install_mode={{ (install_mode == 'install') | ternary('install','none') }} | ||||
|     - set_fact: fpbx_current_version={{ current_version | default('') }} | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Build a list of music on hold format to install | ||||
|   set_fact: fpbx_moh_pkg={{ fpbx_moh_pkg | default([ 'asterisk-moh-opsound' ]) + [ 'asterisk-moh-opsound-' ~ item ] }} | ||||
|   loop: | ||||
|     - alaw | ||||
|     - g722 | ||||
|     - g729 | ||||
|     - gsm | ||||
|     - siren14 | ||||
|     - siren7 | ||||
|     - sln16 | ||||
|     - ulaw | ||||
|     - wav | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Build a list of languages packages to install | ||||
|   set_fact: fpbx_snd_pkg={{ fpbx_snd_pkg | default([]) + [ 'asterisk-sounds-core-' ~ item.0 ~ '-' ~ item.1 ] }} | ||||
|   with_nested: | ||||
|     - - en | ||||
|       - es | ||||
|       - fr | ||||
|       - it | ||||
|     - - alaw | ||||
|       - g722 | ||||
|       - g729 | ||||
|       - gsm | ||||
|       - siren14 | ||||
|       - siren7 | ||||
|       - sln16 | ||||
|       - ulaw | ||||
|       - wav | ||||
|   tags: fpbx | ||||
|  | ||||
| # Create a random pass for phone provisionning | ||||
| - when: fpbxphone_pass is not defined | ||||
|   block: | ||||
|     - import_tasks: ../includes/get_rand_pass.yml | ||||
|       vars: | ||||
|         - pass_file: "{{ fpbx_root_dir }}/meta/ansible_phonepass" | ||||
|         - pass_size: 12 | ||||
|         - complex: False | ||||
|     - set_fact: fpbx_phone_pass={{ rand_pass }} | ||||
|   tags: fpbx | ||||
|  | ||||
| # Generate a random pass for the database if needed | ||||
| - when: fpbx_db_pass is not defined | ||||
|   block: | ||||
|     - import_tasks: ../includes/get_rand_pass.yml | ||||
|       vars: | ||||
|         - pass_file: "{{ fpbx_root_dir }}/meta/ansible_dbpass" | ||||
|         - complex: False | ||||
|     - set_fact: fpbx_db_pass={{ rand_pass }} | ||||
|   tags: fpbx | ||||
|  | ||||
| # Generate a random pass for the manager if needed | ||||
| - when: fpbx_manager_pass is not defined | ||||
|   block: | ||||
|     - import_tasks: ../includes/get_rand_pass.yml | ||||
|       vars: | ||||
|         - pass_file: "{{ fpbx_root_dir }}/meta/ansible_manager_pass" | ||||
|         - complex: False | ||||
|     - set_fact: fpbx_manager_pass={{ rand_pass }} | ||||
|   tags: fpbx | ||||
|  | ||||
							
								
								
									
										136
									
								
								roles/freepbx/tasks/install.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										136
									
								
								roles/freepbx/tasks/install.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,136 @@ | ||||
| --- | ||||
|  | ||||
| - name: Install Asterisk and its dependencies | ||||
|   yum: name={{ fpbx_packages }} | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Install music on hold and languages packages | ||||
|   yum: name={{ fpbx_moh_pkg + fpbx_snd_pkg }} | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Create a user for provisioning | ||||
|   user: | ||||
|     name: phone | ||||
|     home: "{{ fpbx_root_dir }}/provisioning" | ||||
|     shell: /bin/rbash | ||||
|     password: "{{ fpbx_phone_pass | password_hash('sha256', 65535 | random(seed=inventory_hostname)) }}" | ||||
|   tags: fpbx | ||||
|  | ||||
| - when: fpbx_install_mode != 'none' | ||||
|   block: | ||||
|     - name: Download FreePBX | ||||
|       get_url: | ||||
|         url: "{{ fpbx_archive_url }}" | ||||
|         dest: "{{ fpbx_root_dir }}/tmp/" | ||||
|         checksum: "sha256:{{ fpbx_archive_sha256 }}" | ||||
|      | ||||
|     - name: Extract fpbx archive | ||||
|       unarchive: | ||||
|         src: "{{ fpbx_root_dir }}/tmp/freepbx-{{ fpbx_version }}-latest.tgz" | ||||
|         dest: "{{ fpbx_root_dir }}/tmp" | ||||
|         remote_src: True | ||||
|  | ||||
|   tags: fpbx | ||||
|  | ||||
| # Create the FreePBX database | ||||
| - import_tasks: ../includes/webapps_create_mysql_db.yml | ||||
|   vars: | ||||
|     - db_name: "{{ fpbx_db_name }}" | ||||
|     - db_user: "{{ fpbx_db_user }}" | ||||
|     - db_server: "{{ fpbx_db_server }}" | ||||
|     - db_pass: "{{ fpbx_db_pass }}" | ||||
|     - append_privs: True | ||||
|   tags: fpbx | ||||
|  | ||||
| # Create the CDR database | ||||
| - import_tasks: ../includes/webapps_create_mysql_db.yml | ||||
|   vars: | ||||
|     - db_name: "{{ fpbx_cdr_db_name }}" | ||||
|     - db_user: "{{ fpbx_db_user }}" | ||||
|     - db_server: "{{ fpbx_db_server }}" | ||||
|     - db_pass: "{{ fpbx_db_pass }}" | ||||
|     - append_privs: True | ||||
|   tags: fpbx | ||||
|  | ||||
| - when: fpbx_install_mode == 'install' | ||||
|   block: | ||||
|     - name: Ensure asterisk is running | ||||
|       service: name=asterisk state=started | ||||
|      | ||||
|     - name: Remove config file before installation | ||||
|       file: path={{ item }} state=absent | ||||
|       loop: | ||||
|         - /etc/freepbx.conf | ||||
|         - /etc/amportal.conf | ||||
|      | ||||
|     - name: Install base framework | ||||
|       command: > | ||||
|         scl enable php{{ fpbx_php_version }} -- ./install | ||||
|           -n --webroot={{ fpbx_root_dir }}/web --dbengine=mysql | ||||
|           --dbuser={{ fpbx_db_user }} --dbname={{ fpbx_db_name }} | ||||
|           --cdrdbname={{ fpbx_cdr_db_name }} --dbpass={{ fpbx_db_pass | quote }} | ||||
|           --astmoddir=/usr/lib64/asterisk/modules/ | ||||
|           --astagidir=/usr/share/asterisk/agi-bin/ | ||||
|           --ampsbin=/usr/local/bin | ||||
|           --ampcgibin=/opt/freepbx/cgi-bin | ||||
|       args: | ||||
|         chdir: "{{ fpbx_root_dir }}/tmp/freepbx" | ||||
|  | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Check for wrapper symlinks | ||||
|   stat: path=/usr/local/bin/{{ item }} | ||||
|   register: fpbx_wrapper_links | ||||
|   loop: | ||||
|     - fwconsole | ||||
|     - amportal | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Remove symlinks | ||||
|   file: path=/usr/local/bin/{{ item.item }} state=absent | ||||
|   when: item.stat.islnk is defined and item.stat.islnk | ||||
|   loop: "{{ fpbx_wrapper_links.results }}" | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Install wrappers | ||||
|   template: src={{ item }}.j2 dest=/usr/local/bin/{{ item }} mode=755 | ||||
|   loop: | ||||
|     - fwconsole | ||||
|     - amportal | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Install safe_asterisk | ||||
|   copy: src=safe_asterisk dest=/usr/local/bin/safe_asterisk mode=755 | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Ensure asterisk service is stopped and disabled | ||||
|   service: name=asterisk state=stopped enabled=False | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Deploy FreePBX service unit | ||||
|   template: src=freepbx.service.j2 dest=/etc/systemd/system/freepbx.service | ||||
|   register: fpbx_unit | ||||
|   notify: restart freepbx | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Reload systemd | ||||
|   systemd: daemon_reload=True | ||||
|   when: fpbx_unit.changed | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Deploy pre/post backup scripts | ||||
|   template: src={{ item }}_backup.sh.j2 dest=/etc/backup/{{ item }}.d/freepbx.sh mode=750 | ||||
|   loop: | ||||
|     - pre | ||||
|     - post | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Install agi scripts | ||||
|   copy: src=agi/{{ item }} dest=/usr/share/asterisk/agi-bin/{{ item }} mode=750 group=asterisk | ||||
|   loop: | ||||
|     - jitsi_conf_pin | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Install dehydrated hook | ||||
|   template: src=dehydrated_hook.j2 dest=/etc/dehydrated/hooks_deploy_cert.d/freepbx.sh mode=755 | ||||
|   tags: fpbx | ||||
							
								
								
									
										32
									
								
								roles/freepbx/tasks/iptables.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								roles/freepbx/tasks/iptables.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| --- | ||||
|  | ||||
| - name: Load iptables FTP helper | ||||
|   copy: content="nf_conntrack_ftp" dest=/etc/modules-load.d/freepbx.conf | ||||
|   notify: restart systemd-modules-load | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Handle FreePBX ports | ||||
|   iptables_raw: | ||||
|     name: "{{ item.name }}" | ||||
|     state: "{{ (item.src | length > 0 and (item.tcp_ports | length > 0 or item.udp_ports | length > 0)) | ternary('present','absent') }}" | ||||
|     rules: "{% if item.tcp_ports is defined and item.tcp_ports | length > 0 %}-A INPUT -m state --state NEW -p tcp -m multiport --dports {{ item.tcp_ports | join(',') }} -s {{ item.src | join(',') }} -j ACCEPT\n{% endif %} | ||||
|             {% if item.udp_ports is defined and item.udp_ports | length > 0 %}-A INPUT -m state --state NEW -p udp -m multiport --dports {{ item.udp_ports | join(',') }} -s {{ item.src | join(',') }} -j ACCEPT{% endif %}" | ||||
|   when: iptables_manage | default(True) | ||||
|   loop: | ||||
|     - name: fpbx_mgm_ports | ||||
|       tcp_ports: "{{ fpbx_mgm_tcp_ports }}" | ||||
|       udp_ports: "{{ fpbx_mgm_udp_ports }}" | ||||
|       src: "{{ fpbx_mgm_src_ip }}" | ||||
|     - name: fpbx_voip_ports | ||||
|       tcp_ports: "{{ fpbx_voip_tcp_ports }}" | ||||
|       udp_ports: "{{ fpbx_voip_udp_ports }}" | ||||
|       src: "{{ fpbx_voip_src_ip }}" | ||||
|     - name: fpbx_http_ports | ||||
|       tcp_ports: "{{ fpbx_http_ports }}" | ||||
|       src: "{{ fpbx_http_src_ip }}" | ||||
|     - name: fpbx_prov_ports | ||||
|       tcp_ports: "{{ fpbx_prov_tcp_ports }}" | ||||
|       udp_ports: "{{ fpbx_prov_udp_ports }}" | ||||
|       src: "{{ fpbx_prov_src_ip }}" | ||||
|   tags: fpbx,firewall | ||||
|  | ||||
| @@ -1,442 +1,18 @@ | ||||
| --- | ||||
|  | ||||
| - include_vars: "{{ item }}" | ||||
|   with_first_found: | ||||
|     - vars/{{ ansible_distribution }}-{{ ansible_distribution_major_version }}.yml | ||||
|     - vars/{{ ansible_os_family }}-{{ ansible_distribution_major_version }}.yml | ||||
|     - vars/{{ ansible_distribution }}.yml | ||||
|     - vars/{{ ansible_os_family }}.yml | ||||
|     - vars/defaults.yml | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Install Asterisk and its dependencies | ||||
|   yum: name={{ fpbx_packages }} | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Build a list of music on hold format to install | ||||
|   set_fact: fpbx_moh_pkg={{ fpbx_moh_pkg | default([ 'asterisk-moh-opsound' ]) + [ 'asterisk-moh-opsound-' ~ item ] }} | ||||
|   loop: | ||||
|     - alaw | ||||
|     - g722 | ||||
|     - g729 | ||||
|     - gsm | ||||
|     - siren14 | ||||
|     - siren7 | ||||
|     - sln16 | ||||
|     - ulaw | ||||
|     - wav | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Build a list of languages packages to install | ||||
|   set_fact: fpbx_snd_pkg={{ fpbx_snd_pkg | default([]) + [ 'asterisk-sounds-core-' ~ item.0 ~ '-' ~ item.1 ] }} | ||||
|   with_nested: | ||||
|     - - en | ||||
|       - es | ||||
|       - fr | ||||
|       - it | ||||
|     - - alaw | ||||
|       - g722 | ||||
|       - g729 | ||||
|       - gsm | ||||
|       - siren14 | ||||
|       - siren7 | ||||
|       - sln16 | ||||
|       - ulaw | ||||
|       - wav | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Install music on hold and languages packages | ||||
|   yum: name={{ fpbx_moh_pkg + fpbx_snd_pkg }} | ||||
|   tags: fpbx | ||||
|  | ||||
| - import_tasks: ../includes/disable_selinux.yml | ||||
|   tags: fpbx | ||||
|  | ||||
| - block: | ||||
|     - import_tasks: ../includes/webapps_set_install_mode.yml | ||||
|       vars: | ||||
|         - root_dir: "{{ fpbx_root_dir }}" | ||||
|         - version: "{{ fpbx_version }}" | ||||
|         - manage_upgrade: False | ||||
|     - set_fact: fpbx_install_mode={{ (install_mode == 'install') | ternary('install','none') }} | ||||
|     - set_fact: fpbx_current_version={{ current_version | default('') }} | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Create directories | ||||
|   file: path={{ fpbx_root_dir }}/{{ item.dir }} state=directory owner={{ item.owner | default(omit) }} group={{ item.group | default(omit) }} mode={{ item.mode | default(omit) }} | ||||
|   loop: | ||||
|     - dir: web | ||||
|     - dir: cgi-bin | ||||
|     - dir: meta | ||||
|       mode: 700 | ||||
|     - dir: backup | ||||
|       mode: 700 | ||||
|     - dir: tmp | ||||
|     - dir: sessions | ||||
|     - dir: archives | ||||
|     - dir: web/admin/modules/ucp/ | ||||
|     - dir: provisioning/contacts | ||||
|     - dir: provisioning/logs | ||||
|     - dir: provisioning/overrides | ||||
|     - dir: provisioning/licenses | ||||
|     - dir: provisioning/bmp | ||||
|     - dir: provisioning/config_bkup/contacts | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Remove obsolete directories | ||||
|   file: path={{ fpbx_root_dir }}/{{ item }} state=absent | ||||
|   loop: | ||||
|     - db_dumps | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Create /tftpboot | ||||
|   file: dest=/tftpboot src={{ fpbx_root_dir }}/provisioning state=link | ||||
|   tags: fpbx | ||||
|  | ||||
| - import_tasks: ../includes/get_rand_pass.yml | ||||
|   vars: | ||||
|     - pass_file: "{{ fpbx_root_dir }}/meta/ansible_phonepass" | ||||
|     - pass_size: 12 | ||||
|     - complex: False | ||||
|   when: fpbxphone_pass is not defined | ||||
|   tags: fpbx | ||||
| - set_fact: fpbx_phone_pass={{ rand_pass }} | ||||
|   when: fpbx_phone_pass is not defined | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Create a user for provisioning | ||||
|   user: | ||||
|     name: phone | ||||
|     home: "{{ fpbx_root_dir }}/provisioning" | ||||
|     shell: /bin/rbash | ||||
|     password: "{{ fpbx_phone_pass | password_hash('sha256', 65535 | random(seed=inventory_hostname)) }}" | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Configure vsftpd | ||||
|   template: src=vsftpd/{{ item }}.j2 dest=/etc/vsftpd/{{ item }} | ||||
|   loop: | ||||
|     - user_list | ||||
|     - vsftpd.conf | ||||
|     - chroot_list | ||||
|   notify: restart vsftpd | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Deploy PAM config for vsftpd | ||||
|   template: src=vsftpd/pam.j2 dest=/etc/pam.d/vsftpd | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Load iptables FTP helper | ||||
|   copy: content="nf_conntrack_ftp" dest=/etc/modules-load.d/freepbx.conf | ||||
|   notify: restart systemd-modules-load | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Start and enable vsftpd | ||||
|   service: name=vsftpd state=started enabled=True | ||||
|   tags: fpbx | ||||
|  | ||||
| - import_tasks: ../includes/webapps_archive.yml | ||||
|   vars: | ||||
|     - root_dir: "{{ fpbx_root_dir }}" | ||||
|     - version: "{{ fpbx_current_version }}" | ||||
|     - db_name: "{{ fpbx_db_name }}" | ||||
|     - db_server: "{{ fpbx_db_server }}" | ||||
| - include: directories.yml | ||||
| - include: facts.yml | ||||
| - include: archive_pre.yml | ||||
|   when: fpbx_install_mode == 'upgrade' | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Download FreePBX | ||||
|   get_url: | ||||
|     url: "{{ fpbx_archive_url }}" | ||||
|     dest: "{{ fpbx_root_dir }}/tmp/" | ||||
|     checksum: "sha256:{{ fpbx_archive_sha256 }}" | ||||
|   when: fpbx_install_mode != 'none' | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Extract fpbx archive | ||||
|   unarchive: | ||||
|     src: "{{ fpbx_root_dir }}/tmp/freepbx-{{ fpbx_version }}-latest.tgz" | ||||
|     dest: "{{ fpbx_root_dir }}/tmp" | ||||
|     remote_src: yes | ||||
|   when: fpbx_install_mode != 'none' | ||||
|   tags: fpbx | ||||
|  | ||||
| - import_tasks: ../includes/get_rand_pass.yml | ||||
|   vars: | ||||
|     - pass_file: "{{ fpbx_root_dir }}/meta/ansible_dbpass" | ||||
|     - complex: False | ||||
|   when: fpbx_db_pass is not defined | ||||
|   tags: fpbx | ||||
| - set_fact: fpbx_db_pass={{ rand_pass }} | ||||
|   when: fpbx_db_pass is not defined | ||||
|   tags: fpbx | ||||
|  | ||||
| - import_tasks: ../includes/webapps_create_mysql_db.yml | ||||
|   vars: | ||||
|     - db_name: "{{ fpbx_db_name }}" | ||||
|     - db_user: "{{ fpbx_db_user }}" | ||||
|     - db_server: "{{ fpbx_db_server }}" | ||||
|     - db_pass: "{{ fpbx_db_pass }}" | ||||
|     - append_privs: True | ||||
|   tags: fpbx | ||||
|  | ||||
| - import_tasks: ../includes/webapps_create_mysql_db.yml | ||||
|   vars: | ||||
|     - db_name: "{{ fpbx_cdr_db_name }}" | ||||
|     - db_user: "{{ fpbx_db_user }}" | ||||
|     - db_server: "{{ fpbx_db_server }}" | ||||
|     - db_pass: "{{ fpbx_db_pass }}" | ||||
|     - append_privs: True | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Ensure asterisk is running | ||||
|   service: name=asterisk state=started | ||||
|   when: fpbx_install_mode == 'install' | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Remove config file before installation | ||||
|   file: path={{ item }} state=absent | ||||
|   loop: | ||||
|     - /etc/freepbx.conf | ||||
|     - /etc/amportal.conf | ||||
|   when: fpbx_install_mode == 'install' | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Install base framework | ||||
|   command: > | ||||
|     scl enable php{{ fpbx_php_version }} -- ./install | ||||
|       -n --webroot={{ fpbx_root_dir }}/web --dbengine=mysql | ||||
|       --dbuser={{ fpbx_db_user }} --dbname={{ fpbx_db_name }} | ||||
|       --cdrdbname={{ fpbx_cdr_db_name }} --dbpass={{ fpbx_db_pass | quote }} | ||||
|       --astmoddir=/usr/lib64/asterisk/modules/ | ||||
|       --astagidir=/usr/share/asterisk/agi-bin/ | ||||
|       --ampsbin=/usr/local/bin | ||||
|       --ampcgibin=/opt/freepbx/cgi-bin | ||||
|   args: | ||||
|     chdir: "{{ fpbx_root_dir }}/tmp/freepbx" | ||||
|   when: fpbx_install_mode == 'install' | ||||
|   tags: fpbx | ||||
|  | ||||
|   # TODO: should be in a loop to patch easily several files, but checking for file presence in a loop | ||||
|   # is a pain with ansible | ||||
|   #- name: Check if webrtc class exist | ||||
|   #  stat: path={{ fpbx_root_dir }}/web/admin/modules/webrtc/Webrtc.class.php | ||||
|   #  register: fpbx_webrtc_class | ||||
|   #  tags: fpbx | ||||
|   # | ||||
|   #- name: Patch webrtc class | ||||
|   #  patch: src=patches/webrtc_proxy.patch dest={{ fpbx_root_dir }}/web/admin/modules/webrtc/Webrtc.class.php | ||||
|   #  when: fpbx_webrtc_class.stat.exists | ||||
|   #  tags: fpbx | ||||
|  | ||||
| - name: Check for wrapper symlinks | ||||
|   stat: path=/usr/local/bin/{{ item }} | ||||
|   register: fpbx_wrapper_links | ||||
|   loop: | ||||
|     - fwconsole | ||||
|     - amportal | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Remove symlinks | ||||
|   file: path=/usr/local/bin/{{ item.item }} state=absent | ||||
|   when: item.stat.islnk is defined and item.stat.islnk | ||||
|   loop: "{{ fpbx_wrapper_links.results }}" | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Install wrappers | ||||
|   template: src={{ item }}.j2 dest=/usr/local/bin/{{ item }} mode=755 | ||||
|   loop: | ||||
|     - fwconsole | ||||
|     - amportal | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Install safe_asterisk | ||||
|   copy: src=safe_asterisk dest=/usr/local/bin/safe_asterisk mode=755 | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Ensure asterisk service is stopped and disabled | ||||
|   service: name=asterisk state=stopped enabled=False | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Ensure /etc/systemd/system/ exists | ||||
|   file: path=/etc/systemd/system/ state=directory | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Deploy FreePBX service unit | ||||
|   template: src=freepbx.service.j2 dest=/etc/systemd/system/freepbx.service | ||||
|   register: fpbx_unit | ||||
|   notify: restart freepbx | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Reload systemd | ||||
|   systemd: daemon_reload=True | ||||
|   when: fpbx_unit.changed | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Remove temp files | ||||
|   file: path={{ item }} state=absent | ||||
|   loop: | ||||
|     - "{{ fpbx_root_dir }}/tmp/freepbx-{{ fpbx_version }}-latest.tgz" | ||||
|     - "{{ fpbx_root_dir }}/tmp/freepbx" | ||||
|   tags: fpbx | ||||
|  | ||||
|   #- name: Update modules | ||||
|   #  command: /usr/local/bin/fwconsole ma updateall | ||||
|   #  changed_when: False | ||||
|   #  tags: fpbx | ||||
|  | ||||
| - import_tasks: ../includes/get_rand_pass.yml | ||||
|   vars: | ||||
|     - pass_file: "{{ fpbx_root_dir }}/meta/ansible_manager_pass" | ||||
|     - complex: False | ||||
|   when: fpbx_manager_pass is not defined | ||||
|   tags: fpbx | ||||
| - set_fact: fpbx_manager_pass={{ rand_pass }} | ||||
|   when: fpbx_manager_pass is not defined | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Deploy configuration | ||||
|   template: src={{ item }}.j2 dest=/etc/{{ item }} | ||||
|   loop: | ||||
|     - freepbx.conf | ||||
|   notify: | ||||
|     - reload freepbx | ||||
|     - fpbx chown | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Configure manager.conf and extensions.conf | ||||
|   lineinfile: | ||||
|     path: "{{ item.file }}" | ||||
|     regexp: '^{{ item.param }}\s*=.*' | ||||
|     line: '{{ item.param }} = {{ item.value }}' | ||||
|   loop: | ||||
|           # - param: AMPMGRPASS | ||||
|           #   value: "{{ fpbx_manager_pass }}" | ||||
|           #   file: /etc/asterisk/extensions_additional.conf | ||||
|           #- param: AMPDBHOST | ||||
|           #  value: "{{ fpbx_db_server }}" | ||||
|           #  file: /etc/amportal.conf | ||||
|           #- param: AMPDBNAME | ||||
|           #  value: "{{ fpbx_db_name }}" | ||||
|           #  file: /etc/amportal.conf | ||||
|           #- param: AMPDBUSER | ||||
|           #  value: "{{ fpbx_db_user }}" | ||||
|           #  file: /etc/amportal.conf | ||||
|           #- param: AMPDBPASS | ||||
|           #  value: "{{ fpbx_db_pass }}" | ||||
|           #  file: /etc/amportal.conf | ||||
|           #- param: CDRDBNAME | ||||
|           #  value: "{{ fpbx_cdr_db_name }}" | ||||
|           #  file: /etc/amportal.conf | ||||
|     - param: secret | ||||
|       value: "{{ fpbx_manager_pass }}" | ||||
|       file: /etc/asterisk/manager.conf | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Set amportal settings | ||||
|   command: /usr/local/bin/fwconsole setting {{ item.param }} {{ item.value }} | ||||
|   loop: | ||||
|     - param: AMPMGRUSER | ||||
|       value: admin | ||||
|     - param: AMPMGRPASS | ||||
|       value: "{{ fpbx_manager_pass }}" | ||||
|     - param: PROXY_ENABLED | ||||
|       value: "{{ (system_proxy is defined and system_proxy != '') | ternary('TRUE','FALSE') }}" | ||||
|     - param: PROXY_ADDRESS | ||||
|       value: "'{{ (system_proxy is defined and system_proxy != '') | ternary(system_proxy,'') }}'" | ||||
|     - param: AUTHTYPE | ||||
|       value: "{{ fpbx_auth_type }}" | ||||
|     - param: PHPTIMEZONE | ||||
|       value: "{{ system_tz | default('UTC') }}" | ||||
|     - param: HTTPENABLED | ||||
|       value: TRUE | ||||
|     - param: HTTPBINDADDRESS | ||||
|       value: 0.0.0.0 | ||||
|     - param: HTTPBINDPORT | ||||
|       value: 8088 | ||||
|     - param: HTTPPREFIX | ||||
|       value: asterisk | ||||
|     - param: NODEJSBINDADDRESS | ||||
|       value: 0.0.0.0 | ||||
|     - param: NODEJSHTTPSBINDADDRESS | ||||
|       value: 0.0.0.0 | ||||
|     - param: SIGNATURECHECK | ||||
|       value: FALSE  # Needed since we're going to patch some module to pass through a rev proxy | ||||
|   changed_when: False | ||||
|   tags: fpbx | ||||
|  | ||||
| #- name: Set global language # TODO : this is an ugly hack | ||||
| #  command: mysql --host={{ fpbx_db_server}} --user={{ fpbx_db_user }} --password={{ fpbx_db_pass | quote }} {{ fpbx_db_name }} -e "UPDATE `soundlang_settings` SET `value`='fr' WHERE `keyword`='language'" | ||||
| #  changed_when: False | ||||
| #  tags: fpbx | ||||
|  | ||||
| - import_tasks: ../includes/webapps_webconf.yml | ||||
|   vars: | ||||
|     - app_id: freepbx | ||||
|     - php_version: "{{ fpbx_php_version }}" | ||||
|     - php_fpm_pool: "{{ fpbx_php_fpm_pool | default('') }}" | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Deploy pre/post backup scripts | ||||
|   template: src={{ item }}_backup.sh.j2 dest=/etc/backup/{{ item }}.d/freepbx.sh mode=750 | ||||
|   loop: | ||||
|     - pre | ||||
|     - post | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Install agi scripts | ||||
|   copy: src=agi/{{ item }} dest=/usr/share/asterisk/agi-bin/{{ item }} mode=750 group=asterisk | ||||
|   loop: | ||||
|     - jitsi_conf_pin | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Handle FreePBX ports | ||||
|   iptables_raw: | ||||
|     name: "{{ item.name }}" | ||||
|     state: "{{ (item.src | length > 0 and (item.tcp_ports | length > 0 or item.udp_ports | length > 0)) | ternary('present','absent') }}" | ||||
|     rules: "{% if item.tcp_ports is defined and item.tcp_ports | length > 0 %}-A INPUT -m state --state NEW -p tcp -m multiport --dports {{ item.tcp_ports | join(',') }} -s {{ item.src | join(',') }} -j ACCEPT\n{% endif %} | ||||
|             {% if item.udp_ports is defined and item.udp_ports | length > 0 %}-A INPUT -m state --state NEW -p udp -m multiport --dports {{ item.udp_ports | join(',') }} -s {{ item.src | join(',') }} -j ACCEPT{% endif %}" | ||||
| - include: install.yml | ||||
| - include: conf.yml | ||||
| - include: iptables.yml | ||||
|   when: iptables_manage | default(True) | ||||
|   loop: | ||||
|     - name: fpbx_mgm_ports | ||||
|       tcp_ports: "{{ fpbx_mgm_tcp_ports }}" | ||||
|       udp_ports: "{{ fpbx_mgm_udp_ports }}" | ||||
|       src: "{{ fpbx_mgm_src_ip }}" | ||||
|     - name: fpbx_voip_ports | ||||
|       tcp_ports: "{{ fpbx_voip_tcp_ports }}" | ||||
|       udp_ports: "{{ fpbx_voip_udp_ports }}" | ||||
|       src: "{{ fpbx_voip_src_ip }}" | ||||
|     - name: fpbx_http_ports | ||||
|       tcp_ports: "{{ fpbx_http_ports }}" | ||||
|       src: "{{ fpbx_http_src_ip }}" | ||||
|     - name: fpbx_prov_ports | ||||
|       tcp_ports: "{{ fpbx_prov_tcp_ports }}" | ||||
|       udp_ports: "{{ fpbx_prov_udp_ports }}" | ||||
|       src: "{{ fpbx_prov_src_ip }}" | ||||
|   tags: fpbx,firewall | ||||
|  | ||||
| - name: Remove old iptables rules | ||||
|   iptables_raw: | ||||
|     name: "{{ item }}" | ||||
|     state: absent | ||||
|   loop: | ||||
|     - ast_mgm_tcp_ports | ||||
|     - ast_mgm_udp_ports | ||||
|     - ast_voip_tcp_ports | ||||
|     - ast_voip_udp_ports | ||||
|     - ast_http_ports | ||||
|   tags: fpbx,firewall | ||||
|  | ||||
| - name: Install logrotate config | ||||
|   template: src=logrotate.conf.j2 dest=/etc/logrotate.d/asterisk | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Start and enable the service | ||||
|   service: name=freepbx state=started enabled=True | ||||
|   tags: fpbx | ||||
|  | ||||
| - import_tasks: ../includes/webapps_post.yml | ||||
|   vars: | ||||
|     - root_dir: "{{ fpbx_root_dir }}" | ||||
|     - version: "{{ fpbx_version }}" | ||||
|   tags: fpbx | ||||
|  | ||||
| - include: services.yml | ||||
| - include: archive_post.yml | ||||
|   when: fpbx_install_mode == 'upgrade' | ||||
| - include: filebeat.yml | ||||
| - include: write_version.yml | ||||
| - include: cleanup.yml | ||||
|   | ||||
							
								
								
									
										10
									
								
								roles/freepbx/tasks/services.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								roles/freepbx/tasks/services.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| --- | ||||
|  | ||||
| - name: Start and enable vsftpd | ||||
|   service: name=vsftpd state=started enabled=True | ||||
|   tags: fpbx | ||||
|  | ||||
| - name: Start and enable FreePBX | ||||
|   service: name=freepbx state=started enabled=True | ||||
|   tags: fpbx | ||||
|  | ||||
							
								
								
									
										5
									
								
								roles/freepbx/tasks/write_version.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								roles/freepbx/tasks/write_version.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| --- | ||||
|  | ||||
| - name: Write installed version | ||||
|   copy: content={{ fpbx_version }} dest={{ fpbx_root_dir }}/meta/ansible_version | ||||
|   tags: fpbx | ||||
							
								
								
									
										23
									
								
								roles/freepbx/templates/dehydrated_hook.j2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								roles/freepbx/templates/dehydrated_hook.j2
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| {% if fpbx_letsencrypt_cert is defined %} | ||||
|  | ||||
| if [ $1 == "{{ fpbx_letsencrypt_cert }}" ]; then | ||||
|   cp /var/lib/dehydrated/certificates/certs/{{ fpbx_letsencrypt_cert }}/fullchain.pem /etc/asterisk/keys/{{ fpbx_letsencrypt_cert }}.crt | ||||
|   cp /var/lib/dehydrated/certificates/certs/{{ fpbx_letsencrypt_cert }}/privkey.pem /etc/asterisk/keys/{{ fpbx_letsencrypt_cert }}.key | ||||
|   chown asterisk:asterisk /etc/asterisk/keys/{{ fpbx_letsencrypt_cert }}.crt /etc/asterisk/keys/{{ fpbx_letsencrypt_cert }}.key | ||||
|   chmod 600 /etc/asterisk/keys/{{ fpbx_letsencrypt_cert }}.crt /etc/asterisk/keys/{{ fpbx_letsencrypt_cert }}.key | ||||
|   # Import cert into FreePBX if the certificate manager is installed | ||||
|   if [ $(fwconsole list | grep -c certificates) == 1 ]; then | ||||
|     fwconsole certificates --import | ||||
|   fi | ||||
|   asterisk -R 'core restart gracefully' | ||||
| fi | ||||
|  | ||||
| {% else %} | ||||
|  | ||||
| # No Let's Encrypt cert configured, nothing to do | ||||
| exit 0 | ||||
|  | ||||
| {% endif %} | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Daniel Berteaud
					Daniel Berteaud