AnsibleコンテナでPackerを起動 windows編
■はじめに
本日は完全に小ネタです。
以前のエントリでAnsibleコンテナからPackerを起動する際に環境変数を渡していたのですが、windows(PowerShell)経由では同様の記述で全く環境変数が渡せません。
本日はPowerShell記述版です。
■以前の書き方確認
まずホスト側で環境変数を切りました。
> export ARM_CLIENT_ID="appID" > export ARM_CLIENT_SECRET="パスワード" > export ARM_SUBSCRIPTION_ID="サブスクリプションID" > export ARM_TENANT_ID="テナントID"
その上でdocker image buildをして、docker run時に-eオプションでホストの環境変数を設定すると、そのままコンテナの環境変数に渡されたました。
> docker container run -itd -e ARM_CLIENT_ID -e ARM_CLIENT_SECRET -e ARM_SUBSCRIPTION_ID -e ARM_TENANT_ID --name ansible_packer test/ansible_packer:0.1
これはmacで確認した方法です。
なので環境変数の書き方をPowerShell用に直して改めて実施します。
> $env:ARM_CLIENT_ID="appID" > $env:ARM_CLIENT_SECRET="パスワード" > $env:ARM_SUBSCRIPTION_ID="サブスクリプションID" > $env:ARM_TENANT_ID="テナントID"
Get-ChildItem env:すると設定ができていることが確認できます。
この状態で上記のdocker container runすると環境変数が渡っていないことがわかります。
試しに最後にenvを付けてからlogを確認してみます。
> docker container run -itd -e ARM_CLIENT_ID -e ARM_CLIENT_SECRET -e ARM_SUBSCRIPTION_ID -e ARM_TENANT_ID --name ansible_packer test/ansible_packer:0.1 env > docker container logs -f ansible_packer <<ここで出力されたコンテナの環境変数に上記が存在しない>>
■windowsでの渡し方
という訳でwindowsでは呼び出し方を変えます。
環境変数を共有できなそうなので、もう一つの方法である環境変数の代入で実行します。
> docker container run -itd -e ARM_CLIENT_ID=$env:ARM_CLIENT_ID -e ARM_CLIENT_SECRET=$env:ARM_CLIENT_SECRET -e ARM_SUBSCRIPTION_ID=$env:ARM_SUBSCRIPTION_ID -e ARM_TENANT_ID=$env:ARM_TENANT_ID --name ansible_packer test/ansible_packer:0.1 env
これでコンテナにホストの環境変数が渡って、最終的にはPackerのサービスプリンシパルに設定されます。
ちょっとハマってしまったけど結構早めに解決してよかった。
ではでは。