wayofdev.homebrew




Estado de construcción Rol de Ansible Última versión Puntuación de calidad de Ansible Rol de Ansible Licencia de software Commits desde el último lanzamiento

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

  • 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 filtro json_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

Licencia


🙆🏼‍♂️ Información del Autor

Este rol fue creado en 2022 por lotyp / wayofdev.


🧱 Créditos y Recursos

Inspirado por:


🫡 Colaboradores


🤑 Patrocinadores

El desarrollo y las pruebas del rol se realizaron en Parallels Desktop Pro Edition y la licencia fue proporcionada por Parallels.

Acerca del proyecto

Ansible role that uses loops and retries to install Homebrew apps and casks.

Instalar
ansible-galaxy install wayofdev.homebrew
Licencia
gpl-3.0
Descargas
521
Propietario
Making things to build better software