Развёртывание плагина и расширения с помощью Ansible на Alt Linux#
Структура репозитория#
.
├── inventory
├── deploy-gs3.yml
└── files/
├── globalerp-desktop-agent-<VERSION>-alt1.x86_64.rpm
└── Global System Browser Extension <VERSION>.crx
Описание файлов:
inventory - файл инвентаризации, содержащий список хостов для установки GS3
deploy-gs3.yml - основной плейбук, выполняющий полный цикл установки GS3
globalerp-desktop-agent-<VERSION>-alt1.x86_64.rpm - пакет GS3 плагина для ALT Linux
Global System Browser Extension <VERSION>.crx - локальный CRX-файл расширения браузера GS3
Пример inventory#
[browser_hosts]
alt10 ansible_host=<ip_address>
alt11 ansible_host=<ip_address>
[browser_hosts:vars]
ansible_user=<user>
ansible_ssh_pass=<password>
ansible_become=true
ansible_become_method=sudo
ansible_become_pass=<password>
где <ip_address> - IP-адрес хоста, на который идет установка, <user> - имя пользователя, <password> - пароль
Плейбук deploy-gs3.yml#
- name: Install GS3 plugin, deploy browser extensions and Chrome native messaging
hosts: browser_hosts
become: true
vars:
mode: "mixed" # Значение по умолчанию, но можно переопределить через -e mode=xxx
extension_id: "ngfgcgjklkfnbpandhelhehghbfbebai" # По умолчанию, можно переопределить через -e extension_id=...
gs3_rpm_src: "files/globalerp-desktop-agent-0.19.6-alt1.x86_64.rpm"
gs3_rpm_dest: "/tmp/globalerp-desktop-agent-0.19.6-alt1.x86_64.rpm"
extension_crx_src: "files/Global_20System_20Browser_20Extension_200.19.5.0.crx"
extension_dir: "/opt/gs3-extension"
extension_crx_dest: "{{ extension_dir }}/gs3-extension.crx"
extension_update_xml: "{{ extension_dir }}/update.xml"
chromium_nm_dir: "/etc/chromium/native-messaging-hosts"
chrome_nm_dir: "/etc/opt/chrome/native-messaging-hosts"
tasks:
- name: Copy GS3 plugin RPM
ansible.builtin.copy:
src: "{{ gs3_rpm_src }}"
dest: "{{ gs3_rpm_dest }}"
mode: "0644"
- name: Install GS3 plugin from RPM
ansible.builtin.command: "apt-get -y install {{ gs3_rpm_dest }}"
args:
chdir: "/tmp"
- name: Ensure GS3 extension directory exists
ansible.builtin.file:
path: "{{ extension_dir }}"
state: directory
mode: "0755"
- name: Upload GS3 extension CRX
ansible.builtin.copy:
src: "{{ extension_crx_src }}"
dest: "{{ extension_crx_dest }}"
mode: "0644"
- name: Generate update.xml
ansible.builtin.copy:
dest: "{{ extension_update_xml }}"
mode: "0644"
content: |
<?xml version="1.0" encoding="UTF-8"?>
<gupdate xmlns="http://www.google.com/update2/response" protocol="2.0">
<app appid="{{ extension_id }}">
<updatecheck codebase="file://{{ extension_crx_dest }}" version="0.19.5.0" />
</app>
</gupdate>
- name: Create Yandex policies dir
ansible.builtin.file:
path: /etc/opt/yandex/browser/policies/managed
state: directory
mode: "0755"
- name: Deploy Yandex GS3 policy
ansible.builtin.copy:
dest: /etc/opt/yandex/browser/policies/managed/gs3-extension.json
mode: "0644"
content: |
{
"ExtensionInstallForcelist": [
"{{ extension_id }};file://{{ extension_update_xml }}"
]
}
- name: Create Chromium policies dir
ansible.builtin.file:
path: /etc/chromium/policies/managed
state: directory
mode: "0755"
- name: Deploy Chromium GS3 policy
ansible.builtin.copy:
dest: /etc/chromium/policies/managed/gs3-extension.json
mode: "0644"
content: |
{
"ExtensionInstallForcelist": [
{% if mode == "mixed" %}
"{{ extension_id }}"
{% else %}
"{{ extension_id }};file://{{ extension_update_xml }}"
{% endif %}
]
}
- name: Create Chrome policies directory
ansible.builtin.file:
path: /etc/opt/chrome/policies/managed
state: directory
mode: "0755"
- name: Deploy Chrome GS3 policy
ansible.builtin.copy:
dest: /etc/opt/chrome/policies/managed/gs3-extension.json
mode: "0644"
content: |
{
"ExtensionInstallForcelist": [
{% if mode == "mixed" %}
"{{ extension_id }}"
{% else %}
"{{ extension_id }};file://{{ extension_update_xml }}"
{% endif %}
]
}
- name: Ensure Chrome NM dir exists
ansible.builtin.file:
path: "{{ chrome_nm_dir }}"
state: directory
mode: "0755"
- name: Find GS3 manifests in Chromium
ansible.builtin.find:
paths: "{{ chromium_nm_dir }}"
patterns: "ru.global_system.gl3.plugin*.json"
file_type: file
register: manifests
- name: Copy manifests to Chrome
ansible.builtin.copy:
src: "{{ item.path }}"
dest: "{{ chrome_nm_dir }}/{{ item.path | basename }}"
owner: root
group: root
mode: "0644"
remote_src: yes
loop: "{{ manifests.files }}"
when: manifests.matched > 0
Режимы работ#
Плейбук поддерживает два режима установки браузерного расширения. В первом режиме - crx - установка выполняется из локального файла расширения в формате CRX. Этот вариант используется, когда расширение хранится в репозитории или доступно на сервере без обращения к интернет-магазину.
Во втором режиме - store - расширение устанавливается из официального магазина браузера по указанному идентификатору (extension_id). Этот способ подходит для случаев, когда расширение опубликовано и доступно для загрузки онлайн.
Запуск#
Для установки из локального CRX‑файла используйте команду:
ansible-playbook -i inventory deploy-gs3.yml -e "mode=crx"
Для установки из магазина браузера выполните:
ansible-playbook -i inventory deploy-gs3.yml -e "mode=store"
По умолчанию используется встроенный идентификатор расширения (extension_id), однако при необходимости вы можете указать свой:
ansible-playbook -i inventory deploy-gs3.yml -e "mode=store extension_id=XXXXX"