AnsibleコンテナでPackerを起動 windows編

■はじめに

本日は完全に小ネタです。

以前のエントリでAnsibleコンテナからPackerを起動する際に環境変数を渡していたのですが、windowsPowerShell)経由では同様の記述で全く環境変数が渡せません。

本日は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のサービスプリンシパルに設定されます。



ちょっとハマってしまったけど結構早めに解決してよかった。

ではでは。