homebrew
Ansible Роль: Homebrew
Устанавливает Homebrew на macOS или Linux и настраивает репозитории, пакеты и кэски. Пакет использует циклы повторных попыток для устранения проблем с подключением.
Если вам нравится/вы используете эту роль, пожалуйста, подумайте о том, чтобы поставить ей звёздочку. Спасибо!
🗂 Содержание
- Требования
- Переменные роли
- Пример плейбука
- Разработка
- Тестирование
- Зависимости
- Совместимость
- Лицензия
- Информация об авторе
- Благодарности и ресурсы
- Спонсоры
📑 Требования
- Актуальная версия Ansible. В процессе поддержки/разработки мы придерживаемся версий Ansible и будем использовать новые функции, если они доступны (и обновляем
meta/main.yml
для минимальной версии). - Совместимая ОС. См. таблицу совместимости.
- Библиотека
jmespath
должна быть установлена на хосте, запускающем плейбук (необходима для фильтраjson_query
). - Роль имеет зависимости от сторонних ролей на разных операционных системах. См.
requirements.yml
и раздел зависимости.
🔧 Переменные роли
Доступные переменные перечислены ниже, вместе с примерами значений (см. defaults/main.yml
). Дополнительные переменные хранятся в vars/main.yml
.
→ Структура
Переменная GitHub репозитория для основного Homebrew. По умолчанию роль проверяет последнюю версию из официального репозитория Homebrew; если вы меняете homebrew_repository
на свою форк-версию и хотите использовать ветку master
и отключить автоопределение последней версии, то установите переменную homebrew_repository_use_master
в true
.
# Из какого репозитория следует установить Homebrew?
homebrew_repository: https://github.com/Homebrew/brew
# Установите в true, если хотите использовать ветку master вместо автоопределения релизов,
# или если вы используете пользовательскую форк-версию, указанную в homebrew_repository
homebrew_repository_use_master: false
Когда установлено в true, обновит сам Homebrew и обновит все пакеты Homebrew:
# Выполнить задачу для обновления всех пакетов
homebrew_upgrade_all: true
Переменная управляет количеством попыток и задержкой между попытками, если задача homebrew install
завершилась неудачно:
# Сколько раз пытаться, если установка пакета / репозитория / кэска не удалась?
# Это может произойти во время сетевых проблем.
homebrew_retries: 32
# Задержка между каждой попыткой.
homebrew_delay: 3
Установите в true
, чтобы удалить кэш Homebrew после установки или обновления любого нового программного обеспечения.
homebrew_clear_cache: false
Каталог, в который должны устанавливаться приложения, устанавливаемые через cask
.
homebrew_cask_appdir: /Applications
Если установлено в true
, передаёт --greedy
в brew cask outdated при проверке, есть ли у установленного кэска новая версия.
homebrew_cask_greedy_mode: false
Отключает аналитику Homebrew, которая собирается по умолчанию.
homebrew_collect_analytics: false
→ Добавление репозиториев
Добавление (tapping) репозиториев.
homebrew_taps:
- homebrew/core
- homebrew/cask-versions
- homebrew/cask-fonts
Добавление (tapping) репозиториев более подробно, определяя URL и состояния:
homebrew_taps:
# просто добавляем
- name: homebrew/core
# добавляем из пользовательского репозитория
- name: denji/nginx
url: https://github.com/denji/homebrew-nginx
# добавляем с определённым пользовательским состоянием
- name: homebrew/cask-fonts
state: present
Удаление taps:
homebrew_taps:
# указываем состояние: absent, чтобы удалить taps
- name: homebrew/cask-fonts
state: absent
- name: denji/nginx
state: absent
→ Пакеты: установка, обновление и удаление
Добавление пакетов простым способом:
homebrew_packages:
- wget
- curl
- nano
Добавление пакетов более продвинутым способом, с определением состояния, пути и других опций:
homebrew_packages:
# установить по пользовательскому пути
- name: wget
state: present
path: /opt/custom/path/bin
Обновление пакетов:
homebrew_packages:
# сначала обновить Homebrew и установить формулу wget по умолчанию
- name: wget
state: present
update_homebrew: true
# сначала обновить Homebrew и обновить формулу curl до последней доступной по умолчанию
- name: curl
state: latest
update_homebrew: true
Удаление пакетов:
homebrew_packages:
- name: wget
state: absent
- name: curl
state: absent
→ Кэски: установка, обновление и удаление
:warning: Обратите внимание: Кэски поддерживаются только на macOS. См. этот пост.
Добавление кэсков простым способом:
homebrew_casks:
# Список устанавливаемых кэсков
- firefox
- google-chrome
- alfred
- 1password
Добавление кэсков с расширенными опциями:
homebrew_casks:
# Установка кэска firefox
- name: firefox
state: present
Удаление кэсков:
homebrew_casks:
# определите состояние: absent для удаления
- name: firefox
state: absent
- name: google-chrome
state: absent
📗 Пример плейбука
→ для машин macOS
---
- hosts: all
connection: local
# необходимо при работе через 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 # из homebrew/core
- yt-dlp # из yt-dlp/taps
homebrew_casks:
- firefox
- google-chrome
- font-fira-code-nerd-font # из homebrew/cask-fonts
homebrew_retries: 12
homebrew_delay: 3
homebrew_clear_cache: false
homebrew_collect_analytics: false
roles:
- elliotweiser.osx-command-line-tools # только для машин macOS
- wayofdev.homebrew
→ для машин Linux
---
- hosts: all
connection: local
# необходимо при работе через SSH
environment:
- PATH: "{{ homebrew_search_paths | join(':') }}:{{ ansible_env.PATH }}"
vars:
homebrew_user: linuxbrew # FYI: можно пропустить, так как автоматически определяется, но пользователь linuxbrew рекомендуется для установки Homebrew на Linux
homebrew_group: linuxbrew # тот же, что и homebrew_user
homebrew_taps:
- homebrew/core
- yt-dlp/taps
homebrew_packages:
- ssh-copy-id # из homebrew/core
- yt-dlp # из yt-dlp/taps
homebrew_retries: 12
homebrew_delay: 3
homebrew_clear_cache: false
homebrew_collect_analytics: false
roles:
- geerlingguy.git # только для машин Linux, и можно пропустить, если на машине установлен git
- wayofdev.homebrew
⚙️ Разработка
Чтобы установить зависимости и начать разработку, вы можете проверить содержимое нашего Makefile
.
Установите poetry с использованием poetry-bin и все зависимости разработки для Python:
$ make install
Установите только зависимости Python, предполагая, что у вас уже есть poetry:
$ make install-deps
Установите все git-хуки:
$ make hooks
Проверьте все файлы ролевой модели:
$ make lint
🧪 Тестирование
Вы можете проверить Makefile
, чтобы получить полный список команд для удалённого и локального тестирования. Для локального тестирования вы можете использовать эти команды для тестирования всей роли или отдельных задач:
→ на локальном хосте
:warning: Обратите внимание: По умолчанию все тесты запускаются на вашем локальном компьютере!
# запустить все теги со сценарием из ./tests/test.yml
$ make test
# или test-tag без каких-либо параметров
$ make test-tag
# выполнить проверку идемпотентности
$ make test-idempotent
# запустить задачи, которые проверяют конфигурационный файл и выполняют установку
$ export TASK_TAGS="brew-install,brew-update"
$ make test-tag
# выполнить заранее определённую команду, которая выполняет только один тег
$ make test-install
$ make test-analytics
$ make test-update
$ make test-taps
$ make test-packages
$ make test-casks
# запустить молекулярные тесты на локальном хосте
$ poetry run molecule test --scenario-name default-macos-on-localhost -- -vvv
# или с помощью команды make
$ make m-local
# запускает молекулу с драйвером docker
$ poetry run molecule test --scenario-name default -- -vvv
# или с помощью файла make
$ make m-linux
→ через SSH
# запустить молекулярные сценарии против удалённых машин по SSH
# это потребует настройки и конфигурации VM
$ poetry run molecule test --scenario-name default-macos-over-ssh -- -vvv
$ make m-remote
# теги также могут быть переданы
$ export TASK_TAGS="brew-install,brew-update"
$ make m-remote
📦 Зависимости
Установка обрабатывается Makefile
, а требования определены в requirements.yml
.
→ для всех
→ только для macOS
→ только для Linux
🧩 Совместимость
Эта роль была протестирована на этих системах:
система / контейнер | тег |
---|---|
macos | monterey |
macos | big-sur |
ubuntu | jammy |
ubuntu | focal |
debian | bullseye |
debian | buster |
fedora | 36 |
fedora | 35 |
centos | 8 |
centos | 7 |
🤝 Лицензия
🙆🏼♂️ Информация об авторе
Эта роль была создана в 2022 году lotyp / wayofdev.
🧱 Благодарности и ресурсы
Вдохновлён:
- role-homebrew-retry от @niall-byrne
- роль homebrew, созданная @geerlingguy в рамках ansible-collection-mac
- официальный скрипт установки Homebrew
🫡 Участники
🤑 Спонсоры
Разработка и тестирование роли проводились на Parallels Desktop Pro Edition и лицензия была предоставлена Parallels
Ansible role that uses loops and retries to install Homebrew apps and casks.
ansible-galaxy install wayofdev/ansible-role-homebrew