summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.ansible-lint14
-rw-r--r--.coderabbit.yaml2
-rw-r--r--.github/workflows/certification.yml51
-rw-r--r--.github/workflows/tests.yml5
-rw-r--r--README.md38
-rw-r--r--changelogs/fragments/T9331_ah_certification.yml7
-rw-r--r--meta/runtime.yml2
-rw-r--r--[l---------]plugins/action/banner.py12
-rw-r--r--[l---------]plugins/action/bgp_address_family.py12
-rw-r--r--[l---------]plugins/action/bgp_global.py12
-rw-r--r--[l---------]plugins/action/command.py12
-rw-r--r--[l---------]plugins/action/config.py12
-rw-r--r--[l---------]plugins/action/facts.py12
-rw-r--r--[l---------]plugins/action/file.py12
-rw-r--r--[l---------]plugins/action/firewall_global.py12
-rw-r--r--[l---------]plugins/action/firewall_interfaces.py12
-rw-r--r--[l---------]plugins/action/firewall_rules.py12
-rw-r--r--[l---------]plugins/action/ha.py12
-rw-r--r--[l---------]plugins/action/hostname.py12
-rw-r--r--[l---------]plugins/action/interface.py12
-rw-r--r--[l---------]plugins/action/interfaces.py12
-rw-r--r--[l---------]plugins/action/l3_interface.py12
-rw-r--r--[l---------]plugins/action/l3_interfaces.py12
-rw-r--r--[l---------]plugins/action/lag_interfaces.py12
-rw-r--r--[l---------]plugins/action/linkagg.py12
-rw-r--r--[l---------]plugins/action/lldp.py12
-rw-r--r--[l---------]plugins/action/lldp_global.py12
-rw-r--r--[l---------]plugins/action/lldp_interface.py12
-rw-r--r--[l---------]plugins/action/lldp_interfaces.py12
-rw-r--r--[l---------]plugins/action/logging_global.py12
-rw-r--r--[l---------]plugins/action/nat.py12
-rw-r--r--[l---------]plugins/action/ntp_global.py12
-rw-r--r--[l---------]plugins/action/ospf_interfaces.py12
-rw-r--r--[l---------]plugins/action/ospfv2.py12
-rw-r--r--[l---------]plugins/action/ospfv3.py12
-rw-r--r--[l---------]plugins/action/ping.py12
-rw-r--r--[l---------]plugins/action/prefix_lists.py12
-rw-r--r--[l---------]plugins/action/route_maps.py12
-rw-r--r--[l---------]plugins/action/snmp_server.py12
-rw-r--r--[l---------]plugins/action/static_route.py12
-rw-r--r--[l---------]plugins/action/static_routes.py12
-rw-r--r--[l---------]plugins/action/system.py12
-rw-r--r--[l---------]plugins/action/user.py12
-rw-r--r--[l---------]plugins/action/vlan.py12
-rw-r--r--[l---------]plugins/action/vrf.py12
-rw-r--r--tests/sanity/ignore-2.15.txt39
46 files changed, 527 insertions, 87 deletions
diff --git a/.ansible-lint b/.ansible-lint
index 8d9bb70b..48e86f6c 100644
--- a/.ansible-lint
+++ b/.ansible-lint
@@ -1,5 +1,17 @@
---
+# Red Hat Ansible Collection Certification .ansible-lint file
+# Taken from:
+# https://github.com/ansible-collections/partner-certification-requirements
profile: production
exclude_paths:
- - changelogs/changelog.yaml
+ - tests/integration
+ - tests/unit
+ - extensions/molecule
+ - changelogs
+ - docs
+ - .ansible
+ - .github
+
+warn_list:
+ - no-log-password
diff --git a/.coderabbit.yaml b/.coderabbit.yaml
index c7c465d6..454af0f9 100644
--- a/.coderabbit.yaml
+++ b/.coderabbit.yaml
@@ -191,7 +191,7 @@ reviews:
instructions: |
Module redirects and tombstones. Adding a new module requires a redirect
entry (short name → FQCN). Tombstoned modules (logging, vyos_logging) must
- not be un-tombstoned. requires_ansible must stay >=2.15.0 unless explicitly
+ not be un-tombstoned. requires_ansible must stay >=2.16.0 unless explicitly
bumping minimum version.
knowledge_base:
diff --git a/.github/workflows/certification.yml b/.github/workflows/certification.yml
new file mode 100644
index 00000000..cd699aea
--- /dev/null
+++ b/.github/workflows/certification.yml
@@ -0,0 +1,51 @@
+---
+# This workflow calls a pinned version of the
+# reusable workflow. Copy this file into your
+# repository to check against pinned versions
+# of Automation Hub tests.
+# The version is pinned to an exact release tag
+# (e.g. @v1.2.0) for supply chain security.
+# Use Dependabot to receive automatic PRs when
+# new versions are released.
+name: Run collection certification checks
+
+permissions:
+ contents: read
+
+on:
+ pull_request:
+ branches: [main]
+ workflow_dispatch:
+ schedule:
+ - cron: "0 6 * * *"
+
+concurrency:
+ group: cert-ver-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+
+# Files that are not related to the core functionality
+# of your collection can cause Ansible Lint to fail.
+# If this happens, add an .ansible-lint file that includes
+# those files and directories to the root of your
+# repository; for example:
+# https://github.com/ansible-collections/partner-certification-checker/blob/main/.ansible-lint
+
+# If there are sanity test failures that cannot be fixed and are allowed to ignore
+# https://docs.ansible.com/projects/lint/rules/sanity/, create a sanity ignore file
+# https://docs.ansible.com/projects/ansible/devel/dev_guide/testing/sanity/ignores.html#ignore-file-location
+# for each affected version of ansible-core (for example, `tests/sanity/ignore-2.18.txt`) and add corresponding entries.
+jobs:
+ call:
+ uses: ansible-collections/partner-certification-checker/.github/workflows/certification-reusable.yml@v6.0.0 # zizmor: ignore[unpinned-uses]
+ # For details on tested ansible-core branches and Python versions,
+ # see: https://github.com/ansible-collections/partner-certification-checker#tested-ansible-core-branches-and-python-versions
+ with:
+ # ansible-core-version: '2.18.0'
+ # skip-sanity-versions: 'stable-2.16'
+ # collection-root: 'ansible_collections/junipernetworks/junos'
+ collection-deps: 'ansible.netcommon'
+ # automation-hub: true
+ # Uncomment the lines below if you have 'automation-hub: true' and need to install collections from Red Hat Ansible Automation Hub.
+ # This requires setting a repository secret called 'AH_TOKEN' which value contains a Red Hat Ansible Automation Hub token.
+ # secrets:
+ # AH_TOKEN: ${{ secrets.AH_TOKEN }}
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index dedbc9e5..6086077c 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -46,7 +46,8 @@ jobs:
set([
'${{ needs.changelog.result }}',
'${{ needs.sanity.result }}',
- '${{ needs.unit-galaxy.result }}'
- '${{ needs.ansible-lint.result }}'
+ '${{ needs.unit-galaxy.result }}',
+ '${{ needs.ansible-lint.result }}',
+ '${{ needs.build-import.result }}',
'${{ needs.unit-source.result }}'
])"
diff --git a/README.md b/README.md
index 5e7fbc82..93852a2b 100644
--- a/README.md
+++ b/README.md
@@ -6,8 +6,7 @@
The Ansible VyOS collection includes a variety of Ansible content to help automate the management of VyOS network appliances.
-This collection has been tested against VyOS 1.3.8, 1.4.1 and the current rolling release for 1.5. Where possible,
-compatibility with older versions of VyOS are maintained but not guaranteed.
+This collection has been tested against VyOS 1.3.8, 1.4.1 and the current rolling release for 1.5. Where possible, compatibility with older versions of VyOS are maintained but not guaranteed.
## Communication
@@ -20,7 +19,7 @@ compatibility with older versions of VyOS are maintained but not guaranteed.
<!--start requires_ansible-->
## Ansible version compatibility
-This collection has been tested against the following Ansible versions: **>=2.15.0**.
+This collection has been tested against the following Ansible versions: **>=2.16.0**.
Plugins and modules within a collection may be tested with only specific Ansible versions.
A collection may contain metadata that identifies these versions.
@@ -31,6 +30,14 @@ PEP440 is the schema used to describe the versions of Ansible.
### Supported connections
The VyOS collection supports ``network_cli`` connections.
+## Requirements
+
+- ansible-core >=2.16.0, see [Ansible version compatibility](#ansible-version-compatibility).
+- Python >=3.10 on the Ansible controller, as required by ansible-core 2.16.
+- [ansible.netcommon](https://galaxy.ansible.com/ui/repo/published/ansible/netcommon/) >=2.5.1, installed automatically as a dependency of this collection.
+- Python packages `paramiko` and `scp`, listed in [requirements.txt](https://github.com/vyos/vyos.vyos/blob/main/requirements.txt). `ansible-builder` picks these up when you build an execution environment that includes this collection.
+- VyOS devices reachable over SSH with the `ansible.netcommon.network_cli` connection.
+
## Included content
<!--start collection content-->
@@ -87,6 +94,20 @@ You can install the VyOS collection with the Ansible Galaxy CLI:
ansible-galaxy collection install vyos.vyos
+Red Hat customers should install this collection from
+[Red Hat Ansible Automation Hub](https://console.redhat.com/ansible/automation-hub/repo/published/vyos/vyos/).
+Configure Automation Hub as a Galaxy server in `ansible.cfg` as described in
+[Configuring Ansible Automation Hub](https://docs.redhat.com/en/documentation/red_hat_ansible_automation_platform/),
+then use the same commands as below. Red Hat does not support installing collections from GitHub.
+
+To install a specific version, for example 6.2.0:
+
+ ansible-galaxy collection install vyos.vyos:==6.2.0
+
+To upgrade to the latest version:
+
+ ansible-galaxy collection install vyos.vyos --upgrade
+
You can also include it in a `requirements.yml` file and install it with `ansible-galaxy collection install -r requirements.yml`, using the format:
```yaml
@@ -261,10 +282,17 @@ Ansible Resources
- [Ansible Developer guide](https://docs.ansible.com/ansible/latest/dev_guide/index.html)
- [Ansible Community code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html)
+## Support
+
+As Red Hat Ansible Certified Content, this collection is entitled to support through Ansible Automation Platform (AAP) using the **Create issue** button in the top right corner
+of the collection page on Automation Hub.
+
+The collection is maintained by the VyOS team. <!-- TODO: VyOS commercial support statement/link -->
+If the collection was obtained from Galaxy or GitHub, community help is available through [GitHub issues](https://github.com/vyos/vyos.vyos/issues), the [VyOS forum](https://forum.vyos.io/)
+and the [Ansible Forum](https://forum.ansible.com/).
+
## Licensing
GNU General Public License v3.0 or later.
See [LICENSE](https://www.gnu.org/licenses/gpl-3.0.txt) to see the full text.
-
-
diff --git a/changelogs/fragments/T9331_ah_certification.yml b/changelogs/fragments/T9331_ah_certification.yml
new file mode 100644
index 00000000..c1a08d13
--- /dev/null
+++ b/changelogs/fragments/T9331_ah_certification.yml
@@ -0,0 +1,7 @@
+---
+removed_features:
+ - vyos.vyos - support for ansible-core 2.15 has been dropped; the minimum supported ansible-core version is now 2.16.0.
+trivial:
+ - action plugins - replace symlinks with import shims so sanity results are consistent across ansible-test and ADE.
+ - README - add Requirements and Support sections and Automation Hub installation instructions.
+ - CI - fix missing commas in the all_green gate so failures of unit, lint and build-import jobs fail the workflow.
diff --git a/meta/runtime.yml b/meta/runtime.yml
index 093e129d..7517c7c1 100644
--- a/meta/runtime.yml
+++ b/meta/runtime.yml
@@ -1,5 +1,5 @@
---
-requires_ansible: ">=2.15.0"
+requires_ansible: ">=2.16.0"
plugin_routing:
modules:
banner:
diff --git a/plugins/action/banner.py b/plugins/action/banner.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/banner.py
+++ b/plugins/action/banner.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/plugins/action/bgp_address_family.py b/plugins/action/bgp_address_family.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/bgp_address_family.py
+++ b/plugins/action/bgp_address_family.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/plugins/action/bgp_global.py b/plugins/action/bgp_global.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/bgp_global.py
+++ b/plugins/action/bgp_global.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/plugins/action/command.py b/plugins/action/command.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/command.py
+++ b/plugins/action/command.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/plugins/action/config.py b/plugins/action/config.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/config.py
+++ b/plugins/action/config.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/plugins/action/facts.py b/plugins/action/facts.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/facts.py
+++ b/plugins/action/facts.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/plugins/action/file.py b/plugins/action/file.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/file.py
+++ b/plugins/action/file.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/plugins/action/firewall_global.py b/plugins/action/firewall_global.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/firewall_global.py
+++ b/plugins/action/firewall_global.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/plugins/action/firewall_interfaces.py b/plugins/action/firewall_interfaces.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/firewall_interfaces.py
+++ b/plugins/action/firewall_interfaces.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/plugins/action/firewall_rules.py b/plugins/action/firewall_rules.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/firewall_rules.py
+++ b/plugins/action/firewall_rules.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/plugins/action/ha.py b/plugins/action/ha.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/ha.py
+++ b/plugins/action/ha.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/plugins/action/hostname.py b/plugins/action/hostname.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/hostname.py
+++ b/plugins/action/hostname.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/plugins/action/interface.py b/plugins/action/interface.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/interface.py
+++ b/plugins/action/interface.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/plugins/action/interfaces.py b/plugins/action/interfaces.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/interfaces.py
+++ b/plugins/action/interfaces.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/plugins/action/l3_interface.py b/plugins/action/l3_interface.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/l3_interface.py
+++ b/plugins/action/l3_interface.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/plugins/action/l3_interfaces.py b/plugins/action/l3_interfaces.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/l3_interfaces.py
+++ b/plugins/action/l3_interfaces.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/plugins/action/lag_interfaces.py b/plugins/action/lag_interfaces.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/lag_interfaces.py
+++ b/plugins/action/lag_interfaces.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/plugins/action/linkagg.py b/plugins/action/linkagg.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/linkagg.py
+++ b/plugins/action/linkagg.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/plugins/action/lldp.py b/plugins/action/lldp.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/lldp.py
+++ b/plugins/action/lldp.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/plugins/action/lldp_global.py b/plugins/action/lldp_global.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/lldp_global.py
+++ b/plugins/action/lldp_global.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/plugins/action/lldp_interface.py b/plugins/action/lldp_interface.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/lldp_interface.py
+++ b/plugins/action/lldp_interface.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/plugins/action/lldp_interfaces.py b/plugins/action/lldp_interfaces.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/lldp_interfaces.py
+++ b/plugins/action/lldp_interfaces.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/plugins/action/logging_global.py b/plugins/action/logging_global.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/logging_global.py
+++ b/plugins/action/logging_global.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/plugins/action/nat.py b/plugins/action/nat.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/nat.py
+++ b/plugins/action/nat.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/plugins/action/ntp_global.py b/plugins/action/ntp_global.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/ntp_global.py
+++ b/plugins/action/ntp_global.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/plugins/action/ospf_interfaces.py b/plugins/action/ospf_interfaces.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/ospf_interfaces.py
+++ b/plugins/action/ospf_interfaces.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/plugins/action/ospfv2.py b/plugins/action/ospfv2.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/ospfv2.py
+++ b/plugins/action/ospfv2.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/plugins/action/ospfv3.py b/plugins/action/ospfv3.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/ospfv3.py
+++ b/plugins/action/ospfv3.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/plugins/action/ping.py b/plugins/action/ping.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/ping.py
+++ b/plugins/action/ping.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/plugins/action/prefix_lists.py b/plugins/action/prefix_lists.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/prefix_lists.py
+++ b/plugins/action/prefix_lists.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/plugins/action/route_maps.py b/plugins/action/route_maps.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/route_maps.py
+++ b/plugins/action/route_maps.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/plugins/action/snmp_server.py b/plugins/action/snmp_server.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/snmp_server.py
+++ b/plugins/action/snmp_server.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/plugins/action/static_route.py b/plugins/action/static_route.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/static_route.py
+++ b/plugins/action/static_route.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/plugins/action/static_routes.py b/plugins/action/static_routes.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/static_routes.py
+++ b/plugins/action/static_routes.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/plugins/action/system.py b/plugins/action/system.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/system.py
+++ b/plugins/action/system.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/plugins/action/user.py b/plugins/action/user.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/user.py
+++ b/plugins/action/user.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/plugins/action/vlan.py b/plugins/action/vlan.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/vlan.py
+++ b/plugins/action/vlan.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/plugins/action/vrf.py b/plugins/action/vrf.py
index 331a791f..24195be9 120000..100644
--- a/plugins/action/vrf.py
+++ b/plugins/action/vrf.py
@@ -1 +1,11 @@
-vyos.py \ No newline at end of file
+# -*- coding: utf-8 -*-
+# 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 ansible_collections.vyos.vyos.plugins.action.vyos import ActionModule
+
+
+__all__ = ["ActionModule"]
diff --git a/tests/sanity/ignore-2.15.txt b/tests/sanity/ignore-2.15.txt
deleted file mode 100644
index ee3d2aac..00000000
--- a/tests/sanity/ignore-2.15.txt
+++ /dev/null
@@ -1,39 +0,0 @@
-plugins/action/vyos.py action-plugin-docs # base class for deprecated network platform modules using `connection: local`
-plugins/action/banner.py action-plugin-docs
-plugins/action/bgp_address_family.py action-plugin-docs
-plugins/action/bgp_global.py action-plugin-docs
-plugins/action/command.py action-plugin-docs
-plugins/action/config.py action-plugin-docs
-plugins/action/facts.py action-plugin-docs
-plugins/action/firewall_global.py action-plugin-docs
-plugins/action/firewall_interfaces.py action-plugin-docs
-plugins/action/firewall_rules.py action-plugin-docs
-plugins/action/ha.py action-plugin-docs
-plugins/action/hostname.py action-plugin-docs
-plugins/action/interface.py action-plugin-docs
-plugins/action/interfaces.py action-plugin-docs
-plugins/action/l3_interface.py action-plugin-docs
-plugins/action/l3_interfaces.py action-plugin-docs
-plugins/action/lag_interfaces.py action-plugin-docs
-plugins/action/linkagg.py action-plugin-docs
-plugins/action/lldp.py action-plugin-docs
-plugins/action/lldp_global.py action-plugin-docs
-plugins/action/lldp_interface.py action-plugin-docs
-plugins/action/lldp_interfaces.py action-plugin-docs
-plugins/action/logging_global.py action-plugin-docs
-plugins/action/nat.py action-plugin-docs
-plugins/action/ntp_global.py action-plugin-docs
-plugins/action/ospf_interfaces.py action-plugin-docs
-plugins/action/ospfv2.py action-plugin-docs
-plugins/action/ospfv3.py action-plugin-docs
-plugins/action/ping.py action-plugin-docs
-plugins/action/prefix_lists.py action-plugin-docs
-plugins/action/route_maps.py action-plugin-docs
-plugins/action/snmp_server.py action-plugin-docs
-plugins/action/static_route.py action-plugin-docs
-plugins/action/static_routes.py action-plugin-docs
-plugins/action/system.py action-plugin-docs
-plugins/action/user.py action-plugin-docs
-plugins/action/vlan.py action-plugin-docs
-plugins/action/vrf.py action-plugin-docs
-plugins/action/file.py action-plugin-docs