{"id":13611602,"url":"https://github.com/redhat-cop/automation-good-practices","last_synced_at":"2026-01-25T07:36:27.299Z","repository":{"id":37591920,"uuid":"316338463","full_name":"redhat-cop/automation-good-practices","owner":"redhat-cop","description":"Recommended practices for all elements of automation using Ansible, starting with collections and roles, continuing with playbooks, inventories and plug-ins... These good practices are planned to be used by all Red Hat teams interested but can of course be used by others.","archived":false,"fork":false,"pushed_at":"2025-11-10T08:30:56.000Z","size":272,"stargazers_count":321,"open_issues_count":33,"forks_count":73,"subscribers_count":46,"default_branch":"main","last_synced_at":"2025-11-10T10:20:05.645Z","etag":null,"topics":["automation-cop"],"latest_commit_sha":null,"homepage":"","language":"Makefile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/redhat-cop.png","metadata":{"files":{"readme":"README.adoc","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-11-26T21:17:31.000Z","updated_at":"2025-11-10T08:30:12.000Z","dependencies_parsed_at":"2023-01-29T02:45:15.506Z","dependency_job_id":"57812965-c2ee-4b2a-bc4f-092d51571dd7","html_url":"https://github.com/redhat-cop/automation-good-practices","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/redhat-cop/automation-good-practices","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redhat-cop%2Fautomation-good-practices","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redhat-cop%2Fautomation-good-practices/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redhat-cop%2Fautomation-good-practices/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redhat-cop%2Fautomation-good-practices/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/redhat-cop","download_url":"https://codeload.github.com/redhat-cop/automation-good-practices/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redhat-cop%2Fautomation-good-practices/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28747679,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-25T05:12:38.112Z","status":"ssl_error","status_checked_at":"2026-01-25T05:04:50.338Z","response_time":113,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation-cop"],"created_at":"2024-08-01T19:01:58.615Z","updated_at":"2026-01-25T07:36:27.293Z","avatar_url":"https://github.com/redhat-cop.png","language":"Makefile","funding_links":[],"categories":["Makefile"],"sub_categories":[],"readme":"= Good Practices for Ansible - GPA\ninclude::_style/render.adoc[]\n\n== Introduction\n\nhttps://www.redhat.com/en/ansible-collaborative[Ansible] is simple, flexible, and powerful. Like any powerful tool, there are many ways to use it, some better than others.\n\nThis document aims to gather good practices from the field of Ansible practitioners at Red Hat, consultants, developers, and others.\nAnd thus it strives to give any Red Hat employee, partner or customer (or any Ansible user) a guideline from which to start in good conditions their automation journey.\n\nThose are opinionated guidelines based on the experience of many people.\nThey are not meant to be followed blindly if they don't fit the reader's specific use case, organization or needs;\nthere is a reason why they are called _good_ and not _best_ practices.\n\nThe reader of this document is expected to have working practice of Ansible.\nIf they are new to Ansible, the https://docs.ansible.com/ansible/latest/user_guide/index.html#getting-started[Getting started] section of\nthe https://docs.ansible.com/[official Ansible documentation] is a better place to start.\n\nThis document is split in six main sections.\nEach section covers a different aspect of automation using Ansible (and in a broader term the whole https://www.redhat.com/en/technologies/management/ansible[Red Hat Ansible Automation Platform], including Ansible Tower):\n\n. structures: we need to know what to use for which purpose before we can delve into the details, this section explains this.\n. roles: as we recommend to use roles to host the most actual Ansible code, this is also where we'll cover the more low level aspects of code (tasks, variables, etc...).\n. collections\n. playbooks\n. inventories\n. plugins\n\n// TODO add a few more words about the content of each section once we know\n// what we write in there...\n\nEach section is then made of guidelines, one sentence hopefully easy to remember, followed by description, rationale and examples.\nThe HTML version of this document makes the content collapsable so that all guidelines can be seen at once in a very overseeable way, for the reader to uncollapse the content of guidelines they are interested in.\n\nA rationale is expected for each good practice, with a reference if applicable.\nIt is really helpful to know not only how to do certain things, but why to do them in this way.\nIt will also help with further revisions of the standards as some items may become obsolete or no longer applicable.\nIf the reason is not included, there is a risk of keeping items that are no longer applicable, or alternatively blindly removing items that should be kept.\nIt also has great educational value for understanding how things actually work (or how they don't).\n\n// If you're a potential author check the CONTRIBUTE.adoc document before... contributing.\n\n=== Where to get and maintain this document\n\nThis document is published to https://redhat-cop.github.io/automation-good-practices/, it is open source and its source code is maintained at https://github.com/redhat-cop/automation-good-practices/.\n\ninclude::structures/README.adoc[leveloffset=1]\n\ninclude::roles/README.adoc[leveloffset=1]\n\ninclude::collections/README.adoc[leveloffset=1]\n\ninclude::playbooks/README.adoc[leveloffset=1]\n\ninclude::inventories/README.adoc[leveloffset=1]\n\ninclude::plugins/README.adoc[leveloffset=1]\n\ninclude::coding_style/README.adoc[leveloffset=1]\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fredhat-cop%2Fautomation-good-practices","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fredhat-cop%2Fautomation-good-practices","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fredhat-cop%2Fautomation-good-practices/lists"}