Quantcast
Channel: いろいろ備忘録日記
Viewing all articles
Browse latest Browse all 1459

Gitpod で Ansible の環境を用意して遊んでみる

$
0
0

概要

ひょんなことから Ansible を使うことになりそうなので、勉強用の環境をGitpodで作ってみます。

Gitpodでは docker が使えるので、イメージとしては

  • Ansibleが入っているコンテナを用意 (コントロールノード)
  • 素の debian:latest に openssh サーバを立ててSSH出来るようにしたコンテナ(ターゲットノード)

という2つを作って、遊ぶ構成を作ってみます。

Gitpod側で用意される環境では、ping などが打てないように制御されているので

自分で作ったコンテナ上でやります。

以下のサンプルなどですが、ついでにGithubにアップしておきました。ご参考までに。

github.com

コントロールノード用のコンテナ

ansible使って操作する側のコンテナです。

FROM debian:latest

RUN mkdir -p /playbooks

RUN apt-get update -q \
    && apt-get install -yq iputils-ping net-tools dnsutils procps gnupg2 nano vim sshpass \
    && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367 \
    && echo 'deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main'>> /etc/apt/sources.list \
    && apt-get install -y ansible \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /playbooks

# https://qiita.com/ken992/items/872a90736e6af26ef4ab# https://eel3.hatenablog.com/entry/2020/09/12/110814CMD [ "bash", "./startup.sh" ]

最後の CMDのところで実行しているシェルスクリプトはこんな感じ。

mkdir-m700$HOME/.ssh
ssh-keyscan demo001 >>$HOME/.ssh/known_hosts

tail-f /dev/null

ターゲットノード用のコンテナ

ansibleから操作される側のコンテナです。

普通はしないですが、ansibleで遊ぶには ssh で接続できないといけないので、opensshサーバを立ててます。

FROM debian:latest

RUN apt-get update -q \
    && apt-get install -yq python3 \
    && apt-get install -yq iputils-ping net-tools dnsutils procps ssh gnupg2 nano vim

RUN apt-get install -y openssh-server

## https://qiita.com/y-vectorfield/items/587d3f3a6eec8f251f3c#RUN mkdir /var/run/sshd
RUN echo 'root:rootroot' | chpasswd
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed -i 's/#PasswordAuthentication/PasswordAuthentication/' /etc/ssh/sshd_config

# SSH login fix. Otherwise user is kicked off after loginRUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd

ENV NOTVISIBLE "in users profile"RUN echo "export VISIBLE=now">> /etc/profile

EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

Docker Compose 用ファイル

ボリュームやネットワークなどの設定を毎回毎回打つのは面倒なので docker-compose で実行できるようにします。

version:"3"services:ansible:container_name: ansible001
    build:context: .
      dockerfile: Dockerfile.ansible
    tty:truenetworks:- net001
    volumes:- ./playbooks:/playbooks
    restart: always
    depends_on:- demo
  demo:container_name: demo001
    build:context: .
      dockerfile: Dockerfile.demo
    tty:truenetworks:- net001
    restart: always
networks:net001:

起動

ここまで来たら、後は起動して、Ansible側のコンテナに入ればオッケイ。

$ docker-compose up -d
Starting demo001 ... done
Starting ansible001 ... done

$ docker-compose exec ansible bash
root@160f7b398b01:/playbooks#

Ansible実行してみる

インベントリの中は以下のようにしています。

# cat apt/install/inventry.ini 
[demo]
demo001

#
# https://qiita.com/suin/items/ab40779347c910a74d05
#
[all:vars]
ansible_ssh_port=22
ansible_ssh_user=root
ansible_ssh_pass=rootroot
ansible_sudo_pass=rootroot

ちゃんと通信が通るかどうかを ping モジュールで確認。

# ansible -i apt/install/inventry.ini demo001 -m ping
demo001 | SUCCESS =>{"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},
    "changed": false,
    "ping": "pong"}

オッケイ。

なので、試しに以下のプレイブックを流してみます。

# https://qiita.com/maki_azuki/items/b0679959a61e00966c75# https://cloudpack.media/32424# https://stackoverflow.com/questions/32429259/ansible-fails-with-bin-sh-1-usr-bin-python-not-found- hosts: demo
  gather_facts: yes
## もし、相手先にPythonが入っていない場合は以下のようにする##  gather_facts: no#  pre_tasks:#    - name: 'install python3'#      raw: apt install -y python3tasks:- name: apt update
      apt:update_cache: yes
    - name: apt install sl
      apt:name:- sl
# ansible-playbook -i apt/install/inventry.ini apt/install/playbook.yml 

PLAY [demo] ************************************************************

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

TASK [apt update] *******************************************************
[WARNING]: Updating cache and auto-installing missing dependency: python3-apt
ok: [demo001]

TASK [apt install sl] ******************************************************
changed: [demo001]

PLAY RECAP *************************************************************
demo001                    : ok=3changed=1unreachable=0failed=0skipped=0rescued=0ignored=0

オッケイ。ちゃんと流れました。

ターゲットノード上には sl コマンドが入っていないので、初回はちゃんとインストールされていますね。

で、Ansibleのような構成管理ツールの売りは「冪等性」ですので、再度同じプレイブックを流してみます。

# ansible-playbook -i apt/install/inventry.ini apt/install/playbook.yml 

PLAY [demo] ************************************************************
TASK [Gathering Facts] **************************************************
ok: [demo001]

TASK [apt update] *******************************************************
ok: [demo001]

TASK [apt install sl] ******************************************************
ok: [demo001]

PLAY RECAP *************************************************************
demo001                    : ok=3changed=0unreachable=0failed=0skipped=0rescued=0ignored=0

ちゃんと、既にインストールされているので何もせずに終わりました。

f:id:gsf_zero1:20211025152815p:plain

参考情報

docs.ansible.com

qiita.com

eel3.hatenablog.com

qiita.com

qiita.com

qiita.com

cloudpack.media

stackoverflow.com


過去の記事については、以下のページからご参照下さい。

  • いろいろ備忘録日記まとめ

devlights.github.io

サンプルコードは、以下の場所で公開しています。

  • いろいろ備忘録日記サンプルソース置き場

github.com

github.com

github.com


Viewing all articles
Browse latest Browse all 1459

Trending Articles