UbuntuにAnsibleをインストール
公式ドキュメント: https://docs.ansible.com
インストール
ローカルで実行
Ansible を使ってローカルマシンに対してコマンドを実行したり、パッケージをインストールしたりします。対して、リモートで実行する方法は後述しています。
コマンドを実行
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
ansible localhost -m ansible.builtin.apt -a "name=lsd state=present" -b -K
-
-m ansible.builtin.apt
で apt モジュールを指定。 -
-a "name=lsd state=present"
でインストールするパッケージをlsd
に指定。Terminal window apt-cache search '^lsd$'# ↓# lsd - ls command with a lot of pretty colors and some other stuffstate=latest
を指定すると最新版がインストールされます。 本番環境のように、予期せぬ変更を防ぐ必要がある場合は、state=present
(デフォルト)を指定し、パッケージがインストール済みであれば何もしないようにします。 https://docs.ansible.com/ansible/latest/collections/ansible/builtin/apt_module.html#parameter-state -
-b
で root 権限で実行。https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_privilege_escalation.html#using-become -
-K
でパスワードの入力を求めるプロンプトを表示。
実行すると、lsd
パッケージがインストールされます。
lsd --version # lsd 1.0.0command -v lsd # /usr/bin/lsd
リモートで実行
Ansible を使ってリモートマシンでコマンドを実行したり、パッケージをインストールしたりします。
inventory
ssh remote-user@192.168.77.77 -p 22 -i ~/.ssh/id_ed25519
コマンドでリモートマシンに ssh 接続できることを前提として、以下のように 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
ansible myhosts -m ansible.builtin.ping -i inventory.ini
192.168.77.77 | SUCCESS => { "changed": false, "ping": "pong"}
リモートマシンでコマンドを実行
ansible myhosts -m ansible.builtin.command -i inventory.ini -a 'ls ~/'
実行すると、リモートマシンのホームディレクトリのファイル一覧が出力されます。
リモートマシンでパッケージをインストール
ansible myhosts -m ansible.builtin.apt -i inventory.ini -a "name=lsd state=present" -b -K
実行すると、リモートマシンにlsd
パッケージがインストールされます。
playbook
1- name: Setup myhosts2 hosts: myhosts3
4 tasks:5 - name: Install lsd6 become: true7 become_user: root8 ansible.builtin.apt:9 name: lsd10 state: present11 update_cache: true12 cache_valid_time: 360013 force_apt_get: true14 install_recommends: false15
16 - name: Install htop17 become: true18 become_user: root19 ansible.builtin.apt:20 name: htop21 state: present22 update_cache: true23 cache_valid_time: 360024 force_apt_get: true25 install_recommends: false
検証
https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_intro.html#verifying-playbooks
sudo apt updatesudo apt install ansible-lintansible-lint playbook.yml
Passed: 0 failure(s), 0 warning(s) on 1 files. Last profile that met the validation criteria was 'production'.
ansible-playbook -i inventory.ini playbook.yaml --ask-become-pass
実行すると、リモートマシンにlsd
とhtop
パッケージがインストールされます。
Ansible Galaxy
Ansible Galaxy コマンドラインツールを使用して、コミュニティが作成したロールやコレクションを管理できます。
-
ロール
Roles let you automatically load related vars, files, tasks, handlers, and other Ansible artifacts based on a known file structure. https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_reuse_roles.html
事前にパッケージ化された作業単位 https://docs.ansible.com/ansible/2.9_ja/galaxy/user_guide.html
-
コレクション
Collections are a distribution format for Ansible content that can include playbooks, roles, modules, and plugins. https://docs.ansible.com/ansible/latest/collections_guide/index.html
複数の Playbook、ロール、モジュール、およびプラグインが含まれる https://docs.ansible.com/ansible/2.9_ja/galaxy/user_guide.html
ロールのインストール
https://galaxy.ansible.com/ui/standalone/roles/geerlingguy/docker/ から geerlingguy.docker
ロールをインストールします。
ansible-galaxy role install geerlingguy.docker
ロールの実行
1---2- hosts: all3 become: true4 vars:5 docker_users:6 - remote-user7
8 roles:9 - geerlingguy.docker
docker_users
リストに追加したユーザー(ここではremote-user
)は、sudo
を使用せずに docker
コマンドを実行できるようになります。なお、remote-user
をログアウトしてログインし直すか、newgrp docker
コマンドを実行して一時的にグループを変更する必要があるかもしれません。
ansible-playbook -i inventory.ini playbook.yaml --ask-become-pass
実行すると、リモートマシンに Docker がインストールされます。