kickstartで大本は作れたが、細かい箇所もサーバ構築の自動化するのに使ってみた
はじめChefを使ったが分かりにくかったのでこちらへ転向した

インストール

作業するマシンにインストールします。作業対象にインストールする必要はありません。
ここでは管理サーバ c.sybyl.local にAnsibleをインストールします
パッケージは epel リポジトリに存在しているので

[root@c ~]# yum install epel-release
[root@c ~]# yum install --enablerepo=epel install ansible

これで完了みたい

管理対象の登録

ansibleのインストールが完了すると /etc/ansible が作られる。
そこに hostsファイルが存在する。ここに管理対象のホストを記載します

[root@c ~]# ls -l /etc/ansible/
合計 24
-rw-r--r-- 1 root root 18066  6月  2 06:49 ansible.cfg
-rw-r--r-- 1 root root  1016  6月  2 06:49 hosts
drwxr-xr-x 2 root root     6  6月  2 06:49 roles
[root@c ~]#

hostsファイルには記載例が書かれており、単純に対象を個別に登録するほか、グループを作ったりホスト名の連番とかにも対応するみたい. ホスト名でもIPアドレスでも可

ここではグループ名 cluster を作り、その中に連番のホスト( n[1:4].sybyl.local )とを持たせてみた

[root@c ~]# cat /etc/ansible/hosts
[cluster]
n[1:4].sybyl.local
                      <--  グループとの区切りは空行
nfs.sybyl.local       <--  単発指定
[root@c ~]#

このファイルは各自のユーザにて用意して、「」

ssh接続

ansibleはsshで相手方(管理対象)に接続して操作を行う
基本「パスワード」入力無しで接続を前提にしているようで、相手方にパスワード入力でログインできる状態だと

[illya@c ~]$ ansible nfs.sybyl.local -m ping
nfs.sybyl.local | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).\r\n",
    "unreachable": true
}
[illya@c ~]$

と言われる. この場合は「--ask-pass」を入れて、パスワード入力を有効にする必要がある.

[illya@c ~]$ ansible nfs.sybyl.local -m ping  --ask-pass
SSH password:                     <-- ここで相手方にログインするためのパスワードを入力する
nfs.sybyl.local | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
[illya@c ~]$

もし公開鍵が相手側の .ssh/authorized_keys に登録されていれば パスフレーズ が自動的に求められる.

[illya@c ~]$ ansible nfs.sybyl.local -m ping
Enter passphrase for key '/home/illya/.ssh/id_rsa':    <-- ここにパスフレーズを入力
nfs.sybyl.local | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
[illya@c ~]$

さらに鍵の作成時に パスフレーズ を指定しない場合だと、当然ながらパスフレーズを問わず実行できます

[illya@c ~]$ ansible nfs.sybyl.local -m ping
nfs.sybyl.local | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
[illya@c ~]$

*ホストベース認証も有効でした

root権限操作

一般ユーザで相手側にログインするので、当然その権限はそのユーザの範囲内に制限される.
でも相手方でrootなど別のユーザで操作が必要な場合は、ユーザを switch する必要がある

相手方に/dataディレクトリを作る場合

[illya@c ~]$ ansible nfs.sybyl.local -m file -a "path=/data state=directory mode=0755" --ask-pass
SSH password:
nfs.sybyl.local | FAILED! => {
    "changed": false,
    "failed": true,
    "msg": "There was an issue creating /data as requested: [Errno 13] 許可がありません: '/data'",
    "path": "/data",
    "state": "absent"
}
[illya@c ~]$

と拒否される。相手方でsuして実行するためには「--su」を追加します. そのときに使用するパスワードを問うように「--ask-su-pass」も加えます
「--su-user=」は既定でrootですが、明示的に指定しました

[illya@c ~]$ ansible nfs.sybyl.local -m file -a "path=/data state=directory mode=0755" --ask-pass --su --su-user=root --ask-su-pass
SSH password:                                <-- 相手方へのログインパスワード
SU password[defaults to SSH password]:       <-- 相手方でrootになるためのパスワード
nfs.sybyl.local | SUCCESS => {
    "changed": true,
    "gid": 0,
    "group": "root",
    "mode": "0755",
    "owner": "root",
    "path": "/data",
    "size": 6,
    "state": "directory",
    "uid": 0
}
[illya@c ~]$

相手方への接続は パスフレーズ なしの接続、ホストベース認証、kerberos認証らでパスワード無しができる。
ssh-agentを使う方法もあるけど
そして、相手方でroot権限で作業する際には「--su」より「--sudo」とsudoを用いる事でパスワード無しにも出来る
sudoでパスワード無しでroot権限が使えるようになるには visudo で /etc/sudoers の修正が必要です(相手側の/etc/sudoers).

モジュール

ansibleにて使用できるコマンドはhttp://docs.ansible.com/ansible/latest/modules_by_category.htmlに記載されている。
ここでは「System Modules」に存在するpingで死活監視、「Files Modules」に存在するfileにてディレクトリを作ってみた.

モジュールを見てみると、windowsマシンへの対応もあるようです

Playbook

これら一番大事な箇所かも.
ansibleでの操作をファイルに記述して、それを実行する。そうすればそのマシンに対する作業履歴として残せる.
yum updateさせるファイル

[illya@c ~]$ cat yumupdate.yml
- hosts:  nfs.sybyl.local
  tasks:
  - name: yum update
    yum: name=*  state=latest
[illya@c ~]$

そして、このファイルの文法チェックを行って

[illya@c ~]$ ansible-playbook yumupdate.yml --syntax-check
 
playbook: yumupdate.yml
[illya@c ~]$

実際に実行します

[illya@c ~]$ ansible-playbook yumupdate.yml --ask-pass --su --su-user=root --ask-su-pass
SSH password:
SU password[defaults to SSH password]:
 
PLAY [nfs.sybyl.local] **************************************************************************************************
 
TASK [Gathering Facts] **************************************************************************************************
ok: [nfs.sybyl.local]
 
TASK [yum update] *******************************************************************************************************
changed: [nfs.sybyl.local]
 
PLAY RECAP **************************************************************************************************************
nfs.sybyl.local            : ok=2    changed=1    unreachable=0    failed=0
 
[illya@c ~]

yumupdate.ymlファイルの「hosts:」をグループ名とか「all」とかすれば、漏れなくyum updateができる。
っと言ってもこれはごくごく簡単な例。
実際にはcentos6とcentos7を区別して起動させるchkconfig/systemctlらを有効にして、実行とか
新たなマウントポイントのための/etc/fstabの書き換えとmountコマンドの実行とかがメインになるのかも


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2017-08-06 (日) 01:23:52 (133d)