Skip to main content

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!

Download files

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

Source Distribution

grainsv2-10.tar.gz (7.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

grainsv2-10-py3-none-any.whl (6.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: grainsv2-10.tar.gz
  • Upload date:
  • Size: 7.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.5

File hashes

Hashes for grainsv2-10.tar.gz
Algorithm Hash digest
SHA256 a3ccbffcc832c70b451d88231ec53c2b86ec0a75fae5158e23e9eaa4a6e7cdf1
MD5 f2be056a7348299e6a64b3ef734ee840
BLAKE2b-256 64d28d3d3f5b5b1a80f26eb9b5a30384056315c9559d73c7a5ed5b031a64513e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: grainsv2-10-py3-none-any.whl
  • Upload date:
  • Size: 6.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.5

File hashes

Hashes for grainsv2-10-py3-none-any.whl
Algorithm Hash digest
SHA256 a65b61516c34b6fc8c06b0c985cbcf00de30a005103080698f2fe44c30362337
MD5 c706b7a628eb9c9d0282bcf842fd9203
BLAKE2b-256 696e0b65207dc47165646f5a325061fad2d14bf09f789c83db94dbed7a1535f6

See more details on using hashes here.

Release history Release notifications | RSS feed

11.10

2 files

11.9

2 files

11.8

2 files

11.7

2 files

11.6

2 files

11.3

2 files

10.1

2 files

This release

10 This release

2 files

9.2

2 files

9.1

2 files

9

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page