wayofdev.homebrew


Rol de Ansible: Homebrew
Instala Homebrew en macOS o Linux y configura taps, paquetes y casks. El paquete utiliza bucles de reintento para lidiar con problemas de conectividad.
Si te gusta/utilizas este rol, por favor considera darlo una estrella. ¡Gracias!
🗂 Tabla de Contenidos
- Requisitos
- Variables del rol
- Ejemplo de Playbook
- Desarrollo
- Pruebas
- Dependencias
- Compatibilidad
- Licencia
- Información del autor
- Créditos y recursos
- Patrocinadores
📑 Requisitos
- Versión actualizada de ansible. Durante el mantenimiento/desarrollo, nos adherimos a las versiones de ansible y utilizaremos nuevas características si están disponibles (y actualizaremos
meta/main.yml
para la versión mínima). - Sistema operativo compatible. Consulta la tabla de compatibilidad.
- Se necesita instalar la biblioteca
jmespath
en el host que ejecuta el playbook (necesaria para el filtrojson_query
). - El rol tiene dependencias de roles de terceros en diferentes sistemas operativos. Consulta
requirements.yml
y la sección de dependencias.
🔧 Variables del rol
Las variables disponibles se enumeran a continuación, junto con valores de ejemplo (consulta defaults/main.yml
). Variables adicionales se almacenan en vars/main.yml
.
→ Estructura
Variable del repositorio de GitHub para el núcleo de Homebrew. Por defecto, el rol verifica la última versión de la repositorio oficial de Homebrew. Si cambias homebrew_repository
a tu bifurcación y deseas usar la rama master
y desactivar la detección automática de la última versión, establece la variable homebrew_repository_use_master
a true
.
# ¿Desde qué repositorio deberíamos instalar homebrew?
homebrew_repository: https://github.com/Homebrew/brew
# Establece en verdadero si deseas usar la rama master en lugar de la detección automática de versiones,
# o si usas una bifurcación personalizada especificada en homebrew_repository.
homebrew_repository_use_master: false
Cuando se establece en verdadero, actualizará Homebrew en sí y mejorará todos los paquetes de homebrew:
# Ejecución de la tarea para actualizar todos los paquetes
homebrew_upgrade_all: true
La variable controla los tiempos de reintento y el retraso entre reintentos, si la tarea homebrew install
falla:
# ¿Cuántas veces intentar de nuevo si la instalación del paquete / tap / cask falla?
# Esto puede suceder durante problemas de red.
homebrew_retries: 32
# Retraso entre cada intento de reintento.
homebrew_delay: 3
Establece en true
para eliminar la caché de Homebrew después de que se instale o actualice cualquier software nuevo.
homebrew_clear_cache: false
Directorio donde se deben instalar las aplicaciones instaladas a través de cask
.
homebrew_cask_appdir: /Applications
Si se establece en verdadero, pasa --greedy
a brew cask outdated al verificar si un cask instalado tiene una versión más reciente disponible.
homebrew_cask_greedy_mode: false
Desactiva la analítica de homebrew, que se recopila de forma predeterminada.
homebrew_collect_analytics: false
→ Tapping de repositorios
Añadiendo (tapping) repositorios:
homebrew_taps:
- homebrew/core
- homebrew/cask-versions
- homebrew/cask-fonts
Añadiendo (tapping) repositorios de una manera más detallada, definiendo urls y estados:
homebrew_taps:
# simplemente tap
- name: homebrew/core
# tap desde un repositorio personalizado
- name: denji/nginx
url: https://github.com/denji/homebrew-nginx
# tap con estado personalizado definido
- name: homebrew/cask-fonts
state: present
Eliminando taps:
homebrew_taps:
# define el estado: absent para eliminar taps
- name: homebrew/cask-fonts
state: absent
- name: denji/nginx
state: absent
→ Paquetes: Instalación, actualización y eliminación
Añadiendo paquetes de manera simple:
homebrew_packages:
- wget
- curl
- nano
Añadiendo paquetes de manera avanzada, definiendo estado, ruta y otras opciones:
homebrew_packages:
# instalar en ruta personalizada
- name: wget
state: present
path: /opt/custom/path/bin
Actualizando paquetes:
homebrew_packages:
# actualiza homebrew primero e instala el paquete wget con 'brew' en ruta predeterminada
- name: wget
state: present
update_homebrew: true
# actualiza homebrew primero y mejora el paquete curl a la última versión disponible con 'brew' en ruta predeterminada
- name: curl
state: latest
update_homebrew: true
Eliminando paquetes:
homebrew_packages:
- name: wget
state: absent
- name: curl
state: absent
→ Casks: instalación, actualización y eliminación
:warning: Aviso: Los Casks son compatibles solo en macOS. Consulta esta publicación.
Añadiendo casks de manera simple:
homebrew_casks:
# Instalando lista de casks
- firefox
- google-chrome
- alfred
- 1password
Añadiendo casks con opciones avanzadas:
homebrew_casks:
# Instalando cask de firefox
- name: firefox
state: present
Eliminando casks:
homebrew_casks:
# define el estado: absent para eliminar
- name: firefox
state: absent
- name: google-chrome
state: absent
📗 Ejemplo de Playbook
→ para máquinas macOS
---
- hosts: all
connection: local
# es necesario cuando se ejecuta por SSH
environment:
- PATH: "{{ homebrew_search_paths | join(':') }}:{{ ansible_env.PATH }}"
vars:
homebrew_taps:
- homebrew/core
- homebrew/cask
- homebrew/cask-fonts
- yt-dlp/taps
homebrew_packages:
- ssh-copy-id # de homebrew/core
- yt-dlp # de yt-dlp/taps
homebrew_casks:
- firefox
- google-chrome
- font-fira-code-nerd-font # de homebrew/cask-fonts
homebrew_retries: 12
homebrew_delay: 3
homebrew_clear_cache: false
homebrew_collect_analytics: false
roles:
- elliotweiser.osx-command-line-tools # solo en máquinas macOS
- wayofdev.homebrew
→ para máquinas Linux
---
- hosts: all
connection: local
# es necesario cuando se ejecuta por SSH
environment:
- PATH: "{{ homebrew_search_paths | join(':') }}:{{ ansible_env.PATH }}"
vars:
homebrew_user: linuxbrew # FYI: puede omitirse, ya que se detecta automáticamente, pero se recomienda usar el usuario linuxbrew para instalar Homebrew en Linux
homebrew_group: linuxbrew # lo mismo que homebrew_user
homebrew_taps:
- homebrew/core
- yt-dlp/taps
homebrew_packages:
- ssh-copy-id # de homebrew/core
- yt-dlp # de yt-dlp/taps
homebrew_retries: 12
homebrew_delay: 3
homebrew_clear_cache: false
homebrew_collect_analytics: false
roles:
- geerlingguy.git # solo en máquinas Linux, y puede omitirse si la máquina tiene git
- wayofdev.homebrew
⚙️ Desarrollo
Para instalar dependencias y comenzar el desarrollo, puedes consultar el contenido de nuestro Makefile
.
Instalar poetry utilizando poetry-bin y todas las dependencias de python de desarrollo:
$ make install
Instalar solo las dependencias de python, asumiendo que ya tienes poetry:
$ make install-deps
Instalar todos los hooks de git:
$ make hooks
Lint todos los archivos del rol:
$ make lint
🧪 Pruebas
Puedes consultar el Makefile
para obtener la lista completa de comandos para pruebas remotas y locales. Para pruebas locales, puedes usar estos comandos para probar todo el rol o tareas separadas:
→ en localhost
:warning: Aviso: Por defecto, todas las pruebas se ejecutan en tu máquina local.
# ejecuta todas las etiquetas con el escenario de ./tests/test.yml
$ make test
# o prueba-etiqueta sin parámetros
$ make test-tag
# ejecuta la verificación de idempotencia
$ make test-idempotent
# ejecuta tareas que validan el archivo de configuración y realizan la instalación
$ export TASK_TAGS="brew-install,brew-update"
$ make test-tag
# ejecuta por comando predefinido que ejecuta solo una etiqueta
$ make test-install
$ make test-analytics
$ make test-update
$ make test-taps
$ make test-packages
$ make test-casks
# ejecuta pruebas de molécula en localhost
$ poetry run molecule test --scenario-name default-macos-on-localhost -- -vvv
# o con comando make
$ make m-local
# ejecuta molécula con driver docker
$ poetry run molecule test --scenario-name default -- -vvv
# o con archivo make
$ make m-linux
→ mediante SSH
# ejecuta escenarios de molécula contra máquinas remotas mediante SSH
# esto necesitará configuración de VM
$ poetry run molecule test --scenario-name default-macos-over-ssh -- -vvv
$ make m-remote
# las etiquetas también pueden ser pasadas
$ export TASK_TAGS="brew-install,brew-update"
$ make m-remote
📦 Dependencias
La instalación se maneja a través de Makefile
y los requisitos se definen en requirements.yml
.
→ para todos
→ solo macOS
→ solo Linux
🧩 Compatibilidad
Este rol se ha probado en los siguientes sistemas:
sistema / contenedor | etiqueta |
---|---|
macos | monterey |
macos | big-sur |
ubuntu | jammy |
ubuntu | focal |
debian | bullseye |
debian | buster |
fedora | 36 |
fedora | 35 |
centos | 8 |
centos | 7 |
🤝 Licencia
🙆🏼♂️ Información del Autor
Este rol fue creado en 2022 por lotyp / wayofdev.
🧱 Créditos y Recursos
Inspirado por:
- role-homebrew-retry por @niall-byrne
- rol de homebrew creado por @geerlingguy como parte de ansible-collection-mac
- script de instalador oficial de Homebrew
🫡 Colaboradores
🤑 Patrocinadores
El desarrollo y las pruebas del rol se realizaron en Parallels Desktop Pro Edition y la licencia fue proporcionada por Parallels.
Ansible role that uses loops and retries to install Homebrew apps and casks.
ansible-galaxy install wayofdev.homebrew