こんにちは。引き続きOJT中の増田(ますた)です。
今回は、Ansibleでhttp経由のgit cloneをさせて各サーバに資産配布をする方法を紹介します。
Ansibleとは、chefなどと同じOSSの構成管理ツールです。設定ファイルはYAMLで書きますし、プラグインも豊富なので誰でも簡単にサーバの構築を自動化することが可能です。資産の配布の方法は様々あると思いますが、今回はgitから資産配布をする方法を書いていきます。
普通gitをhttp,httpsで経由する場合、ユーザ名とパスワードを毎回聞かれます。ですので、Ansibleでそのまま実行をしようとするとエラーが発生します。それを回避するための方法を書いていきます。
今回やりたいことのイメージ図
実際にやってみた
方法としてはgit-credentialやnetrcを利用する方法もありますが、これらをAnsibleで使用するなら、ユーザ名やパスワードを平文で一時的にリモートサーバに保存する必要があるので非常に危険なため、できる限り避けましょう。今回は、Ansibleのvars_promptモジュールを用いて対話的にログイン情報を打ち込んでもらう仕様で作っていきます。
vars_promptモジュールとは、入力待ちを実現させるモジュールです。オプションをつければ入力情報も見えなくなりますし、Ansibleのタスクでパスワードが必要になる場合に最適だと思います。
早速作ってみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
- hosts: test vars_prompt: - name: "user_name" prompt: "Please Enter Your ID of Github" private: no - name: "password" prompt: "Please Enter Your Password of Github" private: yes - name: "version" prompt: "Please Enter the Version of Products If You have Specified" private: no default: "master" gather_facts: False max_fail_percentage: 0 tasks: - name: ディレクトリがなければ作成 file: path={{ git_dirpath }} state=directory owner=root group=root become: yes tags: - test - name: git_clone git: repo: "http://{{ user_name }}:{{ password }}@github.com/{{ repo_name }}.git" dest: "{{ git_dirpath }}/{{ repo_name }}" version: "{{ version }}" become: yes tags: - test |
vars_promptをセットしておくことでplaybookを立ち上げるとpromptに記載したメッセージが表示され入力待ち状態となります。[private: yes]のオプションをつけてあげると、入力情報が見えなくなるので活用しましょう。またdefaultオプションをつけることも可能で、これをつけておくと、何も入力されなかったときに自動的にdefault値が設定されるようになります。
git_cloneの仕方は簡単でgitモジュールを利用して、ソースと置き場所とバージョンを指定するだけで動きます。
注意点としてパスワードに@マークが含まれていると
1 |
http://hogeuser:hoge@password@github.com/hogehoge/hoge.git |
このように@マークが重複してしまい、正常に動作しなくなります。それを回避するためには@マークのエンコードされた値である、%40を使えば通りますので気をつけてください。
駆け足になってしまいましたが、以上になります。最後まで読んでいただきありがとうございました。
今後もニフティものづくりブログをよろしくお願いいたします。