Add cluster join functionality and Kaspersky agent configuration to PMG. Updated Makefile for cluster bootstrap command, enhanced README with new service details, and modified pillar states for KESL and KLN agent integration. Added verification and management for cluster-only services in Salt states.

This commit is contained in:
Ruslan Piatrovich
2026-06-10 17:06:22 +03:00
parent 7230484b44
commit 7373d5520f
10 changed files with 272 additions and 2 deletions
+139
View File
@@ -6,6 +6,32 @@
{% set wazuh_pkg_url = 'https://packages.wazuh.com/4.x/apt/pool/main/w/wazuh-agent/' ~ wazuh_pkg_name %}
{% set wazuh_pkg_path = '/var/tmp/' ~ wazuh_pkg_name %}
{% set kesl_enabled = salt['pillar.get']('pmg:kesl:enabled', True) %}
{% set kesl_package_url = salt['pillar.get']('pmg:kesl:package_url', 'https://products.s.kaspersky-labs.com/endpoints/keslinux10/12.4.0.1225/multilanguage-INT-12.4.0.1225/167a2f9c5bdb4e869f4603fbc3a829c1/kesl_12.4.0-1225_amd64.deb') %}
{% set kesl_package_path = salt['pillar.get']('pmg:kesl:package_path', '/opt/kesl_12.4.0-1225_amd64.deb') %}
{% set kesl_autoinstall_path = salt['pillar.get']('pmg:kesl:autoinstall_path', '/etc/opt/kaspersky/kesl/autoinstall.ini') %}
{% set kesl_eula_agreed = salt['pillar.get']('pmg:kesl:eula_agreed', 'Yes') %}
{% set kesl_privacy_policy_agreed = salt['pillar.get']('pmg:kesl:privacy_policy_agreed', 'Yes') %}
{% set kesl_use_ksn = salt['pillar.get']('pmg:kesl:use_ksn', 'No') %}
{% set kesl_group_clean = salt['pillar.get']('pmg:kesl:group_clean', 'No') %}
{% set kesl_locale = salt['pillar.get']('pmg:kesl:locale', '') %}
{% set kesl_updater_source = salt['pillar.get']('pmg:kesl:updater_source', 'SCServer') %}
{% set kesl_install_license = salt['pillar.get']('pmg:kesl:install_license', '') %}
{% set kesl_update_execute = salt['pillar.get']('pmg:kesl:update_execute', 'No') %}
{% set kesl_ksvla_mode = salt['pillar.get']('pmg:kesl:ksvla_mode', 'No') %}
{% set kesl_endpoint_agent_mode = salt['pillar.get']('pmg:kesl:endpoint_agent_mode', 'No') %}
{% set kesl_setup_bin = '/opt/kaspersky/kesl/bin/kesl-setup.pl' %}
{% set kesl_setup_marker = '/var/lib/salt/pmg-kesl-autoinstall.done' %}
{% set klnagent_enabled = salt['pillar.get']('pmg:klnagent:enabled', True) %}
{% set klnagent_package_url = salt['pillar.get']('pmg:klnagent:package_url', 'https://products.s.kaspersky-labs.com/administrationkit/ksc10/16.2.0.1023/russian-INT-29664057-ru/2129c97dba254c9fb8a4161f29a2241c/klnagent64_16.2.0-1023_amd64.deb') %}
{% set klnagent_package_path = salt['pillar.get']('pmg:klnagent:package_path', '/opt/klnagent64_16.2.0-1023_amd64.deb') %}
{% set klnagent_server = salt['pillar.get']('pmg:klnagent:administration_server', '10.80.38.76') %}
{% set klnagent_autoanswers_path = salt['pillar.get']('pmg:klnagent:autoanswers_path', '/etc/opt/kaspersky/klnagent64/autoanswers.conf') %}
{% set klnagent_autoinstall = salt['pillar.get']('pmg:klnagent:autoinstall', True) %}
{% set klnagent_eula_accepted = salt['pillar.get']('pmg:klnagent:eula_accepted', True) %}
{% set klnagent_config_marker = '/var/lib/salt/pmg-klnagent-autoinstall.done' %}
{% set qualys_enabled = salt['pillar.get']('pmg:qualys:enabled', True) %}
{% set qualys_package_url = salt['pillar.get']('pmg:qualys:package_url', 'https://storage.yandexcloud.net/qualys-agent/QualysCloudAgent.deb') %}
{% set qualys_package_path = salt['pillar.get']('pmg:qualys:package_path', '/opt/QualysCloudAgent.deb') %}
@@ -13,6 +39,119 @@
{% set qualys_customer_id = salt['pillar.get']('pmg:qualys:customer_id', '') %}
{% set qualys_server_uri = salt['pillar.get']('pmg:qualys:server_uri', 'https://qagpublic.qg1.apps.qualys.eu/CloudAgent/') %}
{% if kesl_enabled and kesl_package_path %}
pmg-kesl-download:
cmd.run:
- name: wget -qO {{ kesl_package_path }} {{ kesl_package_url }}
- unless: test -f {{ kesl_package_path }}
pmg-kesl-autoinstall-config:
file.managed:
- name: {{ kesl_autoinstall_path }}
- user: root
- group: root
- mode: '0600'
- makedirs: true
- contents:
- "KSVLA_MODE={{ kesl_ksvla_mode }}"
- "ENDPOINT_AGENT_MODE={{ kesl_endpoint_agent_mode }}"
- "EULA_AGREED={{ kesl_eula_agreed }}"
- "PRIVACY_POLICY_AGREED={{ kesl_privacy_policy_agreed }}"
- "USE_KSN={{ kesl_use_ksn }}"
- "GROUP_CLEAN={{ kesl_group_clean }}"
{% if kesl_locale %}
- "LOCALE={{ kesl_locale }}"
{% endif %}
{% if kesl_install_license %}
- "INSTALL_LICENSE={{ kesl_install_license }}"
{% endif %}
- "UPDATER_SOURCE={{ kesl_updater_source }}"
- "UPDATE_EXECUTE={{ kesl_update_execute }}"
- require:
- cmd: pmg-kesl-install
pmg-kesl-install:
cmd.run:
- name: apt-get install -y {{ kesl_package_path }}
- onlyif: test -f {{ kesl_package_path }}
- unless: dpkg-query -W -f='${Status}' kesl 2>/dev/null | grep -q 'install ok installed'
- require:
- cmd: pmg-kesl-download
pmg-kesl-setup:
cmd.run:
- name: mkdir -p /var/lib/salt && {{ kesl_setup_bin }} --autoinstall={{ kesl_autoinstall_path }} && touch {{ kesl_setup_marker }}
- onlyif: test -x {{ kesl_setup_bin }}
- unless: test -f {{ kesl_setup_marker }}
- require:
- cmd: pmg-kesl-install
- file: pmg-kesl-autoinstall-config
pmg-kesl-service:
service.running:
- name: kesl
- enable: true
- require:
- cmd: pmg-kesl-install
- cmd: pmg-kesl-setup
{% elif kesl_enabled %}
pmg-kesl-skipped:
test.show_notification:
- text: "Kaspersky Endpoint Security skipped: set package_url + package_path in pillar."
{% endif %}
{% if klnagent_enabled and klnagent_package_path and klnagent_server %}
pmg-klnagent-download:
cmd.run:
- name: wget -qO {{ klnagent_package_path }} {{ klnagent_package_url }}
- unless: test -f {{ klnagent_package_path }}
pmg-klnagent-autoanswers:
file.managed:
- name: {{ klnagent_autoanswers_path }}
- user: root
- group: root
- mode: '0600'
- makedirs: true
- contents:
- "KLNAGENT_SERVER={{ klnagent_server }}"
- "KLNAGENT_AUTOINSTALL={{ '1' if klnagent_autoinstall else '0' }}"
- "EULA_ACCEPTED={{ '1' if klnagent_eula_accepted else '0' }}"
pmg-klnagent-install:
cmd.run:
- name: DEBIAN_FRONTEND=noninteractive KLAUTOANSWERS={{ klnagent_autoanswers_path }} apt-get install -y {{ klnagent_package_path }}
- onlyif: test -f {{ klnagent_package_path }}
- unless: dpkg-query -W -f='${Status}' klnagent64 2>/dev/null | grep -q 'install ok installed'
- require:
- cmd: pmg-klnagent-download
- file: pmg-klnagent-autoanswers
pmg-klnagent-autoinstall-configure:
cmd.run:
- name: >-
mkdir -p /var/lib/salt &&
DEBIAN_FRONTEND=noninteractive KLAUTOANSWERS={{ klnagent_autoanswers_path }} apt-get install -y --reinstall {{ klnagent_package_path }} &&
touch {{ klnagent_config_marker }}
- onlyif: dpkg-query -W -f='${Status}' klnagent64 2>/dev/null | grep -q 'install ok installed'
- unless: test -f {{ klnagent_config_marker }}
- require:
- cmd: pmg-klnagent-install
- file: pmg-klnagent-autoanswers
pmg-klnagent-service:
service.running:
- name: klnagent64
- enable: true
- require:
- cmd: pmg-klnagent-install
- cmd: pmg-klnagent-autoinstall-configure
{% elif klnagent_enabled %}
pmg-klnagent-skipped:
test.show_notification:
- text: "Kaspersky Administration Agent skipped: set package_url + package_path + administration_server in pillar."
{% endif %}
{% if wazuh_enabled %}
pmg-wazuh-download:
cmd.run: