Создание политиками json файла (policies.json для Яндекс браузер)

rakozlov

Участник
Регистрация
19.06.25
Сообщения
5
Реакции
0
Подскажите как правильно сделать политику для создания json файла. Пробовал через "file.managed - contents:" но ругается на синтаксис где в json начинаются фигурные скобки.
Пока решился через cmd.run echo но код не читаемый, хотелось бы правильный подход.
p.s. в интернетах ничего не наковырял
 
Можно так:
Код:
    - contents: |
{%- raw %}
        { json text }
{%- endraw %}
 
Добрый день.
Я это решал через Политики ПО.
В каталоге ПО создал пакет Yndex-Browser

В Шаблоне конфигурации создал новый шаблон:

Наименование шаблона: managed_policies.json
Путь: /etc/opt/yandex/browser/policies/managed/managed_policies.json

Редактирование шаблона:
{
"ProxyMode": "fixed_servers",
"ProxyServer": "proxyname.domane.ru",
"ProxyBypassList": "127.0.0.1, localhost, 192.168.0.0/16, officeclient.microsoft.com и т.д."
}

Мне нужны были только эти параметры.
Остальные параметры можно посмотреть на официальной странице Yandex
Работает как часы, применяется сразу. Удобно редактировать. Прилетает только тем, у кого установлен пакет.
 
Большое спасибо!
Накидал тестовый скрипт с несколькими значениями, работает.
Может кому пригодится на будущее:
Код:
{% if user is not defined %}
  {% set user = salt['pillar.get']("user") %}
{% endif %}
{% if salt['pillar.get']('aldpro-users:'+ user) is defined %}
  {% set gpo_name = 'rbta_ldap_custom_gp_user_yandex_browser_policy' %}
  {% set gpo = salt['pillar.get']('aldpro-users:'+ user +':'+ gpo_name) %}
  {% if gpo %}
    {% for args in gpo %}
      {% set home_page = args.get('1_home_page') %}
      {% set master_key = args.get('2_master_key') %}
      {% set password_manager = args.get('3_password_manager') %}
/etc/opt/yandex/browser/policies/managed/policies.json:
  file.managed:
    - makedirs: True
    - user: root
    - group: root
    - mode: 644
    - contents:  |
{%- raw %}
        {
{%- endraw %}
{%- if home_page %}
        "HomepageLocation": "{{ home_page }}"{% if args|last != "1_home_page" %},{% endif %}
{%- endif %}
{%- if master_key %}
        "MasterPasswordDisabled": {{ master_key }}{% if args|last != "2_master_key" %},{% endif %}
{%- endif %}
{%- if password_manager %}
        "PasswordManagerEnabled": {{ password_manager }}{% if args|last != "3_password_manager" %},{% endif %}
{%- endif %}
{%- raw %}
        }
{%- endraw %}
{% endfor %}
  {% endif %}
{% endif %}
P.s.: добавил проверку чтобы не ставилась запятая если это последний элемент списка, если кто знает как сделать элегантней буду рад подсказкам
 
Последнее редактирование:
Добрый день.
Я это решал через Политики ПО.
В каталоге ПО создал пакет Yndex-Browser

В Шаблоне конфигурации создал новый шаблон:

Наименование шаблона: managed_policies.json
Путь: /etc/opt/yandex/browser/policies/managed/managed_policies.json

Редактирование шаблона:


Мне нужны были только эти параметры.
Остальные параметры можно посмотреть на официальной странице Yandex
Работает как часы, применяется сразу. Удобно редактировать. Прилетает только тем, у кого установлен пакет.
Спасибо за подсказку, возьму на заметку.
Просто в данном контуре нет сервера репозиториев, а браузер установлен на всех машинах deb пакетом.
 
rakozlov, а почему сервер репозиториев не поднимите ?
Странные мысли департамента информационных технологий.
У меня нет полномочий на развертывание дополнительных серверов , работаем с тем что имеется. Плюс нужна гибкая настройка политик браузера из веба ald. Как минимум то что я накидал с помощью подсказок на форуме удовлетворяет, а как максимум пусть решают умы с полномочиями.
В своем контуре я бы сделал с репами, но это уже другая история)
 
Рекомендую еще поработать над кодом политики.
1. Один и тот же ID стейта в цикле будет отдавать ошибку, если будет проходов больше чем 1. Если нужен именно составной параметр (a он тут судя по всему не нужен), цикл нужно перенести в -contents.
2. Мне кажется, эта проверка {% if args|last != "1_home_page" %},{% endif %} не будет работать как нужно. Ведь там список словарей, а 1_home_page - ключ в словаре.
Ну и для проверки можно просто сделать макрос.

я бы сделал примерно так (простой параметр, не составной):
Код:
{% if user is not defined %}
  {% set user = salt['pillar.get']("user") %}
{% endif %}
{% if salt['pillar.get']('aldpro-users:'+ user) is defined %}
  {% set gpo_name = 'rbta_ldap_custom_gp_user_yandex_browser_policy' %}
  {% set gpo = salt['pillar.get']('aldpro-users:'+ user +':'+ gpo_name) %}
  {% macro check_last(param) %}
    {%- set attrlist = gpo | dictsort(by='key', case_sensitive=False) -%}
    {%- if param not in attrlist|last -%},{%- endif -%}
  {% endmacro %}
  {% if gpo %}
    {% set home_page = gpo.get('1_home_page') %}
    {% set master_key = gpo.get('2_master_key') %}
    {% set password_manager = gpo.get('3_password_manager') %}
/etc/opt/yandex/browser/policies/managed/policies.json:
  file.managed:
    - makedirs: True
    - user: root
    - group: root
    - mode: 644
    - contents:  |
{%- raw %}
        {
{%- endraw %}
{%- if home_page %}
          "HomepageLocation": "{{ home_page }}"{{ check_last("1_home_page") }}
{%- endif %}
{%- if master_key %}
          "MasterPasswordDisabled": {{ master_key }}{{ check_last("2_master_key") }}
{%- endif %}
{%- if password_manager %}
         "Password_manager": {{ password_manager }}{{ check_last("3_password_manager") }}
{%- endif %}
{%- raw %}
        }
{%- endraw %}
  {% endif %}
{% endif %}
Ну и нужно подумать, а действительно ли политика должна быть на пользователя, ведь мы тут задаём не пользовательские настройки. Может всё-таки политика на компьютер должна быть?
 
Последнее редактирование:
Назад
Сверху Снизу