awspecのAPIで悩んでいる その2

現在、awspecの各リソースタイプは、リソースの特定にIDか、タグの Name を利用しているます。

しかし、「サーバはペットから家畜へ」と言われるようにAWS上のリソースに名前がつくことのほうが少なくなっているようです。

awspecでもIssueが上がっています。

github.com

awspecとしてはリソースを一意に特定してテストするコンセプトは重要だ思っているので、(そのコンセプトは変えずに)例えば “IDを特定するためのヘルパー” を提供しようと考えています。

ヘルパー名は仮ですが、ec2リソースタイプに対して ec2_filter というヘルパーを用意した場合、以下のような使い方ができるようにしたいのです。

describe ec2(ec2_filter(tags: {'TagKey' => 'TagValue'})) do
   it { sholud be_running }
end

describe ec2(tags: {'TagKey' => 'TagValue'}) do # work ec2_filter() inside
   it { sholud be_running }
end
ec2_filter(tags: {'TagKey' => 'TagValue'}).each |id|
  describe ec2(id) do
     it { sholud be_running }
  end
end

ec2_filter(asg: 'my-asg').each |id|
  describe ec2(id) do
     it { sholud be_running }
  end
end

何に悩んでいるのか

ヘルパーの命名規則(名前)です。

  • おそらく各リソースに対して専用のリソースが必要
  • finder という名前は既に利用
  • 1つのリソースを特定するために使ったり、複数のリソースのIDを取得するために使ったりしたい

どうしたものか。。。