この記事はFringe81アドベントカレンダー2019の19日目の投稿です!
最近Ansibleを触る機会をいただいたのでその時に調べたことを書きます!
Ansibleとは?
レッドハットが開発するオープンソースの構成管理ツール。
特徴を簡単にまとめると以下の3つです。
- Simple: ymlファイルで設定が読みやすい。
- Agentless: サーバー追加ごとにエージェントを追加する必要がない。
- Powerful: モジュール群が豊富。
コントロールノードにAnsibleをインストールしファイルを用意するだけでコントロールノードからターゲットノードに対してSSH経由でタスクを送信することができます。(プッシュ型)
CoreOSにplaybookを実行するときの注意点
CoreOSに対してplaybookを実行させたときにうまく動作しなかったので、いろいろ調べていたら、以下の一文を発見しました。
http://coreos.com/blog/managing-coreos-with-ansible.html
The target machine must have a Python interpreter for Ansible to be able to execute these modules and thus configure your machine.
CoreOS is designed for running containers and does not ship with a Python interpreter. Additionally, it has no package manager to install Python. This presents a small chicken-and-egg problem.
Luckily Ansible has a raw execution mode which bypasses Python modules and runs shell commands directly on a remote system. We will leverage this feature to bootstrap a lightweight Python interpreter onto our CoreOS hosts.
訳してみる
「ansibleではmoduleを実行するためにターゲットノードにpythonがインストールされている必要があるが、CoreOSはPythonが入っていないしPythonをインストールするためのパッケージマネージャーが存在しない。ただ、AnsibleにはPythonモジュールをバイパスし、リモートシステムでシェルコマンドを直接実行するraw実行モードがある。この機能を利用して、軽量のPythonインタープリターをCoreOSホストにブートストラップすることでmoduleを実行することが可能となる。」
途中ちょっとよくわからんとこあったけど PythonインタープリターをCoreOSホストにブートストラップする
必要があることはわかりました。笑
Blogにしたがって次の3つの手順でやることでCoreOSに対してplaybookを実行することができました!
1. inventoryファイルの vars
に以下の項目を追加
[hoge]
core-01
[hoge:vars]
ansible_ssh_user=core
ansible_python_interpreter="PATH=/home/core/bin:$PATH python"
2. role: coreos-bootstrapをコントロールノードにinstall
$ ansible-galaxy install defunctzombie.coreos-bootstrap -p ./roles
3. playbookにroleを追加
---
- hosts: hoge
gather_facts: False
roles:
- defunctzombie.coreos-bootstrap
[おまけ] CoreOSのhostにdockerコマンドを実行したい時
ターゲットノードに対してdockerコマンドを実行したい場合はdocker-pyを対象のCoreOSにインストールするtaskを追加する必要があります。
- hosts: hoge
gather_facts: False
tasks:
- name: docker-pyのインストール
pip:
name: docker-py
executable: "/home/core/pypy/bin/pip"