diff --git a/doc/resource_types.md b/doc/resource_types.md index 5bb56b6af..413fdc765 100644 --- a/doc/resource_types.md +++ b/doc/resource_types.md @@ -85,6 +85,8 @@ end ### be_pending_validation, be_issued, be_inactive, be_expired, be_validation_timed_out, be_revoked, be_failed +### have_domain_name + ### have_domain_validation_option ```ruby diff --git a/lib/awspec/generator/doc/type/acm.rb b/lib/awspec/generator/doc/type/acm.rb index 510ff6c66..1954698ab 100644 --- a/lib/awspec/generator/doc/type/acm.rb +++ b/lib/awspec/generator/doc/type/acm.rb @@ -5,7 +5,7 @@ class Acm < Base def initialize super @type_name = 'Acm' - @type = Awspec::Type::Acm.new('example.com') + @type = Awspec::Type::Acm.new('example.jp') @ret = @type.resource_via_client @matchers = [ Awspec::Type::Acm::STATUSES.map { |status| 'be_' + status.downcase }.join(', ') diff --git a/lib/awspec/generator/spec/acm.rb b/lib/awspec/generator/spec/acm.rb index 4def1d949..b14658bea 100644 --- a/lib/awspec/generator/spec/acm.rb +++ b/lib/awspec/generator/spec/acm.rb @@ -16,12 +16,21 @@ def acm_spec_template <%- if certificate.status == 'ISSUED' -%> it { should be_issued } <% end -%> + it { should have_domain_name('<%= certificate.domain_name %>') } + its(:certificate_arn) { should eq '<%= certificate.certificate_arn %>' } its(:type) { should eq '<%= certificate.type %>' } <%- certificate.domain_validation_options.each do |domain_validation_option| -%> <%- unless domain_validation_option.validation_status.nil? -%> - it { should have_domain_validation_option(domain_name: '<%= domain_validation_option.domain_name %>', validation_method: '<%= domain_validation_option.validation_method%>', validation_status: '<%= domain_validation_option.validation_status %>') } + it do + should have_domain_validation_option(domain_name: '<%= domain_validation_option.domain_name %>', + validation_method: '<%= domain_validation_option.validation_method%>', + validation_status: '<%= domain_validation_option.validation_status %>') + end <%- else -%> - it { should have_domain_validation_option(domain_name: '<%= domain_validation_option.domain_name %>', validation_method: '<%= domain_validation_option.validation_method%>') } + it do + should have_domain_validation_option(domain_name: '<%= domain_validation_option.domain_name %>', + validation_method: '<%= domain_validation_option.validation_method%>') + end <%- end -%> <%- end -%> end diff --git a/lib/awspec/helper/finder/acm.rb b/lib/awspec/helper/finder/acm.rb index 658bdea1d..c57a8de49 100644 --- a/lib/awspec/helper/finder/acm.rb +++ b/lib/awspec/helper/finder/acm.rb @@ -1,15 +1,37 @@ module Awspec::Helper module Finder module Acm - def find_certificate(domain) - cert = acm_client.list_certificates.certificate_summary_list.find { |c| c[:domain_name] == domain } + def find_certificate(id) + selected = [] + loop do + req = {} + res = acm_client.list_certificates(req) + selected += res.certificate_summary_list.select do |c| + c.certificate_arn == id || c.domain_name == id + end + break if res.next_token.nil? + req[:next_token] = res.next_token + end + + cert = selected.single_resource(id) acm_client.describe_certificate({ certificate_arn: cert.certificate_arn }).certificate end def select_all_certificates + certs = [] + loop do + req = {} + res = acm_client.list_certificates(req) + res.certificate_summary_list.each do |c| + certs << c.certificate_arn + end + break if res.next_token.nil? + req[:next_token] = res.next_token + end + certificates = [] - acm_client.list_certificates.certificate_summary_list.each do |cert| - certificates << acm_client.describe_certificate({ certificate_arn: cert.certificate_arn }).certificate + certs.each do |cert| + certificates << acm_client.describe_certificate({ certificate_arn: cert }).certificate end certificates end diff --git a/lib/awspec/stub/acm.rb b/lib/awspec/stub/acm.rb index 9db7e5df5..43aa31aa0 100644 --- a/lib/awspec/stub/acm.rb +++ b/lib/awspec/stub/acm.rb @@ -2,20 +2,29 @@ stub_responses: { list_certificates: { certificate_summary_list: [ + { + certificate_arn: 'arn:aws:acm:region:123456789010:certificate/12345678-1234-1234-1234-123456789000', + domain_name: 'example.jp' + }, { certificate_arn: 'arn:aws:acm:region:123456789010:certificate/12345678-1234-1234-1234-123456789010', domain_name: 'example.com' + }, + { + certificate_arn: 'arn:aws:acm:region:123456789010:certificate/12345678-1234-1234-1234-123456789011', + domain_name: 'example.com' } - ] + ], + next_token: nil }, describe_certificate: { certificate: { - certificate_arn: 'arn:aws:acm:region:123456789010:certificate/12345678-1234-1234-1234-123456789010', - domain_name: 'example.com', + certificate_arn: 'arn:aws:acm:region:123456789010:certificate/12345678-1234-1234-1234-123456789000', + domain_name: 'example.jp', status: 'ISSUED', type: 'AMAZON_ISSUED', domain_validation_options: [ - domain_name: 'example.com', + domain_name: 'example.jp', validation_status: 'SUCCESS', validation_method: 'DNS' ] diff --git a/lib/awspec/type/acm.rb b/lib/awspec/type/acm.rb index 3b2c49d68..fd91f91a8 100644 --- a/lib/awspec/type/acm.rb +++ b/lib/awspec/type/acm.rb @@ -24,6 +24,11 @@ def id end end + def has_domain_name?(domain) + resource_via_client.domain_name == domain && \ + resource_via_client.certificate_arn == id + end + def has_domain_validation_option?(domain_name:, validation_method:, validation_status: nil) resource_via_client.domain_validation_options.find do |domain_validation_option| validation_status ||= domain_validation_option.validation_status diff --git a/spec/type/acm_spec.rb b/spec/type/acm_spec.rb index 637fcfce9..85396673f 100644 --- a/spec/type/acm_spec.rb +++ b/spec/type/acm_spec.rb @@ -1,8 +1,30 @@ require 'spec_helper' Awspec::Stub.load 'acm' -describe acm('example.com') do +describe acm('example.jp') do + its(:certificate_arn) { should eq 'arn:aws:acm:region:123456789010:certificate/12345678-1234-1234-1234-123456789000' } +end + +describe acm('arn:aws:acm:region:123456789010:certificate/12345678-1234-1234-1234-123456789000') do it { should exist } it { should be_issued } + it { should have_domain_name('example.jp') } its(:type) { should eq 'AMAZON_ISSUED' } + it do + should have_domain_validation_option(domain_name: 'example.jp', + validation_method: 'DNS', + validation_status: 'SUCCESS') + end +end + +describe acm('arn:aws:acm:region:123456789010:certificate/12345678-1234-1234-1234-123456789011') do + it { should exist } +end + +describe acm('example.com') do + it 'should be a Exception when duplicated domain name' do + expect { Awspec::Type::Acm.new('example.com').id }.to raise_error( + Awspec::DuplicatedResourceTypeError + ) + end end