Ansibleを使う必要が出てきたので、参考書を読んでざっくり入門する。
Ansibleの概要
- オープンソースの自動化のためのソフトウェア
- 2012年に初版リリース
- 2015年にAnsible Inc.がRed Hat Inc.に買収された
- コミュニティ版とエンタープライズ版がある
Ansibleの特徴
- 指示をプレイブックと呼ばれるテキストファイルに記述
- 様々な対象をコントロール可能
- エージェントが不要
Ansibleのインストール
環境はWSL上のCentOS 7。
1 2 3 4 5 6 7 8 9 |
$ 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)コマンドと呼ぶ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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 |
1 2 3 4 5 6 |
$ ansible localhost -m shell -a 'hostname' localhost | CHANGED | rc=0 >> example.com $ ansible localhost -m ping -o localhost | SUCCESS => {"changed": false, "ping": "pong"} |
インベントリを定義する
1 2 3 4 5 6 7 8 9 |
$ 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グループのマシンに対して実行する場合
1 2 |
$ ansible web -i inventory -m ping -o 127.0.0.1 | SUCCESS => {"changed": false, "ping": "pong"} |
appグループのマシンに対して実行する場合
1 2 |
$ ansible app -i inventory -m ping -o 127.0.0.1 | SUCCESS => {"changed": false, "ping": "pong"} |
dbグループのマシンに対して実行する場合
1 2 3 4 |
$ 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接続する場合
1 2 |
$ ansible web -i inventory -m ping -o -u username -k SSH password: ******** |
参考書
Software Design – Dec. 2018
第1特集 [超速]入門 Ansible