AnsibleでSteamを削除する(WindowsのAnsible操作)


なにするの

とある事情で職場で購入したゲーミングPC(そこそこ性能あるGPUがほしかったからでゲームのためではない)に、Steamなんてゴミが入ってました。
これをなんとかAnsibleで取り除きたいのですがちょっと苦労したのでWorkAround的なものをば。

北山晋吾/塚本正隆 インプレス 2018年03月

前提として、すでに導通している(win_pingが返ってきてる)ことを上げておきます。この部分は調べるといろいろあるのでそちらを参考にしておいてください。

とりま


- name: dummy install
  win_chocolatey:
    name: steam

- name: uninstall
  win_chocolatey:
    name: steam
    state: absent

どういうことよ

標準でSteamが入っているので、win_packageにあるように、レジストリからProductIDを検索して、

- win_package:
    product_id: XXXXXXX
    state: absent

とするのが本筋だと思います。
32ビットアプリのため、HKLM:Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstallにインストール済み項目があるので検索すると、プロダクトIDではなく"Steam"とありました。そのため、

- win_package:
    product_id: Steam
    state: absent

としたのですが、このPlaybookを通すと、アンインストールされてないのにchanged状態になってばかりでした。
だからといってuninstall.exe(Steamのインストールフォルダにある)を立ち上げようとすると、バッチ処理はできないみたいで困ったもんです。

ところがちょっと考えて確認したら、chocolateyで対応してることがわかったんです。
そこで、

  1. 一度chocolateyでインストールする
  2. 入れたやつをchocolateyでアンインストールする

ことで、既存のインストールを修正する形でchoco経由のインストールに切り替わり、その後のアンインストールでそれを消せばいいという処理になりました。

たぶんね、chocolateyで利用しているスクリプトを使って処理させればもっと確実なんでしょうけど、期日が近いので「消せれば勝ち」ということでこんなことにしちゃいました。
これが正しいかはなんとも言えません…