diff --git a/roles/freepbx/defaults/main.yml b/roles/freepbx/defaults/main.yml new file mode 100644 index 0000000..1b92020 --- /dev/null +++ b/roles/freepbx/defaults/main.yml @@ -0,0 +1,19 @@ +--- + +deploy_key_file: /root/.ssh/id_git_deploy_rsa + +asterisk_user: asterisk +asterisk_group: asterisk + +repo_provisioning: gogs@git.binary-kitchen.de:noby/voip-yealink-provisioning.git +repo_phonebook: gogs@git.binary-kitchen.de:noby/voip-yealink-phonebook.git +repo_xml_browser: gogs@git.binary-kitchen.de:noby/voip-yealink-xml-browser.git + +path_yealink_provisioning: /tftpboot/yealink +path_yealink_phonebook: /var/www/html/yealink_phonebook +path_yealink_xml_browser: /opt/yealink_xml_browser + +composer_path: "{{ path_yealink_phonebook }}/composer" +composer_keep_updated: false +composer_version: '' +composer_version_branch: '--2' diff --git a/roles/freepbx/handlers/main.yml b/roles/freepbx/handlers/main.yml new file mode 100644 index 0000000..ff121ab --- /dev/null +++ b/roles/freepbx/handlers/main.yml @@ -0,0 +1,10 @@ +--- + +- name: Reload systemd + ansible.builtin.systemd: + daemon_reload: true + +- name: Restart yealink-xml-browser + ansible.builtin.service: + name: yealink-xml-browser + state: restarted diff --git a/roles/freepbx/meta/main.yml b/roles/freepbx/meta/main.yml new file mode 100644 index 0000000..340c63c --- /dev/null +++ b/roles/freepbx/meta/main.yml @@ -0,0 +1,8 @@ +--- +galaxy_info: + author: Thomas Basler + description: Install FreePBX extensions + license: None + platforms: + - name: Debian + min_ansible_version: "2.4" diff --git a/roles/freepbx/tasks/main.yml b/roles/freepbx/tasks/main.yml new file mode 100644 index 0000000..75473f6 --- /dev/null +++ b/roles/freepbx/tasks/main.yml @@ -0,0 +1,18 @@ +--- + +- name: Generate an OpenSSH keypair for gitea deploy usage + community.crypto.openssh_keypair: + path: "{{ deploy_key_file }}" + +- name: Wait for confirmation + ansible.builtin.pause: + prompt: Please confirm that you've distributed the public key to all repositories! Press return to continue. Press Ctrl+c and then "a" to abort + +- name: Include provisioning tasks + ansible.builtin.include_tasks: yealink_provisioning.yml + +- name: Include phonebook tasks + ansible.builtin.include_tasks: yealink_phonebook.yml + +- name: Include XML-Browser tasks + ansible.builtin.include_tasks: yealink_xml_browser.yml diff --git a/roles/freepbx/tasks/yealink_phonebook.yml b/roles/freepbx/tasks/yealink_phonebook.yml new file mode 100644 index 0000000..c7e95f4 --- /dev/null +++ b/roles/freepbx/tasks/yealink_phonebook.yml @@ -0,0 +1,74 @@ +--- + +- name: Check if requested version parameters are valid + fail: + msg: You cannot request a specific version AND keep the composer up to date. + Set either composer_version or composer_keep_updated, but not both. + when: composer_version != '' and composer_keep_updated + +- name: Set php_executable variable to a default if not defined. + ansible.builtin.set_fact: + php_executable: php + when: php_executable is not defined + +- name: Safe Directory + command: git config --global --add safe.directory {{ path_yealink_phonebook }} + check_mode: no + +- name: Clone Phonebook generation script + ansible.builtin.git: # noqa: latest + repo: "{{ repo_phonebook }}" + dest: "{{ path_yealink_phonebook }}" + force: true + accept_hostkey: true + key_file: "{{ deploy_key_file }}" + +- name: Change directory owner + ansible.builtin.file: + path: "{{ path_yealink_phonebook }}" + recurse: yes + owner: "{{ asterisk_user }}" + group: "{{ asterisk_group }}" + +- name: Check if Composer is installed. + ansible.builtin.stat: + path: "{{ composer_path }}" + register: composer_bin + +- name: Get Composer installer signature. + ansible.builtin.uri: + url: https://composer.github.io/installer.sig + return_content: true + check_mode: false + register: composer_installer_signature + when: not composer_bin.stat.exists + +- name: Download Composer installer. + ansible.builtin.get_url: + url: https://getcomposer.org/installer + dest: /tmp/composer-installer.php + mode: "0755" + checksum: "sha384:{{ composer_installer_signature.content }}" + when: not composer_bin.stat.exists + +- name: Run Composer installer. + ansible.builtin.command: > + {{ php_executable }} composer-installer.php {% if composer_version_branch %} {{ composer_version_branch }}{% elif composer_version %} --version={{ composer_version }}{% endif %} + chdir=/tmp + when: not composer_bin.stat.exists + become: true + become_user: asterisk + +- name: Move Composer into globally-accessible location. + ansible.builtin.command: > + mv /tmp/composer.phar {{ composer_path }} + creates={{ composer_path }} + when: not composer_bin.stat.exists + +- name: Install dependencies + community.general.composer: + command: update + composer_executable: "{{ composer_path }}" + working_dir: "{{ path_yealink_phonebook }}" + become: true + become_user: asterisk diff --git a/roles/freepbx/tasks/yealink_provisioning.yml b/roles/freepbx/tasks/yealink_provisioning.yml new file mode 100644 index 0000000..2d6ebd8 --- /dev/null +++ b/roles/freepbx/tasks/yealink_provisioning.yml @@ -0,0 +1,9 @@ +--- + +- name: Clone Yealink Provisioning data + ansible.builtin.git: # noqa: latest + repo: "{{ repo_provisioning }}" + dest: "{{ path_yealink_provisioning }}" + force: true + accept_hostkey: true + key_file: "{{ deploy_key_file }}" diff --git a/roles/freepbx/tasks/yealink_xml_browser.yml b/roles/freepbx/tasks/yealink_xml_browser.yml new file mode 100644 index 0000000..cb36089 --- /dev/null +++ b/roles/freepbx/tasks/yealink_xml_browser.yml @@ -0,0 +1,32 @@ +--- + +- name: Install dependencies + ansible.builtin.package: + name: "python3-venv" + state: present + +- name: Clone Yealink XML-Browser + ansible.builtin.git: # noqa: latest + repo: "{{ repo_xml_browser }}" + dest: "{{ path_yealink_xml_browser }}" + force: true + accept_hostkey: true + key_file: "{{ deploy_key_file }}" + +- name: Install specified python requirements in indicated (virtualenv) + ansible.builtin.pip: + requirements: "{{ path_yealink_xml_browser }}/requirements.txt" + virtualenv: "{{ path_yealink_xml_browser }}/.venv" + virtualenv_command: 'python3 -m venv' + +- name: Install systemd unit + template: src=yealink-xml-browser.service.j2 dest=/lib/systemd/system/yealink-xml-browser.service + notify: + - Reload systemd + - Restart yealink-xml-browser + +- name: Enable yealink-xml-browser + ansible.builtin.service: + name: yealink-xml-browser + state: started + enabled: yes diff --git a/roles/freepbx/templates/yealink-xml-browser.service.j2 b/roles/freepbx/templates/yealink-xml-browser.service.j2 new file mode 100644 index 0000000..acbd695 --- /dev/null +++ b/roles/freepbx/templates/yealink-xml-browser.service.j2 @@ -0,0 +1,17 @@ +[Unit] +Description=Yealink XML-Browser +After=syslog.target +After=network.target + +[Service] +RestartSec=2s +Type=simple +User={{ asterisk_user }} +Group={{ asterisk_group }} +Environment="PATH=/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:{{ path_yealink_xml_browser }}/.venv/bin" +WorkingDirectory={{ path_yealink_xml_browser }} +ExecStart={{ path_yealink_xml_browser }}/.venv/bin/python3 {{ path_yealink_xml_browser }}/main.py +Restart=always + +[Install] +WantedBy=multi-user.target