|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
from setuphelpers import *
|
|
|
|
|
|
|
|
uninstallkey = []
|
|
|
|
variables = {
|
|
|
|
'zabbix_servers': [ '127.0.0.1' ]
|
|
|
|
}
|
|
|
|
|
|
|
|
# Read local variables file if available
|
|
|
|
if isfile(makepath(programfiles32,'wapt','private','symetric.txt')) and isfile(makepath(programfiles32,'wapt','private','variables.txt')):
|
|
|
|
print('Reading local encrypted variables file')
|
|
|
|
from cryptography.fernet import Fernet
|
|
|
|
import yaml
|
|
|
|
f = Fernet(open(makepath(programfiles32,'wapt','private','symetric.txt'),'r').read())
|
|
|
|
variables.update(yaml.safe_load(f.decrypt(open(makepath(programfiles32,'wapt','private','variables.txt'),'r').read())))
|
|
|
|
|
|
|
|
props = {
|
|
|
|
'RMTCMD':0,
|
|
|
|
'SERVER':','.join(variables['zabbix_servers'])
|
|
|
|
}
|
|
|
|
|
|
|
|
def install():
|
|
|
|
version = control['version'].split('-',1)[0]
|
|
|
|
|
|
|
|
# Remove previous version from suiviperf, if present
|
|
|
|
print('Checking old Zabbix Agent version...')
|
|
|
|
old_agent = installed_softwares('{65BE9C8D-BE1D-4AEA-A144-9F52D57A3D12}')
|
|
|
|
for uninstall in old_agent:
|
|
|
|
if Version(uninstall['version'].split('.',1)[0]) < Version(version) :
|
|
|
|
if Version(uninstall['version']) < Version(version):
|
|
|
|
killalltasks(['zabbix_agentd.exe'])
|
|
|
|
print('Uninstalling previous version %s' % uninstall['version'])
|
|
|
|
cmd = uninstall_cmd(uninstall['key'])
|
|
|
|
run_notfatal(cmd)
|
|
|
|
|
|
|
|
print('Installing Zabbix Agent version %s' % version)
|
|
|
|
|
|
|
|
if iswin64():
|
|
|
|
msi = 'zabbix_agent-%s-win-amd64-openssl.msi' % version
|
|
|
|
else:
|
|
|
|
msi = 'zabbix_agent-%s-win-i386-openssl.msi' % version
|
|
|
|
|
|
|
|
install_msi_if_needed(msi,killbefore=['zabbix_agentd.exe'],properties=props,remove_old_version=True)
|
|
|
|
|
|
|
|
print('Opening port 10050 in the firewall')
|
|
|
|
# Remove the previous rule if it existed. We don't mind the return code as the rule might not exist
|
|
|
|
run_notfatal('netsh advfirewall firewall del rule name="Zabbix Agent"')
|
|
|
|
|
|
|
|
# And add a new one
|
|
|
|
run('netsh advfirewall firewall add rule name="Zabbix Agent" dir=in action=allow protocol=TCP localport=10050 enable=yes remoteip=%s' % (','.join(variables['zabbix_servers'])))
|
|
|
|
|
|
|
|
def uninstall():
|
|
|
|
print('Removing firewall rule')
|
|
|
|
run_notfatal('netsh advfirewall firewall del rule name="Zabbix Agent"')
|
|
|
|
|
|
|
|
def update_package():
|
|
|
|
import requests, re
|
|
|
|
from waptpackage import PackageEntry
|
|
|
|
|
|
|
|
print('Checking latest agent version')
|
|
|
|
page = wgets('https://www.zabbix.com/download')
|
|
|
|
latest_version = re.search('"latest":"(\d+(\.\d+)*)"', page).group(1)
|
|
|
|
pe = PackageEntry()
|
|
|
|
control = pe.load_control_from_wapt(os.getcwd())
|
|
|
|
current_version = control['version'].split('-',1)[0]
|
|
|
|
|
|
|
|
if Version(latest_version) > Version(current_version):
|
|
|
|
print('Updating package from %s to %s' % (current_version, latest_version))
|
|
|
|
for arch in ['amd64', 'i386']:
|
|
|
|
filename ='zabbix_agent-%s-win-%s-openssl.msi' % (latest_version, arch)
|
|
|
|
if not isfile(filename):
|
|
|
|
url = 'https://www.zabbix.com/downloads/%s/%s' % (latest_version, filename)
|
|
|
|
print('Downloading %s from %s' % (filename, url))
|
|
|
|
wget(url, filename)
|
|
|
|
for old in glob.glob(r'zabbix_agent-*-win-%s-openssl.msi' % arch):
|
|
|
|
if not old == filename:
|
|
|
|
remove_file(old)
|
|
|
|
|
|
|
|
pe.version = latest_version + '-0'
|
|
|
|
pe.maturity = 'PREPROD'
|
|
|
|
pe.save_control_to_wapt(os.getcwd())
|