{"id":13602054,"url":"https://github.com/cytopia/docker-ansible","last_synced_at":"2025-04-07T10:27:26.219Z","repository":{"id":35508390,"uuid":"191154738","full_name":"cytopia/docker-ansible","owner":"cytopia","description":"Alpine-based multistage-build version of Ansible for reproducible usage in CI","archived":false,"fork":false,"pushed_at":"2023-09-13T02:32:10.000Z","size":430,"stargazers_count":232,"open_issues_count":16,"forks_count":65,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-03-31T09:06:33.699Z","etag":null,"topics":["alpine","ansible","awesome-ci","ci","continuous-integration","docker","docker-container","docker-image","dockerfile","lint","linting","multistage","multistage-docker"],"latest_commit_sha":null,"homepage":"","language":"Makefile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cytopia.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null},"funding":{"github":["cytopia"]}},"created_at":"2019-06-10T11:24:14.000Z","updated_at":"2025-03-27T11:56:19.000Z","dependencies_parsed_at":"2024-01-16T21:56:27.379Z","dependency_job_id":"21d55cb9-0533-4a5d-b027-931905253aae","html_url":"https://github.com/cytopia/docker-ansible","commit_stats":null,"previous_names":[],"tags_count":50,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cytopia%2Fdocker-ansible","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cytopia%2Fdocker-ansible/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cytopia%2Fdocker-ansible/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cytopia%2Fdocker-ansible/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cytopia","download_url":"https://codeload.github.com/cytopia/docker-ansible/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247634568,"owners_count":20970557,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["alpine","ansible","awesome-ci","ci","continuous-integration","docker","docker-container","docker-image","dockerfile","lint","linting","multistage","multistage-docker"],"created_at":"2024-08-01T18:01:12.896Z","updated_at":"2025-04-07T10:27:26.189Z","avatar_url":"https://github.com/cytopia.png","language":"Makefile","funding_links":["https://github.com/sponsors/cytopia"],"categories":["Makefile","ansible"],"sub_categories":[],"readme":"# Docker image for `ansible`\n\n[![Tag](https://img.shields.io/github/tag/cytopia/docker-ansible.svg)](https://github.com/cytopia/docker-ansible/releases)\n[![](https://img.shields.io/badge/github-cytopia%2Fdocker--ansible-red.svg)](https://github.com/cytopia/docker-ansible \"github.com/cytopia/docker-ansible\")\n[![](https://img.shields.io/docker/pulls/cytopia/ansible.svg)](https://hub.docker.com/r/cytopia/ansible)\n[![Docker](https://badgen.net/badge/icon/:latest?icon=docker\u0026label=cytopia/ansible)](https://hub.docker.com/r/cytopia/ansible)\n[![License](https://img.shields.io/badge/license-MIT-%233DA639.svg)](https://opensource.org/licenses/MIT)\n\n[![lint](https://github.com/cytopia/docker-ansible/workflows/lint/badge.svg)](https://github.com/cytopia/docker-ansible/actions?query=workflow%3Alint)\n[![build](https://github.com/cytopia/docker-ansible/actions/workflows/action_branch.yml/badge.svg)](https://github.com/cytopia/docker-ansible/actions/workflows/action_branch.yml)\n[![nightly](https://github.com/cytopia/docker-ansible/actions/workflows/action_schedule.yml/badge.svg)](https://github.com/cytopia/docker-ansible/actions/workflows/action_schedule.yml)\n\n\n\u003e #### All [#awesome-ci](https://github.com/topics/awesome-ci) Docker images\n\u003e\n\u003e [ansible-lint][alint-git-lnk] **•**\n\u003e [ansible][ansible-git-lnk] **•**\n\u003e [awesome-ci][aci-git-lnk] **•**\n\u003e [bandit][bandit-git-lnk] **•**\n\u003e [black][black-git-lnk] **•**\n\u003e [checkmake][cm-git-lnk] **•**\n\u003e [eslint][elint-git-lnk] **•**\n\u003e [file-lint][flint-git-lnk] **•**\n\u003e [gofmt][gfmt-git-lnk] **•**\n\u003e [goimports][gimp-git-lnk] **•**\n\u003e [golint][glint-git-lnk] **•**\n\u003e [jsonlint][jlint-git-lnk] **•**\n\u003e [kubeval][kubeval-git-lnk] **•**\n\u003e [linkcheck][linkcheck-git-lnk] **•**\n\u003e [mypy][mypy-git-lnk] **•**\n\u003e [php-cs-fixer][pcsf-git-lnk] **•**\n\u003e [phpcbf][pcbf-git-lnk] **•**\n\u003e [phpcs][pcs-git-lnk] **•**\n\u003e [phplint][plint-git-lnk] **•**\n\u003e [pycodestyle][pycs-git-lnk] **•**\n\u003e [pydocstyle][pyds-git-lnk] **•**\n\u003e [pylint][pylint-git-lnk] **•**\n\u003e [terraform-docs][tfdocs-git-lnk] **•**\n\u003e [terragrunt-fmt][tgfmt-git-lnk] **•**\n\u003e [terragrunt][tg-git-lnk] **•**\n\u003e [yamlfmt][yfmt-git-lnk] **•**\n\u003e [yamllint][ylint-git-lnk]\n\nView **[Dockerfiles](https://github.com/cytopia/docker-ansible/blob/master/Dockerfiles/)** on GitHub.\n\n\n**Available Architectures:**  `amd64`, `arm64`\n\nTiny Alpine-based multistage-build dockerized version of [Ansible](https://github.com/ansible/ansible)\u003csup\u003e[1]\u003c/sup\u003e in many different flavours.\nIt comes with **[Mitogen](https://github.com/dw/mitogen)**\u003csup\u003e[2]\u003c/sup\u003e to speed up your runs by up to **600%**\u003csup\u003e[3][4]\u003c/sup\u003e (see [Examples](#run-ansible-playbook-with-mitogen)).\nThe image is built nightly against multiple stable versions and pushed to Dockerhub.\n\n* \u003csup\u003e[1] Official project: https://github.com/ansible/ansible\u003c/sup\u003e\n* \u003csup\u003e[2] Official project: https://github.com/dw/mitogen\u003c/sup\u003e\n* \u003csup\u003e[3] [How to Speed Up Your Ansible Playbooks Over 600%](https://www.toptechskills.com/ansible-tutorials-courses/speed-up-ansible-playbooks-pipelining-mitogen/)\u003c/sup\u003e\n* \u003csup\u003e[4] [Mitogen for Ansible](https://networkgenomics.com/ansible/)\u003c/sup\u003e\n\n\n## :whale: Available Docker image versions\n\nThis repository provides many different Ansible flavours (each flavour also divided into different Ansible versions).\n\nThe following tree shows how the different flavours derive from each other (each child has all the tools and features of its parent plus its own additions).\n```css\n       base                    #docker-tag:  :latest\n         |                                   :\u003cversion\u003e\n         |\n       tools                   #docker-tag:  :latest-tools\n      /  |  \\                                :\u003cversion\u003e-tools\n     /   |   \\\ninfra  azure  aws              #docker-tag:  :latest-infra     :latest-azure     :latest-aws\n               |                             :\u003cversion\u003e-infra  :\u003cversion\u003e-azure  :\u003cversion\u003e-aws\n               |\n             awsk8s            #docker-tag:  :latest-awsk8s\n              /  \\                           :\u003cversion\u003e-awsk8s\n             /    \\\n        awskops  awshelm       #docker-tag   :latest-awskops     :latest-awshelm\n                                             :\u003cversion\u003e-awskops  :\u003cversion\u003e-awshelm\n```\n\u003e \u003csub\u003e`\u003cversion\u003e` refers to the latest\u003csup\u003e\\[1\\],\u003c/sup\u003e patch-level version of Ansible. E.g.: `2.9`, `2.10`, `2.11`, ...\u003c/sub\u003e\u003cbr/\u003e\n\u003e \u003csub\u003e\\[1\\]: latest as docker images are (re)built every night via CI against the latest available patch level version of Ansible\u003c/sub\u003e\n\n\nThe following table shows a quick overview of provided libraries and tools for each flavour. For more details see further down below.\n\n| Flavour | Based on | Additional Python libs | Additional binaries |\n|---------|---------------|------------------------|---------------------|\n| base    | -        | `cffi`, `cryptography`, `Jinja2`, `junit-xml`, `lxml`, `paramiko`, `PyYAML` | - |\n| tools   | base     | `dnspython`, `JMESPath`, `mitogen` | `bash`, `git`, `gpg`, `jq`, `ssh`, `yq` |\n| infra   | tools    | `docker`, `docker-compose`, `jsondiff`, `netaddr`, `pexpect`, `psycopg2`, `pyldap`, `pypsexec`, `pymongo`, `PyMySQL`, `pywinrm`, `smbprotocol` | `rsync`, `sshpass` |\n| azure   | tools    | `azure-*`              | `az` |\n| aws     | tools    | `awscli`, `botocore`, `boto`, `boto3` | `aws`, `aws-iam-authenticator` |\n| awsk8s  | aws      | `openshift`            | `kubectl`, `oc` |\n| awskops | awsk8s   | -                      | `kops` |\n| awshelm | awsk8s   | -                      | `helm` |\n\n\n## :repeat: Rolling releases\n\nThe following Docker image tags are rolling releases and are built and updated every night.\n\n[![nightly](https://github.com/cytopia/docker-ansible/actions/workflows/action_schedule.yml/badge.svg)](https://github.com/cytopia/docker-ansible/actions/workflows/action_schedule.yml)\n\n### Ansible base\n\nThe following Ansible Docker images are as small as possible and only contain Ansible itself.\n\n| Docker Tag               | Git Ref      | Ansible      | Available Architectures                      |\n|--------------------------|--------------|--------------|----------------------------------------------|\n| **`latest`**             | master       | latest       | `amd64`, `arm64`                             |\n| `2.13`                   | master       | **`2.13.x`** | `amd64`, `arm64`                             |\n| `2.12`                   | master       | **`2.12.x`** | `amd64`, `arm64`                             |\n| `2.11`                   | master       | **`2.11.x`** | `amd64`, `arm64`                             |\n| `2.10`                   | master       | **`2.10.x`** | `amd64`, `arm64`                             |\n| `2.9`                    | master       | **`2.9.x`**  | `amd64`, `arm64`                             |\n| `2.8`                    | master       | **`2.8.x`**  | `amd64`, `arm64`                             |\n\n\n### Ansible tools\n\nThe following Ansible Docker images contain everything from `Ansible base` and additionally: `bash`, `git`, `gpg`, `jq`, `ssh` and `dnspython` and Ansible **`mitogen`** strategy plugin (see [Examples](#run-ansible-playbook-with-mitogen)).\n\n| Docker Tag               | Git Ref      | Ansible      | Available Architectures                      |\n|--------------------------|--------------|--------------|----------------------------------------------|\n| **`latest-tools`**       | master       | latest       | `amd64`, `arm64`                             |\n| `2.13-tools`             | master       | **`2.13.x`** | `amd64`, `arm64`                             |\n| `2.12-tools`             | master       | **`2.12.x`** | `amd64`, `arm64`                             |\n| `2.11-tools`             | master       | **`2.11.x`** | `amd64`, `arm64`                             |\n| `2.10-tools`             | master       | **`2.10.x`** | `amd64`, `arm64`                             |\n| `2.9-tools`              | master       | **`2.9.x`**  | `amd64`, `arm64`                             |\n| `2.8-tools`              | master       | **`2.8.x`**  | `amd64`, `arm64`                             |\n\n\n### Ansible azure\n\nThe following Ansible Docker images contain everything from `Ansible tools` and additionally: `azure`.\n\n| Docker Tag               | Git Ref      | Ansible      | Available Architectures                      |\n|--------------------------|--------------|--------------|----------------------------------------------|\n| **`latest-azure`**       | master       | latest       | `amd64`, `arm64`                             |\n| `2.13-azure`             | master       | **`2.13.x`** | `amd64`, `arm64`                             |\n| `2.12-azure`             | master       | **`2.12.x`** | `amd64`, `arm64`                             |\n| `2.11-azure`             | master       | **`2.11.x`** | `amd64`, `arm64`                             |\n| `2.10-azure`             | master       | **`2.10.x`** | `amd64`, `arm64`                             |\n| `2.9-azure`              | master       | **`2.9.x`**  | `amd64`, `arm64`                             |\n| `2.8-azure`              | master       | **`2.8.x`**  | `amd64`, `arm64`                             |\n\n\n### Ansible aws\n\nThe following Ansible Docker images contain everything from `Ansible tools` and additionally: `aws-cli`, `boto`, `boto3` and `botocore`.\n\n| Docker Tag               | Git Ref      | Ansible      | Available Architectures                      |\n|--------------------------|--------------|--------------|----------------------------------------------|\n| **`latest-aws`**         | master       | latest       | `amd64`, `arm64`                             |\n| `2.13-aws`               | master       | **`2.13.x`** | `amd64`, `arm64`                             |\n| `2.12-aws`               | master       | **`2.12.x`** | `amd64`, `arm64`                             |\n| `2.11-aws`               | master       | **`2.11.x`** | `amd64`, `arm64`                             |\n| `2.10-aws`               | master       | **`2.10.x`** | `amd64`, `arm64`                             |\n| `2.9-aws`                | master       | **`2.9.x`**  | `amd64`, `arm64`                             |\n| `2.8-aws`                | master       | **`2.8.x`**  | `amd64`, `arm64`                             |\n\n\n### Ansible awsk8s\n\nThe following Ansible Docker images contain everything from `Ansible aws` and additionally: `openshift` and `kubectl`.\n\n| Docker Tag               | Git Ref      | Ansible      | Available Architectures                      |\n|--------------------------|--------------|--------------|----------------------------------------------|\n| **`latest-awsk8s`**      | master       | latest       | `amd64`, `arm64`                             |\n| `2.13-awsk8s`            | master       | **`2.13.x`** | `amd64`, `arm64`                             |\n| `2.12-awsk8s`            | master       | **`2.12.x`** | `amd64`, `arm64`                             |\n| `2.11-awsk8s`            | master       | **`2.11.x`** | `amd64`, `arm64`                             |\n| `2.10-awsk8s`            | master       | **`2.10.x`** | `amd64`, `arm64`                             |\n| `2.9-awsk8s`             | master       | **`2.9.x`**  | `amd64`, `arm64`                             |\n| `2.8-awsk8s`             | master       | **`2.8.x`**  | `amd64`, `arm64`                             |\n\n\n### Ansible awskops\n\nThe following Ansible Docker images contain everything from `Ansible awsk8s` and additionally: `kops` in its latest patch level version.\n\n\u003e https://github.com/kubernetes/kops/releases\n\n| Docker Tag               | Git Ref      | Ansible      | Kops     | Available Architectures           |\n|--------------------------|--------------|--------------|----------|-----------------------------------|\n| **`latest-awskops1.25`** | master       | latest       | `1.25.x` | `amd64`, `arm64`                  |\n| `2.13-awskops1.25`       | master       | **`2.13.x`** | `1.25.x` | `amd64`, `arm64`                  |\n| `2.12-awskops1.25`       | master       | **`2.12.x`** | `1.25.x` | `amd64`, `arm64`                  |\n| `2.11-awskops1.25`       | master       | **`2.11.x`** | `1.25.x` | `amd64`, `arm64`                  |\n| `2.10-awskops1.25`       | master       | **`2.10.x`** | `1.25.x` | `amd64`, `arm64`                  |\n| `2.9-awskops1.25`        | master       | **`2.9.x`**  | `1.25.x` | `amd64`, `arm64`                  |\n| `2.8-awskops1.25`        | master       | **`2.8.x`**  | `1.25.x` | `amd64`, `arm64`                  |\n|                          |              |              |          |                                   |\n| **`latest-awskops1.24`** | master       | latest       | `1.24.x` | `amd64`, `arm64`                  |\n| `2.13-awskops1.24`       | master       | **`2.13.x`** | `1.24.x` | `amd64`, `arm64`                  |\n| `2.12-awskops1.24`       | master       | **`2.12.x`** | `1.24.x` | `amd64`, `arm64`                  |\n| `2.11-awskops1.24`       | master       | **`2.11.x`** | `1.24.x` | `amd64`, `arm64`                  |\n| `2.10-awskops1.24`       | master       | **`2.10.x`** | `1.24.x` | `amd64`, `arm64`                  |\n| `2.9-awskops1.24`        | master       | **`2.9.x`**  | `1.24.x` | `amd64`, `arm64`                  |\n| `2.8-awskops1.24`        | master       | **`2.8.x`**  | `1.24.x` | `amd64`, `arm64`                  |\n|                          |              |              |          |                                   |\n| **`latest-awskops1.23`** | master       | latest       | `1.23.x` | `amd64`, `arm64`                  |\n| `2.13-awskops1.23`       | master       | **`2.13.x`** | `1.23.x` | `amd64`, `arm64`                  |\n| `2.12-awskops1.23`       | master       | **`2.12.x`** | `1.23.x` | `amd64`, `arm64`                  |\n| `2.11-awskops1.23`       | master       | **`2.11.x`** | `1.23.x` | `amd64`, `arm64`                  |\n| `2.10-awskops1.23`       | master       | **`2.10.x`** | `1.23.x` | `amd64`, `arm64`                  |\n| `2.9-awskops1.23`        | master       | **`2.9.x`**  | `1.23.x` | `amd64`, `arm64`                  |\n| `2.8-awskops1.23`        | master       | **`2.8.x`**  | `1.23.x` | `amd64`, `arm64`                  |\n|                          |              |              |          |                                   |\n| **`latest-awskops1.22`** | master       | latest       | `1.22.x` | `amd64`, `arm64`                  |\n| `2.13-awskops1.22`       | master       | **`2.13.x`** | `1.22.x` | `amd64`, `arm64`                  |\n| `2.12-awskops1.22`       | master       | **`2.12.x`** | `1.22.x` | `amd64`, `arm64`                  |\n| `2.11-awskops1.22`       | master       | **`2.11.x`** | `1.22.x` | `amd64`, `arm64`                  |\n| `2.10-awskops1.22`       | master       | **`2.10.x`** | `1.22.x` | `amd64`, `arm64`                  |\n| `2.9-awskops1.22`        | master       | **`2.9.x`**  | `1.22.x` | `amd64`, `arm64`                  |\n| `2.8-awskops1.22`        | master       | **`2.8.x`**  | `1.22.x` | `amd64`, `arm64`                  |\n|                          |              |              |          |                                   |\n| **`latest-awskops1.21`** | master       | latest       | `1.21.x` | `amd64`, `arm64`                  |\n| `2.13-awskops1.21`       | master       | **`2.13.x`** | `1.21.x` | `amd64`, `arm64`                  |\n| `2.12-awskops1.21`       | master       | **`2.12.x`** | `1.21.x` | `amd64`, `arm64`                  |\n| `2.11-awskops1.21`       | master       | **`2.11.x`** | `1.21.x` | `amd64`, `arm64`                  |\n| `2.10-awskops1.21`       | master       | **`2.10.x`** | `1.21.x` | `amd64`, `arm64`                  |\n| `2.9-awskops1.21`        | master       | **`2.9.x`**  | `1.21.x` | `amd64`, `arm64`                  |\n| `2.8-awskops1.21`        | master       | **`2.8.x`**  | `1.21.x` | `amd64`, `arm64`                  |\n|                          |              |              |          |                                   |\n| **`latest-awskops1.20`** | master       | latest       | `1.20.x` | `amd64`, `arm64`                  |\n| `2.13-awskops1.20`       | master       | **`2.13.x`** | `1.20.x` | `amd64`, `arm64`                  |\n| `2.12-awskops1.20`       | master       | **`2.12.x`** | `1.20.x` | `amd64`, `arm64`                  |\n| `2.11-awskops1.20`       | master       | **`2.11.x`** | `1.20.x` | `amd64`, `arm64`                  |\n| `2.10-awskops1.20`       | master       | **`2.10.x`** | `1.20.x` | `amd64`, `arm64`                  |\n| `2.9-awskops1.20`        | master       | **`2.9.x`**  | `1.20.x` | `amd64`, `arm64`                  |\n| `2.8-awskops1.20`        | master       | **`2.8.x`**  | `1.20.x` | `amd64`, `arm64`                  |\n|                          |              |              |          |                                   |\n| **`latest-awskops1.19`** | master       | latest       | `1.19.x` | `amd64`, `arm64`                  |\n| `2.13-awskops1.19`       | master       | **`2.13.x`** | `1.19.x` | `amd64`, `arm64`                  |\n| `2.12-awskops1.19`       | master       | **`2.12.x`** | `1.19.x` | `amd64`, `arm64`                  |\n| `2.11-awskops1.19`       | master       | **`2.11.x`** | `1.19.x` | `amd64`, `arm64`                  |\n| `2.10-awskops1.19`       | master       | **`2.10.x`** | `1.19.x` | `amd64`, `arm64`                  |\n| `2.9-awskops1.19`        | master       | **`2.9.x`**  | `1.19.x` | `amd64`, `arm64`                  |\n| `2.8-awskops1.19`        | master       | **`2.8.x`**  | `1.19.x` | `amd64`, `arm64`                  |\n\n\n### Ansible awshelm\n\nThe following Ansible Docker images contain everything from `Ansible awsk8s` and additionally: `helm` in its latest patch level version.\n\n\u003e https://github.com/helm/helm/releases\n\n| Docker Tag               | Git Ref      | Ansible      | Helm     | Available Architectures           |\n|--------------------------|--------------|--------------|----------|-----------------------------------|\n| **`latest-awshelm3.11`** | master       | latest       | `3.11.x` | `amd64`, `arm64`                  |\n| `2.13-awshelm3.11`       | master       | **`2.13.x`** | `3.11.x` | `amd64`, `arm64`                  |\n| `2.12-awshelm3.11`       | master       | **`2.12.x`** | `3.11.x` | `amd64`, `arm64`                  |\n| `2.11-awshelm3.11`       | master       | **`2.11.x`** | `3.11.x` | `amd64`, `arm64`                  |\n| `2.10-awshelm3.11`       | master       | **`2.10.x`** | `3.11.x` | `amd64`, `arm64`                  |\n| `2.9-awshelm3.11`        | master       | **`2.9.x`**  | `3.11.x` | `amd64`, `arm64`                  |\n| `2.8-awshelm3.11`        | master       | **`2.8.x`**  | `3.11.x` | `amd64`, `arm64`                  |\n|                          |              |              |          |                                   |\n| **`latest-awshelm3.10`** | master       | latest       | `3.10.x` | `amd64`, `arm64`                  |\n| `2.13-awshelm3.10`       | master       | **`2.13.x`** | `3.10.x` | `amd64`, `arm64`                  |\n| `2.12-awshelm3.10`       | master       | **`2.12.x`** | `3.10.x` | `amd64`, `arm64`                  |\n| `2.11-awshelm3.10`       | master       | **`2.11.x`** | `3.10.x` | `amd64`, `arm64`                  |\n| `2.10-awshelm3.10`       | master       | **`2.10.x`** | `3.10.x` | `amd64`, `arm64`                  |\n| `2.9-awshelm3.10`        | master       | **`2.9.x`**  | `3.10.x` | `amd64`, `arm64`                  |\n| `2.8-awshelm3.10`        | master       | **`2.8.x`**  | `3.10.x` | `amd64`, `arm64`                  |\n|                          |              |              |          |                                   |\n| **`latest-awshelm3.9`**  | master       | latest       | `3.9.x`  | `amd64`, `arm64`                  |\n| `2.13-awshelm3.9`        | master       | **`2.13.x`** | `3.9.x`  | `amd64`, `arm64`                  |\n| `2.12-awshelm3.9`        | master       | **`2.12.x`** | `3.9.x`  | `amd64`, `arm64`                  |\n| `2.11-awshelm3.9`        | master       | **`2.11.x`** | `3.9.x`  | `amd64`, `arm64`                  |\n| `2.10-awshelm3.9`        | master       | **`2.10.x`** | `3.9.x`  | `amd64`, `arm64`                  |\n| `2.9-awshelm3.9`         | master       | **`2.9.x`**  | `3.9.x`  | `amd64`, `arm64`                  |\n| `2.8-awshelm3.9`         | master       | **`2.8.x`**  | `3.9.x`  | `amd64`, `arm64`                  |\n|                          |              |              |          |                                   |\n| **`latest-awshelm3.8`**  | master       | latest       | `3.8.x`  | `amd64`, `arm64`                  |\n| `2.13-awshelm3.8`        | master       | **`2.13.x`** | `3.8.x`  | `amd64`, `arm64`                  |\n| `2.12-awshelm3.8`        | master       | **`2.12.x`** | `3.8.x`  | `amd64`, `arm64`                  |\n| `2.11-awshelm3.8`        | master       | **`2.11.x`** | `3.8.x`  | `amd64`, `arm64`                  |\n| `2.10-awshelm3.8`        | master       | **`2.10.x`** | `3.8.x`  | `amd64`, `arm64`                  |\n| `2.9-awshelm3.8`         | master       | **`2.9.x`**  | `3.8.x`  | `amd64`, `arm64`                  |\n| `2.8-awshelm3.8`         | master       | **`2.8.x`**  | `3.8.x`  | `amd64`, `arm64`                  |\n|                          |              |              |          |                                   |\n| **`latest-awshelm3.7`**  | master       | latest       | `3.7.x`  | `amd64`, `arm64`                  |\n| `2.13-awshelm3.7`        | master       | **`2.13.x`** | `3.7.x`  | `amd64`, `arm64`                  |\n| `2.12-awshelm3.7`        | master       | **`2.12.x`** | `3.7.x`  | `amd64`, `arm64`                  |\n| `2.11-awshelm3.7`        | master       | **`2.11.x`** | `3.7.x`  | `amd64`, `arm64`                  |\n| `2.10-awshelm3.7`        | master       | **`2.10.x`** | `3.7.x`  | `amd64`, `arm64`                  |\n| `2.9-awshelm3.7`         | master       | **`2.9.x`**  | `3.7.x`  | `amd64`, `arm64`                  |\n| `2.8-awshelm3.7`         | master       | **`2.8.x`**  | `3.7.x`  | `amd64`, `arm64`                  |\n|                          |              |              |          |                                   |\n| **`latest-awshelm3.6`**  | master       | latest       | `3.6.x`  | `amd64`, `arm64`                  |\n| `2.13-awshelm3.6`        | master       | **`2.13.x`** | `3.6.x`  | `amd64`, `arm64`                  |\n| `2.12-awshelm3.6`        | master       | **`2.12.x`** | `3.6.x`  | `amd64`, `arm64`                  |\n| `2.11-awshelm3.6`        | master       | **`2.11.x`** | `3.6.x`  | `amd64`, `arm64`                  |\n| `2.10-awshelm3.6`        | master       | **`2.10.x`** | `3.6.x`  | `amd64`, `arm64`                  |\n| `2.9-awshelm3.6`         | master       | **`2.9.x`**  | `3.6.x`  | `amd64`, `arm64`                  |\n| `2.8-awshelm3.6`         | master       | **`2.8.x`**  | `3.6.x`  | `amd64`, `arm64`                  |\n|                          |              |              |          |                                   |\n| **`latest-awshelm3.5`**  | master       | latest       | `3.5.x`  | `amd64`, `arm64`                  |\n| `2.13-awshelm3.5`        | master       | **`2.13.x`** | `3.5.x`  | `amd64`, `arm64`                  |\n| `2.12-awshelm3.5`        | master       | **`2.12.x`** | `3.5.x`  | `amd64`, `arm64`                  |\n| `2.11-awshelm3.5`        | master       | **`2.11.x`** | `3.5.x`  | `amd64`, `arm64`                  |\n| `2.10-awshelm3.5`        | master       | **`2.10.x`** | `3.5.x`  | `amd64`, `arm64`                  |\n| `2.9-awshelm3.5`         | master       | **`2.9.x`**  | `3.5.x`  | `amd64`, `arm64`                  |\n| `2.8-awshelm3.5`         | master       | **`2.8.x`**  | `3.5.x`  | `amd64`, `arm64`                  |\n|                          |              |              |          |                                   |\n| **`latest-awshelm3.4`**  | master       | latest       | `3.4.x`  | `amd64`, `arm64`                  |\n| `2.13-awshelm3.4`        | master       | **`2.13.x`** | `3.4.x`  | `amd64`, `arm64`                  |\n| `2.12-awshelm3.4`        | master       | **`2.12.x`** | `3.4.x`  | `amd64`, `arm64`                  |\n| `2.11-awshelm3.4`        | master       | **`2.11.x`** | `3.4.x`  | `amd64`, `arm64`                  |\n| `2.10-awshelm3.4`        | master       | **`2.10.x`** | `3.4.x`  | `amd64`, `arm64`                  |\n| `2.9-awshelm3.4`         | master       | **`2.9.x`**  | `3.4.x`  | `amd64`, `arm64`                  |\n| `2.8-awshelm3.4`         | master       | **`2.8.x`**  | `3.4.x`  | `amd64`, `arm64`                  |\n|                          |              |              |          |                                   |\n| **`latest-awshelm3.3`**  | master       | latest       | `3.3.x`  | `amd64`, `arm64`                  |\n| `2.13-awshelm3.3`        | master       | **`2.13.x`** | `3.3.x`  | `amd64`, `arm64`                  |\n| `2.12-awshelm3.3`        | master       | **`2.12.x`** | `3.3.x`  | `amd64`, `arm64`                  |\n| `2.11-awshelm3.3`        | master       | **`2.11.x`** | `3.3.x`  | `amd64`, `arm64`                  |\n| `2.10-awshelm3.3`        | master       | **`2.10.x`** | `3.3.x`  | `amd64`, `arm64`                  |\n| `2.9-awshelm3.3`         | master       | **`2.9.x`**  | `3.3.x`  | `amd64`, `arm64`                  |\n| `2.8-awshelm3.3`         | master       | **`2.8.x`**  | `3.3.x`  | `amd64`, `arm64`                  |\n|                          |              |              |          |                                   |\n| **`latest-awshelm3.2`**  | master       | latest       | `3.2.x`  | `amd64`, `arm64`                  |\n| `2.13-awshelm3.2`        | master       | **`2.13.x`** | `3.2.x`  | `amd64`, `arm64`                  |\n| `2.12-awshelm3.2`        | master       | **`2.12.x`** | `3.2.x`  | `amd64`, `arm64`                  |\n| `2.11-awshelm3.2`        | master       | **`2.11.x`** | `3.2.x`  | `amd64`, `arm64`                  |\n| `2.10-awshelm3.2`        | master       | **`2.10.x`** | `3.2.x`  | `amd64`, `arm64`                  |\n| `2.9-awshelm3.2`         | master       | **`2.9.x`**  | `3.2.x`  | `amd64`, `arm64`                  |\n| `2.8-awshelm3.2`         | master       | **`2.8.x`**  | `3.2.x`  | `amd64`, `arm64`                  |\n|                          |              |              |          |                                   |\n| **`latest-awshelm3.1`**  | master       | latest       | `3.1.x`  | `amd64`, `arm64`                  |\n| `2.13-awshelm3.1`        | master       | **`2.13.x`** | `3.1.x`  | `amd64`, `arm64`                  |\n| `2.12-awshelm3.1`        | master       | **`2.12.x`** | `3.1.x`  | `amd64`, `arm64`                  |\n| `2.11-awshelm3.1`        | master       | **`2.11.x`** | `3.1.x`  | `amd64`, `arm64`                  |\n| `2.10-awshelm3.1`        | master       | **`2.10.x`** | `3.1.x`  | `amd64`, `arm64`                  |\n| `2.9-awshelm3.1`         | master       | **`2.9.x`**  | `3.1.x`  | `amd64`, `arm64`                  |\n| `2.8-awshelm3.1`         | master       | **`2.8.x`**  | `3.1.x`  | `amd64`, `arm64`                  |\n|                          |              |              |          |                                   |\n| **`latest-awshelm3.0`**  | master       | latest       | `3.0.x`  | `amd64`, `arm64`                  |\n| `2.13-awshelm3.0`        | master       | **`2.13.x`** | `3.0.x`  | `amd64`, `arm64`                  |\n| `2.12-awshelm3.0`        | master       | **`2.12.x`** | `3.0.x`  | `amd64`, `arm64`                  |\n| `2.11-awshelm3.0`        | master       | **`2.11.x`** | `3.0.x`  | `amd64`, `arm64`                  |\n| `2.10-awshelm3.0`        | master       | **`2.10.x`** | `3.0.x`  | `amd64`, `arm64`                  |\n| `2.9-awshelm3.0`         | master       | **`2.9.x`**  | `3.0.x`  | `amd64`, `arm64`                  |\n| `2.8-awshelm3.0`         | master       | **`2.8.x`**  | `3.0.x`  | `amd64`, `arm64`                  |\n|                          |              |              |          |                                   |\n| **`latest-awshelm2.16`** | master       | latest       | `2.16.x` | `amd64`, `arm64`                  |\n| `2.13-awshelm2.16`       | master       | **`2.13.x`** | `2.16.x` | `amd64`, `arm64`                  |\n| `2.12-awshelm2.16`       | master       | **`2.12.x`** | `2.16.x` | `amd64`, `arm64`                  |\n| `2.11-awshelm2.16`       | master       | **`2.11.x`** | `2.16.x` | `amd64`, `arm64`                  |\n| `2.10-awshelm2.16`       | master       | **`2.10.x`** | `2.16.x` | `amd64`, `arm64`                  |\n| `2.9-awshelm2.16`        | master       | **`2.9.x`**  | `2.16.x` | `amd64`, `arm64`                  |\n| `2.8-awshelm2.16`        | master       | **`2.8.x`**  | `2.16.x` | `amd64`, `arm64`                  |\n\n\n## :new: Point in time releases\n\nThe following Docker image tags are built once and can be used for reproducible builds. Its version never changes so you will have to update tags in your pipelines from time to time in order to stay up-to-date.\n\n[![build](https://github.com/cytopia/docker-ansible/actions/workflows/action_branch.yml/badge.svg)](https://github.com/cytopia/docker-ansible/actions/workflows/action_branch.yml)\n\n| Docker Tag               | Git Ref      |  Available Architectures           |\n|--------------------------|--------------|------------------------------------|\n| **`\u003cdocker-tag\u003e-\u003ctag\u003e`** | git: `\u003ctag\u003e` |  `amd64`, `arm64`                  |\n\n\u003e * Where `\u003cdocker-tag\u003e` refers to any of the tags listed in Rolling releases above.\n\u003e * Where `\u003ctag\u003e` refers to the chosen git tag from this repository.\n\n\n## :capital_abcd: Docker environment variables\n\nEnvironment variables are available for all flavours except for `Ansible base`.\n\n| Variable        | Default | Allowed values | Description |\n|-----------------|---------|----------------|-------------|\n| `USER`          | ``      | `ansible`      | Set this to `ansible` to have everything run inside the container by the user `ansible` instead of `root` |\n| `UID`           | `1000`  | integer        | If your local uid is not `1000` set it to your uid to syncronize file/dir permissions during mounting |\n| `GID`           | `1000`  | integer        | If your local gid is not `1000` set it to your gid to syncronize file/dir permissions during mounting |\n| `INIT_GPG_KEY`  | ``      | string         | If your gpg key requires a password you can initialize it during startup and cache the password (requires `INIT_GPG_PASS` as well) |\n| `INIT_GPG_PASS` | ``      | string         | If your gpg key requires a password you can initialize it during startup and cache the password (requires `INIT_GPG_KEY` as well) |\n| `INIT_GPG_CMD`  | ``      | string         | A custom command which will initialize the GPG key password. This allows for interactive mode to enter your password manually during startup. (Mutually exclusive to `INIT_GPG_KEY` and `INIT_GPG_PASS`) |\n\n\n## :open_file_folder: Docker mounts\n\nThe working directory inside the Docker container is **`/data/`** and should be mounted locally to\nthe root of your project where your Ansible playbooks are.\n\n\n## :information_source: Examples\n\n### Run Ansible playbook\n```bash\ndocker run --rm -v $(pwd):/data cytopia/ansible ansible-playbook playbook.yml\n```\n\n### Run Ansible playbook with Mitogen\n\n\u003e [Mitogen](https://github.com/dw/mitogen) updates Ansible’s slow and wasteful shell-centric implementation with pure-Python equivalents, invoked via highly efficient remote procedure calls to persistent interpreters tunnelled over SSH.\n\n\u003e No changes are required to target hosts. The extension is considered stable and real-world use is encouraged.\n\n**Configuration (option 1)**\n\n`ansible.cfg`\n```ini\n[defaults]\nstrategy_plugins = /usr/lib/python3.10/site-packages/ansible_mitogen/plugins/strategy\nstrategy         = mitogen_linear\n```\n\n**Configuratoin (option 2)**\n```bash\n# Instead of hardcoding it via ansible.cfg,  you could also add the\n# option on-the-fly via environment variables.\nexport ANSIBLE_STRATEGY_PLUGINS=/usr/lib/python3.10/site-packages/ansible_mitogen/plugins/strategy\nexport ANSIBLE_STRATEGY=mitogen_linear\n```\n\n**Invocation**\n\n```bash\ndocker run --rm -v $(pwd):/data cytopia/ansible:latest-tools ansible-playbook playbook.yml\n```\n\n**Further readings:**\n\n* [Mitogen on GitHub](https://github.com/dw/mitogen)\n* [Mitogen Documentation](https://networkgenomics.com/ansible/)\n* [How to Speed Up Your Ansible Playbooks Over 600%](https://www.toptechskills.com/ansible-tutorials-courses/speed-up-ansible-playbooks-pipelining-mitogen/)\n* [Speed up Ansible with Mitogen](https://dev.to/sshnaidm/speed-up-ansible-with-mitogen-2c3j)\n\n\n### Run Ansible playbook with non-root user\n```bash\n# Use 'ansible' user inside Docker container\ndocker run --rm \\\n  -e USER=ansible \\\n  -v $(pwd):/data \\\n  cytopia/ansible:latest-tools ansible-playbook playbook.yml\n```\n```bash\n# Use 'ansible' user inside Docker container\n# Use custom uid/gid for 'ansible' user inside Docker container\ndocker run --rm \\\n  -e USER=ansible \\\n  -e MY_UID=1000 \\\n  -e MY_GID=1000 \\\n  -v $(pwd):/data \\\n  cytopia/ansible:latest-tools ansible-playbook playbook.yml\n```\n\n### Run Ansible playbook with local ssh keys mounted\n```bash\n# Ensure to set same uid/gid as on your local system for Docker user\n# to prevent permission issues during docker mounts\ndocker run --rm \\\n  -e USER=ansible \\\n  -e MY_UID=1000 \\\n  -e MY_GID=1000 \\\n  -v ${HOME}/.ssh/:/home/ansible/.ssh/ \\\n  -v ${SSH_AUTH_SOCK}:/ssh-agent --env SSH_AUTH_SOCK=/ssh-agent \\\n  -v $(pwd):/data \\\n  cytopia/ansible:latest-tools ansible-playbook playbook.yml\n```\n\n### Run Ansible playbook with local password-less gpg keys mounted\n```bash\n# Ensure to set same uid/gid as on your local system for Docker user\n# to prevent permission issues during docker mounts\ndocker run --rm \\\n  -e USER=ansible \\\n  -e MY_UID=1000 \\\n  -e MY_GID=1000 \\\n  -v ${HOME}/.gnupg/:/home/ansible/.gnupg/ \\\n  -v $(pwd):/data \\\n  cytopia/ansible:latest-tools ansible-playbook playbook.yml\n```\n\n### Run Ansible playbook with local gpg keys mounted and automatically initialized\nThis is required in case your GPG key itself is encrypted with a password.\nNote that the password needs to be in *single quotes*.\n```bash\n# Ensure to set same uid/gid as on your local system for Docker user\n# to prevent permission issues during docker mounts\ndocker run --rm \\\n  -e USER=ansible \\\n  -e MY_UID=1000 \\\n  -e MY_GID=1000 \\\n  -e INIT_GPG_KEY=user@domain.tld \\\n  -e INIT_GPG_PASS='my gpg password' \\\n  -v ${HOME}/.gnupg/:/home/ansible/.gnupg/ \\\n  -v $(pwd):/data \\\n  cytopia/ansible:latest-tools ansible-playbook playbook.yml\n```\nAlternatively you can also export your GPG key and password to the shell's environment:\n```bash\n# Ensure to write the password in single quotes\nexport MY_GPG_KEY='user@domain.tld'\nexport MY_GPG_PASS='my gpg password'\n```\n```bash\n# Ensure to set same uid/gid as on your local system for Docker user\n# to prevent permission issues during docker mounts\ndocker run --rm \\\n  -e USER=ansible \\\n  -e MY_UID=1000 \\\n  -e MY_GID=1000 \\\n  -e INIT_GPG_KEY=${MY_GPG_KEY} \\\n  -e INIT_GPG_PASS=${MY_GPG_PASS} \\\n  -v ${HOME}/.gnupg/:/home/ansible/.gnupg/ \\\n  -v $(pwd):/data \\\n  cytopia/ansible:latest-tools ansible-playbook playbook.yml\n```\n\n### Run Ansible playbook with local gpg keys mounted and interactively interactively\nThe following will work with password-less and password-set GPG keys.\nIn case it requires a password, it will ask for the password and you need to enter it.\n```bash\n# Ensure to set same uid/gid as on your local system for Docker user\n# to prevent permission issues during docker mounts\ndocker run --rm \\\n  -e USER=ansible \\\n  -e MY_UID=1000 \\\n  -e MY_GID=1000 \\\n  -e INIT_GPG_CMD='echo test | gpg --encrypt -r user@domain.tld | gpg --decrypt --pinentry-mode loopback' \\\n  -v ${HOME}/.gnupg/:/home/ansible/.gnupg/ \\\n  -v $(pwd):/data \\\n  cytopia/ansible:latest-tools ansible-playbook playbook.yml\n```\n\n### Run Ansible Galaxy\n```bash\n# Ensure to set same uid/gid as on your local system for Docker user\n# to prevent permission issues during docker mounts\ndocker run --rm \\\n  -e USER=ansible \\\n  -e MY_UID=1000 \\\n  -e MY_GID=1000 \\\n  -v $(pwd):/data \\\n  cytopia/ansible:latest-tools ansible-galaxy install -r requirements.yml\n```\n\n### Run Ansible playbook with AWS credentials\n```bash\n# Basic\ndocker run --rm \\\n  -e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \\\n  -e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \\\n  -v $(pwd):/data \\\n  cytopia/ansible:latest-aws ansible-playbook playbook.yml\n```\n```bash\n# With AWS Session Token\ndocker run --rm \\\n  -e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \\\n  -e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \\\n  -e AWS_SESSION_TOKEN=$AWS_SESSION_TOKEN \\\n  -v $(pwd):/data \\\n  cytopia/ansible:latest-aws ansible-playbook playbook.yml\n```\n```bash\n# With ~/.aws/ config and credentials directories mounted (read/only)\n# If you want to make explicit use of aws profiles, use this variant\n# Ensure to set same uid/gid as on your local system for Docker user\n# to prevent permission issues during docker mounts\ndocker run --rm \\\n  -e USER=ansible \\\n  -e MY_UID=1000 \\\n  -e MY_GID=1000 \\\n  -v ${HOME}/.aws/config:/home/ansible/.aws/config:ro \\\n  -v ${HOME}/.aws/credentials:/home/ansible/.aws/credentials:ro \\\n  -v $(pwd):/data \\\n  cytopia/ansible:latest-aws ansible-playbook playbook.yml\n```\n\n### Run Ansible playbook against AWS with gpg vault initialization\n```bash\n# Ensure to set same uid/gid as on your local system for Docker user\n# to prevent permission issues during docker mounts\ndocker run --rm \\\n  -e USER=ansible \\\n  -e MY_UID=1000 \\\n  -e MY_GID=1000 \\\n  -e INIT_GPG_KEY=user@domain.tld \\\n  -e INIT_GPG_PASS='my gpg password' \\\n  -v ${HOME}/.aws/config:/home/ansible/.aws/config:ro \\\n  -v ${HOME}/.aws/credentials:/home/ansible/.aws/credentials:ro \\\n  -v ${HOME}/.gnupg/:/home/ansible/.gnupg/ \\\n  -v $(pwd):/data \\\n  cytopia/ansible:latest-aws \\\n  ansible-playbook playbook.yml\n```\nAs the command is getting pretty long, you could wrap it into a Makefile.\n```make\nifneq (,)\n.error This Makefile requires GNU Make.\nendif\n\n.PHONY: dry run\n\nCURRENT_DIR = $(dir $(abspath $(lastword $(MAKEFILE_LIST))))\nANSIBLE = 2.8\nUID = 1000\nGID = 1000\n\n# Ansible check mode uses mitogen_linear strategy for much faster roll-outs\ndry:\nifndef GPG_PASS\n\tdocker run --rm -it \\\n\t\t-e ANSIBLE_STRATEGY_PLUGINS=/usr/lib/python3.10/site-packages/ansible_mitogen/plugins/strategy \\\n\t\t-e ANSIBLE_STRATEGY=mitogen_linear \\\n\t\t-e USER=ansible \\\n\t\t-e MY_UID=$(UID) \\\n\t\t-e MY_GID=$(GID) \\\n\t\t-v $${HOME}/.aws/config:/home/ansible/.aws/config:ro \\\n\t\t-v $${HOME}/.aws/credentials:/home/ansible/.aws/credentials:ro \\\n\t\t-v $${HOME}/.gnupg/:/home/ansible/.gnupg/ \\\n\t\t-v $(CURRENT_DIR):/data \\\n\t\tcytopia/ansible:$(ANSIBLE)-aws \\\n\t\tansible-playbook playbook.yml --check\nelse\n\tdocker run --rm -it \\\n\t\t-e ANSIBLE_STRATEGY_PLUGINS=/usr/lib/python3.10/site-packages/ansible_mitogen/plugins/strategy \\\n\t\t-e ANSIBLE_STRATEGY=mitogen_linear \\\n\t\t-e USER=ansible \\\n\t\t-e MY_UID=$(UID) \\\n\t\t-e MY_GID=$(GID) \\\n\t\t-e INIT_GPG_KEY=$${GPG_KEY} \\\n\t\t-e INIT_GPG_PASS=$${GPG_PASS} \\\n\t\t-v $${HOME}/.aws/config:/home/ansible/.aws/config:ro \\\n\t\t-v $${HOME}/.aws/credentials:/home/ansible/.aws/credentials:ro \\\n\t\t-v $${HOME}/.gnupg/:/home/ansible/.gnupg/ \\\n\t\t-v $(CURRENT_DIR):/data \\\n\t\tcytopia/ansible:$(ANSIBLE)-aws \\\n\t\tansible-playbook playbook.yml --check\nendif\n\n# Ansible real run uses default strategy\nrun:\nifndef GPG_PASS\n\tdocker run --rm -it \\\n\t\t-e USER=ansible \\\n\t\t-e MY_UID=$(UID) \\\n\t\t-e MY_GID=$(GID) \\\n\t\t-v $${HOME}/.aws/config:/home/ansible/.aws/config:ro \\\n\t\t-v $${HOME}/.aws/credentials:/home/ansible/.aws/credentials:ro \\\n\t\t-v $${HOME}/.gnupg/:/home/ansible/.gnupg/ \\\n\t\t-v $(CURRENT_DIR):/data \\\n\t\tcytopia/ansible:$(ANSIBLE)-aws ansible-playbook playbook.yml\nelse\n\tdocker run --rm -it \\\n\t\t-e USER=ansible \\\n\t\t-e MY_UID=$(UID) \\\n\t\t-e MY_GID=$(GID) \\\n\t\t-e INIT_GPG_KEY=$${GPG_KEY} \\\n\t\t-e INIT_GPG_PASS=$${GPG_PASS} \\\n\t\t-v $${HOME}/.aws/config:/home/ansible/.aws/config:ro \\\n\t\t-v $${HOME}/.aws/credentials:/home/ansible/.aws/credentials:ro \\\n\t\t-v $${HOME}/.gnupg/:/home/ansible/.gnupg/ \\\n\t\t-v $(CURRENT_DIR):/data \\\n\t\tcytopia/ansible:$(ANSIBLE)-aws \\\n\t\tansible-playbook playbook.yml\nendif\n```\n**Important:**\n\nTHE `GPG_KEY` and `GPG_PASS` will not be echo'ed out by the Make command and you are advised to\nexport those values via your shell's `export` command to the env in order to hide it.\n\nIf you still want to specify them on the command line via `make dry GPG_KEY='pass'`\nand your pass or key contains one or more `$` characters\nthen they must all be escaped with an additional `$` in front. This is not necessary if you export\nthem.\n\n**Example:** If your password is `test$5`, then you must use `make dry GPG_PASS='test$$5'`.\n\n\nThen you can call it easily:\n```bash\n# With GPG password from the env\nexport GPG_KEY='user@domain.tld'\nexport GPG_PASS='THE_GPG_PASSWORD_HERE'\nmake dry\nmake run\n\n# With GPG password on the cli\nmake dry GPG_KEY='user@domain.tld' GPG_PASS='THE_GPG_PASSWORD_HERE'\nmake run GPG_KEY='user@domain.tld' GPG_PASS='THE_GPG_PASSWORD_HERE'\n\n# Without GPG password\nmake dry\nmake run\n\n# With different Ansible version\nmake dry ANSIBLE=2.6\nmake run ANSIBLE=2.6\n\n# With different uid/gid\nmake dry UID=1001 GID=1001\nmake run UID=1001 GID=1001\n```\n\n\n## :computer: Build locally\n\nTo build locally you require GNU Make to be installed. Instructions as  shown below.\n\n### amd64 vs arm64\nIf you want to build the Ansible image for a different platform, use the `ARCH` make variable as shown below. This also applies to all other examples below.\n```bash\n# Build amd64 images (default)\nmake build\nmake build ARCH=linux/amd64\n\n# Build arm64 images\nmake build ARCH=linux/arm64\n```\n\n### Ansible base\n```bash\n# Build latest Ansible base\n# image: cytopia/ansible:latest\nmake build\n\n# Build Ansible 2.6 base\n# image: cytopia/ansible:2.6\nmake build VERSION=2.6\n```\n### Ansible tools\n```bash\n# Build latest Ansible tools\n# image: cytopia/ansible:latest-tools\nmake build VERSION=latest STAGE=tools\n\n# Build Ansible 2.6 tools\n# image: cytopia/ansible:2.6-tools\nmake build VERSION=2.6 STAGE=tools\n```\n\n### Ansible infra\n```bash\n# Build latest Ansible infra\n# image: cytopia/ansible:latest-infra\nmake build VERSION=latest STAGE=infra\n\n# Build Ansible 2.6 infra\n# image: cytopia/ansible:2.6-infra\nmake build VERSION=2.6 STAGE=infra\n```\n\n### Ansible azure\n```bash\n# Build latest Ansible azure\n# image: cytopia/ansible:latest-azure\nmake build VERSION=latest STAGE=azure\n\n# Build Ansible 2.6 azure\n# image: cytopia/ansible:2.6-azure\nmake build VERSION=2.6 STAGE=azure\n```\n\n### Ansible aws\n```bash\n# Build latest Ansible aws\n# image: cytopia/ansible:latest-aws\nmake build VERSION=latest STAGE=aws\n\n# Build Ansible 2.6 aws\n# image: cytopia/ansible:2.6-aws\nmake build VERSION=2.6 STAGE=aws\n```\n\n### Ansible awsk8s\n```bash\n# Build latest Ansible awsk8s\n# image: cytopia/ansible:latest-awsk8s\nmake build VERSION=latest STAGE=awsk8s\n\n# Build Ansible 2.6 awsk8s\n# image: cytopia/ansible:2.6-awsk8s\nmake build VERSION=2.6 STAGE=awsk8s\n```\n\n### Ansible awskops\n```bash\n# Build latest Ansible with Kops 1.8\n# image: cytopia/ansible:latest-awskops1.8\nmake build VERSION=latest STAGE=awskops KOPS=1.8\n\n# Build Ansible 2.6 with Kops 1.8\n# image: cytopia/ansible:2.6-awskops1.8\nmake build VERSION=2.6 STAGE=awskops KOPS=1.8\n```\n\n### Ansible awshelm\n```bash\n# Build latest Ansible with Helm 2.14\n# image: cytopia/ansible:latest-awshelm2.14\nmake build VERSION=latest STAGE=awshelm HELM=2.14\n```\n\n\n## :arrows_counterclockwise: Related [#awesome-ci](https://github.com/topics/awesome-ci) projects\n\n### Docker images\n\nSave yourself from installing lot's of dependencies and pick a dockerized version of your favourite\nlinter below for reproducible local or remote CI tests:\n\n| GitHub | DockerHub | Type | Description |\n|--------|-----------|------|-------------|\n| [awesome-ci][aci-git-lnk]        | [![aci-hub-img]][aci-hub-lnk]         | Basic      | Tools for git, file and static source code analysis |\n| [file-lint][flint-git-lnk]       | [![flint-hub-img]][flint-hub-lnk]     | Basic      | Baisc source code analysis |\n| [linkcheck][linkcheck-git-lnk]   | [![linkcheck-hub-img]][flint-hub-lnk] | Basic      | Search for URLs in files and validate their HTTP status code |\n| [ansible][ansible-git-lnk]       | [![ansible-hub-img]][ansible-hub-lnk] | Ansible    | Multiple versions and flavours of Ansible |\n| [ansible-lint][alint-git-lnk]    | [![alint-hub-img]][alint-hub-lnk]     | Ansible    | Lint Ansible |\n| [gofmt][gfmt-git-lnk]            | [![gfmt-hub-img]][gfmt-hub-lnk]       | Go         | Format Go source code **\u003csup\u003e[1]\u003c/sup\u003e** |\n| [goimports][gimp-git-lnk]        | [![gimp-hub-img]][gimp-hub-lnk]       | Go         | Format Go source code **\u003csup\u003e[1]\u003c/sup\u003e** |\n| [golint][glint-git-lnk]          | [![glint-hub-img]][glint-hub-lnk]     | Go         | Lint Go code |\n| [eslint][elint-git-lnk]          | [![elint-hub-img]][elint-hub-lnk]     | Javascript | Lint Javascript code |\n| [jsonlint][jlint-git-lnk]        | [![jlint-hub-img]][jlint-hub-lnk]     | JSON       | Lint JSON files **\u003csup\u003e[1]\u003c/sup\u003e** |\n| [kubeval][kubeval-git-lnk]       | [![kubeval-hub-img]][kubeval-hub-lnk] | K8s        | Lint Kubernetes files |\n| [checkmake][cm-git-lnk]          | [![cm-hub-img]][cm-hub-lnk]           | Make       | Lint Makefiles |\n| [phpcbf][pcbf-git-lnk]           | [![pcbf-hub-img]][pcbf-hub-lnk]       | PHP        | PHP Code Beautifier and Fixer |\n| [phpcs][pcs-git-lnk]             | [![pcs-hub-img]][pcs-hub-lnk]         | PHP        | PHP Code Sniffer |\n| [phplint][plint-git-lnk]         | [![plint-hub-img]][plint-hub-lnk]     | PHP        | PHP Code Linter **\u003csup\u003e[1]\u003c/sup\u003e** |\n| [php-cs-fixer][pcsf-git-lnk]     | [![pcsf-hub-img]][pcsf-hub-lnk]       | PHP        | PHP Coding Standards Fixer |\n| [bandit][bandit-git-lnk]         | [![bandit-hub-img]][bandit-hub-lnk]   | Python     | A security linter from PyCQA\n| [black][black-git-lnk]           | [![black-hub-img]][black-hub-lnk]     | Python     | The uncompromising Python code formatter |\n| [mypy][mypy-git-lnk]             | [![mypy-hub-img]][mypy-hub-lnk]       | Python     | Static source code analysis |\n| [pycodestyle][pycs-git-lnk]      | [![pycs-hub-img]][pycs-hub-lnk]       | Python     | Python style guide checker |\n| [pydocstyle][pyds-git-lnk]       | [![pyds-hub-img]][pyds-hub-lnk]       | Python     | Python docstyle checker |\n| [pylint][pylint-git-lnk]         | [![pylint-hub-img]][pylint-hub-lnk]   | Python     | Python source code, bug and quality checker |\n| [terraform-docs][tfdocs-git-lnk] | [![tfdocs-hub-img]][tfdocs-hub-lnk]   | Terraform  | Terraform doc generator (TF 0.12 ready) **\u003csup\u003e[1]\u003c/sup\u003e** |\n| [terragrunt][tg-git-lnk]         | [![tg-hub-img]][tg-hub-lnk]           | Terraform  | Terragrunt and Terraform |\n| [terragrunt-fmt][tgfmt-git-lnk]  | [![tgfmt-hub-img]][tgfmt-hub-lnk]     | Terraform  | `terraform fmt` for Terragrunt files **\u003csup\u003e[1]\u003c/sup\u003e** |\n| [yamlfmt][yfmt-git-lnk]          | [![yfmt-hub-img]][yfmt-hub-lnk]       | Yaml       | Format Yaml files **\u003csup\u003e[1]\u003c/sup\u003e** |\n| [yamllint][ylint-git-lnk]        | [![ylint-hub-img]][ylint-hub-lnk]     | Yaml       | Lint Yaml files |\n\n\u003e **\u003csup\u003e[1]\u003c/sup\u003e** Uses a shell wrapper to add **enhanced functionality** not available by original project.\n\n[aci-git-lnk]: https://github.com/cytopia/awesome-ci\n[aci-hub-img]: https://img.shields.io/docker/pulls/cytopia/awesome-ci.svg\n[aci-hub-lnk]: https://hub.docker.com/r/cytopia/awesome-ci\n\n[flint-git-lnk]: https://github.com/cytopia/docker-file-lint\n[flint-hub-img]: https://img.shields.io/docker/pulls/cytopia/file-lint.svg\n[flint-hub-lnk]: https://hub.docker.com/r/cytopia/file-lint\n\n[linkcheck-git-lnk]: https://github.com/cytopia/docker-linkcheck\n[linkcheck-hub-img]: https://img.shields.io/docker/pulls/cytopia/linkcheck.svg\n[linkcheck-hub-lnk]: https://hub.docker.com/r/cytopia/linkcheck\n\n[jlint-git-lnk]: https://github.com/cytopia/docker-jsonlint\n[jlint-hub-img]: https://img.shields.io/docker/pulls/cytopia/jsonlint.svg\n[jlint-hub-lnk]: https://hub.docker.com/r/cytopia/jsonlint\n\n[ansible-git-lnk]: https://github.com/cytopia/docker-ansible\n[ansible-hub-img]: https://img.shields.io/docker/pulls/cytopia/ansible.svg\n[ansible-hub-lnk]: https://hub.docker.com/r/cytopia/ansible\n\n[alint-git-lnk]: https://github.com/cytopia/docker-ansible-lint\n[alint-hub-img]: https://img.shields.io/docker/pulls/cytopia/ansible-lint.svg\n[alint-hub-lnk]: https://hub.docker.com/r/cytopia/ansible-lint\n\n[kubeval-git-lnk]: https://github.com/cytopia/docker-kubeval\n[kubeval-hub-img]: https://img.shields.io/docker/pulls/cytopia/kubeval.svg\n[kubeval-hub-lnk]: https://hub.docker.com/r/cytopia/kubeval\n\n[gfmt-git-lnk]: https://github.com/cytopia/docker-gofmt\n[gfmt-hub-img]: https://img.shields.io/docker/pulls/cytopia/gofmt.svg\n[gfmt-hub-lnk]: https://hub.docker.com/r/cytopia/gofmt\n\n[gimp-git-lnk]: https://github.com/cytopia/docker-goimports\n[gimp-hub-img]: https://img.shields.io/docker/pulls/cytopia/goimports.svg\n[gimp-hub-lnk]: https://hub.docker.com/r/cytopia/goimports\n\n[glint-git-lnk]: https://github.com/cytopia/docker-golint\n[glint-hub-img]: https://img.shields.io/docker/pulls/cytopia/golint.svg\n[glint-hub-lnk]: https://hub.docker.com/r/cytopia/golint\n\n[elint-git-lnk]: https://github.com/cytopia/docker-eslint\n[elint-hub-img]: https://img.shields.io/docker/pulls/cytopia/eslint.svg\n[elint-hub-lnk]: https://hub.docker.com/r/cytopia/eslint\n\n[cm-git-lnk]: https://github.com/cytopia/docker-checkmake\n[cm-hub-img]: https://img.shields.io/docker/pulls/cytopia/checkmake.svg\n[cm-hub-lnk]: https://hub.docker.com/r/cytopia/checkmake\n\n[pcbf-git-lnk]: https://github.com/cytopia/docker-phpcbf\n[pcbf-hub-img]: https://img.shields.io/docker/pulls/cytopia/phpcbf.svg\n[pcbf-hub-lnk]: https://hub.docker.com/r/cytopia/phpcbf\n\n[pcs-git-lnk]: https://github.com/cytopia/docker-phpcs\n[pcs-hub-img]: https://img.shields.io/docker/pulls/cytopia/phpcs.svg\n[pcs-hub-lnk]: https://hub.docker.com/r/cytopia/phpcs\n\n[plint-git-lnk]: https://github.com/cytopia/docker-phplint\n[plint-hub-img]: https://img.shields.io/docker/pulls/cytopia/phplint.svg\n[plint-hub-lnk]: https://hub.docker.com/r/cytopia/phplint\n\n[pcsf-git-lnk]: https://github.com/cytopia/docker-php-cs-fixer\n[pcsf-hub-img]: https://img.shields.io/docker/pulls/cytopia/php-cs-fixer.svg\n[pcsf-hub-lnk]: https://hub.docker.com/r/cytopia/php-cs-fixer\n\n[bandit-git-lnk]: https://github.com/cytopia/docker-bandit\n[bandit-hub-img]: https://img.shields.io/docker/pulls/cytopia/bandit.svg\n[bandit-hub-lnk]: https://hub.docker.com/r/cytopia/bandit\n\n[black-git-lnk]: https://github.com/cytopia/docker-black\n[black-hub-img]: https://img.shields.io/docker/pulls/cytopia/black.svg\n[black-hub-lnk]: https://hub.docker.com/r/cytopia/black\n\n[mypy-git-lnk]: https://github.com/cytopia/docker-mypy\n[mypy-hub-img]: https://img.shields.io/docker/pulls/cytopia/mypy.svg\n[mypy-hub-lnk]: https://hub.docker.com/r/cytopia/mypy\n\n[pycs-git-lnk]: https://github.com/cytopia/docker-pycodestyle\n[pycs-hub-img]: https://img.shields.io/docker/pulls/cytopia/pycodestyle.svg\n[pycs-hub-lnk]: https://hub.docker.com/r/cytopia/pycodestyle\n\n[pyds-git-lnk]: https://github.com/cytopia/docker-pydocstyle\n[pyds-hub-img]: https://img.shields.io/docker/pulls/cytopia/pydocstyle.svg\n[pyds-hub-lnk]: https://hub.docker.com/r/cytopia/pydocstyle\n\n[pylint-git-lnk]: https://github.com/cytopia/docker-pylint\n[pylint-hub-img]: https://img.shields.io/docker/pulls/cytopia/pylint.svg\n[pylint-hub-lnk]: https://hub.docker.com/r/cytopia/pylint\n\n[tfdocs-git-lnk]: https://github.com/cytopia/docker-terraform-docs\n[tfdocs-hub-img]: https://img.shields.io/docker/pulls/cytopia/terraform-docs.svg\n[tfdocs-hub-lnk]: https://hub.docker.com/r/cytopia/terraform-docs\n\n[tg-git-lnk]: https://github.com/cytopia/docker-terragrunt\n[tg-hub-img]: https://img.shields.io/docker/pulls/cytopia/terragrunt.svg\n[tg-hub-lnk]: https://hub.docker.com/r/cytopia/terragrunt\n\n[tgfmt-git-lnk]: https://github.com/cytopia/docker-terragrunt-fmt\n[tgfmt-hub-img]: https://img.shields.io/docker/pulls/cytopia/terragrunt-fmt.svg\n[tgfmt-hub-lnk]: https://hub.docker.com/r/cytopia/terragrunt-fmt\n\n[yfmt-git-lnk]: https://github.com/cytopia/docker-yamlfmt\n[yfmt-hub-img]: https://img.shields.io/docker/pulls/cytopia/yamlfmt.svg\n[yfmt-hub-lnk]: https://hub.docker.com/r/cytopia/yamlfmt\n\n[ylint-git-lnk]: https://github.com/cytopia/docker-yamllint\n[ylint-hub-img]: https://img.shields.io/docker/pulls/cytopia/yamllint.svg\n[ylint-hub-lnk]: https://hub.docker.com/r/cytopia/yamllint\n\n\n### Makefiles\n\nVisit **[cytopia/makefiles](https://github.com/cytopia/makefiles)** for dependency-less, seamless project integration and minimum required best-practice code linting for CI.\nThe provided Makefiles will only require GNU Make and Docker itself removing the need to install anything else.\n\n\n## :page_facing_up: License\n\n\n**[MIT License](LICENSE)**\n\nCopyright (c) 2019 [cytopia](https://github.com/cytopia)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcytopia%2Fdocker-ansible","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcytopia%2Fdocker-ansible","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcytopia%2Fdocker-ansible/lists"}