2016年2月18日木曜日

GNU Make の初学者向けプレゼン

10 年ほど前に学生時代に作った、GNU Make の初学者向けのプレゼンをたまたま引っ張りだす機会があり、見てみると多少はお役立ちかもしれん、ということで資料を Slideshare にアップしてみました。Slideshare 使ってみたかった、というのもあります ^^;

世の中作りこまれた凄い Makefile があるもので、初歩の初歩を知らずにそれを目の前にすると目眩がするわけですが、そういった際の初学の一助になれば幸いです。

2016年1月24日日曜日

Ansible 2.0 リリースで個人的に気になったところ

Ansible 2.0 リリースされて少々経ちましたね。まだ触れてないのですが、いくつか紹介されているサイトを見させてもらって、「あ、これはこんなふうに使えそう」と感じた点を備忘録がてら書いてみました。私個人での使い方ベースなので汎用的な情報ではないかもです。

参考にさせていただいたサイト

Block 機能

具体的な書き方は こちら で紹介されてますが、複数のタスクを一つでまとめられます。

プレイブックを作りこんでくると、設定ファイルについて編集するタスクは、それの依存するパッケージをインストールするタスクの register で得られた結果を when で判定して、、、みたいな事が結構多くなってくるのですが、これでだいぶすっきり書けそうな感じです。

例えば、元々だと以下のように書いておかないと、ansible-playbook コマンドに --check オプションつけてドライランしようとするとエラーになってしまってました。

tasks:
  - block:
      - yum: name={{ item }} state=installed
        with_items:
          - httpd
          - memcached
        register: httpd_installed

      - template: src=templates/src.j2 dest=/etc/foo.conf
        when: |
          httpd_installed.rc is defined and
          httpd_installed.rc == 0

      - service: name=bar state=started enabled=True
        when: |
          httpd_installed.rc is defined and
          httpd_installed.rc == 0

それが、こんな感じに書けるようになります (Ansible Document で示されてる例を引用してます)。構造も見てわかりやすくなってて良いですね。

tasks:
  - block:
      - yum: name={{ item }} state=installed
        with_items:
          - httpd
          - memcached

      - template: src=templates/src.j2 dest=/etc/foo.conf

      - service: name=bar state=started enabled=True

この中で rescue ディレクティブによる例外処理などがあるのもありがたいですね。

strategyプラグインのサポート

こちら、内容は Ansible 2.0 変更点まとめ - Qiita でとても分かりやすくまとめていただいています。

従いましてただの感想なのですが、個人的にこれまで複数台のホストに同時にアクションを実行する際、複数間のサーバで各タスクの実行タイミングを揃える必要性を感じたことがなかったので、free によるホストごとの最速実行はとても良いですね。

設定もこれまでのプレイブックに このように 書くだけで良いので移行も簡単そうです。

vars機能の拡張

これまで vars は role 単位での指定になってました。私の場合、例えばウェブサーバの role に含まれる tasks の下に、apache、php など個別で YAML ファイルを作成していたため、vars/main.yml 一つにまとめられていると気持ち悪いなぁと思ってたので、それぞれのレベルで分割できるようになったのは嬉しいです。

expect,find モジュールの追加

AWS や Cloudstack 絡みの機能追加が多く、シェルでいろいろやりたい時は都度 shell モジュールと register と when と組み合わせるてやっていくのかな、、、、と思っていた所、こういったモジュールも増えてくるのはありがたいですね。またプレイブックがすっきりできそうです。

zabbix系モジュール

zabbix よく使ってるのでこれ結構強力な気がしてます。 Ansible zabbix_host module ももちろん便利そうなんですが、地味に Ansible zabbix_screen module が凄いんじゃないだろうか。スクリーン便利だけど、都度 GUI で作るのは大変で、API で作るのもなかなかしんどいので、諸々のメタデータは Ansible が隠蔽してくれてスクリーン作ってくれるの相当いい気がする。

私個人の Ansible 2.0 の第一印象は以上のような感じでした。勘違いしてる点もあるかもしれませんのでご容赦下さい。ともあれさっさと Ansible 2.0 を触っていってみようと思います。