0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ansibleのテスト環境をDockerで作成してみる(ローカル)

Last updated at Posted at 2025-01-24

やること

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のバージョンに寄る。

CentOS7.4でpython3.8を使えるようにした

恐らくpython3.8が載っているレポジトリがしんでるので、yumからインストール出来ない。

wgetから頑張ってインストールするなら出来るかもだけど、それをする必要が無くなったので断念。

参考サイト

ローカル環境でAnsibleの動作をDockerを使って検証する

Ansible の実行にはターゲットマシンにも Python が必要だった

CentOS7.4でpython3.8を使えるようにした

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?