dock
Роль Ansible: Автоматизация Dock на macOS
Эта роль используется для автоматизации использования dockutil — командного инструмента для управления элементами Dock. Вы можете добавлять, удалять и изменять порядок элементов Dock.
Если вам нравится/вы используете эту роль, пожалуйста, подумайте о том, чтобы поставить звезду. Спасибо!
🗂 Содержание
- Преимущества этой роли
- Требования
- Переменные роли
- Пример плейбука
- Разработка
- Тестирование
- Зависимости
- Совместимость
- Лицензия
- Информация об авторе
- Благодарности и ресурсы
- Участники
- Спонсоры
⭐️ Преимущества этой роли:
- Эта версия поддерживает последнюю 3.x dockutil
- Элементы добавляются, позиционируются и удаляются в одной команде, вместо циклов
- Поддержка последнего macOS Monterey
- Можно удалить все элементы в Dock одним параметром
- Нет необходимости в обработчиках Ansible и правах sudo для выполнения
killall
, чтобы перезапустить Dock, так как это обрабатывается самимdockutil
! - Поддерживает все параметры
dockutil
, такие как:--add, --remove, --move, --replacing, --position, --after, --before, --section, --allhomes, --sort, --display, --view
📑 Требования
- Homebrew: Необходим
homebrew
, уже установленный (вы можете использоватьwayofdev.homebrew
, чтобы установить его на ваш macOS). - Обновленная версия Ansible. Во время обслуживания/разработки мы придерживаемся версий ansible и будем использовать новые функции, если они доступны (и обновим
meta/main.yml
для минимальной версии). - Совместимая ОС. Смотрите таблицу совместимости.
- Роль имеет зависимости от сторонних ролей на разных операционных системах. Смотрите
requirements.yml
и раздел зависимости.
🔧 Переменные роли
В этом разделе показаны все возможные варианты добавления, перемещения, замены и удаления приложений, разделителей, папок. Доступные переменные перечислены ниже вместе с примерами значений (см. defaults/main.yml
):
→ Структура
Группа контролирует установку dockutil и позволяет выбрать пользовательский tap:
# Должны ли мы попробовать установить dockutil?
dock_dockutil_install: <true | false> # (по умолчанию: true) Установить dockutil с помощью homebrew.
# Путь к пользовательскому или официальному tap dockutil
dock_dockutil_tap: lotyp/formulae/dockutil # По умолчанию используется tap 3.x
Роль позволяет полностью очистить Dock на macOS:
# Удаляет все содержимое из dock, включая секцию "другие" с папкой Загрузки.
# Предпочитайте этот параметр при новых установках вместе с настроенными "dockitems".
dock_dockitems_erase_all: <true | false> # Попытаться удалить все элементы в Dock, включая папку Загрузки! (по умолчанию: false)
Структура переменной для добавления, перемещения или удаления элементов в Dock:
dock_dockitems:
- label: <label> # Используется для поиска существующих элементов или названий новых приложений
action: <add | remove | move>
path: <label | app bundle id | path | url> # Пример: /System/Applications/TextEdit.app
replacing: <label | app bundle id | path | url> # Название или идентификатор пакета приложения для замены. Заменяет элемент на заданное название dock или добавляет элемент в конец, если элемент для замены не найден
position: <[+/-]index_number | beginning | end | middle> # Вставляет элемент в фиксированное положение: может быть указано по номеру индекса или ключевому слову
after: <label | application bundle id> # Вставляет элемент сразу после данного названия dock или в конец, если элемент не найден
before: <label | application bundle id> # Вставляет элемент сразу перед данным названием dock или в конец, если элемент не найден
section: <apps | others> # Указывает, следует ли добавлять элемент в секцию приложений или другие
display: <folder | stack> # Опция отображения папки при добавлении папки
sort: <name | dateadded | datemodified | datecreated | kind> # Опция сортировки папки при добавлении папки
type: <spacer | small-spacer | flex-spacer> # Укажите пользовательский тип плитки для добавления разделителей
allhomes: <true | false> # Пытаться ли найти все домашние директории и выполнить операцию для каждой из них (по умолчанию: false)
→ Добавление
Добавляет TextEdit.app
в конец дока текущего пользователя:
dock_dockitems:
- label: TextEdit
action: add
path: /System/Applications/TextEdit.app
Добавляет Time Machine.app
в середину Dock:
dock_dockitems:
- label: Time Machine
action: add
path: /System/Applications/Time Machine.app
position: middle
Добавляет TextEdit.app
после элемента Time Machine.app
на всех пользовательских доках на этой машине:
dock_dockitems:
- label: TextEdit
action: add
path: /System/Applications/TextEdit.app
after: Time Machine
allhomes: true # необязательный параметр
→ Добавление с заменой
Заменяет Time Machine.app
на Mail.app
в доке текущего пользователя
dock_dockitems:
- label: Mail
action: add
path: /System/Applications/Mail.app
replacing: Time Machine
→ Добавление папок
Добавляет папку Downloads
в секцию others
в меню Dock. При нажатии открывает предварительный просмотр в виде сетки.
dock_dockitems:
- label: Downloads
action: add
path: ~/Downloads
view: grid
display: folder
allhomes: true # необязательный параметр
→ Удаление
Удаляет TextEdit
из дока каждого пользователя на этой машине:
dock_dockitems:
- label: TextEdit
action: remove
allhomes: true # необязательный параметр
Удаляет все разделительные плитки:
dock_dockitems:
- label: spacer-tiles
action: remove
→ Перемещение
Перемещает System Preferences
на вторую позицию в доке каждого пользователя на этой машине:
dock_dockitems:
- label: System Preferences
action: move
position: end # <[+/-]index_number | beginning | end | middle>
allhomes: true # необязательный параметр
📗 Пример плейбука
---
- hosts: all
# необходимо при выполнении по SSH
environment:
- PATH: "/usr/local/bin:/usr/local/sbin:/opt/homebrew/bin:{{ ansible_env.PATH }}"
vars:
dock_dockitems_erase_all: true
dock_dockitems:
- label: Messages
action: add
path: /System/Applications/Messages.app
- label: Safari
action: add
path: /Applications/Safari.app
- label: Sublime Text
action: add
path: /Applications/Sublime Text.app
position: 3
roles:
- wayofdev.homebrew
- wayofdev.dock
⚙️ Разработка
Чтобы установить зависимости и начать разработку, ознакомьтесь с содержимым нашего Makefile
Установите poetry с помощью poetry-bin и все зависимости для разработки:
$ make install
Установите только зависимости Python, предполагая, что у вас уже установлен poetry:
$ make install-deps
Установите все git хуки:
$ make hooks
Проверьте все файлы роли:
$ make lint
🧪 Тестирование
Вы можете проверить Makefile
, чтобы получить полный список команд для удаленного и локального тестирования. Для локального тестирования вы можете использовать команды для тестирования всей роли или отдельных задач:
→ на локальном хосте
:warning: Уведомление: По умолчанию все тесты выполняются на вашей локальной машине!
# запустить тесты молекулы на локальном хосте
$ poetry run molecule test --scenario-name defaults-restored-on-localhost -- -vvv
# или с помощью команды make
$ make m-local
# выберите, какие теги будут включены
$ export TASK_TAGS="dock-validate,dock-install"; make m-local
→ по SSH
# запустить сценарии молекулы на удаленных машинах по SSH
# для этого потребуется настройка и конфигурация ВМ
$ poetry run molecule test --scenario-name defaults-restored-over-ssh -- -vvv
$ make m-remote
# теги также могут быть переданы
$ export TASK_TAGS="dock-validate,dock-install"
$ make m-remote
📦 Зависимости
Установка осуществляется через Makefile
, а требования определены в requirements.yml
- wayofdev.homebrew - мягкая зависимость, необходима, если Homebrew еще не установлен
- ansible.community.general
🧩 Совместимость
Эта роль была протестирована на этих системах:
система / контейнер | тег |
---|---|
macos | monterey |
macos | big-sur |
🤝 Лицензия
🙆🏼♂️ Информация об авторе
Эта роль была создана в 2022 году lotyp / wayofdev.
🧱 Благодарности и ресурсы
Вдохновлено:
- оригинальная роль, созданная @geerlingguy как часть ansible-collection-mac.
- dockutil
🫡 Участники
🤑 Спонсоры
Разработка и тестирование роли проводились на Parallels Desktop Pro Edition, спасибо Parallels
Role is used to automate use of "dockutil" – command line tool for managing dock items. You can add, remove and re-arrange Dock items.
ansible-galaxy install wayofdev/ansible-role-dock