Ansibleのwin_chocolateyでエラー発生した時の対処方法


はじめに

Windowsでソフトウェアをインストールする際にchocolateyって便利ですよね!
そもそもchocolateyって何よ?って方もいると思うので簡単に説明すると、Windows用のパッケージ管理ソフトで、ソフトウェアの依存関係なども含めてインストール・更新をよしなにしてくれます。
素敵ですね!

AnsibleでWindowsサーバに対してソフトウェアのインストールするときも win_chocolatey モジュールは便利です。

ただ、最近chocolateyをインストールして、openjdkも合わせてインストールしようとしたらエラーが発生し、ハマったので忘れないうちに以下に事象と解決策を書きたいと思います。

構成について

GCP環境でAnsible Server と Windows Server の2台構成です。

Ansible Server

OS: CentOS 7
Ansible: 2.7.9

Windows Server

OS: Windows Server 2012 R2 Datacenter
chocolatey: 0.10.13

Ansible実行時にエラー発生

Ansible実行時に以下のエラー(抜粋)が発生しました。

TASK [chocolatey : Install Chocolatey] **************************************************************
changed: [xxx.xxx.xxx.xxx]

TASK [openjdk : Install openjdk] ************************************************************************
fatal: [xxx.xxx.xxx.xxx]: FAILED! => {
    "changed": false,
    "command": "C:\\ProgramData\\chocolatey\\bin\\choco.exe list --local-only --exact --limit-output openjdk",
    "msg": "Error checking installation status for the package 'openjdk'",
    "rc": 2,
    "stderr": "",
    "stderr_lines": [],
    "stdout": "",
    "stdout_lines": []
}

対処方法

最新のchocolateyをインストールすることで発生したかたちですが、chocolateyをインストールする際に終了コードの無効化の設定を行うことでエラーを回避することができます。
今まで正常に動いてたのに、急に動かなくなった場合のあるあるですね。。(そもそも最新版を入れry)


---
- name: install Chocolatey
  win_chocolatey:
    name: chocolatey
    state: present

### これを追加する
- name: disable enhanced exit codes
  win_chocolatey_feature:
    name: useEnhancedExitCodes
    state: disabled

- name: Install openjdk
  win_chocolatey:
    name: openjdk
    state: present

さいごに

win_chocolatey モジュールを使用している方へ少しでもお役に立てれば幸いです!

参考にしたサイト