summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rw-r--r--README.md1
-rw-r--r--changelogs/fragments/vyos_logging_global_module.yaml5
-rw-r--r--docs/vyos.vyos.vyos_logging_global_module.rst1648
-rw-r--r--docs/vyos.vyos.vyos_logging_module.rst11
-rw-r--r--meta/runtime.yml13
-rw-r--r--plugins/module_utils/network/vyos/argspec/logging_global/__init__.py0
-rw-r--r--plugins/module_utils/network/vyos/argspec/logging_global/logging_global.py370
-rw-r--r--plugins/module_utils/network/vyos/config/logging_global/__init__.py0
-rw-r--r--plugins/module_utils/network/vyos/config/logging_global/logging_global.py237
-rw-r--r--plugins/module_utils/network/vyos/facts/facts.py4
-rw-r--r--plugins/module_utils/network/vyos/facts/logging_global/__init__.py0
-rw-r--r--plugins/module_utils/network/vyos/facts/logging_global/logging_global.py107
-rw-r--r--plugins/module_utils/network/vyos/rm_templates/logging_global.py388
-rw-r--r--plugins/modules/vyos_logging.py4
-rw-r--r--plugins/modules/vyos_logging_global.py776
-rw-r--r--tests/integration/targets/vyos_logging_global/defaults/main.yaml3
-rw-r--r--tests/integration/targets/vyos_logging_global/meta/main.yaml2
-rw-r--r--tests/integration/targets/vyos_logging_global/tasks/cli.yaml19
-rw-r--r--tests/integration/targets/vyos_logging_global/tasks/main.yaml4
-rw-r--r--tests/integration/targets/vyos_logging_global/tests/cli/_parsed.cfg3
-rw-r--r--tests/integration/targets/vyos_logging_global/tests/cli/_populate.yaml53
-rw-r--r--tests/integration/targets/vyos_logging_global/tests/cli/_remove_config.yaml4
-rw-r--r--tests/integration/targets/vyos_logging_global/tests/cli/deleted.yaml22
-rw-r--r--tests/integration/targets/vyos_logging_global/tests/cli/empty_config.yaml60
-rw-r--r--tests/integration/targets/vyos_logging_global/tests/cli/gathered.yaml22
-rw-r--r--tests/integration/targets/vyos_logging_global/tests/cli/merged.yaml56
-rw-r--r--tests/integration/targets/vyos_logging_global/tests/cli/overridden.yaml39
-rw-r--r--tests/integration/targets/vyos_logging_global/tests/cli/parsed.yaml14
-rw-r--r--tests/integration/targets/vyos_logging_global/tests/cli/rendered.yaml50
-rw-r--r--tests/integration/targets/vyos_logging_global/vars/main.yaml95
-rw-r--r--tests/sanity/ignore-2.10.txt3
-rw-r--r--tests/sanity/ignore-2.11.txt3
-rw-r--r--tests/sanity/ignore-2.12.txt3
-rw-r--r--tests/sanity/ignore-2.9.txt5
-rw-r--r--tests/unit/modules/network/vyos/test_vyos_logging_global.py464
36 files changed, 4491 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index 894a44c..c45c871 100644
--- a/.gitignore
+++ b/.gitignore
@@ -51,6 +51,9 @@ coverage.xml
*.mo
*.pot
+#ide
+.vscode
+
# Django stuff:
*.log
local_settings.py
diff --git a/README.md b/README.md
index 4c8649b..6f28eb5 100644
--- a/README.md
+++ b/README.md
@@ -52,6 +52,7 @@ Name | Description
[vyos.vyos.vyos_lldp_interface](https://github.com/ansible-collections/vyos.vyos/blob/main/docs/vyos.vyos.vyos_lldp_interface_module.rst)|(deprecated, removed after 2022-06-01) Manage LLDP interfaces configuration on VyOS network devices
[vyos.vyos.vyos_lldp_interfaces](https://github.com/ansible-collections/vyos.vyos/blob/main/docs/vyos.vyos.vyos_lldp_interfaces_module.rst)|LLDP interfaces resource module
[vyos.vyos.vyos_logging](https://github.com/ansible-collections/vyos.vyos/blob/main/docs/vyos.vyos.vyos_logging_module.rst)|Manage logging on network devices
+[vyos.vyos.vyos_logging_global](https://github.com/ansible-collections/vyos.vyos/blob/main/docs/vyos.vyos.vyos_logging_global_module.rst)|Logging resource module
[vyos.vyos.vyos_ospf_interfaces](https://github.com/ansible-collections/vyos.vyos/blob/main/docs/vyos.vyos.vyos_ospf_interfaces_module.rst)|OSPF Interfaces Resource Module.
[vyos.vyos.vyos_ospfv2](https://github.com/ansible-collections/vyos.vyos/blob/main/docs/vyos.vyos.vyos_ospfv2_module.rst)|OSPFv2 resource module
[vyos.vyos.vyos_ospfv3](https://github.com/ansible-collections/vyos.vyos/blob/main/docs/vyos.vyos.vyos_ospfv3_module.rst)|OSPFV3 resource module
diff --git a/changelogs/fragments/vyos_logging_global_module.yaml b/changelogs/fragments/vyos_logging_global_module.yaml
new file mode 100644
index 0000000..d9f2c8f
--- /dev/null
+++ b/changelogs/fragments/vyos_logging_global_module.yaml
@@ -0,0 +1,5 @@
+---
+minor_changes:
+ - vyos_logging_global logging resource module.
+deprecated_features:
+ - The vyos_logging module has been deprecated in favor of the new vyos_logging_global resource module and will be removed in a release after "2023-08-01".
diff --git a/docs/vyos.vyos.vyos_logging_global_module.rst b/docs/vyos.vyos.vyos_logging_global_module.rst
new file mode 100644
index 0000000..0ee2505
--- /dev/null
+++ b/docs/vyos.vyos.vyos_logging_global_module.rst
@@ -0,0 +1,1648 @@
+.. _vyos.vyos.vyos_logging_global_module:
+
+
+*****************************
+vyos.vyos.vyos_logging_global
+*****************************
+
+**Logging resource module**
+
+
+Version added: 2.4.0
+
+.. contents::
+ :local:
+ :depth: 1
+
+
+Synopsis
+--------
+- This module manages the logging attributes of Vyos network devices
+
+
+
+
+Parameters
+----------
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="4">Parameter</th>
+ <th>Choices/<font color="blue">Defaults</font></th>
+ <th width="100%">Comments</th>
+ </tr>
+ <tr>
+ <td colspan="4">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>config</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>A list containing dictionary of logging options</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="3">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>console</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>logging to serial console</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>facilities</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>facility configurations for console</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>facility</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>all</li>
+ <li>auth</li>
+ <li>authpriv</li>
+ <li>cron</li>
+ <li>daemon</li>
+ <li>kern</li>
+ <li>lpr</li>
+ <li>mail</li>
+ <li>mark</li>
+ <li>news</li>
+ <li>protocols</li>
+ <li>security</li>
+ <li>syslog</li>
+ <li>user</li>
+ <li>uucp</li>
+ <li>local0</li>
+ <li>local1</li>
+ <li>local2</li>
+ <li>local3</li>
+ <li>local4</li>
+ <li>local5</li>
+ <li>local6</li>
+ <li>local7</li>
+ </ul>
+ </td>
+ <td>
+ <div>Facility for logging</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>severity</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>emerg</li>
+ <li>alert</li>
+ <li>crit</li>
+ <li>err</li>
+ <li>warning</li>
+ <li>notice</li>
+ <li>info</li>
+ <li>debug</li>
+ <li>all</li>
+ </ul>
+ </td>
+ <td>
+ <div>logging level</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enabled</li>
+ <li>disabled</li>
+ </ul>
+ </td>
+ <td>
+ <div>enable or disable the command</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="3">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>files</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>logging to file</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>archive</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Log file size and rotation characteristics</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>file_num</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Number of saved files (default is 5)</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>size</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Size of log files (in kilobytes, default is 256)</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enabled</li>
+ <li>disabled</li>
+ </ul>
+ </td>
+ <td>
+ <div>enable or disable the command</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>facilities</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>facility configurations</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>facility</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>all</li>
+ <li>auth</li>
+ <li>authpriv</li>
+ <li>cron</li>
+ <li>daemon</li>
+ <li>kern</li>
+ <li>lpr</li>
+ <li>mail</li>
+ <li>mark</li>
+ <li>news</li>
+ <li>protocols</li>
+ <li>security</li>
+ <li>syslog</li>
+ <li>user</li>
+ <li>uucp</li>
+ <li>local0</li>
+ <li>local1</li>
+ <li>local2</li>
+ <li>local3</li>
+ <li>local4</li>
+ <li>local5</li>
+ <li>local6</li>
+ <li>local7</li>
+ </ul>
+ </td>
+ <td>
+ <div>Facility for logging</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>severity</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>emerg</li>
+ <li>alert</li>
+ <li>crit</li>
+ <li>err</li>
+ <li>warning</li>
+ <li>notice</li>
+ <li>info</li>
+ <li>debug</li>
+ <li>all</li>
+ </ul>
+ </td>
+ <td>
+ <div>logging level</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>path</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>file name or path</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="3">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>global_params</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>logging to serial console</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>archive</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Log file size and rotation characteristics</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>file_num</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Number of saved files (default is 5)</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>size</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Size of log files (in kilobytes, default is 256)</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enabled</li>
+ <li>disabled</li>
+ </ul>
+ </td>
+ <td>
+ <div>enable or disable the command</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>facilities</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>facility configurations</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>facility</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>all</li>
+ <li>auth</li>
+ <li>authpriv</li>
+ <li>cron</li>
+ <li>daemon</li>
+ <li>kern</li>
+ <li>lpr</li>
+ <li>mail</li>
+ <li>mark</li>
+ <li>news</li>
+ <li>protocols</li>
+ <li>security</li>
+ <li>syslog</li>
+ <li>user</li>
+ <li>uucp</li>
+ <li>local0</li>
+ <li>local1</li>
+ <li>local2</li>
+ <li>local3</li>
+ <li>local4</li>
+ <li>local5</li>
+ <li>local6</li>
+ <li>local7</li>
+ </ul>
+ </td>
+ <td>
+ <div>Facility for logging</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>severity</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>emerg</li>
+ <li>alert</li>
+ <li>crit</li>
+ <li>err</li>
+ <li>warning</li>
+ <li>notice</li>
+ <li>info</li>
+ <li>debug</li>
+ <li>all</li>
+ </ul>
+ </td>
+ <td>
+ <div>logging level</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>marker_interval</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>time interval how often a mark message is being sent in seconds (default is 1200)</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>preserve_fqdn</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">boolean</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>no</li>
+ <li>yes</li>
+ </ul>
+ </td>
+ <td>
+ <div>uses FQDN for logging</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enabled</li>
+ <li>disabled</li>
+ </ul>
+ </td>
+ <td>
+ <div>enable or disable the command</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="3">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>hosts</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>logging to serial console</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>facilities</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>facility configurations for host</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>facility</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>all</li>
+ <li>auth</li>
+ <li>authpriv</li>
+ <li>cron</li>
+ <li>daemon</li>
+ <li>kern</li>
+ <li>lpr</li>
+ <li>mail</li>
+ <li>mark</li>
+ <li>news</li>
+ <li>protocols</li>
+ <li>security</li>
+ <li>syslog</li>
+ <li>user</li>
+ <li>uucp</li>
+ <li>local0</li>
+ <li>local1</li>
+ <li>local2</li>
+ <li>local3</li>
+ <li>local4</li>
+ <li>local5</li>
+ <li>local6</li>
+ <li>local7</li>
+ </ul>
+ </td>
+ <td>
+ <div>Facility for logging</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>protocol</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>udp</li>
+ <li>tcp</li>
+ </ul>
+ </td>
+ <td>
+ <div>syslog communication protocol</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>severity</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>emerg</li>
+ <li>alert</li>
+ <li>crit</li>
+ <li>err</li>
+ <li>warning</li>
+ <li>notice</li>
+ <li>info</li>
+ <li>debug</li>
+ <li>all</li>
+ </ul>
+ </td>
+ <td>
+ <div>logging level</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>hostname</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Remote host name or IP address</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>port</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">integer</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>Destination port (1-65535)</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="3">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>syslog</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>logging syslog</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>enabled</li>
+ <li>disabled</li>
+ </ul>
+ </td>
+ <td>
+ <div>enable or disable the command</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td colspan="3">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>users</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>logging to file</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>facilities</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ / <span style="color: purple">elements=dictionary</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>facility configurations</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>facility</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>all</li>
+ <li>auth</li>
+ <li>authpriv</li>
+ <li>cron</li>
+ <li>daemon</li>
+ <li>kern</li>
+ <li>lpr</li>
+ <li>mail</li>
+ <li>mark</li>
+ <li>news</li>
+ <li>protocols</li>
+ <li>security</li>
+ <li>syslog</li>
+ <li>user</li>
+ <li>uucp</li>
+ <li>local0</li>
+ <li>local1</li>
+ <li>local2</li>
+ <li>local3</li>
+ <li>local4</li>
+ <li>local5</li>
+ <li>local6</li>
+ <li>local7</li>
+ </ul>
+ </td>
+ <td>
+ <div>Facility for logging</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>severity</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li>emerg</li>
+ <li>alert</li>
+ <li>crit</li>
+ <li>err</li>
+ <li>warning</li>
+ <li>notice</li>
+ <li>info</li>
+ <li>debug</li>
+ <li>all</li>
+ </ul>
+ </td>
+ <td>
+ <div>logging level</div>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="elbow-placeholder"></td>
+ <td class="elbow-placeholder"></td>
+ <td colspan="2">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>username</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>user login name</div>
+ </td>
+ </tr>
+
+
+ <tr>
+ <td colspan="4">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>running_config</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ </td>
+ <td>
+ <div>This option is used only with state <em>parsed</em>.</div>
+ <div>The value of this option should be the output received from the VYOS device by executing the command <b>show configuration commands | grep syslog</b>.</div>
+ <div>The state <em>parsed</em> reads the configuration from <code>running_config</code> option and transforms it into Ansible structured data as per the resource module&#x27;s argspec and the value is then returned in the <em>parsed</em> key within the result.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="4">
+ <div class="ansibleOptionAnchor" id="parameter-"></div>
+ <b>state</b>
+ <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
+ <div style="font-size: small">
+ <span style="color: purple">string</span>
+ </div>
+ </td>
+ <td>
+ <ul style="margin: 0; padding: 0"><b>Choices:</b>
+ <li><div style="color: blue"><b>merged</b>&nbsp;&larr;</div></li>
+ <li>replaced</li>
+ <li>overridden</li>
+ <li>deleted</li>
+ <li>gathered</li>
+ <li>parsed</li>
+ <li>rendered</li>
+ </ul>
+ </td>
+ <td>
+ <div>The state the configuration should be left in</div>
+ <div>The states <em>replaced</em> and <em>overridden</em> have identical behaviour for this module.</div>
+ <div>Refer to examples for more details.</div>
+ </td>
+ </tr>
+ </table>
+ <br/>
+
+
+Notes
+-----
+
+.. note::
+ - Tested against vyos 1.2
+ - This module works with connection ``network_cli``.
+ - The Configuration defaults of the Vyos network devices are supposed to hinder idempotent behavior of plays
+
+
+
+Examples
+--------
+
+.. code-block:: yaml
+
+ # Using state: merged
+
+ # Before state:
+ # -------------
+
+ # vyos:~$show configuration commands | grep syslog
+
+ - name: Apply the provided configuration
+ vyos.vyos.vyos_logging_global:
+ config:
+ console:
+ facilities:
+ - facility: local7
+ severity: err
+ files:
+ - path: logFile
+ archive:
+ file_num: 2
+ facilities:
+ - facility: local6
+ severity: emerg
+ hosts:
+ - hostname: 172.16.0.1
+ facilities:
+ - facility: local7
+ severity: all
+ - facility: all
+ protocol: udp
+ port: 223
+ users:
+ - username: vyos
+ facilities:
+ - facility: local7
+ severity: debug
+ global_params:
+ archive:
+ file_num: 2
+ size: 111
+ facilities:
+ - facility: cron
+ severity: debug
+ marker_interval: 111
+ preserve_fqdn: true
+ state: merged
+
+ # Commands Fired:
+ # ---------------
+
+ # "commands": [
+ # "set system syslog console facility local7 level err",
+ # "set system syslog file logFile archive file 2",
+ # "set system syslog host 172.16.0.1 facility local7 level all",
+ # "set system syslog file logFile facility local6 level emerg",
+ # "set system syslog host 172.16.0.1 facility all protocol udp",
+ # "set system syslog user vyos facility local7 level debug",
+ # "set system syslog host 172.16.0.1 port 223",
+ # "set system syslog global facility cron level debug",
+ # "set system syslog global archive file 2",
+ # "set system syslog global archive size 111",
+ # "set system syslog global marker interval 111",
+ # "set system syslog global preserve-fqdn"
+ # ],
+
+ # After state:
+ # ------------
+
+ # vyos:~$ show configuration commands | grep syslog
+ # set system syslog console facility local7 level 'err'
+ # set system syslog file logFile archive file '2'
+ # set system syslog file logFile facility local6 level 'emerg'
+ # set system syslog global archive file '2'
+ # set system syslog global archive size '111'
+ # set system syslog global facility cron level 'debug'
+ # set system syslog global marker interval '111'
+ # set system syslog global preserve-fqdn
+ # set system syslog host 172.16.0.1 facility all protocol 'udp'
+ # set system syslog host 172.16.0.1 facility local7 level 'all'
+ # set system syslog host 172.16.0.1 port '223'
+ # set system syslog user vyos facility local7 level 'debug'
+
+ # Using state: deleted
+
+ # Before state:
+ # -------------
+
+ # vyos:~$show configuration commands | grep syslog
+ # set system syslog console facility local7 level 'err'
+ # set system syslog file logFile archive file '2'
+ # set system syslog file logFile facility local6 level 'emerg'
+ # set system syslog global archive file '2'
+ # set system syslog global archive size '111'
+ # set system syslog global facility cron level 'debug'
+ # set system syslog global marker interval '111'
+ # set system syslog global preserve-fqdn
+ # set system syslog host 172.16.0.1 facility all protocol 'udp'
+ # set system syslog host 172.16.0.1 facility local7 level 'all'
+ # set system syslog host 172.16.0.1 port '223'
+ # set system syslog user vyos facility local7 level 'debug'
+
+ - name: delete the existing configuration
+ vyos.vyos.vyos_logging_global:
+ state: deleted
+
+ # Commands Fired:
+ # ---------------
+
+ # "commands": [
+ # "delete system syslog"
+ # ],
+
+ # After state:
+ # ------------
+
+ # vyos:~$show configuration commands | grep syslog
+
+ # Using state: overridden
+
+ # Before state:
+ # -------------
+
+ # vyos:~$show configuration commands | grep syslog
+ # set system syslog console facility local7 level 'err'
+ # set system syslog file logFile archive file '2'
+ # set system syslog file logFile facility local6 level 'emerg'
+ # set system syslog global archive file '2'
+ # set system syslog global archive size '111'
+ # set system syslog global facility cron level 'debug'
+ # set system syslog global marker interval '111'
+ # set system syslog global preserve-fqdn
+ # set system syslog host 172.16.0.1 facility all protocol 'udp'
+ # set system syslog host 172.16.0.1 facility local7 level 'all'
+ # set system syslog host 172.16.0.1 port '223'
+ # set system syslog user vyos facility local7 level 'debug'
+
+ - name: Override the current configuration
+ vyos.vyos.vyos_logging_global:
+ config:
+ console:
+ facilities:
+ - facility: all
+ - facility: local7
+ severity: err
+ - facility: news
+ severity: debug
+ files:
+ - path: logFileNew
+ hosts:
+ - hostname: 172.16.0.2
+ facilities:
+ - facility: local5
+ severity: all
+ global_params:
+ archive:
+ file_num: 10
+ state: overridden
+
+ # Commands Fired:
+ # ---------------
+
+ # "commands": [
+ # "delete system syslog file logFile",
+ # "delete system syslog global facility cron",
+ # "delete system syslog host 172.16.0.1",
+ # "delete system syslog user vyos",
+ # "set system syslog console facility all",
+ # "set system syslog console facility news level debug",
+ # "set system syslog file logFileNew",
+ # "set system syslog host 172.16.0.2 facility local5 level all",
+ # "set system syslog global archive file 10",
+ # "delete system syslog global archive size 111",
+ # "delete system syslog global marker",
+ # "delete system syslog global preserve-fqdn"
+ # ],
+
+ # After state:
+ # ------------
+
+ # vyos:~$show configuration commands | grep syslog
+ # set system syslog console facility all
+ # set system syslog console facility local7 level 'err'
+ # set system syslog console facility news level 'debug'
+ # set system syslog file logFileNew
+ # set system syslog global archive file '10'
+ # set system syslog host 172.16.0.2 facility local5 level 'all'
+
+ # Using state: replaced
+
+ # Before state:
+ # -------------
+
+ # vyos:~$show configuration commands | grep syslog
+ # set system syslog console facility all
+ # set system syslog console facility local7 level 'err'
+ # set system syslog console facility news level 'debug'
+ # set system syslog file logFileNew
+ # set system syslog global archive file '10'
+ # set system syslog host 172.16.0.2 facility local5 level 'all'
+
+ - name: Replace with the provided configuration
+ register: result
+ vyos.vyos.vyos_logging_global:
+ config:
+ console:
+ facilities:
+ - facility: local6
+ users:
+ - username: paul
+ facilities:
+ - facility: local7
+ severity: err
+ state: replaced
+
+ # Commands Fired:
+ # ---------------
+
+ # "commands": [
+ # "delete system syslog console facility all",
+ # "delete system syslog console facility local7",
+ # "delete system syslog console facility news",
+ # "delete system syslog file logFileNew",
+ # "delete system syslog global archive file 10",
+ # "delete system syslog host 172.16.0.2",
+ # "set system syslog console facility local6",
+ # "set system syslog user paul facility local7 level err"
+ # ],
+
+ # After state:
+ # ------------
+
+ # vyos:~$show configuration commands | grep syslog
+ # set system syslog console facility local6
+ # set system syslog user paul facility local7 level 'err'
+
+ # Using state: gathered
+
+ - name: Gather logging config
+ vyos.vyos.vyos_logging_global:
+ state: gathered
+
+ # Module Execution Result:
+ # ------------------------
+
+ # "gathered": {
+ # "console": {
+ # "facilities": [
+ # {
+ # "facility": "local6"
+ # },
+ # {
+ # "facility": "local7",
+ # "severity": "err"
+ # }
+ # ]
+ # },
+ # "files": [
+ # {
+ # "archive": {
+ # "file_num": 2
+ # },
+ # "facilities": [
+ # {
+ # "facility": "local6",
+ # "severity": "emerg"
+ # }
+ # ],
+ # "path": "logFile"
+ # }
+ # ],
+ # "global_params": {
+ # "archive": {
+ # "file_num": 2,
+ # "size": 111
+ # },
+ # "facilities": [
+ # {
+ # "facility": "cron",
+ # "severity": "debug"
+ # }
+ # ],
+ # "marker_interval": 111,
+ # "preserve_fqdn": true
+ # },
+ # "hosts": [
+ # {
+ # "facilities": [
+ # {
+ # "facility": "all",
+ # "protocol": "udp"
+ # },
+ # {
+ # "facility": "local7",
+ # "severity": "all"
+ # }
+ # ],
+ # "hostname": "172.16.0.1",
+ # "port": 223
+ # }
+ # ],
+ # "users": [
+ # {
+ # "facilities": [
+ # {
+ # "facility": "local7",
+ # "severity": "err"
+ # }
+ # ],
+ # "username": "paul"
+ # },
+ # {
+ # "facilities": [
+ # {
+ # "facility": "local7",
+ # "severity": "debug"
+ # }
+ # ],
+ # "username": "vyos"
+ # }
+ # ]
+ # },
+
+ # After state:
+ # ------------
+
+ # vyos:~$show configuration commands | grep syslog
+ # set system syslog console facility local6
+ # set system syslog console facility local7 level 'err'
+ # set system syslog file logFile archive file '2'
+ # set system syslog file logFile facility local6 level 'emerg'
+ # set system syslog global archive file '2'
+ # set system syslog global archive size '111'
+ # set system syslog global facility cron level 'debug'
+ # set system syslog global marker interval '111'
+ # set system syslog global preserve-fqdn
+ # set system syslog host 172.16.0.1 facility all protocol 'udp'
+ # set system syslog host 172.16.0.1 facility local7 level 'all'
+ # set system syslog host 172.16.0.1 port '223'
+ # set system syslog user paul facility local7 level 'err'
+ # set system syslog user vyos facility local7 level 'debug'
+
+ # Using state: rendered
+
+ - name: Render the provided configuration
+ vyos.vyos.vyos_logging_global:
+ config:
+ console:
+ facilities:
+ - facility: local7
+ severity: err
+ files:
+ - path: logFile
+ archive:
+ file_num: 2
+ facilities:
+ - facility: local6
+ severity: emerg
+ hosts:
+ - hostname: 172.16.0.1
+ facilities:
+ - facility: local7
+ severity: all
+ - facility: all
+ protocol: udp
+ port: 223
+ users:
+ - username: vyos
+ facilities:
+ - facility: local7
+ severity: debug
+ global_params:
+ archive:
+ file_num: 2
+ size: 111
+ facilities:
+ - facility: cron
+ severity: debug
+ marker_interval: 111
+ preserve_fqdn: true
+ state: rendered
+
+ # Module Execution Result:
+ # ------------------------
+
+ # "rendered": [
+ # "set system syslog console facility local7 level err",
+ # "set system syslog file logFile facility local6 level emerg",
+ # "set system syslog file logFile archive file 2",
+ # "set system syslog host 172.16.0.1 facility local7 level all",
+ # "set system syslog host 172.16.0.1 facility all protocol udp",
+ # "set system syslog host 172.16.0.1 port 223",
+ # "set system syslog user vyos facility local7 level debug",
+ # "set system syslog global facility cron level debug",
+ # "set system syslog global archive file 2",
+ # "set system syslog global archive size 111",
+ # "set system syslog global marker interval 111",
+ # "set system syslog global preserve-fqdn"
+ # ]
+
+ # Using state: parsed
+
+ # File: parsed.cfg
+ # ----------------
+
+ # set system syslog console facility local6
+ # set system syslog console facility local7 level 'err'
+ # set system syslog file logFile archive file '2'
+ # set system syslog file logFile facility local6 level 'emerg'
+ # set system syslog global archive file '2'
+ # set system syslog global archive size '111'
+ # set system syslog global facility cron level 'debug'
+ # set system syslog global marker interval '111'
+ # set system syslog global preserve-fqdn
+ # set system syslog host 172.16.0.1 facility all protocol 'udp'
+ # set system syslog host 172.16.0.1 facility local7 level 'all'
+ # set system syslog host 172.16.0.1 port '223'
+ # set system syslog user paul facility local7 level 'err'
+ # set system syslog user vyos facility local7 level 'debug'
+
+ - name: Parse the provided configuration
+ vyos.vyos.vyos_logging_global:
+ running_config: "{{ lookup('file', 'parsed_vyos.cfg') }}"
+ state: parsed
+
+ # Module Execution Result:
+ # ------------------------
+
+ # "parsed": {
+ # "console": {
+ # "facilities": [
+ # {
+ # "facility": "local6"
+ # },
+ # {
+ # "facility": "local7",
+ # "severity": "err"
+ # }
+ # ]
+ # },
+ # "files": [
+ # {
+ # "archive": {
+ # "file_num": 2
+ # },
+ # "facilities": [
+ # {
+ # "facility": "local6",
+ # "severity": "emerg"
+ # }
+ # ],
+ # "path": "logFile"
+ # }
+ # ],
+ # "global_params": {
+ # "archive": {
+ # "file_num": 2,
+ # "size": 111
+ # },
+ # "facilities": [
+ # {
+ # "facility": "cron",
+ # "severity": "debug"
+ # }
+ # ],
+ # "marker_interval": 111,
+ # "preserve_fqdn": true
+ # },
+ # "hosts": [
+ # {
+ # "facilities": [
+ # {
+ # "facility": "all",
+ # "protocol": "udp"
+ # },
+ # {
+ # "facility": "local7",
+ # "severity": "all"
+ # }
+ # ],
+ # "hostname": "172.16.0.1",
+ # "port": 223
+ # }
+ # ],
+ # "users": [
+ # {
+ # "facilities": [
+ # {
+ # "facility": "local7",
+ # "severity": "err"
+ # }
+ # ],
+ # "username": "paul"
+ # },
+ # {
+ # "facilities": [
+ # {
+ # "facility": "local7",
+ # "severity": "debug"
+ # }
+ # ],
+ # "username": "vyos"
+ # }
+ # ]
+ # }
+ # }
+
+
+
+Return Values
+-------------
+Common return values are documented `here <https://docs.ansible.com/ansible/latest/reference_appendices/common_return_values.html#common-return-values>`_, the following are the fields unique to this module:
+
+.. raw:: html
+
+ <table border=0 cellpadding=0 class="documentation-table">
+ <tr>
+ <th colspan="1">Key</th>
+ <th>Returned</th>
+ <th width="100%">Description</th>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-"></div>
+ <b>after</b>
+ <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>when changed</td>
+ <td>
+ <div>The resulting configuration after module execution.</div>
+ <br/>
+ <div style="font-size: smaller"><b>Sample:</b></div>
+ <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">This output will always be in the same format as the module argspec.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-"></div>
+ <b>before</b>
+ <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">dictionary</span>
+ </div>
+ </td>
+ <td>when state is <em>merged</em>, <em>replaced</em>, <em>overridden</em>, <em>deleted</em> or <em>purged</em></td>
+ <td>
+ <div>The configuration prior to the module execution.</div>
+ <br/>
+ <div style="font-size: smaller"><b>Sample:</b></div>
+ <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">This output will always be in the same format as the module argspec.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-"></div>
+ <b>commands</b>
+ <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ </div>
+ </td>
+ <td>when state is <em>merged</em>, <em>replaced</em>, <em>overridden</em>, <em>deleted</em> or <em>purged</em></td>
+ <td>
+ <div>The set of commands pushed to the remote device.</div>
+ <br/>
+ <div style="font-size: smaller"><b>Sample:</b></div>
+ <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">[&#x27;set system syslog console facility local7 level err&#x27;, &#x27;set system syslog host 172.16.0.1 port 223&#x27;, &#x27;set system syslog global archive size 111&#x27;]</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-"></div>
+ <b>gathered</b>
+ <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ </div>
+ </td>
+ <td>when state is <em>gathered</em></td>
+ <td>
+ <div>Facts about the network resource gathered from the remote device as structured data.</div>
+ <br/>
+ <div style="font-size: smaller"><b>Sample:</b></div>
+ <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">This output will always be in the same format as the module argspec.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-"></div>
+ <b>parsed</b>
+ <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ </div>
+ </td>
+ <td>when state is <em>parsed</em></td>
+ <td>
+ <div>The device native config provided in <em>running_config</em> option parsed into structured data as per module argspec.</div>
+ <br/>
+ <div style="font-size: smaller"><b>Sample:</b></div>
+ <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">This output will always be in the same format as the module argspec.</div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="1">
+ <div class="ansibleOptionAnchor" id="return-"></div>
+ <b>rendered</b>
+ <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a>
+ <div style="font-size: small">
+ <span style="color: purple">list</span>
+ </div>
+ </td>
+ <td>when state is <em>rendered</em></td>
+ <td>
+ <div>The provided configuration in the task rendered in device-native format (offline).</div>
+ <br/>
+ <div style="font-size: smaller"><b>Sample:</b></div>
+ <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">[&#x27;set system syslog host 172.16.0.1 port 223&#x27;, &#x27;set system syslog user vyos facility local7 level debug&#x27;, &#x27;set system syslog global facility cron level debug&#x27;]</div>
+ </td>
+ </tr>
+ </table>
+ <br/><br/>
+
+
+Status
+------
+
+
+Authors
+~~~~~~~
+
+- Sagar Paul (@KB-perByte)
diff --git a/docs/vyos.vyos.vyos_logging_module.rst b/docs/vyos.vyos.vyos_logging_module.rst
index 9cb024d..39f885e 100644
--- a/docs/vyos.vyos.vyos_logging_module.rst
+++ b/docs/vyos.vyos.vyos_logging_module.rst
@@ -14,6 +14,13 @@ Version added: 1.0.0
:local:
:depth: 1
+DEPRECATED
+----------
+:Removed in collection release after 2023-08-01
+:Why: Updated module released with more functionality.
+:Alternative: vyos_logging_global
+
+
Synopsis
--------
@@ -434,6 +441,10 @@ Status
------
+- This module will be removed in version . *[deprecated]*
+- For more information see `DEPRECATED`_.
+
+
Authors
~~~~~~~
diff --git a/meta/runtime.yml b/meta/runtime.yml
index 912c896..92cb260 100644
--- a/meta/runtime.yml
+++ b/meta/runtime.yml
@@ -80,6 +80,10 @@ plugin_routing:
redirect: vyos.vyos.vyos
vyos_logging:
redirect: vyos.vyos.vyos
+ vyos_logging_global:
+ redirect: vyos.vyos.vyos
+ logging_global:
+ redirect: vyos.vyos.vyos
logging:
redirect: vyos.vyos.vyos
vyos_ospfv2:
@@ -198,6 +202,15 @@ plugin_routing:
redirect: vyos.vyos.vyos_lldp_interfaces
logging:
redirect: vyos.vyos.vyos_logging
+ deprecation:
+ removal_date: '2023-08-01'
+ warning_text: See the plugin documentation for more details
+ vyos_logging:
+ deprecation:
+ removal_date: '2023-08-01'
+ warning_text: See the plugin documentation for more details
+ logging_global:
+ redirect: vyos.vyos.vyos_logging_global
ospfv2:
redirect: vyos.vyos.vyos_ospfv2
ospfv3:
diff --git a/plugins/module_utils/network/vyos/argspec/logging_global/__init__.py b/plugins/module_utils/network/vyos/argspec/logging_global/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/plugins/module_utils/network/vyos/argspec/logging_global/__init__.py
diff --git a/plugins/module_utils/network/vyos/argspec/logging_global/logging_global.py b/plugins/module_utils/network/vyos/argspec/logging_global/logging_global.py
new file mode 100644
index 0000000..503f723
--- /dev/null
+++ b/plugins/module_utils/network/vyos/argspec/logging_global/logging_global.py
@@ -0,0 +1,370 @@
+# -*- coding: utf-8 -*-
+# Copyright 2021 Red Hat
+# GNU General Public License v3.0+
+# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
+
+from __future__ import absolute_import, division, print_function
+
+__metaclass__ = type
+
+#############################################
+# WARNING #
+#############################################
+#
+# This file is auto generated by the
+# cli_rm_builder.
+#
+# Manually editing this file is not advised.
+#
+# To update the argspec make the desired changes
+# in the module docstring and re-run
+# cli_rm_builder.
+#
+#############################################
+
+"""
+The arg spec for the vyos_logging_global module
+"""
+
+
+class Logging_globalArgs(object): # pylint: disable=R0903
+ """The arg spec for the vyos_logging_global module"""
+
+ argument_spec = {
+ "config": {
+ "type": "dict",
+ "options": {
+ "console": {
+ "type": "dict",
+ "options": {
+ "state": {
+ "type": "str",
+ "choices": ["enabled", "disabled"],
+ },
+ "facilities": {
+ "type": "list",
+ "elements": "dict",
+ "options": {
+ "facility": {
+ "type": "str",
+ "choices": [
+ "all",
+ "auth",
+ "authpriv",
+ "cron",
+ "daemon",
+ "kern",
+ "lpr",
+ "mail",
+ "mark",
+ "news",
+ "protocols",
+ "security",
+ "syslog",
+ "user",
+ "uucp",
+ "local0",
+ "local1",
+ "local2",
+ "local3",
+ "local4",
+ "local5",
+ "local6",
+ "local7",
+ ],
+ },
+ "severity": {
+ "type": "str",
+ "choices": [
+ "emerg",
+ "alert",
+ "crit",
+ "err",
+ "warning",
+ "notice",
+ "info",
+ "debug",
+ "all",
+ ],
+ },
+ },
+ },
+ },
+ },
+ "files": {
+ "type": "list",
+ "elements": "dict",
+ "options": {
+ "path": {"type": "str"},
+ "archive": {
+ "type": "dict",
+ "options": {
+ "state": {
+ "type": "str",
+ "choices": ["enabled", "disabled"],
+ },
+ "file_num": {"type": "int"},
+ "size": {"type": "int"},
+ },
+ },
+ "facilities": {
+ "type": "list",
+ "elements": "dict",
+ "options": {
+ "facility": {
+ "type": "str",
+ "choices": [
+ "all",
+ "auth",
+ "authpriv",
+ "cron",
+ "daemon",
+ "kern",
+ "lpr",
+ "mail",
+ "mark",
+ "news",
+ "protocols",
+ "security",
+ "syslog",
+ "user",
+ "uucp",
+ "local0",
+ "local1",
+ "local2",
+ "local3",
+ "local4",
+ "local5",
+ "local6",
+ "local7",
+ ],
+ },
+ "severity": {
+ "type": "str",
+ "choices": [
+ "emerg",
+ "alert",
+ "crit",
+ "err",
+ "warning",
+ "notice",
+ "info",
+ "debug",
+ "all",
+ ],
+ },
+ },
+ },
+ },
+ },
+ "global_params": {
+ "type": "dict",
+ "options": {
+ "state": {
+ "type": "str",
+ "choices": ["enabled", "disabled"],
+ },
+ "archive": {
+ "type": "dict",
+ "options": {
+ "state": {
+ "type": "str",
+ "choices": ["enabled", "disabled"],
+ },
+ "file_num": {"type": "int"},
+ "size": {"type": "int"},
+ },
+ },
+ "facilities": {
+ "type": "list",
+ "elements": "dict",
+ "options": {
+ "facility": {
+ "type": "str",
+ "choices": [
+ "all",
+ "auth",
+ "authpriv",
+ "cron",
+ "daemon",
+ "kern",
+ "lpr",
+ "mail",
+ "mark",
+ "news",
+ "protocols",
+ "security",
+ "syslog",
+ "user",
+ "uucp",
+ "local0",
+ "local1",
+ "local2",
+ "local3",
+ "local4",
+ "local5",
+ "local6",
+ "local7",
+ ],
+ },
+ "severity": {
+ "type": "str",
+ "choices": [
+ "emerg",
+ "alert",
+ "crit",
+ "err",
+ "warning",
+ "notice",
+ "info",
+ "debug",
+ "all",
+ ],
+ },
+ },
+ },
+ "marker_interval": {"type": "int"},
+ "preserve_fqdn": {"type": "bool"},
+ },
+ },
+ "hosts": {
+ "type": "list",
+ "elements": "dict",
+ "options": {
+ "port": {"type": "int"},
+ "facilities": {
+ "type": "list",
+ "elements": "dict",
+ "options": {
+ "facility": {
+ "type": "str",
+ "choices": [
+ "all",
+ "auth",
+ "authpriv",
+ "cron",
+ "daemon",
+ "kern",
+ "lpr",
+ "mail",
+ "mark",
+ "news",
+ "protocols",
+ "security",
+ "syslog",
+ "user",
+ "uucp",
+ "local0",
+ "local1",
+ "local2",
+ "local3",
+ "local4",
+ "local5",
+ "local6",
+ "local7",
+ ],
+ },
+ "severity": {
+ "type": "str",
+ "choices": [
+ "emerg",
+ "alert",
+ "crit",
+ "err",
+ "warning",
+ "notice",
+ "info",
+ "debug",
+ "all",
+ ],
+ },
+ "protocol": {
+ "type": "str",
+ "choices": ["udp", "tcp"],
+ },
+ },
+ },
+ "hostname": {"type": "str"},
+ },
+ },
+ "syslog": {
+ "type": "dict",
+ "options": {
+ "state": {
+ "type": "str",
+ "choices": ["enabled", "disabled"],
+ }
+ },
+ },
+ "users": {
+ "type": "list",
+ "elements": "dict",
+ "options": {
+ "username": {"type": "str"},
+ "facilities": {
+ "type": "list",
+ "elements": "dict",
+ "options": {
+ "facility": {
+ "type": "str",
+ "choices": [
+ "all",
+ "auth",
+ "authpriv",
+ "cron",
+ "daemon",
+ "kern",
+ "lpr",
+ "mail",
+ "mark",
+ "news",
+ "protocols",
+ "security",
+ "syslog",
+ "user",
+ "uucp",
+ "local0",
+ "local1",
+ "local2",
+ "local3",
+ "local4",
+ "local5",
+ "local6",
+ "local7",
+ ],
+ },
+ "severity": {
+ "type": "str",
+ "choices": [
+ "emerg",
+ "alert",
+ "crit",
+ "err",
+ "warning",
+ "notice",
+ "info",
+ "debug",
+ "all",
+ ],
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ "running_config": {"type": "str"},
+ "state": {
+ "choices": [
+ "merged",
+ "replaced",
+ "overridden",
+ "deleted",
+ "gathered",
+ "parsed",
+ "rendered",
+ ],
+ "default": "merged",
+ "type": "str",
+ },
+ } # pylint: disable=C0301
diff --git a/plugins/module_utils/network/vyos/config/logging_global/__init__.py b/plugins/module_utils/network/vyos/config/logging_global/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/plugins/module_utils/network/vyos/config/logging_global/__init__.py
diff --git a/plugins/module_utils/network/vyos/config/logging_global/logging_global.py b/plugins/module_utils/network/vyos/config/logging_global/logging_global.py
new file mode 100644
index 0000000..696090d
--- /dev/null
+++ b/plugins/module_utils/network/vyos/config/logging_global/logging_global.py
@@ -0,0 +1,237 @@
+#
+# -*- coding: utf-8 -*-
+# Copyright 2021 Red Hat
+# GNU General Public License v3.0+
+# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
+#
+
+from __future__ import absolute_import, division, print_function
+
+__metaclass__ = type
+
+"""
+The vyos_logging_global config file.
+It is in this file where the current configuration (as dict)
+is compared to the provided configuration (as dict) and the command set
+necessary to bring the current configuration to its desired end-state is
+created.
+"""
+
+from copy import deepcopy
+
+from ansible.module_utils.six import iteritems
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import (
+ dict_merge,
+ get_from_dict,
+)
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.rm_base.resource_module import (
+ ResourceModule,
+)
+from ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.facts.facts import (
+ Facts,
+)
+from ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.rm_templates.logging_global import (
+ Logging_globalTemplate,
+)
+
+
+class Logging_global(ResourceModule):
+ """
+ The vyos_logging_global config class
+ """
+
+ def __init__(self, module):
+ super(Logging_global, self).__init__(
+ empty_fact_val={},
+ facts_module=Facts(module),
+ module=module,
+ resource="logging_global",
+ tmplt=Logging_globalTemplate(),
+ )
+ self.parsers = [
+ "console.facilities",
+ "global_params.archive.file_num",
+ "global_params.archive.size",
+ "global_params.marker_interval",
+ "global_params.preserve_fqdn",
+ "global_params.facilities",
+ "files.archive.size",
+ "files.archive.file_num",
+ "files",
+ "hosts.port",
+ "hosts",
+ "users",
+ ]
+
+ def execute_module(self):
+ """Execute the module
+
+ :rtype: A dictionary
+ :returns: The result from module execution
+ """
+ if self.state not in ["parsed", "gathered"]:
+ self.generate_commands()
+ self.run_commands()
+ return self.result
+
+ def generate_commands(self):
+ """Generate configuration commands to send based on
+ want, have and desired state.
+ """
+ if self.want:
+ wantd = self.list_to_dict(self.want, "want")
+ else:
+ wantd = dict()
+ if self.have:
+ haved = self.list_to_dict(self.have, "have")
+ else:
+ haved = dict()
+
+ if self.state in ["overridden", "replaced"]:
+ if wantd != haved:
+ wantx, havex = self.call_op(wantd, haved, "overridden")
+ for k, have in iteritems(havex):
+ if k not in wantx:
+ self._compare(want={}, have=have)
+
+ if not self.state == "deleted":
+ wantd, haved = self.call_op(wantd, haved)
+
+ if self.state == "merged":
+ wantd = dict_merge(haved, wantd)
+
+ for k, want in iteritems(wantd):
+ self._compare(want=want, have=haved.pop(k, {}))
+
+ def _compare(self, want, have):
+ """Leverages the base class `compare()` method and
+ populates the list of commands to be run by comparing
+ the `want` and `have` data with the `parsers` defined
+ for the Logging_global network resource.
+ """
+ self.compare(parsers=self.parsers, want=want, have=have)
+ self.handleStates(want=want, have=have)
+
+ def operation_rep(self, params):
+ op_val = dict()
+ for k, val in iteritems(params):
+ if k in ["console", "global_params"]:
+ mod_val = deepcopy(val)
+ op_val.update(self.flatten_facility({k: mod_val}))
+ elif k in ["files", "hosts", "users"]:
+ for m, n in iteritems(val):
+ mod_n = deepcopy(n)
+ if mod_n.get("archive"):
+ del mod_n["archive"]
+ if mod_n.get("facilities"):
+ del mod_n["facilities"]
+ if mod_n.get("port"):
+ del mod_n["port"]
+ tm = self.flatten_facility({k: {m: mod_n}})
+ op_val.update(tm)
+ return op_val
+
+ def call_op(self, _want, _have, mode=None):
+ if mode == "overridden":
+ w = self.operation_rep(_want)
+ h = self.operation_rep(_have)
+ else:
+ w = self.flatten_facility(_want)
+ h = self.flatten_facility(_have)
+ return w, h
+
+ def handleStates(self, want=None, have=None):
+ stateparsers = [
+ "syslog.state",
+ "console.state",
+ "global_params.state",
+ "global_params.archive.state",
+ "files.archive.state",
+ ]
+ for par in stateparsers:
+ op = get_from_dict(want, par)
+ if op == "enabled":
+ self.addcmd(want, par)
+ elif op == "disabled":
+ self.addcmd(want, par, True)
+ break
+
+ def flatten_facility(self, param):
+ temp_param = dict()
+ for element, val in iteritems(param):
+ if element in ["console", "global_params", "syslog"]:
+ if element != "syslog" and val.get("facilities"):
+ for k, v in iteritems(val.get("facilities")):
+ temp_param[k + element] = {element: {"facilities": v}}
+ del val["facilities"]
+ if val:
+ temp_param[element] = {element: val}
+ if element in ["files", "hosts", "users"]:
+ for k, v in iteritems(val):
+ if v.get("facilities"):
+ for pk, dat in iteritems(v.get("facilities")):
+ temp_param[pk + k] = {
+ element: {
+ "facilities": dat,
+ self.pkey.get(element): v.get(
+ self.pkey.get(element)
+ ),
+ }
+ }
+ del v["facilities"]
+ if len(list(v.keys())) > 1:
+ temp_param[k] = {element: v}
+ else:
+ temp_param[k] = {element: v}
+ return temp_param
+
+ def list_to_dict(self, param, op=None):
+ updated_param = dict()
+ if self.state == "deleted":
+ if op == "have" and param:
+ self.handleStates({"syslog": {"state": "disabled"}})
+ updated_param == {}
+ else:
+ self.pkey = {
+ "files": "path",
+ "hosts": "hostname",
+ "users": "username",
+ }
+ for element, val in iteritems(param):
+ if element == "facilities": # only with recursion call
+ _tem_par = {}
+ for par in val:
+ if par.get("facility") and par.get("severity"):
+ _tem_par.update(
+ {
+ par.get("facility")
+ + par.get("severity"): par
+ }
+ )
+ elif par.get("facility") and par.get("protocol"):
+ _tem_par.update(
+ {
+ par.get("facility")
+ + par.get("protocol"): par
+ }
+ )
+ else:
+ _tem_par.update({par.get("facility"): par})
+ return _tem_par
+ elif element in ["console", "global_params", "syslog"]:
+ if element != "syslog" and val.get("facilities"):
+ val["facilities"] = self.list_to_dict(val)
+ updated_param[element] = val
+ elif element in ["hosts", "users", "files"]:
+ for v in val:
+ if v.get("facilities"):
+ v["facilities"] = self.list_to_dict(v)
+ if updated_param.get(element):
+ updated_param[element].update(
+ {v.get(self.pkey.get(element)): v}
+ )
+ else:
+ updated_param[element] = {
+ v.get(self.pkey.get(element)): v
+ }
+ return updated_param
diff --git a/plugins/module_utils/network/vyos/facts/facts.py b/plugins/module_utils/network/vyos/facts/facts.py
index 90ee03c..ab074b0 100644
--- a/plugins/module_utils/network/vyos/facts/facts.py
+++ b/plugins/module_utils/network/vyos/facts/facts.py
@@ -61,6 +61,9 @@ from ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.facts.route
from ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.facts.prefix_lists.prefix_lists import (
Prefix_listsFacts,
)
+from ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.facts.logging_global.logging_global import (
+ Logging_globalFacts,
+)
from ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.facts.legacy.base import (
Default,
Neighbors,
@@ -86,6 +89,7 @@ FACT_RESOURCE_SUBSETS = dict(
bgp_address_family=Bgp_address_familyFacts,
route_maps=Route_mapsFacts,
prefix_lists=Prefix_listsFacts,
+ logging_global=Logging_globalFacts,
)
diff --git a/plugins/module_utils/network/vyos/facts/logging_global/__init__.py b/plugins/module_utils/network/vyos/facts/logging_global/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/plugins/module_utils/network/vyos/facts/logging_global/__init__.py
diff --git a/plugins/module_utils/network/vyos/facts/logging_global/logging_global.py b/plugins/module_utils/network/vyos/facts/logging_global/logging_global.py
new file mode 100644
index 0000000..5f9d65d
--- /dev/null
+++ b/plugins/module_utils/network/vyos/facts/logging_global/logging_global.py
@@ -0,0 +1,107 @@
+# -*- coding: utf-8 -*-
+# Copyright 2021 Red Hat
+# GNU General Public License v3.0+
+# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
+
+from __future__ import absolute_import, division, print_function
+
+__metaclass__ = type
+
+"""
+The vyos logging_global fact class
+It is in this file the configuration is collected from the device
+for a given resource, parsed, and the facts tree is populated
+based on the configuration.
+"""
+
+from ansible.module_utils.six import iteritems
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common import (
+ utils,
+)
+from ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.rm_templates.logging_global import (
+ Logging_globalTemplate,
+)
+from ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.argspec.logging_global.logging_global import (
+ Logging_globalArgs,
+)
+
+
+class Logging_globalFacts(object):
+ """The vyos logging_global facts class"""
+
+ def __init__(self, module, subspec="config", options="options"):
+ self._module = module
+ self.argument_spec = Logging_globalArgs.argument_spec
+
+ def get_logging_data(self, connection):
+ return connection.get("show configuration commands | grep syslog")
+
+ def process_facts(self, objFinal):
+ if objFinal:
+ for ke, vl in iteritems(objFinal):
+ if ke == "files":
+ _files = []
+ for k, v in vl.items():
+ _files.append(v)
+ objFinal[ke] = _files
+ objFinal[ke] = sorted(
+ objFinal[ke], key=lambda item: item["path"]
+ )
+ elif ke == "hosts":
+ _hosts = []
+ for k, v in vl.items():
+ _hosts.append(v)
+ objFinal[ke] = _hosts
+ objFinal[ke] = sorted(
+ objFinal[ke], key=lambda item: item["hostname"]
+ )
+ elif ke == "users":
+ _users = []
+ for k, v in vl.items():
+ _users.append(v)
+ objFinal[ke] = _users
+ objFinal[ke] = sorted(
+ objFinal[ke], key=lambda item: item["username"]
+ )
+ elif ke == "console" or ke == "global_params":
+ if objFinal[ke].get("facilities"):
+ objFinal[ke]["facilities"] = sorted(
+ objFinal[ke]["facilities"],
+ key=lambda item: item["facility"],
+ )
+ return objFinal
+
+ def populate_facts(self, connection, ansible_facts, data=None):
+ """Populate the facts for Logging_global network resource
+
+ :param connection: the device connection
+ :param ansible_facts: Facts dictionary
+ :param data: previously collected conf
+
+ :rtype: dictionary
+ :returns: facts
+ """
+ facts = {}
+ objs = []
+
+ if not data:
+ data = self.get_logging_data(connection)
+
+ # parse native config using the Logging_global template
+ logging_global_parser = Logging_globalTemplate(
+ lines=data.splitlines(), module=self._module
+ )
+ objs = logging_global_parser.parse()
+ ansible_facts["ansible_network_resources"].pop("logging_global", None)
+ objs = self.process_facts(objs)
+
+ params = utils.remove_empties(
+ logging_global_parser.validate_config(
+ self.argument_spec, {"config": objs}, redact=True
+ )
+ )
+
+ facts["logging_global"] = params.get("config", {})
+ ansible_facts["ansible_network_resources"].update(facts)
+
+ return ansible_facts
diff --git a/plugins/module_utils/network/vyos/rm_templates/logging_global.py b/plugins/module_utils/network/vyos/rm_templates/logging_global.py
new file mode 100644
index 0000000..8cfe7a6
--- /dev/null
+++ b/plugins/module_utils/network/vyos/rm_templates/logging_global.py
@@ -0,0 +1,388 @@
+# -*- coding: utf-8 -*-
+# Copyright 2021 Red Hat
+# GNU General Public License v3.0+
+# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
+
+from __future__ import absolute_import, division, print_function
+
+__metaclass__ = type
+
+"""
+The Logging_global parser templates file. This contains
+a list of parser definitions and associated functions that
+facilitates both facts gathering and native command generation for
+the given network resource.
+"""
+
+import re
+from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.rm_base.network_template import (
+ NetworkTemplate,
+)
+
+
+def tmplt_params(config_data):
+ def templt_common(val, tmplt):
+ if val.get("facility"):
+ tmplt += " facility {facility}".format(facility=val["facility"])
+ if val.get("severity"):
+ tmplt += " level {level}".format(level=val["severity"])
+ if val.get("protocol"):
+ tmplt += " protocol {protocol}".format(protocol=val["protocol"])
+ return tmplt
+
+ tmplt = ""
+ if config_data.get("global_params"):
+ val = config_data.get("global_params")
+ if not val.get("archive"):
+ tmplt += "system syslog global"
+ tmplt = templt_common(val.get("facilities"), tmplt)
+ elif config_data.get("console"):
+ val = config_data.get("console")
+ tmplt += "system syslog console"
+ tmplt = templt_common(val.get("facilities"), tmplt)
+ elif config_data.get("users"):
+ val = config_data.get("users")
+ if val.get("username") and not val.get("archive"):
+ tmplt += "system syslog user {username}".format(
+ username=val["username"]
+ )
+ if val.get("facilities"):
+ tmplt = templt_common(val.get("facilities"), tmplt)
+ elif config_data.get("hosts"):
+ val = config_data.get("hosts")
+ if (
+ val.get("hostname")
+ and not val.get("archive")
+ and not val.get("port")
+ ):
+ tmplt += "system syslog host {hostname}".format(
+ hostname=val["hostname"]
+ )
+ if val.get("facilities"):
+ tmplt = templt_common(val.get("facilities"), tmplt)
+ elif config_data.get("files"):
+ val = config_data.get("files")
+ if val.get("path") and not val.get("archive"):
+ tmplt += "system syslog file {path}".format(path=val["path"])
+ if val.get("facilities"):
+ tmplt = templt_common(val.get("facilities"), tmplt)
+ return tmplt
+
+
+class Logging_globalTemplate(NetworkTemplate):
+ def __init__(self, lines=None, module=None):
+ prefix = {"set": "set", "remove": "delete"}
+ super(Logging_globalTemplate, self).__init__(
+ lines=lines, tmplt=self, prefix=prefix, module=module
+ )
+
+ # fmt: off
+ PARSERS = [
+ {
+ "name": "syslog.state",
+ "getval": re.compile(
+ r"""
+ ^set\ssystem
+ (\s(?P<syslog>syslog))
+ $""", re.VERBOSE),
+ "setval": "system syslog",
+ "result": {
+ "syslog": {
+ "state": "{{ 'enabled' if syslog is defined else 'disabled' }}",
+ }
+ }
+ },
+ {
+ "name": "console.facilities",
+ "getval": re.compile(
+ r"""
+ ^set\ssystem\ssyslog\sconsole\sfacility
+ (\s(?P<facility>all|auth|authpriv|cron|daemon|kern|lpr|mail|mark|news|protocols|security|syslog|user|uucp|local[0-7]))?
+ (\slevel\s(?P<level>'(emerg|alert|crit|err|warning|notice|info|debug|all)'))?
+ $""", re.VERBOSE),
+ "setval": tmplt_params,
+ "remval": "system syslog console facility {{ console.facilities.facility }}",
+ "result": {
+ "console": {
+ "facilities": [{
+ "facility": "{{ facility }}",
+ "severity": "{{ level }}",
+ }, ]
+ }
+ }
+ },
+ {
+ "name": "console.state",
+ "getval": re.compile(
+ r"""
+ ^set\ssystem\ssyslog
+ (\s(?P<console>console))
+ $""", re.VERBOSE),
+ "setval": "system syslog console",
+ "result": {
+ "console": {
+ "state": "{{ 'enabled' if console is defined else 'disabled' }}",
+ }
+ }
+ },
+ {
+ "name": "files.archive.state",
+ "getval": re.compile(
+ r"""
+ ^set\ssystem\ssyslog\sfile
+ (\s(?P<path>\S+))?
+ (\s(?P<archive>archive))
+ $""", re.VERBOSE),
+ "setval": "system syslog file {{ files.path }} archive",
+ "result": {
+ "files": {
+ "{{ path }}": {
+ "path": "{{ path }}",
+ "archive": {
+ "state": "{{ 'enabled' if archive is defined else 'disabled' }}",
+ },
+ },
+ }
+ }
+ },
+ {
+ "name": "files.archive.size",
+ "getval": re.compile(
+ r"""
+ ^set\ssystem\ssyslog\sfile
+ (\s(?P<path>\S+))?
+ (\sarchive\ssize\s(?P<size>'(\d+)'))?
+ $""", re.VERBOSE),
+ "setval": "system syslog file {{ files.path }} archive size {{ files.archive.size }}",
+ "result": {
+ "files": {
+ "{{ path }}": {
+ "path": "{{ path }}",
+ "archive": {
+ "size": "{{ size }}",
+ },
+ },
+ }
+ }
+ },
+ {
+ "name": "files.archive.file_num",
+ "getval": re.compile(
+ r"""
+ ^set\ssystem\ssyslog\sfile
+ (\s(?P<path>\S+))?
+ (\sarchive\sfile\s(?P<file_num>'(\d+)'))?
+ $""", re.VERBOSE),
+ "setval": "system syslog file {{ files.path }} archive file {{ files.archive.file_num }}",
+ "result": {
+ "files": {
+ "{{ path }}": {
+ "path": "{{ path }}",
+ "archive": {
+ "file_num": "{{ file_num }}",
+ },
+ },
+ }
+ }
+ },
+ {
+ "name": "files",
+ "getval": re.compile(
+ r"""
+ ^set\ssystem\ssyslog\sfile
+ (\s(?P<path>\S+))?
+ (\sfacility\s(?P<facility>all|auth|authpriv|cron|daemon|kern|lpr|mail|mark|news|protocols|security|syslog|user|uucp|local[0-7]))?
+ (\slevel\s(?P<level>'(emerg|alert|crit|err|warning|notice|info|debug|all)'))?
+ $""", re.VERBOSE),
+ "setval": tmplt_params,
+ "remval": "system syslog file{{ (' ' + files.path) if files.path|d('') is defined else '' }}",
+ "result": {
+ "files": {
+ "{{ path }}": {
+ "path": "{{ path }}",
+ "facilities": [{
+ "facility": "{{ facility }}",
+ "severity": "{{ level }}",
+ }, ]
+ },
+ }
+ }
+ },
+ {
+ "name": "global_params.state",
+ "getval": re.compile(
+ r"""
+ ^set\ssystem\ssyslog
+ (\s(?P<global>global))
+ $""", re.VERBOSE),
+ "setval": "system syslog global",
+ "result": {
+ "global_params": {
+ "state": "{{ 'enabled' if global is defined else 'disabled' }}",
+ }
+ }
+ },
+ {
+ "name": "global_params.archive.state",
+ "getval": re.compile(
+ r"""
+ ^set\ssystem\ssyslog\sglobal
+ (\s(?P<archive>archive))
+ $""", re.VERBOSE),
+ "setval": "system syslog global archive",
+ "result": {
+ "global_params": {
+ "archive": {
+ "state": "{{ 'enabled' if archive is defined else 'disabled' }}",
+ },
+ }
+ }
+ },
+ {
+ "name": "global_params.archive.file_num",
+ "getval": re.compile(
+ r"""
+ ^set\ssystem\ssyslog\sglobal\sarchive\sfile
+ (\s(?P<file_num>'(\d+)'))?
+ $""", re.VERBOSE),
+ "setval": "system syslog global archive file {{ global_params.archive.file_num }}",
+ "result": {
+ "global_params": {
+ "archive": {
+ "file_num": "{{ file_num }}",
+ },
+ }
+ }
+ },
+ {
+ "name": "global_params.archive.size",
+ "getval": re.compile(
+ r"""
+ ^set\ssystem\ssyslog\sglobal\sarchive\ssize
+ (\s(?P<size>'(\d+)'))?
+ $""", re.VERBOSE),
+ "setval": "system syslog global archive size {{ global_params.archive.size }}",
+ "result": {
+ "global_params": {
+ "archive": {
+ "size": "{{ size }}",
+ },
+ }
+ }
+ },
+ {
+ "name": "global_params.marker_interval",
+ "getval": re.compile(
+ r"""
+ ^set\ssystem\ssyslog\sglobal\smarker\sinterval
+ (\s(?P<marker_interval>'(\d+)'))?
+ $""", re.VERBOSE),
+ "setval": "system syslog global marker interval {{ global_params.marker_interval }}",
+ "remval": "system syslog global marker",
+ "result": {
+ "global_params": {
+ "marker_interval": "{{ marker_interval }}",
+ }
+ }
+ },
+ {
+ "name": "global_params.preserve_fqdn",
+ "getval": re.compile(
+ r"""
+ ^set\ssystem\ssyslog\sglobal
+ (\s(?P<preserve_fqdn>preserve-fqdn))
+ $""", re.VERBOSE),
+ "setval": "system syslog global preserve-fqdn",
+ "result": {
+ "global_params": {
+ "preserve_fqdn": "{{ True if preserve_fqdn is defined }}",
+ }
+ }
+ },
+ {
+ "name": "global_params.facilities",
+ "getval": re.compile(
+ r"""
+ ^set\ssystem\ssyslog\sglobal\sfacility
+ (\s(?P<facility>all|auth|authpriv|cron|daemon|kern|lpr|mail|mark|news|protocols|security|syslog|user|uucp|local[0-7]))?
+ (\slevel\s(?P<level>'(emerg|alert|crit|err|warning|notice|info|debug|all)'))?
+ $""", re.VERBOSE),
+ "setval": tmplt_params,
+ "remval": "system syslog global facility {{ global_params.facilities.facility }}",
+ "result": {
+ "global_params": {
+ "facilities": [{
+ "facility": "{{ facility }}",
+ "severity": "{{ level }}",
+ }, ],
+ }
+ }
+ },
+ {
+ "name": "hosts.port",
+ "getval": re.compile(
+ r"""
+ ^set\ssystem\ssyslog\shost
+ (\s(?P<hostname>\S+))
+ (\sport\s(?P<port>'(\d+)'))
+ $""", re.VERBOSE),
+ "setval": "system syslog host {{ hosts.hostname }} port {{ hosts.port }}",
+ "result": {
+ "hosts": {
+ "{{ hostname }}": {
+ "hostname": "{{ hostname }}",
+ "port": "{{ port }}",
+ },
+ }
+ }
+ },
+ {
+ "name": "hosts",
+ "getval": re.compile(
+ r"""
+ ^set\ssystem\ssyslog\shost
+ (\s(?P<hostname>\S+))
+ (\sfacility\s(?P<facility>all|auth|authpriv|cron|daemon|kern|lpr|mail|mark|news|protocols|security|syslog|user|uucp|local[0-7]))
+ (\slevel\s(?P<level>'(emerg|alert|crit|err|warning|notice|info|debug|all)'))?
+ (\sprotocol\s(?P<protocol>'(udp|tcp)'))?
+ $""", re.VERBOSE),
+ "setval": tmplt_params,
+ "remval": "system syslog host {{ hosts.hostname }}",
+ "result": {
+ "hosts": {
+ "{{ hostname }}": {
+ "hostname": "{{ hostname }}",
+ "facilities": [{
+ "facility": "{{ facility }}",
+ "severity": "{{ level }}",
+ "protocol": "{{ protocol }}",
+ }, ]
+ },
+ }
+ }
+ },
+ {
+ "name": "users",
+ "getval": re.compile(
+ r"""
+ ^set\ssystem\ssyslog\suser
+ (\s(?P<username>\S+))?
+ (\sfacility\s(?P<facility>all|auth|authpriv|cron|daemon|kern|lpr|mail|mark|news|protocols|security|syslog|user|uucp|local[0-7]))?
+ (\slevel\s(?P<level>'(emerg|alert|crit|err|warning|notice|info|debug|all)'))?
+ $""", re.VERBOSE),
+ "setval": tmplt_params,
+ "remval": "system syslog user {{ users.username }}",
+ "result": {
+ "users": {
+ "{{ username }}": {
+ "username": "{{ username }}",
+ "facilities": [{
+ "facility": "{{ facility }}",
+ "severity": "{{ level }}",
+ }, ]
+ }
+ }
+ }
+ },
+ ]
+ # fmt: on
diff --git a/plugins/modules/vyos_logging.py b/plugins/modules/vyos_logging.py
index d4f0cfc..44238f4 100644
--- a/plugins/modules/vyos_logging.py
+++ b/plugins/modules/vyos_logging.py
@@ -30,6 +30,10 @@ short_description: Manage logging on network devices
description:
- This module provides declarative management of logging on Vyatta Vyos devices.
version_added: 1.0.0
+deprecated:
+ alternative: vyos_logging_global
+ why: Updated module released with more functionality.
+ removed_at_date: '2023-08-01'
notes:
- Tested against VyOS 1.1.8 (helium).
- This module works with connection C(network_cli). See L(the VyOS OS Platform Options,../network/user_guide/platform_vyos.html).
diff --git a/plugins/modules/vyos_logging_global.py b/plugins/modules/vyos_logging_global.py
new file mode 100644
index 0000000..6a4e2dd
--- /dev/null
+++ b/plugins/modules/vyos_logging_global.py
@@ -0,0 +1,776 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+# Copyright 2021 Red Hat
+# GNU General Public License v3.0+
+# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
+
+"""
+The module file for vyos_logging_global
+"""
+
+from __future__ import absolute_import, division, print_function
+
+__metaclass__ = type
+
+DOCUMENTATION = """
+module: vyos_logging_global
+version_added: 2.4.0
+short_description: Logging resource module
+description: This module manages the logging attributes of Vyos network devices
+author: Sagar Paul (@KB-perByte)
+notes:
+ - Tested against vyos 1.2
+ - This module works with connection C(network_cli).
+ - The Configuration defaults of the Vyos network devices
+ are supposed to hinder idempotent behavior of plays
+options:
+ config:
+ description: A list containing dictionary of logging options
+ type: dict
+ suboptions:
+ console:
+ description: logging to serial console
+ type: dict
+ suboptions:
+ state: &state_config
+ description: enable or disable the command
+ type: str
+ choices:
+ - enabled
+ - disabled
+ facilities:
+ description: facility configurations for console
+ type: list
+ elements: dict
+ suboptions:
+ facility: &facility
+ description: Facility for logging
+ type: str
+ choices:
+ - all
+ - auth
+ - authpriv
+ - cron
+ - daemon
+ - kern
+ - lpr
+ - mail
+ - mark
+ - news
+ - protocols
+ - security
+ - syslog
+ - user
+ - uucp
+ - local0
+ - local1
+ - local2
+ - local3
+ - local4
+ - local5
+ - local6
+ - local7
+ severity: &severity
+ description: logging level
+ type: str
+ choices:
+ - emerg
+ - alert
+ - crit
+ - err
+ - warning
+ - notice
+ - info
+ - debug
+ - all
+ files:
+ description: logging to file
+ type: list
+ elements: dict
+ suboptions:
+ path:
+ description: file name or path
+ type: str
+ archive: &archive
+ description: Log file size and rotation characteristics
+ type: dict
+ suboptions:
+ state: *state_config
+ file_num:
+ description: Number of saved files (default is 5)
+ type: int
+ size:
+ description: Size of log files (in kilobytes, default is 256)
+ type: int
+ facilities: &params
+ description: facility configurations
+ type: list
+ elements: dict
+ suboptions:
+ facility: *facility
+ severity: *severity
+ global_params:
+ description: logging to serial console
+ type: dict
+ suboptions:
+ state: *state_config
+ archive: *archive
+ facilities: *params
+ marker_interval:
+ description: time interval how often a mark message is being sent in seconds (default is 1200)
+ type: int
+ preserve_fqdn:
+ description: uses FQDN for logging
+ type: bool
+ hosts:
+ description: logging to serial console
+ type: list
+ elements: dict
+ suboptions:
+ port:
+ description: Destination port (1-65535)
+ type: int
+ facilities:
+ description: facility configurations for host
+ type: list
+ elements: dict
+ suboptions:
+ facility: *facility
+ severity: *severity
+ protocol:
+ description: syslog communication protocol
+ type: str
+ choices:
+ - udp
+ - tcp
+ hostname:
+ description: Remote host name or IP address
+ type: str
+ syslog:
+ description: logging syslog
+ type: dict
+ suboptions:
+ state: *state_config
+ users:
+ description: logging to file
+ type: list
+ elements: dict
+ suboptions:
+ username:
+ description: user login name
+ type: str
+ facilities: *params
+ running_config:
+ description:
+ - This option is used only with state I(parsed).
+ - The value of this option should be the output received from the VYOS device by
+ executing the command B(show configuration commands | grep syslog).
+ - The state I(parsed) reads the configuration from C(running_config) option and
+ transforms it into Ansible structured data as per the resource module's argspec
+ and the value is then returned in the I(parsed) key within the result.
+ type: str
+ state:
+ choices:
+ - merged
+ - replaced
+ - overridden
+ - deleted
+ - gathered
+ - parsed
+ - rendered
+ default: merged
+ description:
+ - The state the configuration should be left in
+ - The states I(replaced) and I(overridden) have identical
+ behaviour for this module.
+ - Refer to examples for more details.
+ type: str
+"""
+
+EXAMPLES = """
+# Using state: merged
+
+# Before state:
+# -------------
+
+# vyos:~$show configuration commands | grep syslog
+
+- name: Apply the provided configuration
+ vyos.vyos.vyos_logging_global:
+ config:
+ console:
+ facilities:
+ - facility: local7
+ severity: err
+ files:
+ - path: logFile
+ archive:
+ file_num: 2
+ facilities:
+ - facility: local6
+ severity: emerg
+ hosts:
+ - hostname: 172.16.0.1
+ facilities:
+ - facility: local7
+ severity: all
+ - facility: all
+ protocol: udp
+ port: 223
+ users:
+ - username: vyos
+ facilities:
+ - facility: local7
+ severity: debug
+ global_params:
+ archive:
+ file_num: 2
+ size: 111
+ facilities:
+ - facility: cron
+ severity: debug
+ marker_interval: 111
+ preserve_fqdn: true
+ state: merged
+
+# Commands Fired:
+# ---------------
+
+# "commands": [
+# "set system syslog console facility local7 level err",
+# "set system syslog file logFile archive file 2",
+# "set system syslog host 172.16.0.1 facility local7 level all",
+# "set system syslog file logFile facility local6 level emerg",
+# "set system syslog host 172.16.0.1 facility all protocol udp",
+# "set system syslog user vyos facility local7 level debug",
+# "set system syslog host 172.16.0.1 port 223",
+# "set system syslog global facility cron level debug",
+# "set system syslog global archive file 2",
+# "set system syslog global archive size 111",
+# "set system syslog global marker interval 111",
+# "set system syslog global preserve-fqdn"
+# ],
+
+# After state:
+# ------------
+
+# vyos:~$ show configuration commands | grep syslog
+# set system syslog console facility local7 level 'err'
+# set system syslog file logFile archive file '2'
+# set system syslog file logFile facility local6 level 'emerg'
+# set system syslog global archive file '2'
+# set system syslog global archive size '111'
+# set system syslog global facility cron level 'debug'
+# set system syslog global marker interval '111'
+# set system syslog global preserve-fqdn
+# set system syslog host 172.16.0.1 facility all protocol 'udp'
+# set system syslog host 172.16.0.1 facility local7 level 'all'
+# set system syslog host 172.16.0.1 port '223'
+# set system syslog user vyos facility local7 level 'debug'
+
+# Using state: deleted
+
+# Before state:
+# -------------
+
+# vyos:~$show configuration commands | grep syslog
+# set system syslog console facility local7 level 'err'
+# set system syslog file logFile archive file '2'
+# set system syslog file logFile facility local6 level 'emerg'
+# set system syslog global archive file '2'
+# set system syslog global archive size '111'
+# set system syslog global facility cron level 'debug'
+# set system syslog global marker interval '111'
+# set system syslog global preserve-fqdn
+# set system syslog host 172.16.0.1 facility all protocol 'udp'
+# set system syslog host 172.16.0.1 facility local7 level 'all'
+# set system syslog host 172.16.0.1 port '223'
+# set system syslog user vyos facility local7 level 'debug'
+
+- name: delete the existing configuration
+ vyos.vyos.vyos_logging_global:
+ state: deleted
+
+# Commands Fired:
+# ---------------
+
+# "commands": [
+# "delete system syslog"
+# ],
+
+# After state:
+# ------------
+
+# vyos:~$show configuration commands | grep syslog
+
+# Using state: overridden
+
+# Before state:
+# -------------
+
+# vyos:~$show configuration commands | grep syslog
+# set system syslog console facility local7 level 'err'
+# set system syslog file logFile archive file '2'
+# set system syslog file logFile facility local6 level 'emerg'
+# set system syslog global archive file '2'
+# set system syslog global archive size '111'
+# set system syslog global facility cron level 'debug'
+# set system syslog global marker interval '111'
+# set system syslog global preserve-fqdn
+# set system syslog host 172.16.0.1 facility all protocol 'udp'
+# set system syslog host 172.16.0.1 facility local7 level 'all'
+# set system syslog host 172.16.0.1 port '223'
+# set system syslog user vyos facility local7 level 'debug'
+
+- name: Override the current configuration
+ vyos.vyos.vyos_logging_global:
+ config:
+ console:
+ facilities:
+ - facility: all
+ - facility: local7
+ severity: err
+ - facility: news
+ severity: debug
+ files:
+ - path: logFileNew
+ hosts:
+ - hostname: 172.16.0.2
+ facilities:
+ - facility: local5
+ severity: all
+ global_params:
+ archive:
+ file_num: 10
+ state: overridden
+
+# Commands Fired:
+# ---------------
+
+# "commands": [
+# "delete system syslog file logFile",
+# "delete system syslog global facility cron",
+# "delete system syslog host 172.16.0.1",
+# "delete system syslog user vyos",
+# "set system syslog console facility all",
+# "set system syslog console facility news level debug",
+# "set system syslog file logFileNew",
+# "set system syslog host 172.16.0.2 facility local5 level all",
+# "set system syslog global archive file 10",
+# "delete system syslog global archive size 111",
+# "delete system syslog global marker",
+# "delete system syslog global preserve-fqdn"
+# ],
+
+# After state:
+# ------------
+
+# vyos:~$show configuration commands | grep syslog
+# set system syslog console facility all
+# set system syslog console facility local7 level 'err'
+# set system syslog console facility news level 'debug'
+# set system syslog file logFileNew
+# set system syslog global archive file '10'
+# set system syslog host 172.16.0.2 facility local5 level 'all'
+
+# Using state: replaced
+
+# Before state:
+# -------------
+
+# vyos:~$show configuration commands | grep syslog
+# set system syslog console facility all
+# set system syslog console facility local7 level 'err'
+# set system syslog console facility news level 'debug'
+# set system syslog file logFileNew
+# set system syslog global archive file '10'
+# set system syslog host 172.16.0.2 facility local5 level 'all'
+
+- name: Replace with the provided configuration
+ register: result
+ vyos.vyos.vyos_logging_global:
+ config:
+ console:
+ facilities:
+ - facility: local6
+ users:
+ - username: paul
+ facilities:
+ - facility: local7
+ severity: err
+ state: replaced
+
+# Commands Fired:
+# ---------------
+
+# "commands": [
+# "delete system syslog console facility all",
+# "delete system syslog console facility local7",
+# "delete system syslog console facility news",
+# "delete system syslog file logFileNew",
+# "delete system syslog global archive file 10",
+# "delete system syslog host 172.16.0.2",
+# "set system syslog console facility local6",
+# "set system syslog user paul facility local7 level err"
+# ],
+
+# After state:
+# ------------
+
+# vyos:~$show configuration commands | grep syslog
+# set system syslog console facility local6
+# set system syslog user paul facility local7 level 'err'
+
+# Using state: gathered
+
+- name: Gather logging config
+ vyos.vyos.vyos_logging_global:
+ state: gathered
+
+# Module Execution Result:
+# ------------------------
+
+# "gathered": {
+# "console": {
+# "facilities": [
+# {
+# "facility": "local6"
+# },
+# {
+# "facility": "local7",
+# "severity": "err"
+# }
+# ]
+# },
+# "files": [
+# {
+# "archive": {
+# "file_num": 2
+# },
+# "facilities": [
+# {
+# "facility": "local6",
+# "severity": "emerg"
+# }
+# ],
+# "path": "logFile"
+# }
+# ],
+# "global_params": {
+# "archive": {
+# "file_num": 2,
+# "size": 111
+# },
+# "facilities": [
+# {
+# "facility": "cron",
+# "severity": "debug"
+# }
+# ],
+# "marker_interval": 111,
+# "preserve_fqdn": true
+# },
+# "hosts": [
+# {
+# "facilities": [
+# {
+# "facility": "all",
+# "protocol": "udp"
+# },
+# {
+# "facility": "local7",
+# "severity": "all"
+# }
+# ],
+# "hostname": "172.16.0.1",
+# "port": 223
+# }
+# ],
+# "users": [
+# {
+# "facilities": [
+# {
+# "facility": "local7",
+# "severity": "err"
+# }
+# ],
+# "username": "paul"
+# },
+# {
+# "facilities": [
+# {
+# "facility": "local7",
+# "severity": "debug"
+# }
+# ],
+# "username": "vyos"
+# }
+# ]
+# },
+
+# After state:
+# ------------
+
+# vyos:~$show configuration commands | grep syslog
+# set system syslog console facility local6
+# set system syslog console facility local7 level 'err'
+# set system syslog file logFile archive file '2'
+# set system syslog file logFile facility local6 level 'emerg'
+# set system syslog global archive file '2'
+# set system syslog global archive size '111'
+# set system syslog global facility cron level 'debug'
+# set system syslog global marker interval '111'
+# set system syslog global preserve-fqdn
+# set system syslog host 172.16.0.1 facility all protocol 'udp'
+# set system syslog host 172.16.0.1 facility local7 level 'all'
+# set system syslog host 172.16.0.1 port '223'
+# set system syslog user paul facility local7 level 'err'
+# set system syslog user vyos facility local7 level 'debug'
+
+# Using state: rendered
+
+- name: Render the provided configuration
+ vyos.vyos.vyos_logging_global:
+ config:
+ console:
+ facilities:
+ - facility: local7
+ severity: err
+ files:
+ - path: logFile
+ archive:
+ file_num: 2
+ facilities:
+ - facility: local6
+ severity: emerg
+ hosts:
+ - hostname: 172.16.0.1
+ facilities:
+ - facility: local7
+ severity: all
+ - facility: all
+ protocol: udp
+ port: 223
+ users:
+ - username: vyos
+ facilities:
+ - facility: local7
+ severity: debug
+ global_params:
+ archive:
+ file_num: 2
+ size: 111
+ facilities:
+ - facility: cron
+ severity: debug
+ marker_interval: 111
+ preserve_fqdn: true
+ state: rendered
+
+# Module Execution Result:
+# ------------------------
+
+# "rendered": [
+# "set system syslog console facility local7 level err",
+# "set system syslog file logFile facility local6 level emerg",
+# "set system syslog file logFile archive file 2",
+# "set system syslog host 172.16.0.1 facility local7 level all",
+# "set system syslog host 172.16.0.1 facility all protocol udp",
+# "set system syslog host 172.16.0.1 port 223",
+# "set system syslog user vyos facility local7 level debug",
+# "set system syslog global facility cron level debug",
+# "set system syslog global archive file 2",
+# "set system syslog global archive size 111",
+# "set system syslog global marker interval 111",
+# "set system syslog global preserve-fqdn"
+# ]
+
+# Using state: parsed
+
+# File: parsed.cfg
+# ----------------
+
+# set system syslog console facility local6
+# set system syslog console facility local7 level 'err'
+# set system syslog file logFile archive file '2'
+# set system syslog file logFile facility local6 level 'emerg'
+# set system syslog global archive file '2'
+# set system syslog global archive size '111'
+# set system syslog global facility cron level 'debug'
+# set system syslog global marker interval '111'
+# set system syslog global preserve-fqdn
+# set system syslog host 172.16.0.1 facility all protocol 'udp'
+# set system syslog host 172.16.0.1 facility local7 level 'all'
+# set system syslog host 172.16.0.1 port '223'
+# set system syslog user paul facility local7 level 'err'
+# set system syslog user vyos facility local7 level 'debug'
+
+- name: Parse the provided configuration
+ vyos.vyos.vyos_logging_global:
+ running_config: "{{ lookup('file', 'parsed_vyos.cfg') }}"
+ state: parsed
+
+# Module Execution Result:
+# ------------------------
+
+# "parsed": {
+# "console": {
+# "facilities": [
+# {
+# "facility": "local6"
+# },
+# {
+# "facility": "local7",
+# "severity": "err"
+# }
+# ]
+# },
+# "files": [
+# {
+# "archive": {
+# "file_num": 2
+# },
+# "facilities": [
+# {
+# "facility": "local6",
+# "severity": "emerg"
+# }
+# ],
+# "path": "logFile"
+# }
+# ],
+# "global_params": {
+# "archive": {
+# "file_num": 2,
+# "size": 111
+# },
+# "facilities": [
+# {
+# "facility": "cron",
+# "severity": "debug"
+# }
+# ],
+# "marker_interval": 111,
+# "preserve_fqdn": true
+# },
+# "hosts": [
+# {
+# "facilities": [
+# {
+# "facility": "all",
+# "protocol": "udp"
+# },
+# {
+# "facility": "local7",
+# "severity": "all"
+# }
+# ],
+# "hostname": "172.16.0.1",
+# "port": 223
+# }
+# ],
+# "users": [
+# {
+# "facilities": [
+# {
+# "facility": "local7",
+# "severity": "err"
+# }
+# ],
+# "username": "paul"
+# },
+# {
+# "facilities": [
+# {
+# "facility": "local7",
+# "severity": "debug"
+# }
+# ],
+# "username": "vyos"
+# }
+# ]
+# }
+# }
+"""
+
+RETURN = """
+before:
+ description: The configuration prior to the module execution.
+ returned: when state is I(merged), I(replaced), I(overridden), I(deleted) or I(purged)
+ type: dict
+ sample: >
+ This output will always be in the same format as the
+ module argspec.
+after:
+ description: The resulting configuration after module execution.
+ returned: when changed
+ type: dict
+ sample: >
+ This output will always be in the same format as the
+ module argspec.
+commands:
+ description: The set of commands pushed to the remote device.
+ returned: when state is I(merged), I(replaced), I(overridden), I(deleted) or I(purged)
+ type: list
+ sample:
+ - "set system syslog console facility local7 level err"
+ - "set system syslog host 172.16.0.1 port 223"
+ - "set system syslog global archive size 111"
+rendered:
+ description: The provided configuration in the task rendered in device-native format (offline).
+ returned: when state is I(rendered)
+ type: list
+ sample:
+ - "set system syslog host 172.16.0.1 port 223"
+ - "set system syslog user vyos facility local7 level debug"
+ - "set system syslog global facility cron level debug"
+gathered:
+ description: Facts about the network resource gathered from the remote device as structured data.
+ returned: when state is I(gathered)
+ type: list
+ sample: >
+ This output will always be in the same format as the
+ module argspec.
+parsed:
+ description: The device native config provided in I(running_config) option parsed into structured data as per module argspec.
+ returned: when state is I(parsed)
+ type: list
+ sample: >
+ This output will always be in the same format as the
+ module argspec.
+"""
+
+from ansible.module_utils.basic import AnsibleModule
+from ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.argspec.logging_global.logging_global import (
+ Logging_globalArgs,
+)
+from ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.config.logging_global.logging_global import (
+ Logging_global,
+)
+
+
+def main():
+ """
+ Main entry point for module execution
+
+ :returns: the result form module invocation
+ """
+ module = AnsibleModule(
+ argument_spec=Logging_globalArgs.argument_spec,
+ mutually_exclusive=[["config", "running_config"]],
+ required_if=[
+ ["state", "merged", ["config"]],
+ ["state", "replaced", ["config"]],
+ ["state", "overridden", ["config"]],
+ ["state", "rendered", ["config"]],
+ ["state", "parsed", ["running_config"]],
+ ],
+ supports_check_mode=True,
+ )
+
+ result = Logging_global(module).execute_module()
+ module.exit_json(**result)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/tests/integration/targets/vyos_logging_global/defaults/main.yaml b/tests/integration/targets/vyos_logging_global/defaults/main.yaml
new file mode 100644
index 0000000..852a6be
--- /dev/null
+++ b/tests/integration/targets/vyos_logging_global/defaults/main.yaml
@@ -0,0 +1,3 @@
+---
+testcase: '[^_].*'
+test_items: []
diff --git a/tests/integration/targets/vyos_logging_global/meta/main.yaml b/tests/integration/targets/vyos_logging_global/meta/main.yaml
new file mode 100644
index 0000000..91da2a7
--- /dev/null
+++ b/tests/integration/targets/vyos_logging_global/meta/main.yaml
@@ -0,0 +1,2 @@
+---
+...
diff --git a/tests/integration/targets/vyos_logging_global/tasks/cli.yaml b/tests/integration/targets/vyos_logging_global/tasks/cli.yaml
new file mode 100644
index 0000000..93eb2fe
--- /dev/null
+++ b/tests/integration/targets/vyos_logging_global/tasks/cli.yaml
@@ -0,0 +1,19 @@
+---
+- name: Collect all cli test cases
+ find:
+ paths: '{{ role_path }}/tests/cli'
+ patterns: '{{ testcase }}.yaml'
+ use_regex: true
+ register: test_cases
+ delegate_to: localhost
+
+- name: Set test_items
+ set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}"
+
+- name: Run test case (connection=ansible.netcommon.network_cli)
+ include: '{{ test_case_to_run }}'
+ vars:
+ ansible_connection: ansible.netcommon.network_cli
+ with_items: '{{ test_items }}'
+ loop_control:
+ loop_var: test_case_to_run
diff --git a/tests/integration/targets/vyos_logging_global/tasks/main.yaml b/tests/integration/targets/vyos_logging_global/tasks/main.yaml
new file mode 100644
index 0000000..b957d2f
--- /dev/null
+++ b/tests/integration/targets/vyos_logging_global/tasks/main.yaml
@@ -0,0 +1,4 @@
+---
+- include: cli.yaml
+ tags:
+ - network_cli
diff --git a/tests/integration/targets/vyos_logging_global/tests/cli/_parsed.cfg b/tests/integration/targets/vyos_logging_global/tests/cli/_parsed.cfg
new file mode 100644
index 0000000..fb2c3dc
--- /dev/null
+++ b/tests/integration/targets/vyos_logging_global/tests/cli/_parsed.cfg
@@ -0,0 +1,3 @@
+set system syslog console facility news level 'debug'
+set system syslog file def facility local7 level 'emerg'
+set system syslog global facility local7 level 'debug'
diff --git a/tests/integration/targets/vyos_logging_global/tests/cli/_populate.yaml b/tests/integration/targets/vyos_logging_global/tests/cli/_populate.yaml
new file mode 100644
index 0000000..2f3828f
--- /dev/null
+++ b/tests/integration/targets/vyos_logging_global/tests/cli/_populate.yaml
@@ -0,0 +1,53 @@
+---
+- name: POPULATE Apply the provided configuration
+ register: result
+ vyos.vyos.vyos_logging_global:
+ config:
+ console:
+ facilities:
+ - facility: all
+ - facility: local7
+ severity: err
+ - facility: news
+ severity: debug
+ files:
+ - path: def
+ archive:
+ file_num: 2
+ facilities:
+ - facility: local6
+ severity: emerg
+ - facility: local7
+ severity: emerg
+ hosts:
+ - hostname: 172.16.2.15
+ facilities:
+ - facility: all
+ severity: all
+ - facility: all
+ protocol: udp
+ - hostname: 172.16.2.12
+ facilities:
+ - facility: all
+ protocol: udp
+ users:
+ - username: vyos
+ facilities:
+ - facility: local7
+ severity: debug
+ - facility: local6
+ severity: alert
+ - username: paul
+ facilities:
+ - facility: local7
+ severity: err
+ global_params:
+ archive:
+ file_num: 2
+ size: 111
+ facilities:
+ - facility: cron
+ severity: debug
+ - facility: local7
+ severity: debug
+ state: merged
diff --git a/tests/integration/targets/vyos_logging_global/tests/cli/_remove_config.yaml b/tests/integration/targets/vyos_logging_global/tests/cli/_remove_config.yaml
new file mode 100644
index 0000000..1c2187b
--- /dev/null
+++ b/tests/integration/targets/vyos_logging_global/tests/cli/_remove_config.yaml
@@ -0,0 +1,4 @@
+---
+- name: delete the provided configuration
+ vyos.vyos.vyos_logging_global:
+ state: deleted
diff --git a/tests/integration/targets/vyos_logging_global/tests/cli/deleted.yaml b/tests/integration/targets/vyos_logging_global/tests/cli/deleted.yaml
new file mode 100644
index 0000000..2a0a355
--- /dev/null
+++ b/tests/integration/targets/vyos_logging_global/tests/cli/deleted.yaml
@@ -0,0 +1,22 @@
+---
+- debug:
+ msg: Start Deleted integration state for vyos_logging ansible_connection={{
+ ansible_connection }}
+
+- include_tasks: _remove_config.yaml
+- include_tasks: _populate.yaml
+
+- block:
+ - name: TEST - [deleted] Remove all configuration
+ vyos.vyos.vyos_logging_global:
+ state: deleted
+ register: result
+
+ - name: TEST - [deleted] Assert that correct set of commands were generated
+ assert:
+ that:
+ - "{{ deleted['commands'] | symmetric_difference(result['commands']) |\
+ \ length == 0 }}"
+
+ always:
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_logging_global/tests/cli/empty_config.yaml b/tests/integration/targets/vyos_logging_global/tests/cli/empty_config.yaml
new file mode 100644
index 0000000..f70fff1
--- /dev/null
+++ b/tests/integration/targets/vyos_logging_global/tests/cli/empty_config.yaml
@@ -0,0 +1,60 @@
+---
+- debug:
+ msg: START vyos_logging_global empty_config integration tests on connection={{
+ ansible_connection }}
+
+- name: Merged with empty config should give appropriate error message
+ register: result
+ ignore_errors: true
+ vyos.vyos.vyos_logging_global:
+ config:
+ state: merged
+
+- assert:
+ that:
+ - result.msg == 'value of config parameter must not be empty for state merged'
+
+- name: Replaced with empty config should give appropriate error message
+ register: result
+ ignore_errors: true
+ vyos.vyos.vyos_logging_global:
+ config:
+ state: replaced
+
+- assert:
+ that:
+ - result.msg == 'value of config parameter must not be empty for state replaced'
+
+- name: Overridden with empty config should give appropriate error message
+ register: result
+ ignore_errors: true
+ vyos.vyos.vyos_logging_global:
+ config:
+ state: overridden
+
+- assert:
+ that:
+ - result.msg == 'value of config parameter must not be empty for state overridden'
+
+- name: Parsed with empty running_config should give appropriate error message
+ register: result
+ ignore_errors: true
+ vyos.vyos.vyos_logging_global:
+ running_config:
+ state: parsed
+
+- assert:
+ that:
+ - result.msg == 'value of running_config parameter must not be empty for state
+ parsed'
+
+- name: Rendered with empty config should give appropriate error message
+ register: result
+ ignore_errors: true
+ vyos.vyos.vyos_logging_global:
+ config:
+ state: rendered
+
+- assert:
+ that:
+ - result.msg == 'value of config parameter must not be empty for state rendered'
diff --git a/tests/integration/targets/vyos_logging_global/tests/cli/gathered.yaml b/tests/integration/targets/vyos_logging_global/tests/cli/gathered.yaml
new file mode 100644
index 0000000..af1fa52
--- /dev/null
+++ b/tests/integration/targets/vyos_logging_global/tests/cli/gathered.yaml
@@ -0,0 +1,22 @@
+---
+- debug:
+ msg: START vyos_logging_global gathered integration tests on connection={{
+ ansible_connection }}
+
+- include_tasks: _remove_config.yaml
+
+- include_tasks: _populate.yaml
+
+- block:
+ - name: TEST - [gathered] Gather the provided configuration with the existing running configuration
+ register: result
+ vyos.vyos.vyos_logging_global:
+ config:
+ state: gathered
+
+ - name: TEST - [gathered] Assert
+ assert:
+ that:
+ - result.changed == false
+ always:
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_logging_global/tests/cli/merged.yaml b/tests/integration/targets/vyos_logging_global/tests/cli/merged.yaml
new file mode 100644
index 0000000..d47d309
--- /dev/null
+++ b/tests/integration/targets/vyos_logging_global/tests/cli/merged.yaml
@@ -0,0 +1,56 @@
+---
+- debug:
+ msg:
+ START vyos_logging_global merged integration tests on connection={{ ansible_connection
+ }}
+
+- include_tasks: _remove_config.yaml
+
+- block: # no after state match because 1.1.8 vyos does show all commands on show command
+ - name: Merge the provided configuration with the existing running configuration
+ register: result
+ vyos.vyos.vyos_logging_global: &id001
+ config:
+ console:
+ facilities:
+ - facility: all
+ files:
+ - path: def
+ archive:
+ file_num: 2
+ facilities:
+ - facility: local6
+ severity: emerg
+ hosts:
+ - hostname: 172.16.2.15
+ facilities:
+ - facility: all
+ severity: all
+ users:
+ - username: vyos
+ facilities:
+ - facility: local7
+ severity: debug
+ global_params:
+ archive:
+ file_num: 2
+ size: 111
+ facilities:
+ - facility: cron
+ severity: debug
+ state: merged
+
+ - name: Assert that correct set of commands were generated
+ assert:
+ that:
+ - "{{ merged['commands'] | symmetric_difference(result['commands']) |length\
+ \ == 0 }}"
+
+ - name:
+ Merge the provided configuration with the existing running configuration
+ (IDEMPOTENT)
+ register: result
+ vyos.vyos.vyos_logging_global: *id001
+
+ always:
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_logging_global/tests/cli/overridden.yaml b/tests/integration/targets/vyos_logging_global/tests/cli/overridden.yaml
new file mode 100644
index 0000000..1df1a8d
--- /dev/null
+++ b/tests/integration/targets/vyos_logging_global/tests/cli/overridden.yaml
@@ -0,0 +1,39 @@
+---
+- debug:
+ msg: START vyos_logging_global overridden integration tests on connection={{
+ ansible_connection }}
+
+- include_tasks: _remove_config.yaml
+
+- include_tasks: _populate.yaml
+
+- block: # no after state match because 1.1.8 vyos does show all commands on show command
+ - name: Overrides all device configuration with provided configuration
+ register: result
+ vyos.vyos.vyos_logging_global: &id001
+ config:
+ console:
+ facilities:
+ - facility: all
+ - facility: local7
+ severity: err
+ - facility: news
+ severity: debug
+ global_params:
+ archive:
+ file_num: 2
+ state: overridden
+
+ - name: Assert that correct commands were generated
+ assert:
+ that:
+ - "{{ overridden['commands'] | symmetric_difference(result['commands'])\
+ \ |length == 0 }}"
+
+ - name: Overrides all device configuration with provided configurations (IDEMPOTENT)
+ register: result
+ vyos.vyos.vyos_logging_global: *id001
+
+ always:
+
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_logging_global/tests/cli/parsed.yaml b/tests/integration/targets/vyos_logging_global/tests/cli/parsed.yaml
new file mode 100644
index 0000000..40a14f6
--- /dev/null
+++ b/tests/integration/targets/vyos_logging_global/tests/cli/parsed.yaml
@@ -0,0 +1,14 @@
+---
+- debug:
+ msg: START vyos_logging_global parsed integration tests on connection={{ ansible_connection }}
+
+- name: TEST - [parsed] Parse the commands for provided configuration
+ register: result
+ vyos.vyos.vyos_logging_global:
+ running_config: "{{ lookup('file', '_parsed.cfg') }}"
+ state: parsed
+
+- assert:
+ that:
+ - result.changed == false
+ - parsed['after'] == result.parsed
diff --git a/tests/integration/targets/vyos_logging_global/tests/cli/rendered.yaml b/tests/integration/targets/vyos_logging_global/tests/cli/rendered.yaml
new file mode 100644
index 0000000..366f889
--- /dev/null
+++ b/tests/integration/targets/vyos_logging_global/tests/cli/rendered.yaml
@@ -0,0 +1,50 @@
+---
+- debug:
+ msg: START vyos_logging_global rendered integration tests on connection={{ ansible_connection
+ }}
+
+- include_tasks: _remove_config.yaml
+
+- include_tasks: _populate.yaml
+
+- block:
+
+ - name: Structure provided configuration into device specific commands
+ register: result
+ vyos.vyos.vyos_logging_global: &id001
+ config:
+ console:
+ facilities:
+ - facility: all
+ files:
+ - path: abc
+ archive:
+ size: 125
+ hosts:
+ - hostname: 172.16.2.15
+ facilities:
+ - facility: all
+ severity: all
+ users:
+ - username: vyos
+ facilities:
+ - facility: local7
+ severity: debug
+ global_params:
+ archive:
+ file_num: 2
+ size: 111
+ facilities:
+ - facility: cron
+ severity: debug
+ state: rendered
+
+ - name: Assert that correct set of commands were generated
+ assert:
+ that:
+ - "{{ rendered['commands'] | symmetric_difference(result['rendered'])\
+ \ |length == 0 }}"
+
+ always:
+
+ - include_tasks: _remove_config.yaml
diff --git a/tests/integration/targets/vyos_logging_global/vars/main.yaml b/tests/integration/targets/vyos_logging_global/vars/main.yaml
new file mode 100644
index 0000000..ae8b853
--- /dev/null
+++ b/tests/integration/targets/vyos_logging_global/vars/main.yaml
@@ -0,0 +1,95 @@
+---
+merged:
+ before: {}
+ commands:
+ - set system syslog host 172.16.2.15 facility all level all
+ - set system syslog console facility all
+ - set system syslog user vyos facility local7 level debug
+ - set system syslog global facility cron level debug
+ - set system syslog global archive file 2
+ - set system syslog global archive size 111
+ - set system syslog file def archive file 2
+ - set system syslog file def facility local6 level emerg
+ after:
+ console:
+ facilities:
+ - facility: all
+ files:
+ - path: def
+ facilities:
+ - facility: local6
+ severity: emerg
+ hosts:
+ - hostname: 172.16.2.15
+ facilities:
+ - facility: all
+ severity: all
+ users:
+ - username: vyos
+ facilities:
+ - facility: local7
+ severity: debug
+ global_params:
+ archive:
+ size: 111
+ facilities:
+ - facility: cron
+ severity: debug
+
+overridden:
+ commands:
+ - delete system syslog file def
+ - delete system syslog global facility cron
+ - delete system syslog global facility local7
+ - delete system syslog host 172.16.2.12
+ - delete system syslog host 172.16.2.15
+ - delete system syslog user paul
+ - delete system syslog user vyos
+ - set system syslog console facility all
+ - set system syslog global archive file 2
+ - delete system syslog global archive size 111
+
+ after:
+ console:
+ facilities:
+ - facility: all
+ - facility: local7
+ severity: err
+ - facility: news
+ severity: debug
+ files:
+ - path: Myfile
+ global_params:
+ archive:
+ file_num: 2
+
+rendered:
+ commands:
+ - set system syslog console facility all
+ - set system syslog file abc archive size 125
+ - set system syslog host 172.16.2.15 facility all level all
+ - set system syslog user vyos facility local7 level debug
+ - set system syslog global facility cron level debug
+ - set system syslog global archive file 2
+ - set system syslog global archive size 111
+
+deleted:
+ commands:
+ - delete system syslog
+ after: {}
+
+parsed:
+ after:
+ console:
+ facilities:
+ - facility: news
+ severity: debug
+ files:
+ - path: def
+ facilities:
+ - facility: local7
+ severity: emerg
+ global_params:
+ facilities:
+ - facility: local7
+ severity: debug
diff --git a/tests/sanity/ignore-2.10.txt b/tests/sanity/ignore-2.10.txt
index 967e336..d753480 100644
--- a/tests/sanity/ignore-2.10.txt
+++ b/tests/sanity/ignore-2.10.txt
@@ -7,3 +7,6 @@ plugins/modules/vyos_route_maps.py import-2.6!skip
plugins/modules/vyos_prefix_lists.py import-2.6!skip
plugins/module_utils/network/vyos/config/prefix_lists/prefix_lists.py import-2.6!skip
plugins/module_utils/network/vyos/config/prefix_lists/prefix_lists.py compile-2.6!skip
+plugins/modules/vyos_logging_global.py import-2.6!skip
+plugins/module_utils/network/vyos/config/logging_global/logging_global.py import-2.6!skip
+plugins/module_utils/network/vyos/config/logging_global/logging_global.py compile-2.6!skip \ No newline at end of file
diff --git a/tests/sanity/ignore-2.11.txt b/tests/sanity/ignore-2.11.txt
index 967e336..d753480 100644
--- a/tests/sanity/ignore-2.11.txt
+++ b/tests/sanity/ignore-2.11.txt
@@ -7,3 +7,6 @@ plugins/modules/vyos_route_maps.py import-2.6!skip
plugins/modules/vyos_prefix_lists.py import-2.6!skip
plugins/module_utils/network/vyos/config/prefix_lists/prefix_lists.py import-2.6!skip
plugins/module_utils/network/vyos/config/prefix_lists/prefix_lists.py compile-2.6!skip
+plugins/modules/vyos_logging_global.py import-2.6!skip
+plugins/module_utils/network/vyos/config/logging_global/logging_global.py import-2.6!skip
+plugins/module_utils/network/vyos/config/logging_global/logging_global.py compile-2.6!skip \ No newline at end of file
diff --git a/tests/sanity/ignore-2.12.txt b/tests/sanity/ignore-2.12.txt
index 967e336..d753480 100644
--- a/tests/sanity/ignore-2.12.txt
+++ b/tests/sanity/ignore-2.12.txt
@@ -7,3 +7,6 @@ plugins/modules/vyos_route_maps.py import-2.6!skip
plugins/modules/vyos_prefix_lists.py import-2.6!skip
plugins/module_utils/network/vyos/config/prefix_lists/prefix_lists.py import-2.6!skip
plugins/module_utils/network/vyos/config/prefix_lists/prefix_lists.py compile-2.6!skip
+plugins/modules/vyos_logging_global.py import-2.6!skip
+plugins/module_utils/network/vyos/config/logging_global/logging_global.py import-2.6!skip
+plugins/module_utils/network/vyos/config/logging_global/logging_global.py compile-2.6!skip \ No newline at end of file
diff --git a/tests/sanity/ignore-2.9.txt b/tests/sanity/ignore-2.9.txt
index aa3ef3f..83e9150 100644
--- a/tests/sanity/ignore-2.9.txt
+++ b/tests/sanity/ignore-2.9.txt
@@ -10,6 +10,8 @@ plugins/modules/vyos_lldp.py validate-modules:deprecation-mismatch # 2.9 expects
plugins/modules/vyos_lldp.py validate-modules:invalid-documentation # removed_at_date not supported in `deprecated` dict
plugins/modules/vyos_lldp_interface.py validate-modules:deprecation-mismatch # 2.9 expects METADATA
plugins/modules/vyos_lldp_interface.py validate-modules:invalid-documentation # removed_at_date not supported in `deprecated` dict
+plugins/modules/vyos_logging.py validate-modules:deprecation-mismatch # 2.9 expects METADATA
+plugins/modules/vyos_logging.py validate-modules:invalid-documentation # removed_at_date not supported in `deprecated` dict
plugins/action/vyos.py action-plugin-docs # base class for deprecated network platform modules using `connection: local`
plugins/module_utils/network/vyos/config/ospf_interfaces/ospf_interfaces.py compile-2.6!skip
plugins/module_utils/network/vyos/config/ospf_interfaces/ospf_interfaces.py import-2.6!skip
@@ -19,3 +21,6 @@ plugins/modules/vyos_route_maps.py import-2.6!skip
plugins/modules/vyos_prefix_lists.py import-2.6!skip
plugins/module_utils/network/vyos/config/prefix_lists/prefix_lists.py import-2.6!skip
plugins/module_utils/network/vyos/config/prefix_lists/prefix_lists.py compile-2.6!skip
+plugins/modules/vyos_logging_global.py import-2.6!skip
+plugins/module_utils/network/vyos/config/logging_global/logging_global.py import-2.6!skip
+plugins/module_utils/network/vyos/config/logging_global/logging_global.py compile-2.6!skip \ No newline at end of file
diff --git a/tests/unit/modules/network/vyos/test_vyos_logging_global.py b/tests/unit/modules/network/vyos/test_vyos_logging_global.py
new file mode 100644
index 0000000..0f72aeb
--- /dev/null
+++ b/tests/unit/modules/network/vyos/test_vyos_logging_global.py
@@ -0,0 +1,464 @@
+#
+# (c) 2021, Ansible by Red Hat, inc
+# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
+#
+
+from __future__ import absolute_import, division, print_function
+
+__metaclass__ = type
+
+from textwrap import dedent
+from ansible_collections.vyos.vyos.tests.unit.compat.mock import patch
+from ansible_collections.vyos.vyos.plugins.modules import vyos_logging_global
+from ansible_collections.vyos.vyos.tests.unit.modules.utils import (
+ set_module_args,
+)
+from .vyos_module import TestVyosModule
+
+
+class TestVyosLoggingGlobalModule(TestVyosModule):
+
+ module = vyos_logging_global
+
+ def setUp(self):
+ super(TestVyosLoggingGlobalModule, self).setUp()
+
+ self.mock_get_resource_connection_config = patch(
+ "ansible_collections.ansible.netcommon.plugins.module_utils.network.common.rm_base.resource_module_base.get_resource_connection"
+ )
+ self.get_resource_connection_config = (
+ self.mock_get_resource_connection_config.start()
+ )
+
+ self.mock_get_resource_connection_facts = patch(
+ "ansible_collections.ansible.netcommon.plugins.module_utils.network.common.facts.facts.get_resource_connection"
+ )
+ self.get_resource_connection_facts = (
+ self.mock_get_resource_connection_facts.start()
+ )
+
+ self.mock_execute_show_command = patch(
+ "ansible_collections.vyos.vyos.plugins.module_utils.network.vyos.facts.logging_global.logging_global.Logging_globalFacts.get_logging_data"
+ )
+
+ self.execute_show_command = self.mock_execute_show_command.start()
+
+ def tearDown(self):
+ super(TestVyosLoggingGlobalModule, self).tearDown()
+ self.mock_get_resource_connection_config.stop()
+ self.mock_get_resource_connection_facts.stop()
+ self.mock_execute_show_command.stop()
+
+ def test_vyos_logging_global_merged_idempotent(self):
+ self.execute_show_command.return_value = dedent(
+ """\
+ set system syslog console facility all
+ set system syslog console facility local7 level 'err'
+ set system syslog console facility news level 'debug'
+ set system syslog file xyz
+ set system syslog file abc archive size '125'
+ set system syslog file def archive file '2'
+ set system syslog file def facility local6 level 'emerg'
+ set system syslog file def facility local7 level 'emerg'
+ set system syslog global archive file '2'
+ set system syslog global archive size '111'
+ set system syslog global facility cron level 'debug'
+ set system syslog global facility local7 level 'debug'
+ set system syslog global marker interval '111'
+ set system syslog global preserve-fqdn
+ set system syslog host 10.0.2.12 facility all protocol 'udp'
+ set system syslog host 10.0.2.15 facility all level 'all'
+ set system syslog host 10.0.2.15 facility all protocol 'udp'
+ set system syslog host 10.0.2.15 port '122'
+ set system syslog user paul facility local7 level 'err'
+ set system syslog user vyos facility local6 level 'alert'
+ set system syslog user vyos facility local7 level 'debug'
+ """
+ )
+ playbook = dict(
+ config=dict(
+ console=dict(
+ facilities=[
+ dict(facility="all"),
+ dict(facility="local7", severity="err"),
+ dict(facility="news", severity="debug"),
+ ]
+ ),
+ files=[
+ dict(path="xyz"),
+ dict(path="abc", archive=dict(size=125)),
+ dict(
+ path="def",
+ archive=dict(file_num=2),
+ facilities=[
+ dict(facility="local6", severity="emerg"),
+ dict(facility="local7", severity="emerg"),
+ ],
+ ),
+ ],
+ hosts=[
+ dict(
+ hostname="10.0.2.15",
+ port=122,
+ facilities=[
+ dict(facility="all", severity="all"),
+ dict(facility="all", protocol="udp"),
+ ],
+ ),
+ dict(
+ hostname="10.0.2.12",
+ facilities=[dict(facility="all", protocol="udp")],
+ ),
+ ],
+ users=[
+ dict(
+ username="vyos",
+ facilities=[
+ dict(facility="local7", severity="debug"),
+ dict(facility="local6", severity="alert"),
+ ],
+ ),
+ dict(
+ username="paul",
+ facilities=[dict(facility="local7", severity="err")],
+ ),
+ ],
+ global_params=dict(
+ archive=dict(size=111, file_num=2),
+ marker_interval=111,
+ preserve_fqdn="True",
+ facilities=[
+ dict(facility="cron", severity="debug"),
+ dict(facility="local7", severity="debug"),
+ ],
+ ),
+ )
+ )
+ compare_cmds = []
+ playbook["state"] = "merged"
+ set_module_args(playbook)
+ result = self.execute_module()
+
+ self.maxDiff = None
+ self.assertEqual(sorted(result["commands"]), sorted(compare_cmds))
+
+ def test_vyos_logging_global_merged(self):
+ self.execute_show_command.return_value = dedent(
+ """\
+ """
+ )
+ playbook = dict(
+ config=dict(
+ console=dict(
+ facilities=[
+ dict(facility="all"),
+ dict(facility="local7", severity="err"),
+ dict(facility="news", severity="debug"),
+ ]
+ ),
+ files=[
+ dict(path="xyz"),
+ dict(path="abc", archive=dict(size=125)),
+ dict(
+ path="def",
+ archive=dict(file_num=2),
+ facilities=[
+ dict(facility="local6", severity="emerg"),
+ dict(facility="local7", severity="emerg"),
+ ],
+ ),
+ ],
+ hosts=[
+ dict(
+ hostname="10.0.2.15",
+ port=122,
+ facilities=[
+ dict(facility="all", severity="all"),
+ dict(facility="all", protocol="udp"),
+ ],
+ ),
+ dict(
+ hostname="10.0.2.12",
+ facilities=[dict(facility="all", protocol="udp")],
+ ),
+ ],
+ users=[
+ dict(
+ username="vyos",
+ facilities=[
+ dict(facility="local7", severity="debug"),
+ dict(facility="local6", severity="alert"),
+ ],
+ ),
+ dict(
+ username="paul",
+ facilities=[dict(facility="local7", severity="err")],
+ ),
+ ],
+ global_params=dict(
+ archive=dict(size=111, file_num=2),
+ marker_interval=111,
+ preserve_fqdn="True",
+ facilities=[
+ dict(facility="cron", severity="debug"),
+ dict(facility="local7", severity="debug"),
+ ],
+ ),
+ )
+ )
+ compare_cmds = [
+ "set system syslog user paul facility local7 level err",
+ "set system syslog host 10.0.2.15 facility all protocol udp",
+ "set system syslog global marker interval 111",
+ "set system syslog file def archive file 2",
+ "set system syslog file abc archive size 125",
+ "set system syslog console facility local7 level err",
+ "set system syslog host 10.0.2.12 facility all protocol udp",
+ "set system syslog global facility local7 level debug",
+ "set system syslog host 10.0.2.15 facility all level all",
+ "set system syslog global preserve-fqdn",
+ "set system syslog global archive file 2",
+ "set system syslog console facility all",
+ "set system syslog file xyz",
+ "set system syslog file def facility local7 level emerg",
+ "set system syslog console facility news level debug",
+ "set system syslog user vyos facility local6 level alert",
+ "set system syslog global facility cron level debug",
+ "set system syslog file def facility local6 level emerg",
+ "set system syslog global archive size 111",
+ "set system syslog host 10.0.2.15 port 122",
+ "set system syslog user vyos facility local7 level debug",
+ ]
+ playbook["state"] = "merged"
+ set_module_args(playbook)
+ result = self.execute_module(changed=True)
+ self.maxDiff = None
+ self.assertEqual(sorted(result["commands"]), sorted(compare_cmds))
+
+ def test_vyos_logging_global_deleted(self):
+ self.execute_show_command.return_value = dedent(
+ """\
+ set system syslog console facility all
+ set system syslog console facility local7 level 'err'
+ set system syslog console facility news level 'debug'
+ set system syslog file xyz
+ set system syslog file abc archive size '125'
+ set system syslog file def archive file '2'
+ set system syslog file def facility local6 level 'emerg'
+ set system syslog file def facility local7 level 'emerg'
+ set system syslog global archive file '2'
+ set system syslog global archive size '111'
+ set system syslog global facility cron level 'debug'
+ set system syslog global facility local7 level 'debug'
+ set system syslog global marker interval '111'
+ set system syslog global preserve-fqdn
+ set system syslog host 10.0.2.12 facility all protocol 'udp'
+ set system syslog host 10.0.2.15 facility all level 'all'
+ set system syslog host 10.0.2.15 facility all protocol 'udp'
+ set system syslog host 10.0.2.15 port '122'
+ set system syslog user paul facility local7 level 'err'
+ set system syslog user vyos facility local6 level 'alert'
+ set system syslog user vyos facility local7 level 'debug'
+ """
+ )
+ playbook = dict(config=dict())
+ compare_cmds = ["delete system syslog"]
+ playbook["state"] = "deleted"
+ set_module_args(playbook)
+ result = self.execute_module(changed=True)
+ self.maxDiff = None
+ self.assertEqual(sorted(result["commands"]), sorted(compare_cmds))
+
+ def test_vyos_logging_global_replaced(self):
+ """
+ passing all commands as have and expecting [] commands
+ """
+ self.execute_show_command.return_value = dedent(
+ """\
+ set system syslog console facility all
+ set system syslog console facility local7 level 'err'
+ set system syslog console facility news level 'debug'
+ set system syslog file xyz
+ set system syslog file abc archive size '125'
+ set system syslog file def archive file '2'
+ set system syslog file def facility local6 level 'emerg'
+ set system syslog file def facility local7 level 'emerg'
+ set system syslog global archive file '2'
+ set system syslog global archive size '111'
+ set system syslog global facility cron level 'debug'
+ set system syslog global facility local7 level 'debug'
+ set system syslog global marker interval '111'
+ set system syslog global preserve-fqdn
+ set system syslog host 10.0.2.12 facility all protocol 'udp'
+ set system syslog host 10.0.2.15 facility all level 'all'
+ set system syslog host 10.0.2.15 facility all protocol 'udp'
+ set system syslog host 10.0.2.15 port '122'
+ set system syslog user paul facility local7 level 'err'
+ set system syslog user vyos facility local6 level 'alert'
+ set system syslog user vyos facility local7 level 'debug'
+ """
+ )
+ playbook = dict(
+ config=dict(
+ console=dict(
+ facilities=[dict(facility="local7", severity="emerg")]
+ ),
+ files=[
+ dict(
+ path="abc",
+ archive=dict(file_num=2),
+ facilities=[
+ dict(facility="local6", severity="err"),
+ dict(facility="local7", severity="emerg"),
+ ],
+ )
+ ],
+ )
+ )
+ compare_cmds = [
+ "delete system syslog console facility all",
+ "delete system syslog console facility local7",
+ "delete system syslog console facility news",
+ "delete system syslog file def",
+ "delete system syslog file xyz",
+ "delete system syslog global facility cron",
+ "delete system syslog global facility local7",
+ "delete system syslog global archive file 2",
+ "delete system syslog global archive size 111",
+ "delete system syslog global marker",
+ "delete system syslog global preserve-fqdn",
+ "delete system syslog host 10.0.2.12",
+ "delete system syslog host 10.0.2.15",
+ "delete system syslog user paul",
+ "delete system syslog user vyos",
+ "set system syslog console facility local7 level emerg",
+ "set system syslog file abc facility local6 level err",
+ "set system syslog file abc facility local7 level emerg",
+ "delete system syslog file abc archive size 125",
+ "set system syslog file abc archive file 2",
+ ]
+
+ playbook["state"] = "replaced"
+ set_module_args(playbook)
+ result = self.execute_module(changed=True)
+ self.maxDiff = None
+ self.assertEqual(sorted(result["commands"]), sorted(compare_cmds))
+
+ def test_vyos_logging_global_replaced_idempotent(self):
+ """
+ passing all commands as have and expecting [] commands
+ """
+ self.execute_show_command.return_value = dedent(
+ """\
+ set system syslog console facility local6
+ """
+ )
+ playbook = dict(
+ config=dict(console=dict(facilities=[dict(facility="local6")]))
+ )
+ compare_cmds = []
+ playbook["state"] = "replaced"
+ set_module_args(playbook)
+ result = self.execute_module(changed=False)
+ self.maxDiff = None
+ self.assertEqual(sorted(result["commands"]), sorted(compare_cmds))
+
+ def test_vyos_logging_global_overridden(self):
+ self.execute_show_command.return_value = dedent(
+ """\
+ set system syslog console
+ set system syslog global
+ """
+ )
+ playbook = dict(
+ config=dict(
+ console=dict(
+ facilities=[dict(facility="local7", severity="emerg")]
+ ),
+ files=[
+ dict(
+ path="abc",
+ archive=dict(file_num=2),
+ facilities=[
+ dict(facility="local6", severity="err"),
+ dict(facility="local7", severity="emerg"),
+ ],
+ )
+ ],
+ )
+ )
+ compare_cmds = [
+ "set system syslog console facility local7 level emerg",
+ "set system syslog file abc facility local6 level err",
+ "set system syslog file abc facility local7 level emerg",
+ "set system syslog file abc archive file 2",
+ ]
+ playbook["state"] = "overridden"
+ set_module_args(playbook)
+ result = self.execute_module(changed=True)
+ print(result["commands"])
+ self.maxDiff = None
+ self.assertEqual(sorted(result["commands"]), sorted(compare_cmds))
+
+ def test_vyos_logging_global_rendered(self):
+ playbook = dict(
+ config=dict(
+ console=dict(facilities=[dict(facility="all")]),
+ hosts=[
+ dict(
+ hostname="10.0.2.16",
+ facilities=[dict(facility="local6")],
+ )
+ ],
+ users=[
+ dict(username="vyos"),
+ dict(
+ username="paul", facilities=[dict(facility="local7")]
+ ),
+ ],
+ )
+ )
+ compare_cmds = [
+ "set system syslog console facility all",
+ "set system syslog host 10.0.2.16 facility local6",
+ "set system syslog user vyos",
+ "set system syslog user paul facility local7",
+ ]
+ playbook["state"] = "rendered"
+ set_module_args(playbook)
+ result = self.execute_module()
+ self.maxDiff = None
+ self.assertEqual(sorted(result["rendered"]), sorted(compare_cmds))
+
+ def test_vyos_logging_global_parsed(self):
+ set_module_args(
+ dict(
+ running_config=dedent(
+ """\
+ set system syslog console facility all
+ set system syslog file xyz
+ """
+ ),
+ state="parsed",
+ )
+ )
+ parsed = dict(
+ console=dict(facilities=[dict(facility="all")]),
+ files=[dict(path="xyz")],
+ )
+ result = self.execute_module(changed=False)
+ self.maxDiff = None
+ self.assertEqual(sorted(result["parsed"]), sorted(parsed))
+
+ def test_vyos_logging_global_gathered(self):
+ self.execute_show_command.return_value = dedent(
+ """\
+ set system syslog console facility all
+ """
+ )
+ set_module_args(dict(state="gathered"))
+ gathered = dict(console=dict(facilities=[dict(facility="all")]))
+ result = self.execute_module(changed=False)
+
+ self.maxDiff = None
+ self.assertEqual(sorted(result["gathered"]), sorted(gathered))