[やってみた]Ansible Controllerをdockerコンテナで作成


背景・目的・目標

コンテナ内でAnsibleを実行し、他PC等へ接続する

参考サイト

AnsibleとDocker Composeの相性問題に気づいた話

Ansible Documentation

手順

※あらかじめDocker、Docker-composeがインストールされていることを前提としています

Docker

Docker関連のファイルは以下の構成です。

./ansible/
├── docker
│   └── ansible
│       └── Dockerfile
└── docker-compose.yml

docker-compose.yml

version: '2'
services:
  ansible:
    container_name: 'ansible'
    image: ansible/ansible
    build:
      context: ./
      dockerfile: ./docker/ansible/Dockerfile
    tty: true
    volumes:
      - /home/xxxxx/xxxxx/volumes/ansible:/ansible
    environment:
      - sample=hoehoehoe

docker/ansible/Dockerfile

FROM ubuntu:18.04

RUN apt-get update
RUN apt-get install -y ansible

マウントファイル

コンテナにマウントするファイル等は上記Docker関連ファイルとは別の場所で管理。
以下の構成です。

./volumes/ansible/
├── inventory
├── main.yml
└── roles
    └── ping
         └── tasks
            └── main.yml

inventory

[srv]
xxx.xxx.xxx.xxx

[srv:vars]
ansible_user=xxxxx
ansible_port=22

main.yml

- hosts: srv
  become: yes
  roles:
    - ping

roles/ping/tasks/main.yml

- ping:
        data: test

動作確認

$ docker-compose up -d

$ docker-compose ps
 Name      Command    State   Ports
-----------------------------------
ansible   /bin/bash   Up

$ docker-compose exec ansible /bin/bash

# cd /ansible

# ansible-playbook -kK -i inventory main.yml
SSH password:
SUDO password[defaults to SSH password]:

PLAY [srv] ****************************************************************************************************************

TASK [Gathering Facts] ****************************************************************************************************
ok: [xxx.xxx.xxx.xxx]

TASK [ping : ping] ********************************************************************************************************
ok: [xxx.xxx.xxx.xxx]

PLAY RECAP ****************************************************************************************************************
xxx.xxx.xxx.xxx                : ok=2    changed=0    unreachable=0    failed=0