1 2.. _contributing_maintained_collections: 3 4*********************************************** 5Contributing to Ansible-maintained Collections 6*********************************************** 7 8The Ansible team welcomes community contributions to the collections maintained by Red Hat Ansible Engineering. This section describes how you can open issues and create PRs with the required testing before your PR can be merged. 9 10.. contents:: 11 :local: 12 13Ansible-maintained collections 14================================= 15 16The following table shows: 17 18* **Ansible-maintained collection** - Click the link to the collection on Galaxy, then click the ``repo`` button in Galaxy to find the GitHub repository for this collection. 19* **Related community collection** - Collection that holds community-created content (modules, roles, and so on) that may also be of interest to a user of the Ansible-maintained collection. You can, for example, add new modules to the community collection as a technical preview before the content is moved to the Ansible-maintained collection. 20* **Sponsor** - Working group that manages the collections. You can join the meetings to discuss important proposed changes and enhancements to the collections. 21* **Test requirements** - Testing required for any new or changed content for the Ansible-maintained collection. 22* **Developer details** - Describes whether the Ansible-maintained collection accepts direct community issues and PRs for existing collection content, as well as more specific developer guidelines based on the collection type. 23 24 25.. _ansible-collection-table: 26 27.. raw:: html 28 29 <style> 30 /* Style for this single table. Add delimiters between header columns */ 31 table#ansible-collection-table th { 32 border-width: 1px; 33 border-color: #dddddd /*rgb(225, 228, 229)*/; 34 border-style: solid; 35 text-align: center; 36 padding: 5px; 37 background-color: #eeeeee; 38 } 39 tr, td { 40 border-width: 1px; 41 border-color: rgb(225, 228, 229); 42 border-style: solid; 43 text-align: center; 44 padding: 5px; 45 46 } 47 </style> 48 49 <table id="ansible-collection-table"> 50 <tr> 51 <th colspan="3">Collection details</th> 52 <th colspan="4">Test requirements: Ansible collections</th> 53 <th colspan="2">Developer details</th> 54 </tr> 55 <tr> 56 <th>Ansible collection</th> 57 <th>Related community collection</th> 58 <th>Sponsor</th> 59 <th>Sanity</th> 60 <th>Unit</th> 61 <th>Integration</th> 62 <th>CI Platform</th> 63 <th>Open to PRs*</th> 64 <th>Guidelines</th> 65 </tr> 66 <tr> 67 <td><a href="https://galaxy.ansible.com/amazon/aws">amazon.aws</a></td> 68 <td><a href="https://galaxy.ansible.com/community/aws">community.aws</a></td> 69 <td><a href="https://github.com/ansible/community/tree/master/group-aws">Cloud</a></td> 70 <td>✓**</td> 71 <td>**</td> 72 <td>✓</td> 73 <td>Shippable</td> 74 <td>✓</td> 75 <td><a href="https://docs.ansible.com/ansible/devel/dev_guide/platforms/aws_guidelines.html">AWS guide</a></td> 76 </tr> 77 <tr> 78 <td><a href="https://galaxy.ansible.com/ansible/netcommon">ansible.netcommon***</a></td> 79 <td><a href="https://galaxy.ansible.com/community/network">community.network</a></td> 80 <td><a href="https://github.com/ansible/community/wiki/Network">Network</a></td> 81 <td>✓</td> 82 <td>✓</td> 83 <td>✓</td> 84 <td>Zuul</td> 85 <td>✓</td> 86 <td><a href="https://docs.ansible.com/ansible/devel/network/dev_guide/index.html">Network guide</a></td> 87 </tr> 88 <tr> 89 <td><a href="https://galaxy.ansible.com/ansible/posix">ansible.posix</a></td> 90 <td><a href="https://galaxy.ansible.com/community/general">community.general</a></td> 91 <td>Linux</a></td> 92 <td>✓</td> 93 <td></td> 94 <td></td> 95 <td>Shippable</td> 96 <td>✓</td> 97 <td><a href="https://docs.ansible.com/ansible/latest/dev_guide/index.html">Developer guide</a></td> 98 </tr> 99 <tr> 100 <td><a href="https://galaxy.ansible.com/ansible/windows">ansible.windows</a></td> 101 <td><a href="https://galaxy.ansible.com/community/windows">community.windows</a></td> 102 <td><a href="https://github.com/ansible/community/wiki/Windows">Windows</a></td> 103 <td>✓</td> 104 <td>✓****</td> 105 <td>✓</td> 106 <td>Shippable</td> 107 <td>✓</td> 108 <td><a href="https://docs.ansible.com/ansible/devel/dev_guide/developing_modules_general_windows.html#developing-modules-general-windows">Windows guide</a></td> 109 </tr> 110 <tr> 111 <td><a href="https://galaxy.ansible.com/arista/eos">arista.eos</a></td> 112 <td><a href="https://galaxy.ansible.com/community/network">community.network</a></td> 113 <td><a href="https://github.com/ansible/community/wiki/Network">Network</a></td> 114 <td>✓</td> 115 <td>✓</td> 116 <td>✓</td> 117 <td>Zuul</td> 118 <td>✓</td> 119 <td><a href="https://docs.ansible.com/ansible/devel/network/dev_guide/index.html">Network guide</a></td> 120 </tr> 121 <tr> 122 <td><a href="https://galaxy.ansible.com/cisco/asa">cisco.asa</a></td> 123 <td><a href="https://github.com/ansible-collections/community.asa">community.asa</a></td> 124 <td><a href="https://github.com/ansible/community/wiki/Security-Automation">Security</a></td> 125 <td>✓</td> 126 <td>✓</td> 127 <td>✓</td> 128 <td>Zuul</td> 129 <td>✓</td> 130 <td><a href="https://docs.ansible.com/ansible/latest/dev_guide/index.html">Developer guide</a></td> 131 </tr> 132 <tr> 133 <td><a href="https://galaxy.ansible.com/cisco/ios">cisco.ios</a></td> 134 <td><a href="https://galaxy.ansible.com/community/network">community.network</a></td> 135 <td><a href="https://github.com/ansible/community/wiki/Network">Network</a></td> 136 <td>✓</td> 137 <td>✓</td> 138 <td>✓</td> 139 <td>Zuul</td> 140 <td>✓</td> 141 <td><a href="https://docs.ansible.com/ansible/devel/network/dev_guide/index.html">Network guide</a></td> 142 </tr> 143 <tr> 144 <td><a href="https://galaxy.ansible.com/cisco/iosxr">cisco.iosxr</a></td> 145 <td><a href="https://galaxy.ansible.com/community/network">community.network</a></td> 146 <td><a href="https://github.com/ansible/community/wiki/Network">Network</a></td> 147 <td>✓</td> 148 <td>✓</td> 149 <td>✓</td> 150 <td>Zuul</td> 151 <td>✓</td> 152 <td><a href="https://docs.ansible.com/ansible/devel/network/dev_guide/index.html">Network guide</a></td> 153 </tr> 154 <tr> 155 <td><a href="https://galaxy.ansible.com/cisco/nxos">cisco.nxos</a></td> 156 <td><a href="https://galaxy.ansible.com/community/network">community.network</a></td> 157 <td><a href="https://github.com/ansible/community/wiki/Network">Network</a></td> 158 <td>✓</td> 159 <td>✓</td> 160 <td>✓</td> 161 <td>Zuul</td> 162 <td>✓</td> 163 <td><a href="https://docs.ansible.com/ansible/devel/network/dev_guide/index.html">Network guide</a></td> 164 </tr> 165 <tr> 166 <td><a href="https://galaxy.ansible.com/ibm/qradar">ibm.qradar</a></td> 167 <td><a href="https://github.com/ansible-collections/community.qradar">community.qradar</a></td> 168 <td><a href="https://github.com/ansible/community/wiki/Security-Automation">Security</a></td> 169 <td>✓</td> 170 <td></td> 171 <td>✓</td> 172 <td>Zuul</td> 173 <td>✓</td> 174 <td><a href="https://docs.ansible.com/ansible/latest/dev_guide/index.html">Developer guide</a></td> 175 </tr> 176 <tr> 177 <td><a href="https://galaxy.ansible.com/junipernetworks/junos">junipernetworks.junos</a></td> 178 <td><a href="https://galaxy.ansible.com/community/network">community.network</a></td> 179 <td><a href="https://github.com/ansible/community/wiki/Network">Network</a></td> 180 <td>✓</td> 181 <td>✓</td> 182 <td>✓</td> 183 <td>Zuul</td> 184 <td>✓</td> 185 <td><a href="https://docs.ansible.com/ansible/devel/network/dev_guide/index.html">Network guide</a></td> 186 </tr> 187 <tr> 188 <td><a href="https://galaxy.ansible.com/openvswitch/openvswitch">openvswitch.openvswitch</a></td> 189 <td><a href="https://galaxy.ansible.com/community/network">community.network</a></td> 190 <td><a href="https://github.com/ansible/community/wiki/Network">Network</a></td> 191 <td>✓</td> 192 <td>✓</td> 193 <td>✓</td> 194 <td>Zuul</td> 195 <td>✓</td> 196 <td><a href="https://docs.ansible.com/ansible/devel/network/dev_guide/index.html">Network guide</a></td> 197 </tr> 198 <tr> 199 <td><a href="https://github.com/ansible-collections/splunk.es">splunk.es</a></td> 200 <td><a href="https://github.com/ansible-collections/community.es">community.es</a></td> 201 <td><a href="https://github.com/ansible/community/wiki/Security-Automation">Security</a></td> 202 <td>✓</td> 203 <td></td> 204 <td>✓</td> 205 <td>Zuul</td> 206 <td>✓</td> 207 <td><a href="https://docs.ansible.com/ansible/latest/dev_guide/index.html">Developer guide</a></td> 208 </tr> 209 <tr> 210 <td><a href="https://galaxy.ansible.com/vyos/vyos">vyos.vyos</a></td> 211 <td><a href="https://galaxy.ansible.com/community/network">community.network</a></td> 212 <td><a href="https://github.com/ansible/community/wiki/Network">Network</a></td> 213 <td>✓</td> 214 <td>✓</td> 215 <td>✓</td> 216 <td>Zuul</td> 217 <td>✓</td> 218 <td><a href="https://docs.ansible.com/ansible/devel/network/dev_guide/index.html">Network guide</a></td> 219 </tr> 220 </table> 221 222 223.. note:: 224 225 \* A ✓ under **Open to PRs** means the collection welcomes GitHub issues and PRs for any changes to existing collection content (plugins, roles, and so on). 226 227 \*\* Integration tests are required and unit tests are welcomed but not required for the AWS collections. An exception to this is made in cases where integration tests are logistically not feasible due to external requirements. An example of this is AWS Direct Connect, as this service can not be functionally tested without the establishment of network peering connections. Unit tests are therefore required for modules that interact with AWS Direct Connect. Exceptions to ``amazon.aws`` must be approved by Red Hat, and exceptions to ``community.aws`` must be approved by the AWS community. 228 229 \*\*\* ``ansible.netcommon`` contains all foundational components for enabling many network and security :ref:`platform <platform_options>` collections. It contains all connection and filter plugins required, and installs as a dependency when you install the the platform collection. 230 231 \*\*\*\* Unit tests for Windows PowerShell modules are an exception to testing, but unit tests are valid and required for the remainder of the collection, including Ansible-side plugins. 232 233 234.. _which_collection: 235 236Deciding where your contribution belongs 237========================================= 238 239We welcome contributions to Ansible-maintained collections. Because these collections are part of a downstream supported Red Hat product, the criteria for contribution, testing, and release may be higher than other community collections. The related community collections (such as ``community.general`` and ``community.network``) have less-stringent requirements and are a great place for new functionality that may become part of the Ansible-maintained collection in a future release. 240 241The following scenarios use the ``arista.eos`` to help explain when to contribute to the Ansible-maintained collection, and when to propose your change or idea to the related community collection: 242 243 2441. You want to fix a problem in the ``arista.eos`` Ansible-maintained collection. Create the PR directly in the `arista.eos collection GitHub repository <https://github.com/ansible-collections/arista.eos>`_. Apply all the :ref:`merge requirements <ansible_collection_merge_requirements>`. 245 2462. You want to add a new Ansible module for Arista. Your options are one of the following: 247 248 * Propose a new module in the ``arista.eos`` collection (requires approval from Arista and Red Hat). 249 * Propose a new collection in the ``arista`` namespace (requires approval from Arista and Red Hat). 250 * Propose a new module in the ``community.network`` collection (requires network community approval). 251 * Place your new module in a collection in your own namespace (no approvals required). 252 253 254Most new content should go into either a related community collection or your own collection first so that is well established in the community before you can propose adding it to the ``arista`` namespace, where inclusion and maintenance criteria are much higher. 255 256 257.. _ansible_collection_merge_requirements: 258 259Requirements to merge your PR 260============================== 261 262Your PR must meet the following requirements before it can merge into an Ansible-maintained collection: 263 264 265#. The PR is in the intended scope of the collection. Communicate with the appropriate Ansible sponsor listed in the :ref:`Ansible-maintained collection table <ansible-collection-table>` for help. 266#. For network and security domains, the PR follows the :ref:`resource module development principles <developing_resource_modules>`. 267#. Passes :ref:`sanity tests and tox <tox_resource_modules>`. 268#. Passes unit, and integration tests, as listed in the :ref:`Ansible-maintained collection table <ansible-collection-table>` and described in :ref:`testing_resource_modules`. 269#. Follows Ansible guidelines. See :ref:`developing_modules` and :ref:`developing_collections`. 270#. Addresses all review comments. 271#. Includes an appropriate :ref:`changelog <community_changelogs>`. 272