wayofdev.homebrew


Rôle Ansible : Homebrew
Installe Homebrew sur macOS ou Linux et configure les taps, les paquets et les casks. Le paquet utilise des boucles de réessai pour gérer les problèmes de connectivité.
Si vous aimez/utilisez ce rôle, pensez à lui donner une étoile. Merci !
🗂 Table des matières
- Exigences
- Variables du rôle
- Exemple de Playbook
- Développement
- Tests
- Dépendances
- Compatibilité
- Licence
- Informations sur l'auteur
- Crédits et ressources
- Partenaires
📑 Exigences
- Version à jour d'ansible. Pendant la maintenance/développement, nous restons sur les versions d'ansible et utiliserons les nouvelles fonctionnalités si elles sont disponibles (et mettrons à jour
meta/main.yml
pour la version minimale). - Système d'exploitation compatible. Voir le tableau de compatibilité.
- La bibliothèque
jmespath
doit être installée sur l'hôte exécutant le playbook (nécessaire pour le filtrejson_query
). - Le rôle a des dépendances sur des rôles tiers sur différents systèmes d'exploitation. Voir
requirements.yml
et section dépendances.
🔧 Variables du rôle
Les variables disponibles sont listées ci-dessous, avec des exemples de valeurs (voir defaults/main.yml
). Des variables supplémentaires sont stockées dans vars/main.yml
.
→ Structure
Variable du dépôt GitHub pour le cœur de Homebrew. Par défaut, le rôle vérifie la dernière version depuis le dépôt officiel de Homebrew. Si vous changez homebrew_repository
pour votre propre fork et voulez utiliser la branche master
et désactiver la détection automatique de la dernière version, réglez la variable homebrew_repository_use_master
sur true
.
# De quel dépôt devrions-nous installer homebrew ?
homebrew_repository: https://github.com/Homebrew/brew
# Mettez sur true si vous souhaitez utiliser la branche master au lieu de la détection automatique de la version,
# ou si vous utilisez un fork personnalisé spécifié dans homebrew_repository
homebrew_repository_use_master: false
Lorsque cette option est définie sur true, Homebrew lui-même sera mis à jour et tous les paquets Homebrew seront mis à niveau :
# Exécuter la tâche pour mettre à niveau tous les paquets
homebrew_upgrade_all: true
Cette variable contrôle le nombre de réessais et le délai à attendre entre les réessais, si la tâche homebrew install
échoue :
# Combien de fois réessayer, si l'installation du paquet / tap / cask échoue ?
# Cela peut se produire en cas de problèmes de réseau.
homebrew_retries: 32
# Délai entre chaque tentative de réessai.
homebrew_delay: 3
Réglez sur true
pour supprimer le cache Homebrew après l'installation ou la mise à jour d'un nouveau logiciel.
homebrew_clear_cache: false
Répertoire où les applications installées via cask
doivent être installées.
homebrew_cask_appdir: /Applications
Si réglé sur true
, passe --greedy
à brew cask outdated lors de la vérification d'une version plus récente d'un cask installé.
homebrew_cask_greedy_mode: false
Désactivez les analyses de Homebrew, qui sont collectées par défaut.
homebrew_collect_analytics: false
→ Ajout de dépôts
Ajout (tapping) de dépôts :
homebrew_taps:
- homebrew/core
- homebrew/cask-versions
- homebrew/cask-fonts
Ajout (tapping) de dépôts, de manière plus détaillée, en définissant des URL et des états :
homebrew_taps:
# juste tap
- name: homebrew/core
# tap depuis un dépôt personnalisé
- name: denji/nginx
url: https://github.com/denji/homebrew-nginx
# tap avec état personnalisé défini
- name: homebrew/cask-fonts
state: present
Suppression des taps :
homebrew_taps:
# définir l'état : absent pour supprimer des taps
- name: homebrew/cask-fonts
state: absent
- name: denji/nginx
state: absent
→ Paquets : installation, mise à jour et suppression
Ajout de paquets de manière simple :
homebrew_packages:
- wget
- curl
- nano
Ajout de paquets de manière avancée, en définissant état, chemin et d'autres options :
homebrew_packages:
# installer à un chemin personnalisé
- name: wget
state: present
path: /opt/custom/path/bin
Mise à jour de paquets :
homebrew_packages:
# mettre à jour Homebrew d'abord et installer la formule wget avec 'brew' dans le chemin par défaut
- name: wget
state: present
update_homebrew: true
# mettre à jour Homebrew d'abord et passer à la dernière formule curl disponible avec 'brew' dans le chemin par défaut
- name: curl
state: latest
update_homebrew: true
Suppression de paquets :
homebrew_packages:
- name: wget
state: absent
- name: curl
state: absent
→ Casks : installation, mise à jour et suppression
:warning: Avis : Les Casks ne sont pris en charge que sur macOS. Consultez ce post.
Ajout de casks de manière simple :
homebrew_casks:
# Installer la liste des casks
- firefox
- google-chrome
- alfred
- 1password
Ajout de casks avec des options avancées :
homebrew_casks:
# Installation du cask firefox
- name: firefox
state: present
Suppression de casks :
homebrew_casks:
# définir l'état : absent pour supprimer
- name: firefox
state: absent
- name: google-chrome
state: absent
📗 Exemple de Playbook
→ pour les machines macOS
---
- hosts: all
connection: local
# est nécessaire lors de l'exécution via 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 # depuis homebrew/core
- yt-dlp # depuis yt-dlp/taps
homebrew_casks:
- firefox
- google-chrome
- font-fira-code-nerd-font # depuis homebrew/cask-fonts
homebrew_retries: 12
homebrew_delay: 3
homebrew_clear_cache: false
homebrew_collect_analytics: false
roles:
- elliotweiser.osx-command-line-tools # uniquement sur les machines macOS
- wayofdev.homebrew
→ pour les machines Linux
---
- hosts: all
connection: local
# est nécessaire lors de l'exécution via SSH
environment:
- PATH: "{{ homebrew_search_paths | join(':') }}:{{ ansible_env.PATH }}"
vars:
homebrew_user: linuxbrew # FYI : peut être omis, car détecté automatiquement, mais l'utilisateur linuxbrew est recommandé pour installer Homebrew avec Linux
homebrew_group: linuxbrew # même que homebrew_user
homebrew_taps:
- homebrew/core
- yt-dlp/taps
homebrew_packages:
- ssh-copy-id # depuis homebrew/core
- yt-dlp # depuis yt-dlp/taps
homebrew_retries: 12
homebrew_delay: 3
homebrew_clear_cache: false
homebrew_collect_analytics: false
roles:
- geerlingguy.git # uniquement sur les machines linux, et peut être omis si la machine a git
- wayofdev.homebrew
⚙️ Développement
Pour installer les dépendances et commencer le développement, vous pouvez vérifier le contenu de notre Makefile
.
Installer poetry en utilisant poetry-bin et toutes les dépendances python dev :
$ make install
Installer uniquement les dépendances python, en supposant que vous avez déjà poetry :
$ make install-deps
Installer tous les hooks git :
$ make hooks
Vérifier tous les fichiers du rôle :
$ make lint
🧪 Tests
Vous pouvez consulter le Makefile
pour obtenir la liste complète des commandes pour les tests à distance et locaux. Pour les tests locaux, vous pouvez utiliser ces commandes pour tester l'ensemble du rôle ou des tâches séparées :
→ sur localhost
:warning: Avis : Par défaut, tous les tests sont exécutés sur votre machine locale !
# exécuter toutes les balises avec le scénario depuis ./tests/test.yml
$ make test
# ou test-tag sans aucun paramètre
$ make test-tag
# exécuter le contrôle d'idempotence
$ make test-idempotent
# exécuter des tâches qui valident le fichier de configuration et effectuent l'installation
$ export TASK_TAGS="brew-install,brew-update"
$ make test-tag
# exécuter par commande prédéfinie qui n'exécute qu'une seule balise
$ make test-install
$ make test-analytics
$ make test-update
$ make test-taps
$ make test-packages
$ make test-casks
# exécuter des tests molecule sur localhost
$ poetry run molecule test --scenario-name default-macos-on-localhost -- -vvv
# ou avec la commande make
$ make m-local
# exécute molecule avec le pilote docker
$ poetry run molecule test --scenario-name default -- -vvv
# ou avec le fichier make
$ make m-linux
→ via SSH
# exécuter des scénarios molecule contre des machines distantes via SSH
# cela nécessitera la configuration et la configuration de la VM
$ poetry run molecule test --scenario-name default-macos-over-ssh -- -vvv
$ make m-remote
# des balises peuvent également être passées
$ export TASK_TAGS="brew-install,brew-update"
$ make m-remote
📦 Dépendances
L'installation est gérée par Makefile
et les exigences sont définies dans requirements.yml
.
→ pour tous
→ uniquement macOS
→ uniquement Linux
🧩 Compatibilité
Ce rôle a été testé sur ces systèmes :
système / conteneur | tag |
---|---|
macos | monterey |
macos | big-sur |
ubuntu | jammy |
ubuntu | focal |
debian | bullseye |
debian | buster |
fedora | 36 |
fedora | 35 |
centos | 8 |
centos | 7 |
🤝 Licence
🙆🏼♂️ Informations sur l'auteur
Ce rôle a été créé en 2022 par lotyp / wayofdev.
🧱 Crédits et ressources
Inspiré par :
- role-homebrew-retry par @niall-byrne
- rôle homebrew créé par @geerlingguy dans le cadre de ansible-collection-mac
- script d'installation officiel Homebrew
🫡 Contributeurs
🤑 Partenaires
Le développement et les tests du rôle ont été réalisés sur Parallels Desktop Pro Edition et la licence a été fournie par Parallels
Ansible role that uses loops and retries to install Homebrew apps and casks.
ansible-galaxy install wayofdev.homebrew