やること
Ansible用コンテナとAnsibleでSSH接続して操作を行う用のコンテナ(AlmaLinux)を作成します。
Ansibleコマンドの動作確認と簡易なplaybookの動作確認をやります。
ディレクトリ構成
こんな感じです。
.
├── docker-compose.yml
├── ansible
│ └── Dockerfile
└── almalinux
└── Dockerfile
docker-compose.yml
docker-compose.ymlファイルで、ansibleとtargetの2つのサービスを定義します。
services:
ansible:
build:
context: ./ansible
volumes:
- .:/var/data
target:
build:
context: ./almalinux
AlmaLinux Dockerfile (almalinux/Dockerfile)
EPELリポジトリを有効にする必要はないかも?
パスワードはローカル試用のため空にしている。
FROM almalinux:latest
# EPELリポジトリを有効にする
RUN dnf -y install epel-release
# Python 3.9とOpenSSHサーバーをインストール
RUN dnf -y install python39 openssh-server
# SSHホスト鍵を生成
RUN ssh-keygen -A
# 空のパスワードを許可する
RUN sed -ri 's/^#PermitEmptyPasswords no/PermitEmptyPasswords yes/' /etc/ssh/sshd_config
RUN echo "root:" | chpasswd # rootのパスワードを設定
# SSHポートを公開
EXPOSE 22
# SSHデーモンを起動
CMD ["/usr/sbin/sshd", "-D"]
Ubuntu Dockerfile (ansible/Dockerfile)
Ansible用。
FROM ubuntu:latest
# パッケージリストを更新しAnsibleをインストール(vimもいれる)
RUN apt-get update && apt-get install -y software-properties-common && \
apt-add-repository ppa:ansible/ansible && apt-get update && apt-get install -y ansible vim
# デフォルトコマンド(必要に応じて調整)
CMD ["/bin/bash"]
使用方法
サービスをビルドして実行するには、以下のコマンドを実行します
docker-compose up --build
コンテナを起動したら下記コマンドで、Ansibleコンテナに入る
docker-compose run ansible
targetコンテナへSSH接続する
ssh target
# はじめてのSSH接続の確認プロンプト、入力促されるのでyesを入力
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
# 入れた
[root@9d4a41c48c88 ~]#
# 入るだけなので抜ける
[root@9d4a41c48c88 ~]# exit
logout
Connection to target closed.
つぎにAnsibleからコマンドを打つ
host設定をするためrootからhostsファイルを編集
vim /var/data/hosts
下記内容を追加
cat hosts
[target]
target
[target:vars]
ansible_user=root
ansible_python_interpreter=/usr/bin/python3.9
コマンド実行、SUCCESSになってるので成功!
ansible -i hosts target -vvvv -m ping
# レスポンス
target | SUCCESS => {
"changed": false,
"invocation": {
"module_args": {
"data": "pong"
}
},
"ping": "pong"
}
playbookを使ってみる
playbook.ymlを用意する。ymlの形式(インデント合わせなど)を間違えないように!
- hosts: target
tasks:
- name: Install Vim
yum: name=vim
実行、できた!
ansible-playbook -i hosts playbook.yml
# 出力
[WARNING]: Found both group and host with same name: target
PLAY [target] *********************************************************************************************
TASK [Gathering Facts] ************************************************************************************ok: [target]
TASK [Install Vim] ****************************************************************************************changed: [target]
PLAY RECAP ************************************************************************************************target : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
備考: CentOS&Ansibleでやる場合(断念)
最初はAlmaLinuxではなくCentOSで構築しようとしていた。
Ansibleからpingしようとしたがなんかうまくいかない
⇒Ansible の実行にはターゲットマシンにも Python が必要だったらしい
ターゲットマシン側CentOSにPython3.8以上を入れる必要あり。
バージョン指定はAnsibleのバージョンに寄る。
恐らくpython3.8が載っているレポジトリがしんでるので、yumからインストール出来ない。
wgetから頑張ってインストールするなら出来るかもだけど、それをする必要が無くなったので断念。
参考サイト
ローカル環境でAnsibleの動作をDockerを使って検証する