Ansibleをコンテナで準備 動作編
■はじめに
昨日のエントリではコンテナで作成したAnsible内でping通すところまで確認しました。
本日はDockerfileの作成〜動作確認の完了まで行います。
■Dockerfile
動作確認が取れたDockerfileは以下になります。
# syntax=docker/dockerfile:1.1-experimental FROM alpine:3.12.0 RUN set -x \ && apk add --no-cache bash \ && apk add --no-cache ansible \ && apk add --no-cache python3 \ && apk add --no-cache openssh-client \ && mkdir -p /etc/ansible/selenoid \ && mkdir -p -m 0700 ~/.ssh \ && ssh-keyscan selenoid-qa-example-01.eastus.cloudapp.azure.com >> ~/.ssh/known_hosts COPY inventory_node.ini /etc/ansible COPY playbook_node_docker.yml /etc/ansible COPY ansible.cfg /etc/ansible COPY ./selenoid /etc/ansible/selenoid WORKDIR /etc/ansible RUN ssh-keygen -q -N '' -t ed25519 -f ~/.ssh/id_ed25519 RUN --mount=type=secret,id=ssh,target=/root/.ssh/test_key.pem \ cat ~/.ssh/id_ed25519.pub | ssh -i /root/.ssh/test_key.pem azureuser@selenoid-qa-example-01.eastus.cloudapp.azure.com 'cat >> .ssh/authorized_keys' RUN ansible -i inventory_node.ini selenoid-qa-example-01.eastus.cloudapp.azure.com -m ping CMD ["ansible-playbook", "-i", "inventory_node.ini", "playbook_node_docker.yml"]
■ポイント
まずしばらく悩んだのがbuildkitのマウントパスです。
最初~/.ssh/と書いていたのですが、全くうまくマウントされません。
でフルパス(/root/.ssh/test_key.pem)を書いたら動きました。
探しても情報出てこなくてまいった。。
あと、playbookの実行はdocker runで動かせるようにCMD化してあります。
playbookの動作もrun(もしくはstart)でlogで確認できます。
それから今回のplaybookは以前準備したplaybookをそのまま使用しています。
このplaybookの中で、selenoidの各種ファイル(docker-compose.ymlとかbrowsers.jsonとか)まで準備しています。
なのでこれらファイルもAnsibleコンテナ内に同梱してやらねばなりません。
selenoidコンテナ周りのファイルはCOPYコマンドで配置していますが、parentのディレクトリは閲覧できない仕様になっているので、Dockerfileと同じディレクトリに配置しなおします。
合わせてselenoidまでの各種パス(playbook内のパスやDockerfile内のパス、等々)を変更します。
■実行
まずはビルドです。
> docker image build -t test/ansible:0.1 --secret id=ssh,src=$HOME/.ssh/test_key.pem . [+] Building 15.2s (17/17) FINISHED (中略) => exporting to image 0.1s => => exporting layers 0.1s => => writing image sha256:34fa4577686201bc3a786af872b9f5cc66231e567807feb13f88c321b1236ac7 0.0s => => naming to docker.io/test/ansible:0.1
無事ビルドできました。
次、docker runしてコンテナの準備と実行を行います。
>docker container run -itd --name ansible test/ansible:0.1 3cbb6c2420f4d5bbe0c21fb906d3d4ffd1cb6b79d1b14c266ee399ddd5bd3a1d
ログを確認しましょう。
> docker container logs -f ansible (中略) PLAY RECAP ********************************************************************* selenoid-qa-example-01.eastus.cloudapp.azure.com : ok=17 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
無事AnsibleコンテナからSSH経由でAnsibleのSSH公開鍵を配置し、プロビジョニングさせることができました。
今回はここまで。 ではでは。