wayofdev.homebrew




Status budowy Rola Ansible Najowsza wersja Wynik jakości Ansible Rola Ansible Licencja oprogramowania Zmiany od ostatniego wydania

Rola Ansible: Homebrew

Instaluje Homebrew na systemach macOS lub Linux oraz konfiguruje "taps", pakiety i "casks". Pakiet używa pętli powtórzeń, aby poradzić sobie z problemami z łącznością.

Jeśli lubisz/używasz tej roli, proszę rozważ dodanie jej do ulubionych. Dziękuję!


🗂 Spis Treści


📑 Wymagania

  • Zaktualizowana wersja Ansible. Podczas konserwacji/rozwoju trzymamy się wersji Ansible i korzystamy z nowych funkcji, jeśli są dostępne (i aktualizujemy meta/main.yml dla minimalnej wersji).
  • Kompatybilny system operacyjny. Sprawdź tabelę kompatybilności.
  • Biblioteka jmespath musi być zainstalowana na hoście uruchamiającym playbook (potrzebna do filtra json_query).
  • Rola ma zależności od ról innych firm na różnych systemach operacyjnych. Zobacz requirements.yml i sekcję zależności.

🔧 Zmienne roli

Dostępne zmienne są wymienione poniżej, wraz z przykładowymi wartościami (zobacz defaults/main.yml). Dodatkowe zmienne są przechowywane w vars/main.yml.


→ Struktura

Zmienna repozytorium GitHub dla rdzenia Homebrew. Domyślnie rola sprawdza najnowsze wydanie z oficjalnego repozytorium Homebrew, jeśli zmieniasz homebrew_repository na swój fork i chcesz używać gałęzi master oraz wyłączyć automatyczne rozpoznawanie najnowszego wydania, ustaw zmienną homebrew_repository_use_master na true

# Z którego repozytorium powinniśmy zainstalować homebrew?
homebrew_repository: https://github.com/Homebrew/brew

# Ustaw na true, jeśli chcesz używać gałęzi master zamiast automatycznego rozpoznawania wydania,
# lub korzystasz z niestandardowego forka określonego w homebrew_repository
homebrew_repository_use_master: false

Gdy ustawione na true, zaktualizuje Homebrew i zaktualizuje wszystkie pakiety Homebrew:

# Uruchom zadanie, aby zaktualizować wszystkie pakiety
homebrew_upgrade_all: true

Zmienna kontroluje liczbę powtórzeń oraz opóźnienie, jakie należy poczekać między powtórzeniami, jeśli zadanie homebrew install nie powiodło się:

# Ile razy powtórzyć, jeśli instalacja pakietu / tapu / cask się nie uda?
# Może to się zdarzyć podczas problemów z siecią.
homebrew_retries: 32

# Opóźnienie między każdym podejściem do powtórzenia.
homebrew_delay: 3

Ustaw na true, aby usunąć pamięć podręczną Homebrew po zainstalowaniu lub zaktualizowaniu oprogramowania.

homebrew_clear_cache: false

Katalog, w którym powinny być zainstalowane aplikacje zainstalowane za pomocą cask.

homebrew_cask_appdir: /Applications

Jeśli ustawione na true, przekazuje --greedy do brew cask outdated podczas sprawdzania, czy zainstalowany cask ma dostępną nowszą wersję.

homebrew_cask_greedy_mode: false

Wyłączaj analitykę Homebrew, która jest zbierana domyślnie.

homebrew_collect_analytics: false

→ Tapping repozytoriów

Dodawanie (tapping) repozytoriów

homebrew_taps:
  - homebrew/core
  - homebrew/cask-versions
  - homebrew/cask-fonts

Dodawanie (tapping) repozytoriów w bardziej szczegółowy sposób, definiując adresy URL i stany:

homebrew_taps:
  # tylko tap
  - name: homebrew/core

  # tap z niestandardowego repozytorium
  - name: denji/nginx
    url: https://github.com/denji/homebrew-nginx

  # tap z określonym niestandardowym stanem
  - name: homebrew/cask-fonts
    state: present

Usuwanie tapów:

homebrew_taps:
  # określ stan: absent, aby usunąć tapy
  - name: homebrew/cask-fonts
    state: absent

  - name: denji/nginx
    state: absent

→ Pakiety: Instalowanie, aktualizowanie i usuwanie

Dodawanie pakietów w prosty sposób:

homebrew_packages:
  - wget
  - curl
  - nano

Dodawanie pakietów w zaawansowany sposób, definiując stan, ścieżkę i inne opcje:

homebrew_packages:
  # zainstaluj w niestandardowej ścieżce
  - name: wget
    state: present
    path: /opt/custom/path/bin

Aktualizowanie pakietów:

homebrew_packages:
  # najpierw zaktualizuj homebrew i zainstaluj formułę wget z 'brew' w domyślnej ścieżce
  - name: wget
    state: present
    update_homebrew: true

  # najpierw zaktualizuj homebrew i zaktualizuj formułę curl do najnowszej dostępnej z 'brew' w domyślnej ścieżce
  - name: curl
    state: latest
    update_homebrew: true

Usuwanie pakietów:

homebrew_packages:
  - name: wget
    state: absent
  - name: curl
    state: absent

→ Casks: instalowanie, aktualizowanie i usuwanie

