最近全く記事を更新する事が出来ていない・・・良くない事だ。しかしアプリ制作の進捗がイマイチなため、その件については書ける記事が無いんだよな・・(´・ω・`)だったら別の事を記事にしよう。

Ansible:設定道具が収まったブリーフケース

この間サーバを複数回立てたことがあると話した所、知り合いからAnsibleなるツールがあることを教わった。これを使うと事前に設定しておいたコマンドを一気に実行して(最初に設定する必要はあるが)サーバを全自動で構築する事が出来るらしい。超いいじゃないか。競合ソフトに「Chef」や「Puppet」といった物があるらしいが、この「Ansible」は設定先のコンピュータにPython以外のツールをインストールする必要が無い(Ansibleは開発側にのみ入れれば良い)ため、「接続先の事前準備」が殆どいらない。あのRedHatが作っている、というのも評価ポイントだ。早速使ってみよう。

今回の構成

Ansibleのインストール先:MacBook Pro (15-inch, 2016,Mojave)

設定先のコンピュータ:ESXi 6.5上のUbuntu_18.10(ESXiについては別の機会に)

早速インストール

今回はMacにインストールするため、世に出回っている記事とは少し勝手が違う(殆どLinuxを対象にしている)。どうやらMacへのインストールには「pip」と呼ばれるツールが必要みたいだ。こいつはいつの間にかMacにインストールされていたため、更新して準備完了だ。

#pip自身を更新する。
pip install -U pip

そうしたら、Ansibleをインストールする。

sudo pip install ansible

これだけで完了だ。

基本設定:勝手が違う

という訳で、まずはAnsibleをサーバに繋いで見よう。まだ何も設定を記述していないが、そもそも繋げなければ意味がない。そのための設定ファイルは「/etc/ansible/hosts」にあるらしい。

この場合、/etc/ansible/hostsファイルには次のように記述すれば良い。

https://knowledge.sakura.ad.jp/3124/

おい・・・

早速かよ。ファイル(というかディレクトリ)はどこにあるんだ?一応ホームディレクトリに「.ansible」ディレクトリはあったが中身は空っぽだ。まさか接続すら出来ずに断念か!?

しかもネットで調べるとMacユーザは皆Homebrewでインストールしている。出だしからしくじったか?

いや、落ち着け。下記の通りAnsible自体はインストールされている。

ansible --version                           
ansible 2.7.10
  config file = None
  configured module search path = [u'/Users/NodaShotaro/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python2.7/site-packages/ansible
  executable location = /usr/local/bin/ansible
  python version = 2.7.15 (default, Jun 17 2018, 12:46:58) [GCC 4.2.1 Compatible Apple LLVM 9.1.0 (clang-902.0.39.2)]

そして見ろ!なんかディレクトリっぽいものが書かれていないか!?ここを見てみよう。

・・・なんかいっぱい出てきたぞ。とりあえずAnsibleと関係ありそうなのは

ansible
ansible-config
ansible-connection
ansible-console
ansible-doc
ansible-galaxy
ansible-inventory
ansible-playbook
ansible-pull
ansible-vault

これぐらいだろうか。「connection」とか「playbook」とか書いてあるし問題は多分無さそう。ここに書いていけば良いのか。

$ nano ansible-connection
#!/usr/local/opt/python@2/bin/python2.7
# Copyright: (c) 2017, Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import (absolute_import, division, print_function)

__metaclass__ = type
__requires__ = ['ansible']

try:
    import pkg_resources
except Exception:
    pass

import fcntl
import hashlib
import os
import signal
import socket
import sys
import time
import traceback
import errno
import json
・・・・・・・以下省略

いや既にめっちゃ書いてあるじゃん。

多分ここに記述するのは不味いよな?でもここ以外にかけそうな場所無いぞ・・・

デフォルトでは、 /etc/ansible/hosts というファイルが作られるので

https://ver-1-0.net/2017/03/05/mac-ansible-ping

いや、それが無いんだって。どこにも。どうしよう・・・

やむを得ない。こうなったらそのファイルとディレクトリを自分で作ろう・・・いや、それしか打つ手が無いんだって。ほんと


/etc/ansible/hosts

192.168.x.xx

これで「ansible all -m ping」を実行すると・・・

わざわざ赤字で書かんでも(´・ω・`)どうやら認証キーを登録しないと駄目みたいだ。そこも自動化というのは流石に難しいか?

じゃあssh鍵を作った後それを登録して・・・(鍵の作成についてはRaspiサーバ編を見てね☆)

$ ssh-agent bash                                                                                             [~/.ssh]
bash-3.2$ ssh-add
Enter passphrase for /Users/xxxxxx/.ssh/id_rsa:
Identity added: /Users/xxxxxx/.ssh/id_ecdsa (xxxxxxxx@xxxxxxMacBook-Pro.local)
bash-3.2$
bash-3.2$ exit

よし、これで

$ ansible all -m ping
Enter passphrase for key '/Users/xxxxxxx/.ssh/id_rsa':
Enter passphrase for key '/Users/xxxxxx/.ssh/id_ed25519':
192.168.x.xx | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: xxxxx@192.168.x.x: Permission denied (publickey,password).",
    "unreachable": true
}

全然駄目じゃ無いか・・・いや待て、ユーザ名がログイン用になっていない。だったらこうしてユーザ名を付け足せば

xxxxxxxx@192.168.x.xx
xxxxxxx@192.168.x.xx | FAILED! => {
    "changed": false,
    "module_stderr": "Shared connection to 192.168.x.xx closed.\r\n",
    "module_stdout": "/bin/sh: 1: /usr/bin/python: not found\r\n",
    "msg": "The module failed to execute correctly, you probably need to set the interpreter.\nSee stdout/stderr for the exact error",
    "rc": 127
}

いやそもそもPythonが入ってないわこれ。ならサーバにPythonをインストールして・・・

・・・良し!なんとか接続自体は出来た(接続するだけでこの苦労だ)。

・・・とりあえず今回はここまで!

どんどん企画が増えていくが、果たして完結出来るのか!?

この記事が気に入ったら
フォローしよう

最新情報をお届けします

おすすめの記事