homebrew




Статус сборки Роль Ansible Последняя версия Качество Ansible Роль Ansible Лицензия на программное обеспечение Коммиты с момента последнего релиза

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.


🧱 Благодарности и ресурсы

Вдохновлён:


🫡 Участники


🤑 Спонсоры

Разработка и тестирование роли проводились на 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
Лицензия
gpl-3.0
Загрузки
501
Владелец
Making things to build better software