Bug 37396

Summary: После перехода на python3 плагин check_monit.py не работает
Product: Sisyphus Reporter: anton
Component: nagios-plugins-check_monitAssignee: mrdrew <mrdrew>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P3 CC: lav, mrdrew
Version: unstable   
Hardware: all   
OS: Linux   

Description anton 2019-10-29 18:23:56 MSK
# apt-cache policy nagios-plugins-check_monit
nagios-plugins-check_monit:
  Установлен: 1.4-alt1:sisyphus+239556.100.1.1@1571662204

apt-cache show:
Changelog:
 * Пн окт 21 2019 Andrey Bychkov <mrdrew@altlinux.org> 1.4-alt1
 - Version updated to 1.4
 - python2 -> python3

Однако при попытке запустить плагин (явно или неявно):

# python3 /usr/lib/nagios/plugins/check_monit.py 
  File "/usr/lib/nagios/plugins/check_monit.py", line 65
    print "OK: %s%s"%(message,perfdata_string)
                   ^
SyntaxError: invalid syntax

При запуске в старой версии: python /usr/lib/nagios/plugins/check_monit.py - все в порядке:
Usage: check_monit.py -H <host> [<options>]

check_monit.py: error: No <host> defined!

(Это нормальный отклик, так как не были указаны параметры. На рабочем сервере с нужными параметрами видно, что плагин полнстью работоспособен.)
Comment 1 Repository Robot 2019-10-29 21:14:52 MSK
nagios-plugins-check_monit-1.4-alt2 -> sisyphus:

Tue Oct 29 2019 Andrey Bychkov <mrdrew@altlinux> 1.4-alt2
- py2 -> py3 (Closes #37396)
Comment 2 anton 2019-11-05 19:38:10 MSK
Спасибо, проверил новую версию плагина. Python3 проходит холостую проверку:

# /usr/lib/nagios/plugins/check_monit.py 
Usage: check_monit.py -H <host> [<options>]

check_monit.py: error: No <host> defined!

Но вот рабочий запрос - выдает ошибку:

# /usr/lib/nagios/plugins/check_monit.py -H localhost -u monit -P password_here
/usr/lib/nagios/plugins/check_monit.py:104: DeprecationWarning: encodestring() is a deprecated alias since 3.1, use encodebytes()
  headers['Authorization'] = 'Basic ' + (base64.encodestring(opts.username + ':' + opts.password)).strip()
Traceback (most recent call last):
  File "/usr/lib64/python3.7/base64.py", line 510, in _input_type_check
    m = memoryview(s)
TypeError: memoryview: a bytes-like object is required, not 'str'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/lib/nagios/plugins/check_monit.py", line 287, in <module>
    main()
  File "/usr/lib/nagios/plugins/check_monit.py", line 268, in main
    process_monit_response(get_status())
  File "/usr/lib/nagios/plugins/check_monit.py", line 104, in get_status
    headers['Authorization'] = 'Basic ' + (base64.encodestring(opts.username + ':' + opts.password)).strip()
  File "/usr/lib64/python3.7/base64.py", line 540, in encodestring
    return encodebytes(s)
  File "/usr/lib64/python3.7/base64.py", line 527, in encodebytes
    _input_type_check(s)
  File "/usr/lib64/python3.7/base64.py", line 513, in _input_type_check
    raise TypeError(msg) from err
TypeError: expected bytes-like object, not str

Не имеет значения, правильный пароль указан или нет. Версии программ последние:

# apt-cache policy python3
python3:
  Установлен: 3.7.4-alt2:sisyphus+239418.100.1.1@1571389791
  Кандидат: 3.7.4-alt2:sisyphus+239418.100.1.1@1571389791

# apt-cache policy monit
monit:
  Установлен: 5.26.0-alt1:sisyphus+234023.100.1.1@1562442242
  Кандидат: 5.26.0-alt1:sisyphus+234023.100.1.1@1562442242
Comment 3 Repository Robot 2019-11-06 12:22:17 MSK
nagios-plugins-check_monit-1.4-alt3 -> sisyphus:

Wed Nov 06 2019 Andrey Bychkov <mrdrew@altlinux> 1.4-alt3
- func of encoding according python3 fixed (Closes #37396)