Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/geerlingguy/ansible-requirements-updater
Update your requirements.yml with this grisly Ansible playbook.
https://github.com/geerlingguy/ansible-requirements-updater
ansible ansible-galaxy galaxy gore jinja jinja2 requirements
Last synced: 3 months ago
JSON representation
Update your requirements.yml with this grisly Ansible playbook.
- Host: GitHub
- URL: https://github.com/geerlingguy/ansible-requirements-updater
- Owner: geerlingguy
- License: mit
- Created: 2020-02-22T03:21:42.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2023-07-10T23:00:54.000Z (over 1 year ago)
- Last Synced: 2024-10-10T04:06:45.604Z (3 months ago)
- Topics: ansible, ansible-galaxy, galaxy, gore, jinja, jinja2, requirements
- Homepage:
- Size: 13.7 KB
- Stars: 100
- Watchers: 5
- Forks: 11
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# Ansible Requirements Updater
**Update your requirements.yml with this grisly Ansible playbook.**
This is one of the gookiest Ansible playbooks I've ever written.
But it does something I need, and it's a lot faster than doing it manually, and I do it every few months. So it was worth spending two hours automating the process on a Friday night while watching a Blues game.
The playbook does the following:
1. Reads in a list of role requirements from an existing `requirements.yml` file (at `requirements_file_path`).
2. Loops through all the roles in that list, and gets the latest role version string from Ansible Galaxy.
3. Generates a new requirements list.
4. Writes the new list to the `requirements.yml` file.If you're really daring and had a few drinks, you can set `requirements_file_backup` to `false`, and overwrite your artisinally-handcrafted requirements file with whatever this playbook disgorges 🤮.
You might be wondering at this point: "Why doesn't geerlingguy just run `ansible-galaxy update -r requirements.yml`?" Well, unfortunately, [`update` is not a thing](https://github.com/ansible/galaxy/issues/1358), and might never be, for roles on Ansible Galaxy. Collections [can be upgraded now](https://github.com/ansible/ansible/issues/65699), but unfortunately besides defining requirements ranges, you can't 'lock in' a set of specific known-working versions of collections. Until ansible supports something like a lock file, you have to do it manually, or trust your life to this playbook. I know what _I'd_ do.
## Caveats
- This has only been tested with `geerlingguy.*` roles, and a few others which follow semantic versioning standards. Since Galaxy allows practically anything as a version (heck, you could probably throw a 🦑 in there and it would work), the playbook will likely break your requirements in new and interesting ways if you use roles that do strange things with versioning.
- This playbook only handles requirements files with `roles` in them, not with `roles` and `collections`. If you have any `collections` listed in your requirements file, this playbook will act like they don't exist and they will go 💥.
- Maybe this playbook will support collections someday, maybe not. Buy my book and I'll be at least 0.0002% more likely to fix [issue #1](https://github.com/geerlingguy/ansible-requirements-updater/issues/1).
- You should never write a playbook like this. It is dumb. It is inefficient. It is against every one of the best practices I espouse in my book [Ansible for DevOps](https://www.ansiblefordevops.com) and my blog posts on Ansible. But I did, so 🤷♂️.## Usage
Let's assume you have a requirements file (`requirements.yml`) with contents like:
```yaml
---
roles:
- name: geerlingguy.ansible
version: 1.2.0
- name: geerlingguy.certbot
version: 3.0.0
- name: geerlingguy.docker
version: 2.1.0
```Run the playbook like so:
ansible-playbook main.yml -e "requirements_file_path=path/to/a/requirements.yml"
Go get a coffee (☕️) – it's going to take a while because of how horrifically inefficient it is to use Ansible as a programming language like this playbook does.
Cross your fingers (🤞) and hope it works.
> **Note**: It is _highly_ recommended you track your `requirements.yml` file in a git repository. That way if this playbook mangles it horrifically, you can `git restore requirements.yml` and act like nothing happened 🤐.
## License
MIT.
## Author Information
This playbook was brought into its miserable existence by [Jeff Geerling](https://www.jeffgeerling.com/), author of [Ansible for DevOps](https://www.ansiblefordevops.com/) and [Ansible for Kubernetes](https://www.ansibleforkubernetes.com).