10. Cloud Operator Days Tokyo 2021
以降では、Ansibleのデバッグを行なうにあたって、Ansibleのソースコードと、ここで作成する
仮想環境を利用して、デバッグメッセージを仕込みつつ検証を行います。
はじめに、アップストリームのソースコードをgit cloneしてデバッグ環境を準備します。
デバッグ環境を準備する(1/4)
10
#例: 問題の発生している環境がAnsible 2.11.1である場合
$ mkdir -p $HOME/testing/src/
$ cd $HOME/testing/src/
$ git clone https://github.com/ansible/ansible.git
$ cd ansible
$ git checkout -b v2.11.1 refs/tags/v2.11.1
$ git log -n 1
commit f468ec7087d57b21acf2a0545075192a9cceacb5 (HEAD -> v2.11.1, tag: v2.11.1)
Author: Rick Elrod <rick@elrod.me>
Date: Mon May 24 14:50:49 2021 -0500
New release v2.11.1
11. Cloud Operator Days Tokyo 2021
続いて、virtualenvを利用して検証用の仮想環境を作成します。
デバッグ環境を準備する(2/4)
11
$ git status
On branch v2.11.1
nothing to commit, working tree clean
$ python3 -m venv venv
$ source venv/bin/activate
(venv)$ pip install -r requirements.txt
(venv)$ source hacking/env-setup
running egg_info
...中略...
PYTHONPATH=/home/hsaito/testing/src/ansible/lib
MANPATH=/home/hsaito/testing/src/ansible/docs/man:/usr/local/share/man:/usr/share/man
Remember, you may wish to specify your host file with -i
Done!
$
13. Cloud Operator Days Tokyo 2021
Collectionsを利用している場合は、ansible.cfgの設定を変更した後、ansible-galaxyコマンド
を利用して検証用のパスにCollectionsをインストールします。
デバッグ環境を準備する(4/4)
13
#例: ansible.posix collection version 1.1.0を検証する場合
(venv)$ cd $HOME/testing
(venv)$ cat ansible.cfg
[defaults]
host_key_checking=false
collections_paths=/home/hsaito/testing/
(venv)$ ansible-galaxy collection install ansible.posix:==1.1.0
Starting galaxy collection install process
Process install dependency map
Starting collection install process
Downloading https://galaxy.ansible.com/download/ansible-posix-1.1.0.tar.gz to
/home/hsaito/.ansible/tmp/ansible-local-874935yx3lua4t/tmpy9eqjh2q/ansible-posix-1.1.0-ks7_q87w
Installing 'ansible.posix:1.1.0' to '/home/hsaito/testing/ansible_collections/ansible/posix'
ansible.posix:1.1.0 was installed successfully
$
14. Cloud Operator Days Tokyo 2021
Ansibleはシンプルなコマンドラインツールです。Pythonのvirtualenvを利用すれば、本番環境
に影響を与えることなく、比較的容易に検証環境を作成することができます。
1. 必要な情報を適切な範囲とタイミングで収集する
a. 問題を正しく把握するために、情報収集は適切に行いましょう。
b. トラブルシューティングで利用する情報は鮮度が命です。
c. 調査範囲は適宜見直しましょう。
2. コストのかからない専用の検証環境を準備して再現検証を行なう
a. ソースコードベースのAnsible実行環境を準備しましょう。
b. 1.で収集した情報を元にして、同一バージョンで検証しましょう。
c. 本番環境が利用しているサービスもエミュレートできるよう準備しましょう。
専用環境で安全な検証を!
14
16. Cloud Operator Days Tokyo 2021
CLI/インベントリ/プラグインの調査
16
ANSIBLE AUTOMATION ENGINE
CMDB
USERS
INVENTORY
HOSTS
NETWORK
DEVICES
PLUGINS
CLI
MODULES
ANSIBLE
PLAYBOOK
PUBLIC / PRIVATE
CLOUD
PUBLIC / PRIVATE
CLOUD
17. Cloud Operator Days Tokyo 2021
VERBOSEモードとDEBUGモードは、有効化すると「デバッグメッセージを出力」します。
VERBOSEモードとDEBUGモードのおさらい(1/5)
17
#ファイル名: ansible/lib/ansible/utils/display.py
class Display(with_metaclass(Singleton, object)):
...
def display(self, msg, color=None, stderr=False, screen_only=False, log_only=False, newline=True):
""" Display a message to the user
Note: msg *must* be a unicode string to prevent UnicodeError tracebacks.
"""
...
if not log_only:
...
msg2 = to_bytes(msg2, encoding=self._output_encoding(stderr=stderr))
...
if not stderr:
fileobj = sys.stdout
else:
fileobj = sys.stderr
fileobj.write(msg2)