sironekotoroの日記

Perl で楽をしたい

Mac で Ansible によるインストール時にエラーが出るようになった

エラーが出る前にやったこと

多分これが原因かなぁ。

$ brew update

ここで、

git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core fetch --unshallow

するようにメッセージが出たで素直に従う。ただ、これはエラーには関係ないかな、多分。

ついでに $ brew upgrade したり、 Docker のアップデートなどを行った。

エラー内容

Mac のアプリケーションを ansible で管理しているのだけど、実行したところ、エラー

TASK [homebrew cask packages install] ******************************************
failed: [localhost] (item={'name': 'aerial'}) => {"ansible_loop_var": "item", "changed": false, "item": {"name": "aerial"}, "msg": "Warning: Cask 'aerial' is already installed.\n\nTo re-install aerial, run:\n  brew reinstall aerial"}

こんなのが、Ansible で設定している item の数だけ出てくる・・・

Warning: Cask 'aerial' is already installed

ううん?

こっからが長い旅路だった、2時間くらい?

ちなみに aerial ってのは綺麗なスクリーンセーバーアプリ。

github.com

設定を抜粋するとこんな感じ

    homebrew_cask_packages:
      - name: aerial
      - name: alfred
      - name: appcleaner

    - name: homebrew cask packages install
      homebrew_cask: name={{ item.name }} state=installed
      # ※1 GUIツールをインストールする場所を `/Application` に固定
      environment:
        HOMEBREW_CASK_OPTS: "--appdir=/Applications"
      with_items: '{{ homebrew_cask_packages }}'

調べて分かったこと

  • brewGUI アプリをインストールするときのコマンド brew cask install Foo ってのは deprecated 、非推奨だった

  • 現在は brew install --cask Foo 、cask はオプション引数みたいな感じになった

  • Ansible で brew cask する plugin である homebrew_caskbrew cask install Foo の形式に対応していない

  • brew cask install Foo の形式に対応しているプラグインcommunity.general.homebrew_cask

  • このプラグインをインストールするコマンド

    $ ansible-galaxy collection install community.general

プラグインインストール後の設定

    - name: homebrew cask packages install
      community.general.homebrew_cask:
        name: "{{ item.name }}"
        state: 'installed'
        install_options: 'appdir=/Applications'
      with_items: '{{ homebrew_cask_packages }}'

ということでした。

参考

github.com

docs.ansible.com

github.com

github.com