端くれプログラマの備忘録 Ansible [Ansible] ざっくり入門

[Ansible] ざっくり入門

Ansibleを使う必要が出てきたので、参考書を読んでざっくり入門する。

Ansibleの概要

  • オープンソースの自動化のためのソフトウェア
  • 2012年に初版リリース
  • 2015年にAnsible Inc.がRed Hat Inc.に買収された
  • コミュニティ版とエンタープライズ版がある

Ansibleの特徴

  • 指示をプレイブックと呼ばれるテキストファイルに記述
  • 様々な対象をコントロール可能
  • エージェントが不要

Ansibleのインストール

環境はWSL上のCentOS 7。

$ sudo yum install epel-release
$ sudo yum install ansible
$ ansible --version
ansible 2.9.25
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/home/user/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /bin/ansible
  python version = 2.7.5 (default, Jun 20 2019, 20:27:34) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]

Ansibleを構成するもの

  • プレイブック: 指示を記述したファイル
  • インベントリ: プレイブックを実行する対象
  • クレデンシャル: 実行対象へログインするための認証情報
  • 変数: プレイブック内で変数化された項目に値を与える
  • モジュール: 作業を部品化したもの

アドホックコマンドを試す

モジュールを単体で呼び出して使用するコマンドをアドホック(AdHoc)コマンドと呼ぶ。

usage: ansible [-h] [--version] [-v] [-b] [--become-method BECOME_METHOD]
               [--become-user BECOME_USER] [-K] [-i INVENTORY] [--list-hosts]
               [-l SUBSET] [-P POLL_INTERVAL] [-B SECONDS] [-o] [-t TREE] [-k]
               [--private-key PRIVATE_KEY_FILE] [-u REMOTE_USER]
               [-c CONNECTION] [-T TIMEOUT]
               [--ssh-common-args SSH_COMMON_ARGS]
               [--sftp-extra-args SFTP_EXTRA_ARGS]
               [--scp-extra-args SCP_EXTRA_ARGS]
               [--ssh-extra-args SSH_EXTRA_ARGS] [-C] [--syntax-check] [-D]
               [-e EXTRA_VARS] [--vault-id VAULT_IDS]
               [--ask-vault-pass | --vault-password-file VAULT_PASSWORD_FILES]
               [-f FORKS] [-M MODULE_PATH] [--playbook-dir BASEDIR]
               [-a MODULE_ARGS] [-m MODULE_NAME]
               pattern
$ ansible localhost -m shell -a 'hostname'
localhost | CHANGED | rc=0 >>
example.com

$ ansible localhost -m ping -o
localhost | SUCCESS => {"changed": false, "ping": "pong"}

インベントリを定義する

$ vi inventory
[web]
127.0.0.1 ansible_connection=local
[app]
127.0.0.1 ansible_connection=local
[db]
db1 ansible_host=127.0.0.1 ansible_connection=local
db2 ansible_host=127.0.0.1 ansible_connection=local
db3 ansible_host=127.0.0.1 ansible_connection=local

webグループのマシンに対して実行する場合

$ ansible web -i inventory -m ping -o
127.0.0.1 | SUCCESS => {"changed": false, "ping": "pong"}

appグループのマシンに対して実行する場合

$ ansible app -i inventory -m ping -o
127.0.0.1 | SUCCESS => {"changed": false, "ping": "pong"}

dbグループのマシンに対して実行する場合

$ ansible db -i inventory -m ping -o
db3 | SUCCESS => {"changed": false, "ping": "pong"}
db1 | SUCCESS => {"changed": false, "ping": "pong"}
db2 | SUCCESS => {"changed": false, "ping": "pong"}

クレデンシャルを指定する

ターゲットマシンにSSH接続する場合

$ ansible web -i inventory -m ping -o -u username -k
SSH password: ********

参考書

Software Design – Dec. 2018
第1特集 [超速]入門 Ansible