109 lines
3.1 KiB
ReStructuredText
109 lines
3.1 KiB
ReStructuredText
Conversions
|
|
-----------
|
|
|
|
Parsing CSV files
|
|
^^^^^^^^^^^^^^^^^
|
|
|
|
Ansible offers the :ref:`community.general.read_csv module <ansible_collections.community.general.read_csv_module>` to read CSV files. Sometimes you need to convert strings to CSV files instead. For this, the ``from_csv`` filter exists.
|
|
|
|
.. code-block:: yaml+jinja
|
|
|
|
- name: "Parse CSV from string"
|
|
debug:
|
|
msg: "{{ csv_string | community.general.from_csv }}"
|
|
vars:
|
|
csv_string: |
|
|
foo,bar,baz
|
|
1,2,3
|
|
you,this,then
|
|
|
|
This produces:
|
|
|
|
.. code-block:: ansible-output
|
|
|
|
TASK [Parse CSV from string] **************************************************************
|
|
ok: [localhost] => {
|
|
"msg": [
|
|
{
|
|
"bar": "2",
|
|
"baz": "3",
|
|
"foo": "1"
|
|
},
|
|
{
|
|
"bar": "this",
|
|
"baz": "then",
|
|
"foo": "you"
|
|
}
|
|
]
|
|
}
|
|
|
|
The ``from_csv`` filter has several keyword arguments to control its behavior:
|
|
|
|
:dialect: Dialect of the CSV file. Default is ``excel``. Other possible choices are ``excel-tab`` and ``unix``. If one of ``delimiter``, ``skipinitialspace`` or ``strict`` is specified, ``dialect`` is ignored.
|
|
:fieldnames: A set of column names to use. If not provided, the first line of the CSV is assumed to contain the column names.
|
|
:delimiter: Sets the delimiter to use. Default depends on the dialect used.
|
|
:skipinitialspace: Set to ``true`` to ignore space directly after the delimiter. Default depends on the dialect used (usually ``false``).
|
|
:strict: Set to ``true`` to error out on invalid CSV input.
|
|
|
|
.. versionadded: 3.0.0
|
|
|
|
Converting to JSON
|
|
^^^^^^^^^^^^^^^^^^
|
|
|
|
`JC <https://pypi.org/project/jc/>`_ is a CLI tool and Python library which allows to interpret output of various CLI programs as JSON. It is also available as a filter in community.general. This filter needs the `jc Python library <https://pypi.org/project/jc/>`_ installed on the controller.
|
|
|
|
.. code-block:: yaml+jinja
|
|
|
|
- name: Run 'ls' to list files in /
|
|
command: ls /
|
|
register: result
|
|
|
|
- name: Parse the ls output
|
|
debug:
|
|
msg: "{{ result.stdout | community.general.jc('ls') }}"
|
|
|
|
This produces:
|
|
|
|
.. code-block:: ansible-output
|
|
|
|
TASK [Run 'ls' to list files in /] ********************************************************
|
|
changed: [localhost]
|
|
|
|
TASK [Parse the ls output] ****************************************************************
|
|
ok: [localhost] => {
|
|
"msg": [
|
|
{
|
|
"filename": "bin"
|
|
},
|
|
{
|
|
"filename": "boot"
|
|
},
|
|
{
|
|
"filename": "dev"
|
|
},
|
|
{
|
|
"filename": "etc"
|
|
},
|
|
{
|
|
"filename": "home"
|
|
},
|
|
{
|
|
"filename": "lib"
|
|
},
|
|
{
|
|
"filename": "proc"
|
|
},
|
|
{
|
|
"filename": "root"
|
|
},
|
|
{
|
|
"filename": "run"
|
|
},
|
|
{
|
|
"filename": "tmp"
|
|
}
|
|
]
|
|
}
|
|
|
|
.. versionadded: 2.0.0
|