■ざっと考えたこと
※オライリーの「はじめてのAnsible」を流し読みしつつ
1.接続ユーザとplaybook実行ユーザ
・ansibleサーバ→ターゲットホストへ一般ユーザでssh接続してターゲットホスト側で一般ユーザ権限で実行できるplaybookのみ実行してみる
・ansibleサーバ→ターゲットホストが一般ユーザでssh接続の場合
→playbook上でsuかsudoでrootになる必要がある(ほとんどのコマンドで)
→playbookの「become文」とは?ターゲット側で/etc/sudoersに許可設定入れ
とくのか?
・ansibleサーバ→ターゲットホストへrootでssh接続してplaybook実行。その際、ターゲットホスト側のsshd_configで「PermitRootLogin without-password」にして鍵認証によるsshログインをrootに許可する。
2.playbookでターゲットホストの何かのconfigファイルを編集する際の注意点
- 正規表現マッチングして行置換
→例えば、「Listen 443」という行と「#Listen 443」という行が両方あっ
た場合、これらを「Listen 8443」に変更する場合はどうするか?
→例えばVirtualHostの数だけ「Listen 443」とか「Listen 8443」とかが複
数あった場合で特定のVirtualHostの設定だけ選んで変更する場合どうするか?
→正規表現でマッチングする行が無い場合は最下行に追記されるらしいが、
configファイルの種類によっては、ブロックの概念があって、最下行ではな
く適切なブロック内に追記する必要があるものもある
→正規表現でマッチングする行が無い場合は最下行に追記されるらしいが、
configファイルの種類によっては、設定項目(ディレクティブ)に順序性
があって、適切な場所に行を追記しないと想定した動作をしないconfigも
ある。
- configの事前バックアップ
→configによっては「.bak」などのサフィックスをファイル名につけて、
同階層にコピーしてはいけない種類のconfigもある(例えばnetwork-scripts
network-scriptsは「存在するファイル」はnetworkサービス起動時にすべて
読み込まれるので、「.bak」が付与されたスクリプトも一緒に読みこまれて
しまう。NetworkManagerでネットワークを制御する場合も、一部の
ファイルに関してはnetwork-scripts内のスクリプトが読み込まれる。
3.playbookの変数の使い方把握
4.ansibleの予約変数、予約語
5.playbookを書くうえで「""」や「''」で囲まないといけないケース
6.playbookの「when」分岐の動作把握
7.playbookの「with_items」ループの動作把握
8.playbookの冪等性のためにerror確認をplaybookに適切に書く必要があるか?
変更対象ファイルの事前チェック、対象ファイルをすでにopenしているプロ
セスの有無確認などを行い変更後のあるべき状態にすでになっていたらスキップ
してなにもしないこととする
9.大規模なplaybookを書く上で洗練されたファイル構成
- インベントリ(ini)
- playbook(yml)の分割 ※構造化?
- groupの使い方
- 変数の外部ファイル(txt)への書き出し
- FACT
- role構成
- その他外出しファイル
10.既存モジュールの種類の把握と応用のコツ
- copy
- template
- lineinfile
- user
- raw,shell,command
- file
- oracleDBにSQLを発行するモジュール
※postgreSQLではユーザ作成用のPostgresql_userモジュール、
データベース作成用のPostgresql_dbモジュールというのがある
■簡単なplaybookの実行
※ロールバックできるようにAnsibleサーバとターゲットホストの初期状態のスナップショットを検証前にとっておく(VirtualBox無料なのに便利すぎ)
※ansibleホスト側作業ディレクトリは「/tmp/ansible_test」とする
A.ターゲットホスト1台、一般ユーザ(server_user)で実行
Ansibleサーバホストとターゲットホストは下記のssh鍵設定をした直後の状態を本検証の初期状態とする。
つまり、
Ansibleサーバホスト(centos7_1)のclient_userからターゲットホスト(centos7_2)のserver_userへの鍵認証によるsshログインが可能な構成。
※初期状態ではAnsibleサーバホスト(centos7_1)からターゲットホスト(centos7_2)のrootへの鍵認証によるsshログインが不可。
・ansibleサーバ側の検証時の状態
[client_user@cetnos7_1 ansible_test]$ hostname;whoami;pwd
cetnos7_1
client_user
/tmp/ansible_test
・インベントリファイル
[client_user@cetnos7_1 ansible_test]$ cat inventory.ini
[centos71]
192.168.100.71
[centos72]
192.168.100.72
1.pingモジュールの動作確認
[client_user@cetnos7_1 ansible_test]$ cat playbook_1.yml
---
- hosts: centos72
tasks:
- name: Ping Connection
ping:
[client_user@cetnos7_1 ansible_test]$ ansible-playbook -u server_user -i inventory.ini playbook_1.yml
PLAY [centos72] *****************************************************************************************
TASK [Gathering Facts] *****************************************************************************************
ok: [192.168.100.72]
TASK [Ping Connection] *****************************************************************************************
ok: [192.168.100.72]
PLAY RECAP *****************************************************************************************
192.168.100.72 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
2.copyモジュールの動作確認(fromリモートtoリモート)
[client_user@cetnos7_1 ansible_test]$ cat playbook_2.yml
---
- hosts: centos72
tasks:
- name: Copy file
copy:
src: /tmp/ansible_test/test.txt
dest: /tmp/ansible_test/test.txt.bak
remote_src: yes
[server_user@centos7_2 ansible_test]$ hostname;whoami;pwd
centos7_2
server_user
/tmp/ansible_test
[server_user@centos7_2 ansible_test]$ ls -ld /tmp/ansible_test/
drwxrwxr-x. 2 server_user server_user 22 6月 9 05:25 /tmp/ansible_test/
[server_user@centos7_2 ansible_test]$ ls -lA /tmp/ansible_test/
合計 4
-rw-rw-r--. 1 server_user server_user 5 6月 9 01:06 test.txt
[server_user@centos7_2 ansible_test]$ cat /tmp/ansible_test/test.txt
hoge
※以後ターゲットホスト側のコマンドライン入出力を薄黄色のマーカーにする
[client_user@cetnos7_1 ansible_test]$ ansible-playbook -u server_user -i inventory.ini playbook_2.yml
PLAY [centos72] *****************************************************************************************
TASK [Gathering Facts] *****************************************************************************************ok: [192.168.100.72]
TASK [Copy file] *****************************************************************************************changed: [192.168.100.72]
PLAY RECAP *****************************************************************************************
192.168.100.72 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[server_user@centos7_2 ansible_test]$ ls -lA /tmp/ansible_test/
合計 8
-rw-rw-r--. 1 server_user server_user 5 6月 9 01:06 test.txt
-rw-rw-r--. 1 server_user server_user 5 6月 9 01:06 test.txt.bak
→test.txt.bakがコピーされた。
2-1.copyモジュールの動作確認(fromローカルtoリモート)
[client_user@cetnos7_1 ansible_test]$ cat playbook_2_1.yml
---
- hosts: centos72
tasks:
- name: Copy file
copy:
src: /tmp/test.txt
dest: /tmp/ansible_test/test.txt.bak_2
remote_src: no
mode: 0777
[client_user@cetnos7_1 ansible_test]$ cat /tmp/test.txt
fuga
[client_user@cetnos7_1 ansible_test]$ ansible-playbook -u server_user -i inventory.ini playbook_2_1.yml
PLAY [centos72] *****************************************************************************************
TASK [Gathering Facts] *****************************************************************************************
ok: [192.168.100.72]
TASK [Copy file] *****************************************************************************************
changed: [192.168.100.72]
PLAY RECAP *****************************************************************************************
192.168.100.72 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[server_user@centos7_2 ansible_test]$ ls -lA /tmp/ansible_test/
合計 12
-rw-rw-r--. 1 server_user server_user 5 6月 9 01:06 test.txt
-rw-rw-r--. 1 server_user server_user 5 6月 9 01:06 test.txt.bak
-rwxrwxrwx. 1 server_user server_user 5 6月 9 05:47 test.txt.bak_2
[server_user@centos7_2 ansible_test]$ cat /tmp/ansible_test/test.txt.bak_2
fuga