やりたかったこと
Gitの勉強をしたかったのでAnsibleを使って対象のサーバ(10.0.0.2)にGitをインストールさせる。
おまけでntpも一緒にインストールさせる。
環境:
centos7
ansible 2.5
やたらつまずきました。
結論から言うと「yum」するときにはsuでなくてはできないよね。
※初歩の初歩過ぎて探してもあまり出てこなかったです、、
そこにたどり着いてからやたら時間がかかりました。。
対象サーバ側でのsudo許可をしていなかったり。
becomeの書き方間違ってたり、、、
なんやかんやあって結果できました、
求めてた結果がこちら
[snamon@localhost ansible]$ ansible-playbook -i hosts main.yml
PLAY [sv] ***********************************************************************************************************
TASK [ping] *********************************************************************************************************
ok: [10.0.0.2]
TASK [install_git] **************************************************************************************************
changed: [10.0.0.2]
TASK [debug] ********************************************************************************************************
ok: [10.0.0.2] => {
"msg": {
"changed": true,
"failed": false,
"msg": "",
"rc": 0,
"results": [
"Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * base: ftp.nara.wide.ad.jp\n * extras: ftp.nara.wide.ad.jp\n * updates: ftp.jaist.ac.jp\nResolving Dependencies\n--> Running transaction check\n---> Package git.x86_64 0:1.8.3.1-12.el7_4 will be installed\n--> Processing Dependency: perl-Git = 1.8.3.1-12.el7_4 for package: git-1.8.3.1-12.el7_4.x86_64\n--> Processing Dependency: perl(Git) for package: git-1.8.3.1-12.el7_4.x86_64\n---> Package ntp.x86_64 0:4.2.6p5-25.el7.centos.2 will be installed\n--> Running transaction check\n---> Package perl-Git.noarch 0:1.8.3.1-12.el7_4 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package Arch Version Repository Size\n================================================================================\nInstalling:\n git x86_64 1.8.3.1-12.el7_4 updates 4.4 M\n ntp x86_64 4.2.6p5-25.el7.centos.2 base 547 k\nInstalling for dependencies:\n perl-Git noarch 1.8.3.1-12.el7_4 updates 53 k\n\nTransaction Summary\n================================================================================\nInstall 2 Packages (+1 Dependent package)\n\nTotal download size: 5.0 M\nInstalled size: 24 M\nDownloading packages:\n--------------------------------------------------------------------------------\nTotal 109 kB/s | 5.0 MB 00:46 \nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n Installing : perl-Git-1.8.3.1-12.el7_4.noarch 1/3 \n Installing : git-1.8.3.1-12.el7_4.x86_64 2/3 \n Installing : ntp-4.2.6p5-25.el7.centos.2.x86_64 3/3 \n Verifying : git-1.8.3.1-12.el7_4.x86_64 1/3 \n Verifying : ntp-4.2.6p5-25.el7.centos.2.x86_64 2/3 \n Verifying : perl-Git-1.8.3.1-12.el7_4.noarch 3/3 \n\nInstalled:\n git.x86_64 0:1.8.3.1-12.el7_4 ntp.x86_64 0:4.2.6p5-25.el7.centos.2 \n\nDependency Installed:\n perl-Git.noarch 0:1.8.3.1-12.el7_4 \n\nComplete!\n"
]
}
}
PLAY RECAP **********************************************************************************************************
10.0.0.2 : ok=3 changed=1 unreachable=0 failed=0
[snamon@localhost ansible]$
inventry
[sv]
10.0.0.2
[sv:vars]
ansible_user=test
ansible_password=passwd
Playbook
---
- hosts: sv
gather_facts: no
tasks:
- name: ping
ping:
- name: install_git
become: true
yum:
name:
- git
- ntp
state: latest
register: result
- name: debug
debug:
msg: "{{ result }}"
そんななか遭遇したなぞの事象
失敗が続いていたのでとりあえずPingは行くのかな?と思い
こんなinventoryファイルを用意
※sshで10.0.0.2に接続はできていたのでやったのはほんの出来心でした。
[sv]
10.0.0.2
10.0.0.3 ←存在しないIP!!!!
10.0.0.4 ←こいつも存在しない!
---
- hosts: sv
connection: local
gather_facts: no
tasks:
- name: ping
ping:
実行結果
[snamon@localhost ansible]$ ansible-playbook -i hosts ping.yml
PLAY [sv] ***********************************************************************************************************
TASK [ping] *********************************************************************************************************
ok: [10.0.0.2]
ok: [10.0.0.3]
ok: [10.0.0.4]
PLAY RECAP **********************************************************************************************************
10.0.0.2 : ok=1 changed=0 unreachable=0 failed=0
10.0.0.3 : ok=1 changed=0 unreachable=0 failed=0
10.0.0.4 : ok=1 changed=0 unreachable=0 failed=0
[snamon@localhost ansible]$
ふぁふぁふぁのふぁっ?
届いてるみたいな表示しておりませんか?
念の為、普通にpingを叩いてみる
[snamon@localhost ansible]$ ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.764 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.652 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.655 ms
64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=0.797 ms
^C
--- 10.0.0.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 0.652/0.717/0.797/0.064 ms
[snamon@localhost ansible]$ ping 10.0.0.3
PING 10.0.0.3 (10.0.0.3) 56(84) bytes of data.
From 10.0.0.1 icmp_seq=1 Destination Host Unreachable
From 10.0.0.1 icmp_seq=2 Destination Host Unreachable
From 10.0.0.1 icmp_seq=3 Destination Host Unreachable
From 10.0.0.1 icmp_seq=4 Destination Host Unreachable
^C
--- 10.0.0.3 ping statistics ---
7 packets transmitted, 0 received, +4 errors, 100% packet loss, time 6003ms
pipe 4
[snamon@localhost ansible]$ ping 10.0.0.4
PING 10.0.0.4 (10.0.0.4) 56(84) bytes of data.
From 10.0.0.1 icmp_seq=1 Destination Host Unreachable
From 10.0.0.1 icmp_seq=2 Destination Host Unreachable
From 10.0.0.1 icmp_seq=3 Destination Host Unreachable
From 10.0.0.1 icmp_seq=4 Destination Host Unreachable
^C
--- 10.0.0.4 ping statistics ---
4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3001ms
pipe 4
[snamon@localhost ansible]$
飛ばない!(そりゃそうだ!)
怪しいのはconnectionをlocal指定しているところ
にしても存在しないIPへPingはとばないでしょ。。。なんだこれ。。。
<4月10日 追記>
ansible-playbook するときに -vvvvvのオプションつけて調査した結果、
やはりconnection: localが悪いと発見
※というより仕様を理解していなかった自分が悪い。。。
さらにPingモジュールは、実際にPingを打っているのではなく、
SSHでログイン後にbashで「 /bin/sh -c 'echo ~ && sleep 0'」を打ち応答があるかを確認しているようでした、、
つまり、connection: localを指定しているため、自分自身に入ってコマンドたたいて、応答あった!OK!
って動きみたい、、、
まとめ
謎事象は引き続き調査したいと思います!
とりあえず基本的な動きができたのでよしとしたいでっす!
それにしても苦戦した笑
サーバの勉強しないとだめだこりゃと思いました。。
本当は認証情報(sshのユーザ/パスワード)は変数ファイル(var)としてまとめて管理したかったのですが、、それはまた次回!!