Ansible で自分の Mac のソフトウェアの構成管理をする場合、その中核に据えられるであろう Ansible のモジュールが homebrew です。 このモジュールはその名の通り、Ansible から homebrew のソフトウェアをインストール/link/アンインストール/アップデートできるというモジュールです (cask はまた別のモジュールが用意されています)
たとえば、homebrew を最新化し、全モジュールを upgrade した上でインストールする、といった処理を Ansible としてのタスクとして記述すると、以下のようになるでしょうか。
|yaml|
homebrew を最新版にする
- name: common | brew update homebrew: update_homebrew=yes
全モジュールを upgrade する
- name: common | brew upgrade all homebrew: upgrade_all=yes
必要なパッケージをインストールする
- name: common | brew install osx.common.packages
homebrew: name={{ item.name }}
install_options={{ item.install_options | default(omit) }}
state=upgraded
with_items: osx.common.packages
||<
ここで、osx.common.packages は変数として以下のように定義してやれば良いです。
|yaml| osx: common: packages: - { name: ansible } - { name: cask } - { name: cmigemo } - { name: git, install_options: with-brewed-curl,with-brewed-openssl,with-brewed-svn,with-gettext,with-pcre } - 以下略 ||<
さて、ここで homebrew モジュールに渡す state オプションなんですが。
これだけでは何をしてくれるのか分からないので、[https://github.com/ansible/ansible-modules-extras/blob/devel/packaging/os/homebrew.py:title=ソース] を読んで整理してみました。
** state オプション
state オプションは全部で 6 つであるとドキュメンテーションされていますが、実際には他にもエイリアスが存在しています。その関係は以下の通り。
| state | Alias |* 呼び出されるメソッド | |installed | present | install_packages() | |head | | install_packages() | |upgraded | latest | upgrade_packages() | |linked | | link_packages() | |unlinked | | unlink_packages() | |absent | removed, uninstalled | uninstall_packages() |
以下では、個々の state 指定がどういう挙動を伴うか、といった点を説明していきます。
*** installed
既にインストールされているかどうかをチェックし、インストールされていない場合は brew install package でインストールを行います。 インストールされているかどうかは、brew info package の実行結果で判断されます。
** head 基本的には installed 指定と変わりません。 ただし head 指定の場合は、インストールオプションに --HEAD が付与されます。
** upgrade
upgrade 指定の場合は、インストール済か否かで挙動が異なります。 インストールされていない場合は、brew install package でパッケージがインストールされます。 一方で、インストール済の場合は、upgrade 可能な場合に限り brew upgrade package が実行されます。
upgrade 可能かどうかは、brew outdated の実行結果に対象パッケージが含まれているかで判断されます。
** linked
対象パッケージがインストールされていなければエラーとなります。 インストールされていれば、brew link package でシンボリックリンクが作成されます。
** unlinked
対象パッケージがインストールされていなければエラーとなります。 インストールされていれば、brew unlink package でシンボリックリンクが削除されます。
** absent
対象パッケージがインストールされていなければエラーとなります。 インストールされていれば、brew uninstall package で対象パッケージが削除されます。