コンテンツにスキップ

UbuntuにAnsibleをインストール

公式ドキュメント: https://docs.ansible.com

インストール

参考: https://docs.ansible.com/ansible/latest/installation_guide/installation_distros.html#installing-ansible-on-ubuntu

ローカルで実行

Ansible を使ってローカルマシンに対してコマンドを実行したり、パッケージをインストールしたりします。対して、リモートで実行する方法は後述しています。

コマンドを実行

Terminal window
ansible localhost -m ansible.builtin.command -a 'ls ~/'
  • localhostでローカルで実行することを指定。
  • -m ansible.builtin.commandで command モジュールを指定(デフォルトなので省略可)。
  • -a 'ls ~/'でモジュールの引数(ここではコマンド)を指定。

実行すると、ローカルマシンのホームディレクトリのファイル一覧が出力されます。

パッケージをインストール

https://docs.ansible.com/ansible/latest/command_guide/cheatsheet.html#running-ad-hoc-commands

Terminal window
ansible localhost -m ansible.builtin.apt -a "name=lsd state=present" -b -K

実行すると、lsdパッケージがインストールされます。

Terminal window
lsd --version # lsd 1.0.0
command -v lsd # /usr/bin/lsd

リモートで実行

Ansible を使ってリモートマシンでコマンドを実行したり、パッケージをインストールしたりします。

inventory

ssh remote-user@192.168.77.77 -p 22 -i ~/.ssh/id_ed25519コマンドでリモートマシンに ssh 接続できることを前提として、以下のように inventory.ini を作成します。

inventory.ini
[myhosts]
192.168.77.77 ansible_connection=ssh ansible_user=remote-user ansible_port=22 ansible_ssh_private_key_file=~/.ssh/id_ed25519 ansible_python_interpreter=/usr/bin/python3

ping

Terminal window
ansible myhosts -m ansible.builtin.ping -i inventory.ini
実行結果
192.168.77.77 | SUCCESS => {
"changed": false,
"ping": "pong"
}

リモートマシンでコマンドを実行

Terminal window
ansible myhosts -m ansible.builtin.command -i inventory.ini -a 'ls ~/'

実行すると、リモートマシンのホームディレクトリのファイル一覧が出力されます。

リモートマシンでパッケージをインストール

Terminal window
ansible myhosts -m ansible.builtin.apt -i inventory.ini -a "name=lsd state=present" -b -K

実行すると、リモートマシンにlsdパッケージがインストールされます。

playbook

playbook.yaml
1
- name: Setup myhosts
2
hosts: myhosts
3
4
tasks:
5
- name: Install lsd
6
become: true
7
become_user: root
8
ansible.builtin.apt:
9
name: lsd
10
state: present
11
update_cache: true
12
cache_valid_time: 3600
13
force_apt_get: true
14
install_recommends: false
15
16
- name: Install htop
17
become: true
18
become_user: root
19
ansible.builtin.apt:
20
name: htop
21
state: present
22
update_cache: true
23
cache_valid_time: 3600
24
force_apt_get: true
25
install_recommends: false
検証

https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_intro.html#verifying-playbooks

Terminal window
sudo apt update
sudo apt install ansible-lint
ansible-lint playbook.yml
実行結果
Passed: 0 failure(s), 0 warning(s) on 1 files. Last profile that met the validation criteria was 'production'.
Terminal window
ansible-playbook -i inventory.ini playbook.yaml --ask-become-pass

実行すると、リモートマシンにlsdhtopパッケージがインストールされます。

Ansible Galaxy

Ansible Galaxy コマンドラインツールを使用して、コミュニティが作成したロールやコレクションを管理できます。

ロールのインストール

https://galaxy.ansible.com/ui/standalone/roles/geerlingguy/docker/ から geerlingguy.docker ロールをインストールします。

Terminal window
ansible-galaxy role install geerlingguy.docker

ロールの実行

playbook.yaml
1
---
2
- hosts: all
3
become: true
4
vars:
5
docker_users:
6
- remote-user
7
8
roles:
9
- geerlingguy.docker

docker_users リストに追加したユーザー(ここではremote-user)は、sudo を使用せずに docker コマンドを実行できるようになります。なお、remote-user をログアウトしてログインし直すか、newgrp docker コマンドを実行して一時的にグループを変更する必要があるかもしれません。

Terminal window
ansible-playbook -i inventory.ini playbook.yaml --ask-become-pass

実行すると、リモートマシンに Docker がインストールされます。