bundles/octoprint: add update check

This commit is contained in:
Franzi 2020-11-21 20:35:29 +01:00
parent 91f2fd839b
commit 4f5e462c94
Signed by: kunsi
GPG key ID: 12E3D2136B818350
4 changed files with 70 additions and 0 deletions

View file

@ -0,0 +1,41 @@
#!/usr/bin/env python3
from requests import get
from sys import exit
api_key = '${api_key}'
try:
json = get('http://[::1]:22030/plugin/softwareupdate/check', headers={'X-Api-Key': api_key}).json()
except Exception as e:
print(repr(e))
exit(3)
updates = set()
errors = set()
for identifier, info in json['information'].items():
if info['updateAvailable']:
updates.add(info['displayName'])
if not json['environment']['supported']:
errors.add('OctoPrint runs in an unsupported environment!')
if not json['storage']['sufficient']:
errors.add('OctoPrint reports insufficient storage!')
for error in sorted(errors):
print(error)
if len(updates) > 0:
print('Updates available: {}'.format(', '.join(sorted(updates))))
if len(errors) > 0:
exit(2)
elif len(updates) > 0:
exit(1)
else:
print('OK')
exit(0)

View file

@ -35,4 +35,11 @@ files = {
'/opt/octoprint/systemd-wrapper': { '/opt/octoprint/systemd-wrapper': {
'mode': '0755', 'mode': '0755',
}, },
'/usr/local/share/icinga/plugins/check_octoprint_update': {
'mode': '0755',
'content_type': 'mako',
'context': {
'api_key': node.metadata.get('octoprint', {}).get('api_key', ''),
},
},
} }

View file

@ -18,3 +18,22 @@ defaults = {
}, },
}, },
} }
@metadata_reactor
def icinga(metadata):
if not metadata.get('octoprint/api_key', None):
return {}
return {
'icinga2_api': {
'octoprint': {
'services': {
'OCTOPRINT UPDATE': {
'command_on_monitored_host': '/usr/local/share/icinga/plugins/check_octoprint_update',
'retry_interval': '60m',
},
},
},
},
}

View file

@ -38,6 +38,9 @@ nodes['home.octoprint-vielschichtigkeit'] = {
}, },
}, },
}, },
'octoprint': {
'api_key': vault.decrypt('encrypt$gAAAAABfuWtDp0xeUSNZwi8PzhgxvheK1rdhThlPwZSweXZaUNzDF2BlfOwuMvW-vSxHjTJoyCnxzCAAytIBf0iXgdyeCafvbB43ogBaQK52HAahQNP4506-h02BKgiMdIghUmc1ZOUT'),
},
'raspberrypi': { 'raspberrypi': {
'camera': True, 'camera': True,
}, },