Skip to main content

System information discovery and asset tracking

Project description

System information discovery and asset tracking

INSTALLATION

pip install grainsv2

INSTALLATION FOR DEVELOPMENT

Clone the grains repo and install with pip:

git clone https://gitlab.com/saltstack/pop/grains.git
pip install -e grains

EXECUTION

After installation the grains command should now be available.

The command will have no output until it is vertically extended (details below).

TESTING

install requirements-test.txt with pip and run pytest:

pip install -r grains/requirements-test.txt
pytest grains/tests

VERTICAL APP-MERGING

Instructions for extending grains

Install pop:

pip install --upgrade pop

Create a new directory for the project:

mkdir grains_{project_name}
cd grains_{project_name}

Use pop-seed to generate the structure of a project that extends grains:

pop-seed -t v grains_{project_name} -d grains

  • “-t v” specifies that this is a vertically app-merged project

  • “-d grains” says that we want to implement the dynamic name of “grains”

Notice that some structure has been created for you. We especially care about the new directory in grains_{project_name}/grains

Add “grains” to the requirements.txt:

echo "grains" >> requirements.txt

CREATING GRAINS

  • Create a new file in “grains_{project_name}/grains”
    • The directory should already have been created by pop-seed.

    • The file name is arbitrary.

    • Every file in this directory, then it’s subdirectories, will be parsed “simultaneously” (as far as that makes sense for asyncio).

    • Grains that are dependant on each other should be assigned in the same function.

    • Do NOT rely on the collector’s recursion strategy for grains to depend on each other.

    • Use hub.grains.init.wait_for(“grains”) to wait for grains to be generated by another sub

  • Add your new project to the python path
    • alternatively, run “pip install -e .” from your project’s root directory
      • you only need to do this once

  • Create an async function in this file with a descriptive yet arbitrary name
    • By convention it should start with “load”

    • Make it async unless you have a really really really good reason.

    • Grains that depend on each other already belong in the same function, don’t depend on synchronous programming for determinism

    • Use hub.grains.init.wait_for(“specific_grain”) to explicitly wait for an external grain to become available before moving on

    • Grains can be accessed and assigned like a dictionary, but our convention is to use the namespace

    • Use hub.grains.GRAINS._dict() or copy.copy(hub.grains.GRAINS) to retrieve a JSON serializable version of grains.

Example:

async def load_my_grain(hub):
    hub.grains.GRAINS.new_grain = "Hello World!"

And that’s it! Now verify that your grain is collected from the command line:

grains new_grain

Output:

new_grain:
    Hello World!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

grainsv2-9.1.tar.gz (11.7 kB view details)

Uploaded Source

Built Distribution

grainsv2-9.1-py3-none-any.whl (6.7 kB view details)

Uploaded Python 3

File details

Details for the file grainsv2-9.1.tar.gz.

File metadata

  • Download URL: grainsv2-9.1.tar.gz
  • Upload date:
  • Size: 11.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.21.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.8.3

File hashes

Hashes for grainsv2-9.1.tar.gz
Algorithm Hash digest
SHA256 cbb506f324beda04369eedcf0911a8e32387aafb40696a9094d4928528a9adfd
MD5 c0d04d56409d86679d3b4054a062a310
BLAKE2b-256 1bc44f1e57d74cba45dc3c2bbb3c4866cb04c9dc6a8d1c336134fb704eec10ed

See more details on using hashes here.

File details

Details for the file grainsv2-9.1-py3-none-any.whl.

File metadata

  • Download URL: grainsv2-9.1-py3-none-any.whl
  • Upload date:
  • Size: 6.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.21.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.8.3

File hashes

Hashes for grainsv2-9.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e09221f0fe769c5e8c76cf3dba140f8a6507702ff8febe1ee7455e65f671d01c
MD5 90565974c56afc9e7582db950f6b1fb9
BLAKE2b-256 8d6abce341102ed73a41585daf0c33a9107609d168b95b43d4f5ce986a2b8c9a

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page