Windows サンドボックスの中でAnsible構成管理をテストする
要約
- AnsibleでWindowsの構成管理をしたいから、WindowsSandbox上で構成管理走らせてテストしたい
- 上の実行が可能になるまでのお膳立て(WinRMの設定など)も1コマンドに含めた
こういう用途で参考になるかも?
- 真っ新なWindows環境に複数のソフトをポチポチ入れるのがめんどくさいので、1発で環境構築したい
- 真っ新なWindows環境で自作のソフトウェアやプラグインのインストール→動作含めてテストしたい
WindowsSandboxとは?
使い捨てのWindows環境を手軽に実行できるので、中でソフトウェアインストールしたり、環境変数やレジストリの値を書き換えてみたりといった事が可能です。
使い方
READMEを置いてます。
- Windows Sandboxの機能を有効化します こちら
- 「test.wsb」を利用してWindows Sandboxを起動します
- 「run_setup.ps1」と「dev_playbook.yml」をSandbox内の任意の環境に設置します
- 「run_setup.ps1」を実行します
最初にパスワード入力を求められます(WDAGUtilityAccountアカウントのパスワードはこのパスワードに変更されます) - 「dev_playbook.yml」の内容に基づいて、Windows Sandbox環境に必要なソフトウェアがインストールされていきます
内部で走る処理
- Chocolateyのインストール
- Cygwinのインストール
- WinRM のセットアップ こちらを利用しています
- WDAGUtilityAccountのパスワードを「run_setup.ps1」を実行した際に入力したものに変更します
動作確認済み環境
エディション:Windows 10 Pro
バージョン:21H2
OSビルド:19044.1889
動機
手元の開発環境をWindowsSandboxの中で構築しようと思ったのがスタート地点です。
Windowsで何らかのソフトウェア入れて開発環境構築すると、環境変数やレジストリの値の書き換えが発生しがちです。
🤔「書き換え自体は仕方がないにしても、どこか隔離された環境でテストとかできないかなぁ・・・」
↓
🧐「WindowsSandboxという機能で隔離機能が作れるのか」
↓
😮「うおおお!環境変数やレジストリが確かに切り離されてる!!」
↓
🤨「よし、ここにぽこぽこソフトいれてこう ポチポチめんどくさ・・・」
↓
🤔「そういえば昔AnsibleでWindowsも構成管理できるのを見たなぁ、せっかくだし試してみるか」
という流れが事の経緯です。
詰まった点
直接の使用等には関係ないですが以下、環境構築中に詰まった点です。
- ansibleのインベントリファイル(hosts)の値が誤っていて時間を溶かした
hostsファイルは「run_setup.ps1」の中で生成していますが、これが最初
[winrm_local:vars]
~~~~
ansible_winrrm_transport=basic
ansible_winrrm_server_cert_validation=ignore
#本来は「ansible_winrm_***」
となっていた為、WinRMの設定を変更していじりまくっても
fatal: [127.0.0.1]: UNREACHABLE! => {"changed": false, "msg": "ssl: HTTPSConnectionPool(host='127.0.0.1', port=5986): Max retries exceeded with url: /wsman (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate (_ssl.c:1091)')))", "unreachable": true}
というエラーが出力され、ansibleでの環境構築が実行できませんでした。(わかったときは「ンンンンアアアアアアアアアアアアア!!👺」となりました)
何かうまく動作しない時は、大体自分が何か見逃してるやつは自戒しながらも毎回毎回起こる問題として
インベントリファイル自体のチェックを行う手段ってなにか存在するんですかね?
-
cygpathでWindows → cygwinのパス変換
以下のようなWindows上のパス → cygwin上のパスに変換する際に
cygpathを利用していますが参照:cygpath"C:\Users\WDAGUtilityAccount\Desktop\hosts" ↓ "/cygdrive/c/Users/WDAGUtilityAccount/Desktop/hosts"
bash -c 経由でコマンドを渡している都合で
"C:\Users\WDAGUtilityAccount\Desktop\hosts" ↓ "C:UsersWDAGUtilityAccountDesktophosts"
として渡されてしまうので,最終的に
"C:\\\\Users\\\\WDAGUtilityAccount\\\\Desktop\\\\hosts"
として渡しています。
cygwin上では
cygpath -u C:\\Users\\WDAGUtilityAccount\\Desktop\\hosts
というコマンドとして実行されています。
毎回環境が消えちゃうから、再起動が必要なソフトウェアのテストはできないのでは?
はい、現状はそのようです。
Windows 11 Build 22509のInsider Previewで再起動が挟まるようなフローでも対応する旨のアナウンスがされています。
Windows Sandbox now supports reboot inside of its virtualized environment (for example, if you were to click the Restart option under the Power button in Start).
Windows11を使用していれば、そのうち対応されるのかなと思います。
参考にさせて頂いたURL
所感
これでガシガシレジストリ書き換えてやるううううう
😁📝🧰 Sandbox
😮️️📝🖥️ ホストのWindows「あ...」
😮️️💬🖥️💀
🙈💥
Discussion