Ansibleに入門する


今回の目標

  • Dockerを導入したLinux環境上で、Ansibleを導入したDockerイメージをビルドします
  • コンテナの中でplaybookを実行して、ホストOSのファイル一覧を取得します

Dockerイメージの作成

Dockerfileを作ります。vimなど便利そうなツールは入れておきます。

FROM centos:8

RUN yum -y install epel-release && \
    yum -y update && \
    yum -y reinstall glibc-common && \
    yum -y install which vim net-tools glibc-langpack-en langpacks-ja python36 openssh-clients passwd sshpass && \
    rm -f /etc/localtime && \
    ln -fs /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && \
    pip3 install ansible

RUN mkdir /etc/ansible && \
    chmod 777 /etc/ansible && \
    touch /etc/ansible/hosts && \
    chmod 666 /etc/ansible/hosts

ENV LANG="ja_JP.utf8"

ビルド&実行します。

docker build -t ansible .
docker run -it --rm ansible bash

Ansibleを実行する準備

インベントリファイルを用意します(デフォルトで/etc/ansible/hosts)。
コンテナ内からホストOSを操作するようにします。

172.17.0.1

[all:vars]
ansible_ssh_user=myuser
ansible_ssh_pass=mypassword

playbookを用意します。ホストOS上のディレクトリのファイルを検索して出力します。

- hosts: all
  tasks:
    - name: find
      find:
        paths: /home/myuser/mydirectory
        recurse: true
      register: result
    - name: debug
      debug: var=result

実行

# 一度、sshログインしてknown_hostsに入れておく
ssh [email protected]

# playbookを実行する
ansible-playbook myplaybook.yaml

JSON形式で出力されました。

PLAY [all] ***********************************************************************************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************************************************************
ok: [172.17.0.1]

TASK [find directory] ************************************************************************************************************************************************************************
ok: [172.17.0.1]

TASK [debug] *********************************************************************************************************************************************************************************
ok: [172.17.0.1] => {
    "result": {
        "changed": false,
        "examined": 26,
        "failed": false,
        "files": [
            {
                "atime": 1573551290.6783524,
                "ctime": 1573551252.5081663,
                "dev": 64768,
                "gid": 1000,
以下省略