Автоматизация смены версии базы Cleverence на серверах

Автоматизация смены версии базы Cleverence на серверах

Постановка задачи

Выполнять перевод определенных серверов Cleverence на другой продукт

Начальные условия

  • Под управлением находится несколько серверов с установленным решением для автоматизации управления складом - Mobile Smarts (далее по тексту Cleverence)
  • Количество серверов постоянно увеличивается
  • Сервера Cleverence должны иметь группировку по типу установленного продукта
  • Вновь вводимые сервера должны быть автоматически обновлены до определенной конфигурации в зависимости от группы компьютеров
  • Версия и тип базы должны контролироваться автоматически

Инструменты для выполнения задачи

  • Kaseya - Система удаленного управления ИТ инфраструктурой
  • PowerShell - расширяемое средство автоматизации от Microsoft с открытым исходным кодом

Последовательность действий по переводу, описанная разработчиком Cleverence

 Команда разработки Cleverence предложила выполнить задачу обновления базы по такому сценарию:
  1. Остановить сервер Cleverence
  2. Взять полную базу нового продукта в качестве источника данных
  3. Сделать копию работающей базы данных
  4. Переписать файл описания базы AppDescription.xml из новой базы по пути C:\ProgramData\Cleverence\Базы Mobile SMARTS\[ Версия базы PharmX, Полный]\
  5. "Переписать файл конфигурации Cleverence.Warehouse.Environment.xml" по пути C:\ProgramData\Cleverence\Базы Mobile SMARTS\[ Версия базы PharmX, Полный]\Documents\
  6. Удалить старые файлы лицензий по пути C:\ProgramData\Cleverence\Базы Mobile SMARTS\[ Версия базы PharmX, Полный]\Licenses
  7. Удалить старые файлы лицензий по пути C:\ProgramData\Cleverence\Licenses
  8. Запустить сервер
  9. Проверить смену лицензии запустить менеджер лицензирования
  10. Проверить новое лицензирование на ТСД
[ Версия базы PharmX, Полный] - каталог с установленной базой данных
 Задача усложнялась тем, что на серверах установлено несколько баз данных и каждая в своем каталоге. Изменения необходимо внести в ту, которая отвечает на определенном порту TCP. Список портов занесен в дополнительные поля свойств объекта. Эти данные будем использовать для создания автоматизации обновления.

План выполнения

Автоматически выполнить данный план мы сможем для первых 8-ми пунктов. Последние 2 пункта будет выполнять человек по инструкции.
Каждый из шагов может выполняться в своим инструментом, поэтому в пунктах добавлен инструмент, выполняющий действие. 
  1. Останавливаем все приложения, которые могут работать с базой. (Kaseya)
  2. Останавливаем сервер Cldeverence, для этого остановим службу Mobilesmartsserver. (Kaseya)
  3. Переписываем архив с новой базой на сервер. (Kaseya)
  4. Распаковываем его. (Kaseya)
  5. Удаляем архив. (Kaseya)
  6. Переписываем скрипт PowerShell на сервер. (Kaseya)
  7. Передаем номер TCP порта Cleverence для идентификации базы, которую необходимо обновить. (Kaseya)
  8. Выполняем резервное копирование базы Cleverence. (Kaseya)
  9. Запускаем выполнение PowerShell. (Kaseya)
  10. Получаем номер порта, переданный скрипту через текстовый файл. (PowerShell)
  11. Находим базу, которая соответствует номеру порта. Для этого открываем конфигурации баз и в XML находим поле, соответствующее записи номера порта и сравниваем его с заданным. (PowerShell)
  12. Очищаем лицензии в найденной базе. (PowerShell)
  13. Переписываем конфигурационные файлы. (PowerShell)
  14. Восстанавливаем работу Cleverence. (Kaseya)

Результаты работы

Созданную процедуру Kaseya запускаем на серверах по мере готовности стороны к началу технологических работ. Среднее время выполнения 1-2 минуты. Результат выполнения отслеживается в окне управления процедурами агента Kaseya:

Процедура Kaseya

Шаги, выполняемые в процедуре описаны в плане выполнения. Сама процедура выглядит так:

Скрипт PowerShell 

Скрипт выполняется в папке, где распакована новая версия и находится текстовый файл с номером порта. 

Текст скрипта


# Создадим переменную с путем к базам Cleverence
$clevPath = "C:\ProgramData\Cleverence\Базы Mobile SMARTS\"
# Создадим переменную с символом разделителем в списке портов
$divchar = ","
# Проверим существование каталога  
if (Test-Path -Path $clevPath) 
{ 
        # Загрузим все доступные базы данных в виде списка каталогов
	$cleverenceDBs = Get-ChildItem -Directory -Path $clevPath -Force
        # Получим путь, где расположен скрипт 
	$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
        # Создадим переменную с путем к файлу со списком портов на которых работает CLeverence 
	$CleverencePortFilePath = "$scriptPath\port.txt" 
        # Проверим наличие файла со списком портов
	if(Test-Path -Path $CleverencePortFilePath) 
	{ 
               # Считаем строку с портами
               $portsString = Get-Content $CleverencePortFilePath
               # Разделим строку на массив со строками номеров портов
$portArray = $portsString.Split($divchar)
else { # Если файл со списком портов не найден, то назначим массив с одним элементом с портом по умолчанию $portArray[0] = "9002"
} foreach($cleverencePort in $portArray) { $currentDBport='port="' + $cleverencePort + '"' $CleverenceDBVersion="Not found" foreach ($cleverenceDB in $cleverenceDBs) { $fileServerConf = $clevPath + $cleverenceDB.Name + "\settings.xml" if (Test-Path -PathType Leaf -Path $fileServerConf) { $fileServerConfContent= Get-Content($fileServerConf) if($fileServerConfContent -match $currentDBport) { # Start changes # Remove old licenses Remove-item C:\ProgramData\Cleverence\Licenses\*.xml $CleverenceDBPath = $clevPath + $cleverenceDB.Name $DelLicenses = $CleverenceDBPath + "\Licenses\*.xml" Remove-item $DelLicenses # Переписать файл описания базы Copy-Item -Path "$scriptPath\PharmXDB\AppDescription.xml" -Destination "$CleverenceDBPath\AppDescription.xml" Copy-Item -Path "$scriptPath\PharmXDB\WinClient\Documents\Cleverence.Warehouse.Environment.xml" -Destination "$CleverenceDBPath\Documents\Cleverence.Warehouse.Environment.xml" Copy-Item -Path "$scriptPath\PharmXDB\WinClient\Documents\Cleverence.Warehouse.Environment.xml" -Destination "$CleverenceDBPath\WinClient\Documents\Cleverence.Warehouse.Environment.xml" } } } } }