Ansibleによるプロビジョニングの動作確認をDockerで手軽にやる

  • 5
    Like
  • 0
    Comment

Dockerコンテナ起動

$ docker run -it -p 22 ubuntu:16.04 bash

% apt-get update
% apt-get install -y openssh-server python

# sshからのパスワードでのrootログインを許可
% sed -i -e "s/PermitRootLogin prohibit-password/PermitRootLogin yes/" /etc/ssh/sshd_config
% sed -i -e "s/#PasswordAuthentication yes/PasswordAuthentication yes/" /etc/ssh/sshd_config
% service ssh restart

# パスワードを設定
% passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

ctrl-p ctrl-q (デタッチ)

上記に加えて

sed -i -e "s/#PermitEmptyPasswords yes/PermitEmptyPasswords yes/" /etc/ssh/sshd_config

ってやっただけだとパスワードなしでsshログインできなかったので、やり方分かる人いたら教えてほしいです :sweat_smile:

インベントリファイルを準備

# コンテナに接続するためのポートを確認
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                   NAMES
9eae7d0a68cc        ubuntu:16.04        "bash"              6 minutes ago       Up 6 minutes        0.0.0.0:32772->22/tcp   nervous_minsky
./hosts
0.0.0.0:32772
$ ansible-playbook -i hosts -u root -k playbook.yml
SSH password:

注意点

apt-get install -y xxx-$(uname -r)

みたいにプロビジョン先のカーネルに応じてパッケージをインストールするタスクが含まれている場合は要注意。
Dockerコンテナ内では uname してもホストのカーネル情報が返ってくるのでこういうタスクは正しく実行できない。