Ansible установка klnagent — агент администрирования Kaspersky на CentOS 7
Рассмотрим, каким образом может быть выполнена через Ansible установка klnagent — агента администрирования Kaspersky — на серверы с CentOS 7.
Содержание
Окружение
Сервер №1: OS - Centos 7 x64. IP - 10.10.10.10
Роль: Хранилище.
Описание: Настроен Nginx который отдает файлы по http по порту 8099 с авторизацией
Сервер №2: OS - Centos 7 x64. IP - 10.10.10.20
Роль: Исполнитель.
Описание: Сервер, на котором установлен ansible
Сервер №3: OS - Centos 7 x64. IP - 10.10.10.30
Роль: Целевой.
Описание: на данный сервер необходимо установить klnagent
Роль создана по типовой структуре. Более подробно описано в статье. Кроме того, некоторые переменные хранятся в зашифрованном виде. Как работать с секретами в ansible можно почитать тут.
В предложенной реализации возможно два варианта запуска playbook. Для всех хостов, описанных в файле hosts:
ansible-playbook service_install_klnagent_all_servers.yml --vault-password-file=/u01/ansible/secret --diff -vv
Точечно выбирать хосты, на которые необходимо запустить роль. Если необходимо, чтобы установка запустилась на нескольких хостах, указываем их через запятую. Не забываем, что указанные хосты должны соответствовать именам в файле hosts и host_vars:
ansible-playbook service_install_klnagent_select_servers.yml -e "host=test01" --vault-password-file=/u01/ansible/secret --diff -vv
Переменные playbook Ansible для установки klnagent
На каком уровне определить переменные решать вам, в статье переменные в ansible можно почитать какие есть уровни и как они приоритизированы.
local_distr_repo_url — переменная, не имеющая отношения к установке Kaspersky. Хранит путь до репозитория с дистрибутивами. В моем случае был развернут nginx с возможностью авторизации по логину и паролю. Он умеет отдавать файлы из папки по протоколу http. Как разворачивался такой репозиторий, можно посмотреть перейдя по ссылке.
local_distr_repo_user — логин к локальному репозиторию. Хранится в зашифрованном виде.
local_distr_repo_pass — пароль к локальному репозиторию. Хранится в зашифрованном виде.
metod_klnagent_param — переменная, от которой зависит выбор метода установки. Варианты: autonomous_package или custom_install. Что за что отвечает описано в блоке задачи.
klnagent_autonomous_package_name — используется, если metod_klnagent_param: «autonomous_package». Переменная указывает на путь от корня (если пакет лежит не в корне http сервера) и имя автономного пакета для установки. Автономный пакет должен быть загружен в репозиторий, который определен в переменной local_distr_repo_url.
Все переменные ниже используются в случае metod_klnagent_param: «custom_install»
klnagent_url — URL, с которого можно скачать rpm пакет агента администрирования. В данном случае скачиваем с официально сайта.
KLNAGENT_SERVER, KLNAGENT_PORT, KLNAGENT_SSLPORT, KLNAGENT_USESSL, KLNAGENT_GW_MODE, KLNAGENT_GW_MODE — переменные, необходимые для непосредственного развертывания агента администрирования. Более подробно описано в статье про ручное развертывание.
Обработчики
В playbook описано два обработчика: один на перезапуск, другой на перечитывание настроек. Честно говоря, не понимаю, какие настройки агент может перечитать, так как динамически они вроде бы нигде не меняются, но возможность есть — значит опишем, вдруг пригодится:
- name: reload klnagent # перезагрузка агента администрирования
service:
name: "klnagent64"
state: reloaded
- name: restart klnagent # перезапуск агента администрирования
service:
name: "klnagent64"
state: restarted
Задачи playbook Ansible для установки klnagent
Задачи разделены на два блока. Первый запустится если metod_klnagent_param имеет значение autonomous_package; необходим для установки агента из автономного пакета. Второй метод используется для ручной установки. Сложно сказать какой способ лучше. Изначально я предполагал, что второй вариант в приоритете, так как первый не поддерживает идемпотентность и завершается ошибкой при повторном запуске задачи. Но позже выяснилось, что если повторно запускать установку агента на сервере с уже установленным, происходит создание новой сущности в KSC, которая находится в нераспределенных устройствах, а старая сущность перестает выходить на связь. В общем, выбор за вами.
- block:
...
when: metod_klnagent == "autonomous_package"
- block:
...
when: metod_klnagent == "custom_install"
Рассмотрим более подробно каждый из методов. Установка автономного пакета начинается с получения дистрибутива. Используется модуль ansible get_url. Он позволяют скачать файл по URL:
- name: "Getting klnagent autonomous install package to temporary folder"
get_url:
url: "{{ local_distr_repo_url }}/{{ klnagent_autonomous_package_name }}"
dest: "/tmp/{{ klnagent_autonomous_package_name }}"
url_username: "{{ local_distr_repo_user }}"
url_password: '{{ local_distr_repo_pass }}'
mode: 0755
tags: klnagent
Далее используем модуль shell для запуска sh скрипта автономного пакета:
- name: "Running klnagent autonomous install"
become: yes
shell: "/tmp/{{ klnagent_autonomous_package_name }}"
args:
executable: /bin/bash
tags: klnagent
Следующий шаг — это запуск сервиса и добавление его в автозагрузку:
- name: "Ensure klnagent service is enabled"
become: yes
service:
name: klnagent64
enabled: yes
state: started
tags: klnagent
И последнее — удаляем скачанный автономный пакет:
- name: "Removing package file"
file:
path: "/tmp/{{ klnagent_autonomous_package_name }}"
state: absent
Кстати, более подробно об модулях ansible можно почитать в официальной документации: https://docs.ansible.com/ansible/latest/collections/index.html.
Второй метод подразумевает установку агента с помощью файла настроек, также рассмотрим его; повторяющиеся модули описывать не буду.
Всё начинается с создания файла ответов с помощью модуля template. Переменные в шаблон подставляются из group_vars/all:
- name: "Creating answer file for klnagent"
become: yes
template:
src: klnagent.j2
dest: /tmp/klnagent.ini
mode: 0644
tags: klnagent
Далее скачиваем RPM пакет с помощью модуля get_url. Параметр url немного отличается от того, который был использован в варианте с автономным пакетом (тут прямая ссылка на дистрибутив):
- name: "Downloading rpm package"
become: yes
get_url:
url: "{{ klnagent_url }}"
dest: /tmp/{{ klnagent_url.split("/")[-1] }}
tags: klnagent
После этого устанавливаем скачанный пакет с помощью модуля yum:
- name: "Installing package"
become: yes
yum:
name: /tmp/{{ klnagent_url.split("/")[-1] }}
state: present
tags: klnagent
Затем запускаем настройку агента администрирования согласно инструкции вендера:
- name: "Run configuring klnagent"
become: yes
shell: "{{ default_klnagent_bin_path }}/setup/postinstall.pl"
args:
executable: /bin/bash
environment:
KLAUTOANSWERS: /tmp/klnagent.ini
notify: restart klnagent
tags: klnagent
Последним шагом запускаем сервис и добавляем его в автозагрузку. Напоследок удаляем скаченный rpm пакет:
- name: "Ensure klnagent service is enabled"
become: yes
service:
name: klnagent64
enabled: yes
state: started
tags: klnagent
- name: "Removing temporary files"
file:
path: "{{ item }}"
state: absent
with_items:
- "/tmp/{{ klnagent_url.split(\"/\")[-1] }}"
- "/tmp/klnagent.ini"
На этом Ansible установка klnagent завершена. Репозиторий с исходниками на github: https://github.com/ittxx/kaspersky.