Skip to content

Commit

Permalink
Merge pull request #415 from inokappa/acm_arn_support
Browse files Browse the repository at this point in the history
Merged.
  • Loading branch information
inokappa authored Nov 22, 2018
2 parents 6e96e95 + 744df13 commit 3ffe453
Show file tree
Hide file tree
Showing 7 changed files with 81 additions and 12 deletions.
2 changes: 2 additions & 0 deletions doc/resource_types.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion lib/awspec/generator/doc/type/acm.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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(', ')
Expand Down
13 changes: 11 additions & 2 deletions lib/awspec/generator/spec/acm.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
30 changes: 26 additions & 4 deletions lib/awspec/helper/finder/acm.rb
Original file line number Diff line number Diff line change
@@ -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
Expand Down
17 changes: 13 additions & 4 deletions lib/awspec/stub/acm.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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'
]
Expand Down
5 changes: 5 additions & 0 deletions lib/awspec/type/acm.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
24 changes: 23 additions & 1 deletion spec/type/acm_spec.rb
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 3ffe453

Please sign in to comment.