さくらのクラウドのインスタンスをansibleで再起動

前に別のクラウド用に作ったのが、さくらのCentOS7.3環境で動かない。


はまりどころ:

  • hostsにIPアドレスしか書いてないと変数指定で{{ inventory_hostname }}が使えない
  • async: 0にしておくと、そこで止まってしまう
  • shutdown直だとなんかうまく動かないので、少しウエイト入れる
  • 一瞬でリブートしちゃうので、ssh downの監視入れるとそこでロックしちゃう
  • ansible2.xからlocal_actionがdelegate_to: localhostに変わった風


インスタンス立てた直後は、userがrootしかないのでremote_user: rootにしてありますが、ユーザー作ってある場合は消してrebootでbecome:trueなんかにしておいてください。

$ ansible --version
ansible 2.3.0.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = Default w/o overrides
  python version = 2.7.5 (default, Nov  6 2016, 00:28:07) [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]


インベントリファイル。

$ cat hosts.ini
[REBOOT-SAKURA-TEST]
153.127.XXX.XXX


palybookファイル。

$ cat reboot.yml
---
- hosts: REBOOT-SAKURA-TEST
  remote_user: root
  tasks:
    - name: test connection (before reboot)
      ping:

    - name: reboot
      command: sleep 2 && shutdown -r now
      async: 1
      poll: 0
      ignore_errors: true

    - name: wait for ssh up
      wait_for: >
        host="{{ ansible_default_ipv4.address }}"
        port=22
        state=started
        delay=1
      delegate_to: localhost

    - name: test connection (after reboot)
      ping:


実行結果。

$ ansible-playbook -i hosts.ini reboot.yml

PLAY [REBOOT-SAKURA-TEST] *****************************************************

TASK [Gathering Facts] *********************************************************
ok: [153.127.XXX.XXX]

TASK [test connection (before reboot)] *****************************************
ok: [153.127.XXX.XXX]

TASK [reboot] ******************************************************************
changed: [153.127.XXX.XXX]

TASK [wait for ssh up] *********************************************************
ok: [153.127.XXX.XXX -> localhost]

TASK [test connection (after reboot)] ******************************************
ok: [153.127.XXX.XXX]

PLAY RECAP *********************************************************************
153.127.XXX.XXX            : ok=5    changed=1    unreachable=0    failed=0