Skip to content

tom-mi/python-mkp

Repository files navigation

python-mkp

ci release PyPI version

Pack or unpack Check_MK mkp files.

The purpose of this library is to generate mkp files from source without having to set up a complete Check_MK instance. It is not intended for installing mkp files to a Check_MK site.

Installation

pip install mkp

Usage

Automatically pack mkp package

Run mkp-init in an empty directory.

This will create an executable script dist.py:

#!/usr/bin/env python

from mkp import dist

dist({
    'author': 'John Doe',
    'description': 'Test the automatic creation of packages',
    'download_url': 'http://example.com/',
    'name': 'test',
    'title': 'Test',
    'version': '1.0',
    'version.min_required': '1.2.3',
})

and a directory structure similar to this:

├── agents/
├── agent_based/
├── checkman/
├── checks/
├── doc/
├── inventory/
├── lib/
├── notifications/
├── pnp-templates/
├── web/
└── dist.py

Now add your files to the respective directories and edit the metadata in dist.py as needed. Empty directories can be deleted.

Running ./dist.py will pack all files in the directories listed above to a mkp package with the canonical name and the specified metadata. The mkp file will be written to the dist directory.

Extract mkp package using mkp-extract cli tool

mkp-extract --help
mkp-extract foo-1.0.mkp 
mkp-extract foo-1.0.mkp --output-dir bar --no-prefix

Advanced usage

Extract mkp package programmatically

import mkp

package = mkp.load_file('foo-1.0.mkp')
print(package.info)
package.extract_files('path/to/somewhere')

Pack files to mkp package

In contrast to dist, this provides the possibility to manually select the files by replacing find_files. It is also possible to choose a different output filename.

import mkp

info = {
    'author': 'tom-mi',
    'description': 'Test the system',
    'download_url': 'http://example.com/',
    'files': mkp.find_files('path/to/files'),
    'name': 'test',
    'title': 'Test',
    'version': '1.0',
    'version.min_required': '1.2.3',
}
mkp.pack_to_file(info, 'path/to/files', 'test-1.0.mkp')

Exclude files when packing using regular expressions:

from mkp import dist

dist({
    # ...
}, exclude_patterns=[r'.*\.pyc$', '__pycache__'])

or

import mkp

files = mkp.find_files('path/to/files', exclude_patterns=[r'.*\.pyc$', '__pycache__'])

Include all subdirectories instead of just the "known" ones:

from mkp import dist, INCLUDE_ALL

dist({
    # ...
}, directories=INCLUDE_ALL)

or

import mkp

files = mkp.find_files('path/to/files', directories=mkp.INCLUDE_ALL)

Include only specific subdirectories:

from mkp import dist

dist({
    # ...
}, directories=['checks', 'agents'])

or

import mkp

files = mkp.find_files('path/to/files', directories=['checks', 'agents'])

Development Setup

Install development dependencies into local environment (${repo_root}/.venv):

scripts/bootstrap

Run all tests with tox:

scripts/test
# or
source .venv/bin/activate
tox

Run tests of current python version with pytest:

source .venv/bin/activate
pytest

Release new version:

git tag <new_version>
git push --tags

License

This software is licensed under GPLv2.

About

Pack and unpack Check_MK mkp files

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •