今回はAnsibleのPlaybookをローカルで実行する方法について解説します。
OSはAmazonLinux2023で検証します。
目次
事前準備
システム構成
今回使用したソフトウェアとバージョンは以下のとおりです。
- OS: Amazon Linux 2023.6.20241212
- Python: 3.9.20
- Ansible core: 2.15.3
コマンドはすべてrootユーザーで実行しています。
Ansbileをインストールする
デフォルトのAmazonLinuxリポジトリにAnsibleが入っているので、dnfでインストールします。
$ dnf install -y ansible
$ ansible --version
ansible [core 2.15.3]
config file = None
configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3.9/site-packages/ansible
ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
executable location = /usr/bin/ansible
python version = 3.9.20 (main, Dec 11 2024, 00:00:00) [GCC 11.4.1 20230605 (Red Hat 11.4.1-2)] (/usr/bin/python3.9)
jinja version = 3.1.4
libyaml = True
設定ファイルを作成する
設定ファイルを作成しておきます。今回は/etc/ansbile/ansible.cfg
に作成します。
$ touch /etc/ansible/ansible.cfg
ansible.cfgは配置する場所によって優先順位が決まります。下記のパスを上から順に検索していき、最初に見つかったansible.cfgの設定値を参照します。それ以外は無視されます。
ansible.cfg
(カレントディレクトリ)~/.ansible.cfg
(ホームディレクトリ)/etc/ansbile/ansible.cfg
どの設定ファイルが適用されているかは、ansible --version
で確認できます。
# ansible --version | grep "config file"
config file = /etc/ansible/ansible.cfg
作成した設定ファイルを下記のように修正します。
[defaults]
interpreter_python = /usr/bin/python3.9
上記ではAnsibleが使用するPythonのインタープリタを指定しています。
上記の設定がないと、Playbookを実行したときに下記のような警告が出ます。
[WARNING]: Platform linux on host localhost is using the discovered Python interpreter at /usr/bin/python3.9, but future installation of another
Python interpreter could change the meaning of that path. See https://docs.ansible.com/ansible-
core/2.15/reference_appendices/interpreter_discovery.html for more information.
Playbookをローカルで実行
Playbookを作成する
検証用のPlaybookを作成します。今回はansible is run
と表示するだけのPlaybookにします。
$ touch local.yml
作成したlocal.ymlを編集します。
- hosts: all
gather_facts: no
tasks:
- name: ansible test on localhost
shell: echo "ansible is run"
Playbookをローカルで実行する
作成したPlaybookを実行します。
ansible-playbook -v -i localhost, -c local 実行するPlaybook
$ ansible-playbook -v -i localhost, -c local local.yml
Using /etc/ansible/ansible.cfg as config file
PLAY [all] ******************************************************************************************************************************************
TASK [ansible test on localhost] ********************************************************************************************************************
changed: [localhost] => {"changed": true, "cmd": "echo \"ansible is run\"", "delta": "0:00:00.004099", "end": "2025-01-02 15:30:24.722949", "msg": "", "rc": 0, "start": "2025-01-02 15:30:24.718850", "stderr": "", "stderr_lines": [], "stdout": "ansible is run", "stdout_lines": ["ansible is run"]}
PLAY RECAP ******************************************************************************************************************************************
localhost : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
各オプションの詳細は下記のとおりです。
-v
(verbose)
- Playbook実行中に出力される詳細な情報を増やします。
-v
を一度指定することで、実行の進行状況やタスクの詳細なログが表示されます。
さらに詳しく表示したい場合は、-vv
や-vvv
と指定することで、さらに詳細な情報が得られます。-v
: 少し詳細な情報-vv
: より詳細な情報-vvv
: 最大限の詳細な情報(デバッグレベル)
-i localhost,
(インベントリの指定)
- Ansibleがどのホストに対してタスクを実行するかを指定します。
localhost,
で、ターゲットホストとしてローカルマシン(localhost)を指定します。最後のカンマ(,
)は、リストであることを明示するために必要です。localhost,
はローカルホストをターゲットとして指定し、インベントリとして1つのホスト(localhost
)を指定することを意味します。
-c local
(接続タイプの指定)
- Ansibleがどのようにホストに接続するかを指定します。
-c local
は、接続方式として「ローカル接続」を指定します。- これにより、リモートホストに対してではなく、ローカルホストに対して直接コマンドが実行されます。
コメント