Roadworker v0.5.6.beta2

Roadworker v0.5.6.beta2をリリースしました。

github.com

Calculated Health Checks/Latency Checksのサポート

Calculated Health ChecksとLatency Checksをサポートしました。

Calculated Health Checksはこんな感じ。

rrset "zzz.info.winebarrel.jp", "A" do
  set_identifier "Secondary"
  failover "SECONDARY"
  health_check :calculated => ["07c03a45-5b69-4044-9ec3-016cd8e5f74b", "bba4d1ea-27c2-4d0c-a249-c857a3e46d88"], :health_threshold => 1, :inverted => false
  ttl 456
  resource_records(
    "127.0.0.3",
    "127.0.0.4"
  )
end

Latency Checksはこんな感じです。

rrset "zzz.info.winebarrel.jp", "A" do
    set_identifier "Primary"
    failover "PRIMARY"
    health_check "http://example.com:80/path", :search_string => "ANY_RESPONSE_STRING", :request_interval => 30, :failure_threshold => 3, :measure_latency => true
    ttl 456
    resource_records(
      "127.0.0.1",
      "127.0.0.2"
    )
  end

また、APIの変更に伴って、ヘルスチェック周りで意図しない変更が検出されるのは諸々直しました。

それから、ふる〜いI/Fとの互換性を保つため、以下のような書き方を許可していたのですが、やめました。

health_check "http://192.168.0.1:80/path", "example.com"

Health Check GCをデフォルトで無効に

Health Check GCという使われていないHealth Checkを自動的に削除する機能があり、デフォルトで有効になっていたのですが、無効にしました。 --health-check-gcオプションを渡すと、有効になります。Calculated Health Checksで参照されているHealth Checkは削除対象にはなりません。*1

テンプレートのサポート

以下のように、テンプレートを使えるようにしました。

template "default_rrset" do
  rrset context.name + "." + context.hosted_zone_name, "A" do
    ttl context.ttl
    resource_records(
      "127.0.0.1"
    )
  end
end

hosted_zone "winebarrel.jp." do
  context.ttl = 100
  include_template "default_rrset", :name => "www"
  include_template "default_rrset", :name => "www2"
end

テンプレートに渡す変数はcontextという特殊変数で受け渡せます。 また、include_templateの第二引数にHashを渡すことで、テンプレート内のcontextにHashの値をセットすることができます。 context変数のクラスはHashie::Mashなので、普通のハッシュのように値をセットすることもできます。

  context[:ttl] = 100

あと、include_templateはどのブロックでも使えるので

template "default_hz" do
  hosted_zone context.hz_name do
    rrset "www." + context.hosted_zone_name, "A" do
      ttl context.ttl
      resource_records(
        "127.0.0.1"
      )
    end
  end
end

include_template "default_hz", hz_name: "winebarrel.jp."
include_template "default_hz", hz_name: "winebarrel2.jp."

とかもできます。

その他

rrsetからHealth Checkを名前/IDで参照する機能は、今のところ実装してないんですが、そういうユースケースはあるんですかね…

*1:が、再帰的参照までは調べてません。できるのかな…