手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 26.04 Ansible の基本設定 – 構成管理を実行する環境を作る

関連する記事

Ubuntu 26.04 で Ansible を使う場合、実行する管理端末側の Python、SSH、sudo、inventory、ansible.cfg を先に揃えます。対象サーバーへ安全に接続できる状態を確認してから、playbook や role の設計へ進むと、切り分けがしやすくなります。

この記事では、Ansible の導入、実行環境、inventory、SSH 接続、sudo 昇格、ansible.cfg、疎通確認、dry-run、ログ確認を扱います。

Ansible を導入する

Ubuntu のパッケージとして導入する場合は APT を使います。Python 仮想環境に分けたい場合は、プロジェクト単位で venv を使います。

sudo apt update
sudo apt install ansible sshpass python3-venv python3-pip
ansible --version
ansible-playbook --version

仮想環境に導入する

プロジェクトごとに Ansible のバージョンを分けたい場合は、仮想環境を使います。

mkdir -p ~/work/ansible-basic
cd ~/work/ansible-basic
python3 -m venv .venv
. .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install ansible
ansible --version

作業ディレクトリを作成する

inventory、playbook、設定ファイルを分けて置くと、実行対象と実行内容を確認しやすくなります。

mkdir -p inventories playbooks group_vars host_vars
pwd
find . -maxdepth 2 -type d | sort

inventory を作成する

最初は小さな inventory から始めます。接続先、ユーザー、Python interpreter を明示すると、環境差の影響を減らせます。

tee inventories/hosts.ini >/dev/null <<'EOF'
[ubuntu_servers]
server1 ansible_host=192.0.2.10 ansible_user=myadmin ansible_python_interpreter=/usr/bin/python3
EOF
ansible-inventory -i inventories/hosts.ini --list

ansible.cfg を作成する

inventory、SSH 設定、retry ファイル、host key checking などをプロジェクト側で明示します。

tee ansible.cfg >/dev/null <<'EOF'
[defaults]
inventory = inventories/hosts.ini
host_key_checking = True
retry_files_enabled = False
stdout_callback = yaml
interpreter_python = auto_silent
[ssh_connection]
pipelining = True
ssh_args = -o ControlMaster=auto -o ControlPersist=60s
EOF
ansible --version

SSH 接続を確認する

Ansible の前に、通常の SSH で接続できるか確認します。SSH で失敗する状態では Ansible も失敗します。

ssh myadmin@192.0.2.10 true
ssh -G myadmin@192.0.2.10 | grep -E '^(user|hostname|port|identityfile)'
ansible ubuntu_servers -m ping

sudo 昇格を確認する

管理作業では sudo 昇格が必要になることがあります。まず ad-hoc command で昇格できるか確認します。

ansible ubuntu_servers -m command -a 'whoami'
ansible ubuntu_servers -b -m command -a 'whoami'
ansible ubuntu_servers -b -m command -a 'id'

確認用 playbook を作成する

まずは情報取得だけの playbook で、inventory、接続、sudo、Python が正しく動くことを確認します。

tee playbooks/check.json >/dev/null <<'EOF'
[{"name":"Check Ubuntu servers","hosts":"ubuntu_servers","become":true,"gather_facts":true,"tasks":[{"name":"Show hostname","ansible.builtin.command":"hostnamectl","changed_when":false},{"name":"Show uptime","ansible.builtin.command":"uptime","changed_when":false}]}]
EOF
ansible-playbook playbooks/check.json

dry-run と差分を確認する

設定変更を行う playbook では、実行前に check mode と diff を確認します。すべての module が完全に check mode に対応するわけではないため、結果は過信せず確認します。

ansible-playbook playbooks/check.json --check
ansible-playbook playbooks/check.json --check --diff
ansible-playbook playbooks/check.json --syntax-check

fact を確認する

OS バージョン、インターフェイス、ディスク、Python など、対象サーバーの情報は facts として取得できます。

ansible ubuntu_servers -m setup -a 'filter=ansible_distribution*'
ansible ubuntu_servers -m setup -a 'filter=ansible_default_ipv4'
ansible ubuntu_servers -m setup -a 'filter=ansible_python*'

collection を確認する

追加 collection を使う場合は、導入場所とバージョンを確認します。

ansible-galaxy collection list
ansible-galaxy collection install community.general
ansible-galaxy collection list community.general

ログと失敗時の情報を見る

Ansible の失敗は、SSH、sudo、Python、module のどこで失敗したかを分けて見ます。詳細が必要な場合は verbosity を上げます。

ansible ubuntu_servers -m ping -vv
ansible-playbook playbooks/check.json -vv
ansible ubuntu_servers -m command -a 'journalctl -b -p err --no-pager'

確認項目

  • Ansible の導入方法が APT か venv か決まっているか。
  • inventory に接続先、ユーザー、Python interpreter が明示されているか。
  • ansible.cfg で inventory と SSH 設定を管理しているか。
  • 通常の SSH 接続と Ansible ping が通るか。
  • sudo 昇格が必要な作業で become を確認しているか。
  • playbook 実行前に syntax-check、check、diff を確認しているか。

まとめ

Ubuntu 26.04 で Ansible を使う場合は、Python、SSH、sudo、inventory、ansible.cfg を先に確認します。接続と昇格が安定してから playbook を実行すると、構成管理の失敗原因を分けて追いやすくなります。

関連する記事
Ubuntu 26.04 Ansible の基本設定 – 構成管理を実行する環境を作る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る