AnsibleつかってGitをインストールさせるだけなのに2日使った

##やりたかったこと
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

```ini:hosts
[sv]
10.0.0.2

[sv:vars]
ansible_user=test
ansible_password=passwd
```

Playbook

```yaml:main.yml
---
- 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に接続はできていたのでやったのはほんの出来心でした。

```:hosts
[sv]
10.0.0.2
10.0.0.3  ←存在しないIP！！！！
10.0.0.4  ←こいつも存在しない！
```

```yaml:main.yml
---
- 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)としてまとめて管理したかったのですが、、それはまた次回！！