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-9.tar.gz (11.6 kB view details)

Uploaded Source

Built Distribution

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

grainsv2-9-py3-none-any.whl (6.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: grainsv2-9.tar.gz
  • Upload date:
  • Size: 11.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/47.1.1 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.8.3

File hashes

Hashes for grainsv2-9.tar.gz
Algorithm Hash digest
SHA256 a87446b533ac30ffe5742f2313bfdf97ea9b6296690befda200c760a7602b17c
MD5 3dd69ecb20cf58207d455ecb5d72bc54
BLAKE2b-256 23d098432bac072db6762d59577feae66f29ac86dfd4be050a0deb57b983ce32

See more details on using hashes here.

File details

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

File metadata

  • Download URL: grainsv2-9-py3-none-any.whl
  • Upload date:
  • Size: 6.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/47.1.1 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.8.3

File hashes

Hashes for grainsv2-9-py3-none-any.whl
Algorithm Hash digest
SHA256 0af9e8409076a842d0ead9c71434f04dfc1a808e8496be8a91856365f7df9b32
MD5 e59c79e2f96235010dc6c2fb707c9507
BLAKE2b-256 c10e5372b08f21f6efc9f37fdd3727bfc5d4cfbac077c560310b5a956bfa01c7

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

10

2 files

9.2

2 files

9.1

2 files

This release

9 This release

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