macOS-ansible
macOS-ansible copied to clipboard
Provision your Mac with Ansible
Ansible MacOS Playbook
This playbook installs and configures most of the software I use on my Mac for web and software development.
Installation
- Ensure Apple's command line tools are installed (xcode-select --install to launch the installer).
-
Install Ansible:
- Run the following command to add Python 3 to your $PATH:
export PATH="$HOME/Library/Python/3.8/bin:/opt/homebrew/bin:$PATH"
- Upgrade Pip:
sudo pip3 install --upgrade pip
- Install Ansible:
pip3 install ansible
- Run the following command to add Python 3 to your $PATH:
- Clone or download this repository to your local drive.
- Run
ansible-galaxy install -r requirements.yml
inside this directory to install required Ansible roles. - Run
ansible-playbook main.yml --ask-become-pass
inside this directory. Enter your macOS account password when prompted for the 'BECOME' password.
Note: If some Homebrew commands fail, you might need to agree to Xcode's license or fix some other Brew issue. Run
brew doctor
to see if this is the case.
Use with a remote Mac
You can use this playbook to manage other Macs as well; the playbook doesn't even need to be run from a Mac at all! If you want to manage a remote Mac, either another Mac on your network, or a hosted Mac like the ones from MacStadium, you just need to make sure you can connect to it with SSH:
- (On the Mac you want to connect to:) Go to System Preferences > Sharing.
- Enable 'Remote Login'.
You can also enable remote login on the command line:
sudo systemsetup -setremotelogin on
Then edit the inventory.yml
file in this repository and change the config to something like this:
---
machines:
hosts:
[ip address or hostname of mac]:
ansible_user: [mac ssh username]
If you need to supply an SSH password (if you don't use SSH keys), make sure to pass the --ask-pass
parameter to the ansible-playbook
command.
Running a specific set of tagged tasks
You can filter which part of the provisioning process to run by specifying a set of tags using ansible-playbook
's --tags
flag. The tags available are dotfiles
, homebrew
, mas
, extra-packages
and osx
.
ansible-playbook main.yml -K --tags "dotfiles,homebrew"
Overriding Defaults
Not everyone's development environment and preferred software configuration is the same.
You can override any of the defaults configured in default.config.yml
by creating a config.yml
file and setting the overrides in that file. For example, you can customize the installed packages and apps with something like:
homebrew_installed_packages:
- cowsay
- git
- go
mas_installed_apps:
- { id: 443987910, name: "1Password" }
- { id: 498486288, name: "Quick Resizer" }
- { id: 557168941, name: "Tweetbot" }
- { id: 497799835, name: "Xcode" }
npm_packages:
- name: webpack
Any variable can be overridden in config.yml
; see the supporting roles' documentation for a complete list of available variables.
Acknowledgements
This playbook is heavily inspired by Dan Bohea's macsible Jeff Geerling's mac-dev-playbook and Jérôme Gamez's ansible-macos-playbook.
The macOS settings (a.k.a. defaults write
s) are mostly taken from
Mathias Bynens' defaults scripts or from one of the
dotfiles repos from http://dotfiles.github.io.
You can find other defaults here.