AnsibleでMacの開発環境構築にチャレンジしてみた
会社から新しいMacが支給されました。
せっかく新しいおもちゃを手に入れたのに普通にインストールするのもどうなんだろうと思い
今後新しいPCに移行した時などのメンテナンス性を考え、本記事では構成管理ツールのAnsibleを使って環境構築にチャレンジします!
Macのセットアップは久しぶりです。今はMacのセットアップにAnsibleを使うというのも一般的みたいですね。
はじめに
ちなみに支給されたMacのスペックはざっと以下のような感じです。
- Mac Book Pro (13-inch, 2018, Four Thunderbolt 3 Ports)
- macOS High Sierra 10.13 / メモリ 16GB
Ansibleをインストール
さっそく始めていきます。 Terminalも開きつつ下記を実施。
- Xcodeをインストール
$ sudo easy_install pip
$ sudo pip install ansible
$ sudo pip install ansible --upgrade
- ansible.cfg を設置
$ sudo mkdir /etc/ansible $ sudo curl -L https://raw.githubusercontent.com/ansible/ansible/devel/examples/ansible.cfg -o /etc/ansible/ansible.cfg
Ansible入りましたー。
Ansibleの設定ファイル作成と実行
Homebrewのインストール
Ansibleの前に先にHomebrewを入れてしまいます。公式サイトに従い実施。
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Playbookファイル
AnsibleのPlaybookファイルをYAML形式のファイルで作成します。
いったん、下記のような内容のファイルになりました。
- main.yml
--- - name: Mac Setup # https://docs.ansible.com/ansible/latest/user_guide/playbooks_delegation.html#local-playbooks hosts: 127.0.0.1 connection: local # https://docs.ansible.com/ansible/latest/user_guide/become.html#id1 # become: yes vars: brew_taps: - homebrew/core - caskroom/cask brew_cask_apps: - alfred - clipy - docker - firefox - google-chrome - google-japanese-ime - google-hangouts - iterm2 - licecap - snip - visual-studio-code brew_packages: - autoconf - awscli - bash-completion - docker-compose - docker-machine - doxygen - git - git-lfs - jq - nmap - openssl - ssh-copy-id - tig - tree - wget - zsh - zsh-syntax-highlighting # pre_tasks: ## https://brew.sh/ # - name: Install Homebrew # command: '/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"' tasks: # https://docs.ansible.com/ansible/2.7/modules/homebrew_tap_module.html - name: Homebrew tap homebrew_tap: name: "{{ item }}" state: "present" with_items: "{{ brew_taps }}" # https://docs.ansible.com/ansible/2.7/modules/homebrew_cask_module.html - name: Install Homebrew Cask Packages homebrew_cask: name: "{{ item }}" state: "present" install_options: "appdir=/Applications" accept_external_apps: yes with_items: "{{ brew_cask_apps }}" # https://docs.ansible.com/ansible/2.7/modules/homebrew_module.html - name: Update Homebrew homebrew: update_homebrew: yes - name: Install Homebrew Packages homebrew: name: "{{ brew_packages }}" state: "present"
Inventoryファイル
ローカル環境への適用なのでインベントリのファイルは下記の内容で作成しています。
- inventory
[localhost] 127.0.0.1
実行
上記で最低限必要なファイルが揃った状態です。Githubの方にもあげています。
準備が整ったので下記のコマンドで実行します。
$ ansible-playbook main.yml -i inventory
ちなみに
Homebrewのモジュールの実行時に警告メッセージが出ていました。
実は最初古い書き方で実行していたため下記のメッセージが出ていまして
推奨される書き方に変更したという経緯があります。
[DEPRECATION WARNING]: Invoking "homebrew" only once while using a loop via squash_actions is deprecated. Instead of using a loop to supply multiple items and specifying `name: {{ item }}`, please use `name: u'{{ brew_packages }}'` and remove the loop. This feature will be removed in version 2.11. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
公式サイトのココ とかココ をみると、「with_」で指定すると指定した項目毎にモジュール呼び出しが発生してしまうので 「リストパラメータ」として渡して最適化をするということのようです。
https://github.com/ansible/ansible/issues/31367
It seems like this PR ( #16966 ) put homebrew into the squash_actions list, but forgot to add homebrew_cask.
ただ上記のissueをみる感じ、Homebrew_caskモジュールの方は対応中のステータスっぽいでしょうか。
Homebrewのモジュールを使っている箇所だけ下記のように変更しました。
- 旧)
- name: Install Homebrew Packages homebrew: name: "{{ item }}" state: "present" with_items: "{{ brew_packages }}"
- 新)
- name: Install Homebrew Packages homebrew: name: "{{ brew_packages }}" state: "present"
まとめ
AnsibleはHomebrewのモジュールも用意されていてMacの環境構築がとても楽にできそうな印象でした。
新しいPCに移行する時のことを考えるともう少しAnsibleで環境構築を自動化しておきたいものです。