ansibleでSSHトンネリングして圧縮ファイルをリモートホストに展開

前回(http://booklet.link/tech_blogs/1)の続きで、今度はplaybookを作成して圧縮ファイルを対象サーバで展開してみる

ローカルPC -----SSH-----> 踏み台サーバ -----SSH-----> 対象サーバ

ローカルPCの圧縮ファイルを対象サーバへ展開する
(必要であれば対象サーバで権限も変更する)

まず、利用できそうなモジュールを確認する
http://docs.ansible.com/ansible/modules_by_category.html

既存ディレクトリをバックアップするにはfileモジュール、圧縮ファイルを展開するにはunarchiveモジュール、複雑なシェルコマンドを実行するにはshellモジュールを利用すれば良いことがわかる

今回はplaybookを使って実行してみる

- hosts: local
  remote_user: ユーザー名
  tasks:
    - file: path=/tmp/backup_dir state=absent    # ファイルの削除
    - command: mv /tmp/test_dir /tmp/backup_dir    # ファイルのバックアップ(シェルに依存しない簡単なコマンドはcommandモジュールを利用)
    - unarchive: src=~/Documents/test.tar.gz dest=/tmp owner=ユーザー名 group=グループ名 mode=755
    - command: mv /tmp/test /tmp/test_dir
    - shell: find . -type d -exec chmod 755 \{\} \;    # ディレクトリは755に変更
      args:
        chdir: /tmp/test_dir
    - shell: find . -type f -exec chmod 644 \{\} \;    #ファイルは644に変更
      args:
        chdir: /tmp/test_dir

これをtest.ymlとして保存

まずはhostとしてトンネルを掘っているlocalを指定する
対象サーバでのユーザー名を指定し、タスクの一覧を記載

実行は以下のようにして行う
$ ansible-playbook playbook/test.yml --ask-pass

また展開したいファイル名が毎回異なったり、ユーザー名が異なる場合は変数埋め込みを利用する

    - unarchive: src=~/Documents/test.tar.gz dest=/tmp owner=ユーザー名 group=グループ名 mode=755

これを

    - unarchive: src=~/Documents/{{targz_file}} dest=/tmp owner=ユーザー名 group=グループ名 mode=755

として実行時に
$ ansible-playbook playbook/test.yml --extra-vars "targz_file=test.tar.gz" --ask-pass
とすると、実行時に展開する対象ファイルを指定できる

Back