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

# なにするの

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

<div class="booklink-box" style="text-align:left;padding-bottom:20px;font-size:small;zoom: 1;overflow: hidden;"><div class="booklink-image" style="float:left;margin:0 15px 10px 0;"><a href="https://hb.afl.rakuten.co.jp/hgc/04051144.7e5bd47c.04051145.81e33400/yomereba_main_201907241249590896?pc=http%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F15344213%2F%3Fscid%3Daf_ich_link_urltxt%26m%3Dhttp%3A%2F%2Fm.rakuten.co.jp%2Fev%2Fbook%2F" target="_blank" ><img src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/3274/9784295003274.jpg?_ex=64x64" style="border: none;" /></a></div><div class="booklink-info" style="line-height:120%;zoom: 1;overflow: hidden;"><div class="booklink-name" style="margin-bottom:10px;line-height:120%"><a href="https://hb.afl.rakuten.co.jp/hgc/04051144.7e5bd47c.04051145.81e33400/yomereba_main_201907241249590896?pc=http%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F15344213%2F%3Fscid%3Daf_ich_link_urltxt%26m%3Dhttp%3A%2F%2Fm.rakuten.co.jp%2Fev%2Fbook%2F" target="_blank" >Ansible実践ガイド第2版</a><div class="booklink-powered-date" style="font-size:8pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="https://yomereba.com" rel="nofollow" target="_blank">ヨメレバ</a></div></div><div class="booklink-detail" style="margin-bottom:5px;">北山晋吾/塚本正隆 インプレス 2018年03月    </div><div class="booklink-link2" style="margin-top:10px;"><div class="shoplinkrakuten" style="display:inline;margin-right:5px"><a href="https://hb.afl.rakuten.co.jp/hgc/04051144.7e5bd47c.04051145.81e33400/yomereba_main_201907241249590896?pc=http%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F15344213%2F%3Fscid%3Daf_ich_link_urltxt%26m%3Dhttp%3A%2F%2Fm.rakuten.co.jp%2Fev%2Fbook%2F" target="_blank" >楽天ブックス</a></div><div class="shoplinkrakukobo" style="display:inline;margin-right:5px"><a href="http://hb.afl.rakuten.co.jp/hgc/04051144.7e5bd47c.04051145.81e33400/yomereba_main_201907241249590896?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frk%2Fbd2066a43053338aa9fa29394aea165e%3Fscid%3Daf_ich_link_urltxt%26m%3Dhttp%3A%2F%2Fm.rakuten.co.jp%2Fev%2Fbook%2F" target="_blank" >楽天kobo</a></div><div class="shoplinkamazon" style="display:inline;margin-right:5px"><a href="//af.moshimo.com/af/c/click?a_id=920708&p_id=170&pc_id=185&pl_id=4062&s_v=b5Rz2P0601xu&url=https%3A%2F%2Fwww.amazon.co.jp%2Fexec%2Fobidos%2FASIN%2F4295003271" target="_blank" >Amazon</a></div><div class="shoplinkkindle" style="display:inline;margin-right:5px"><a href="//af.moshimo.com/af/c/click?a_id=920708&p_id=170&pc_id=185&pl_id=4062&s_v=b5Rz2P0601xu&url=https%3A%2F%2Fwww.amazon.co.jp%2Fgp%2Fsearch%3Fkeywords%3DAnsible%25E5%25AE%259F%25E8%25B7%25B5%25E3%2582%25AC%25E3%2582%25A4%25E3%2583%2589%25E7%25AC%25AC2%25E7%2589%2588%26__mk_ja_JP%3D%2583J%2583%255E%2583J%2583i%26url%3Dnode%253D2275256051" target="_blank" >Kindle</a></div><div class="shoplinkseven" style="display:inline;margin-right:5px"><a href="//af.moshimo.com/af/c/click?a_id=920707&p_id=932&pc_id=1188&pl_id=12456&s_v=b5Rz2P0601xu&url=http%3A%2F%2F7net.omni7.jp%2Fsearch%2F%3FsearchKeywordFlg%3D1%26keyword%3D9784295003274" target="_blank" >7net<img src="//i.moshimo.com/af/i/impression?a_id=920707&p_id=932&pc_id=1188&pl_id=12456" width="1" height="1" style="border:none;"></a></div>            	  	  	  	  	</div></div><div class="booklink-footer" style="clear: left"></div></div>

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

# とりま
```YAML

- name: dummy install
  win_chocolatey:
    name: steam

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

# どういうことよ

標準でSteamが入っているので、[win_package](https://docs.ansible.com/ansible/latest/modules/win_package_module.html)にあるように、レジストリからProductIDを検索して、

```YAML
- win_package:
    product_id: XXXXXXX
    state: absent
```

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

```YAML
- win_package:
    product_id: Steam
    state: absent
```

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

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

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

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

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