:warning: Uwaga: Casks są obsługiwane tylko na systemie macOS. Zobacz ten wpis.

Dodawanie casks w prosty sposób:

homebrew_casks:
  # Instalowanie listy casks
  - firefox
  - google-chrome
  - alfred
  - 1password

Dodawanie casks z zaawansowanymi opcjami:

homebrew_casks:
  # Instalowanie cask firefox
  - name: firefox
    state: present

Usuwanie casks:

homebrew_casks:
  # określ stan: absent, aby usunąć
  - name: firefox
    state: absent
  - name: google-chrome
    state: absent

📗 Przykładowy Playbook

→ dla maszyn macOS

---
- hosts: all
  connection: local

  # jest potrzebne, gdy działa przez 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  # z homebrew/core
      - yt-dlp  # z yt-dlp/taps
    homebrew_casks:
      - firefox
      - google-chrome
      - font-fira-code-nerd-font  # z homebrew/cask-fonts
    homebrew_retries: 12
    homebrew_delay: 3
    homebrew_clear_cache: false
    homebrew_collect_analytics: false

  roles:
    - elliotweiser.osx-command-line-tools  # tylko na maszynach macOS
    - wayofdev.homebrew

→ dla maszyn Linux

---
- hosts: all
  connection: local

  # jest potrzebne, gdy działa przez SSH
  environment:
    - PATH: "{{ homebrew_search_paths | join(':') }}:{{ ansible_env.PATH }}"

  vars:
    homebrew_user: linuxbrew  # FYI: można pominąć, jak jest automatycznie wykrywane, ale zalecany sposób instalacji Homebrew na Linux
    homebrew_group: linuxbrew  # to samo co homebrew_user

    homebrew_taps:
      - homebrew/core
      - yt-dlp/taps
    homebrew_packages:
      - ssh-copy-id  # z homebrew/core
      - yt-dlp  # z yt-dlp/taps
    homebrew_retries: 12
    homebrew_delay: 3
    homebrew_clear_cache: false
    homebrew_collect_analytics: false

  roles:
    - geerlingguy.git  # tylko na maszynach linux, można pominąć, jeśli maszyna ma git
    - wayofdev.homebrew

⚙️ Rozwój

Aby zainstalować zależności i rozpocząć rozwój, możesz sprawdzić zawartość naszego Makefile

Zainstaluj poetry używając poetry-bin oraz wszystkie zależności Python do programowania:

$ make install

Zainstaluj tylko zależności Python, zakładając, że masz już zainstalowane poetry:

$ make install-deps

Zainstaluj wszystkie hooki git:

$ make hooks

Wykonaj linter na wszystkich plikach roli:

$ make lint

🧪 Testowanie

Możesz sprawdzić Makefile, aby uzyskać pełną listę poleceń do testowania zdalnego i lokalnego. W przypadku testowania lokalnego możesz użyć tych poleceń, aby przetestować całą rolę lub osobne zadania:

→ na localhost

:warning: Uwaga: Domyślnie wszystkie testy są uruchamiane na twojej lokalnej maszynie!

# uruchom wszystkie tagi ze scenariusza z ./tests/test.yml
$ make test

# lub test-tag bez żadnych parametrów
$ make test-tag

# uruchom sprawdzenie idempotencji
$ make test-idempotent

# uruchom zadania, które walidują plik konfiguracyjny i dokonują instalacji
$ export TASK_TAGS="brew-install,brew-update"
$ make test-tag

# uruchom przez zdefiniowane polecenie, które wykonuje tylko jeden tag
$ make test-install
$ make test-analytics
$ make test-update
$ make test-taps
$ make test-packages
$ make test-casks

# uruchamia testy molekul na localhost
$ poetry run molecule test --scenario-name default-macos-on-localhost -- -vvv

# lub za pomocą polecenia make
$ make m-local

# uruchamia molekulę z kierowcą docker
$ poetry run molecule test --scenario-name default -- -vvv

# lub za pomocą pliku make
$ make m-linux

→ przez SSH

# uruchamia scenariusze molekul na zdalnych maszynach przez SSH
# to będzie wymagać konfiguracji i ustawienia VM
$ poetry run molecule test --scenario-name default-macos-over-ssh -- -vvv

$ make m-remote

# tagi również mogą być przekazywane
$ export TASK_TAGS="brew-install,brew-update"
$ make m-remote

📦 Zależności

Instalacja zarządzana przez Makefile, a wymagania są określone w requirements.yml

→ dla wszystkich

→ tylko macOS

→ tylko Linux


🧩 Kompatybilność

Ta rola została przetestowana na tych systemach:

system / kontener tag
macos monterey
macos big-sur
ubuntu jammy
ubuntu focal
debian bullseye
debian buster
fedora 36
fedora 35
centos 8
centos 7

🤝 Licencja

Licencja


🙆🏼‍♂️ Informacje o autorze

Ta rola została stworzona w 2022 przez lotyp / wayofdev.


🧱 Podziękowania i zasoby

Zainspirowane przez:


🫡 Współtwórcy


🤑 Sponsorzy

Rozwój i testowanie roli odbyło się na Parallels Desktop Pro Edition a licencja została dostarczona przez Parallels

O projekcie

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

Zainstaluj
ansible-galaxy install wayofdev.homebrew
Licencja
gpl-3.0
Pobrania
521
Właściciel
Making things to build better software