D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
opt
/
saltstack
/
salt
/
lib
/
python3.10
/
site-packages
/
salt
/
pillar
/
Filename :
csvpillar.py
back
Copy
""" Store key/value pairs in a CSV file .. versionadded:: 2016.11.0 Example configuration: .. code-block:: yaml ext_pillar: - csv: /path/to/file.csv # or ext_pillar: - csv: path: /path/to/file.csv namespace: 'subkey' fieldnames: - col1 - col2 - col2 The first column must be minion IDs and the first row must be dictionary keys. E.g.: ========== ========= ====== id role env ========== ========= ====== jerry web prod stuart web stage dave web qa phil db prod kevin db stage mike db qa ========== ========= ====== Will produce the following Pillar values for a minion named "jerry": .. code-block:: python { 'role': 'web', 'env': 'prod', } """ import csv import salt.utils.files __virtualname__ = "csv" def __virtual__(): return __virtualname__ def ext_pillar( mid, pillar, path, idkey="id", namespace=None, fieldnames=None, restkey=None, restval=None, dialect="excel", ): """ Read a CSV into Pillar :param str path: Absolute path to a CSV file. :param str idkey: (Optional) The column name of minion IDs. :param str namespace: (Optional) A pillar key to namespace the values under. :param list fieldnames: (Optional) if the first row of the CSV is not column names they may be specified here instead. """ with salt.utils.files.fopen(path, "r") as f: sheet = csv.DictReader( f, fieldnames, restkey=restkey, restval=restval, dialect=dialect ) for row in sheet: if row[idkey] == mid: if namespace: return {namespace: row} else: return row return {}