WENPE PLAYGROUND
WENPE PLAYGROUND
WENPE PLAYGROUND
WENPE PLAYGROUND

Image Not Found
#VSCode
#Ansible

2023.03.05

devcontainerでAnsibleの開発環境を作成する

概要

devcontainerでAnsibleの開発環境を作成したいと思います。

ゴール

以下のものが利用可能な開発環境を作成していきます。

  • VScodeの拡張機能
    • redhat.ansible
    • ms-python.python
  • pipパッケージ
    • ansible
      • Ansible本体
    • ansible-lint
      • AnsibleのLinter(最近はフォーマット機能もあります)
    • molecule[docker]
      • AnsibleのRoleのテストフレームワーク
    • pytest-testinfra
      • Python製のインフラテストフレームワーク
    • flake8
      • PythonのLinter
    • black
      • Pythonのコードフォーマッタ
    • isort
      • Pythonのimport周りのコードフォーマッタ

成果物

参考

作業内容

Dockerイメージの作成

開発環境用のDockerイメージを作成していきます。以下がDockerfileです。
やっていることの概要は以下です。

  • ベースはPythonのイメージを利用しています。バージョンはAnsibleのバージョンに合わせて、お好きなものを選択して下さい。
  • pipで必要なパッケージをインストールします。requirements.txtの内容は後で記載します。
  • dockerをインストールしています。これは、moleculeでテスト対象にdockerを利用するのに、Docker outside of Dockerを利用するためです。
  • ENVは性能チューニングなどで、設定しておくと良さそうなものを設定しています。お好きに変更して下さい。
FROM python:3.9

COPY ./requirements.txt /tmp/

RUN pip3 install --no-cache-dir -r /tmp/requirements.txt && \
    apt-get -y update && \
    apt-get -y install \
        ca-certificates \
        curl \
        gnupg \
        lsb-release && \
    mkdir -m 0755 -p /etc/apt/keyrings && \
    curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg && \
    echo \
    "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
    $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null && \
    apt-get -y update && \
    apt-get -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin && \
    apt-get -y install rsync

ENV ANSIBLE_PIPELINE=True \
    ANSIBLE_SSH_ARGS="-o ControlMaster=auto -o ControlPersist=30m -o ConnectionAttempts=100 -o UseKnownHostsFile=/dev/null" \
    ANSIBLE_FORKS=20 \
    ANSIBLE_HOST_KEY_CHECKING=False \
    ANSIBLE_GATHERING="smart" \
    ANSIBLE_CACHE_PLUGIN="jsonfile" \
    ANSIBLE_CACHE_PLUGIN_CONNECTION="/tmp" \
    ANSIBLE_CACHE_PLUGIN_TIMEOUT=86400

WORKDIR /root/workstation


以下がrequirements.txtです。

ansible==7.3.0
ansible-lint==6.13.0
molecule[docker]==4.0.4
pytest-testinfra==7.0.0
flake8
black
isort

Docker Composeの設定

devcontainerでは、Docker Composeで先ほど作ったDockerfileから作成されたイメージを起動します。以下が、docker-compose.ymlです。
やってることの概要は以下です。

  • build: . 先ほど作成したDockerfileからイメージを作成します。
  • /var/run/docker.sock:/var/run/docker.sockDocker outside of Dockerの設定です。
---
version: "3"

services:
  ansible:
    build: .
    command: /bin/bash
    volumes:
      - ../:/root/workstation
      - /var/run/docker.sock:/var/run/docker.sock
    tty: true

devcontainerの設定

以下がdevcontainer.jsonです。

{
  "name": "dev-container",
  "dockerComposeFile": [
    "docker-compose.yml"
  ],
  "service": "ansible",
  "workspaceFolder": "/root/workstation",
  "customizations": {
    "vscode": {
      "extensions": [
        "redhat.ansible",
        "ms-python.python"
      ],
      "settings": {
        "python.formatting.provider": "black",
        "[python]": {
          "editor.defaultFormatter": null,
          "editor.formatOnSave": false
        },
        "files.associations": {
          "*.yml": "ansible",
          "docker-compose*.yml": "dockercompose"
        }
      }
    }
  },
  "shutdownAction": "stopCompose"
}


ファイルの配置

開発フォルダのルートに、以下の階層で作成したファイルを配置します。

.
└── .devcontainer
     ├── Dockerfile
     ├── devcontainer.json
     ├── docker-compose.yml
     └── requirements.txt

以上で完了です。
あとは、devcontainerを起動すると、いい感じに開発できます。


© 2023 Wenpe