cfhighlander icon indicating copy to clipboard operation
cfhighlander copied to clipboard

dns domain with the same name as a template causes highlander to create a parameter from an output

Open Guslington opened this issue 5 years ago • 0 comments

Issue

If my domain name is prefixed with the same same as one of my components, that value is turned into a Fn::GetAtt from the output of the component.

DnsDomain:
          Fn::GetAtt:
          - sftp
          - Outputs.mydomain

My work around for the moment is to apply that parameter at runtime. Do we need to allow for the functionality if we have the cfout() function to generate the Fn::GetAtt?

Example

CfhighlanderTemplate do
  Name 'my-sftp'
  Description "my-sftp"

  Component name: 'vpc', template: 'vpc' do
    parameter name: 'DnsDomain', value: "sftp.mydomain.com"
    parameter name: 'NetworkPrefix', value: '10'
    parameter name: 'StackMask', value: '16'
  end

  Component name: 's3', template: 's3'

  Component name: 'sftp', template: 'sftpDnsDomain' do
    parameter name: 'VpcId', value: cfout('vpc.VPCId')
    parameter name: 'SubnetIds', value: cfout('vpc.ComputeSubnets')
    parameter name: 'DnsDomain', value: "sftp.mydomain.com"
    parameter name: 'VPCCidr', value: cfout('vpc.VPCCidr')
  end

  Component name: 'loadbalancer', template: '[email protected]' do
    parameter name: 'VpcId', value: cfout('vpc.VPCId')
    parameter name: 'SubnetIds', value: cfout('vpc.PublicSubnets')
    parameter name: 'DnsDomain', value: "sftp.mydomain.com"
    parameter name: 'VpcEndpointIPs', value: cfout('sftp.VpcEndpointIPs')
  end

end

Exception

Validate template /Users/gus/src/ss/ss-sftp-cloudformation/out/yaml/ss-sftp.compiled.yaml locally
Traceback (most recent call last):
	21: from /Users/gus/.rbenv/versions/2.5.3/bin/cfcompile:23:in `<main>'
	20: from /Users/gus/.rbenv/versions/2.5.3/bin/cfcompile:23:in `load'
	19: from /Users/gus/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/cfhighlander-0.9.0/bin/cfcompile:4:in `<top (required)>'
	18: from /Users/gus/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/cfhighlander-0.9.0/bin/cfcompile:4:in `require_relative'
	17: from /Users/gus/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/cfhighlander-0.9.0/bin/cfhighlander.rb:301:in `<top (required)>'
	16: from /Users/gus/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/thor-0.20.3/lib/thor/base.rb:466:in `start'
	15: from /Users/gus/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/thor-0.20.3/lib/thor.rb:387:in `dispatch'
	14: from /Users/gus/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/thor-0.20.3/lib/thor/invocation.rb:126:in `invoke_command'
	13: from /Users/gus/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/thor-0.20.3/lib/thor/command.rb:27:in `run'
	12: from /Users/gus/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/cfhighlander-0.9.0/bin/cfhighlander.rb:113:in `cfcompile'
	11: from /Users/gus/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/cfhighlander-0.9.0/lib/cfhighlander.validator.rb:17:in `validate'
	10: from /Users/gus/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/cfhighlander-0.9.0/lib/cfhighlander.validator.rb:17:in `each'
	 9: from /Users/gus/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/cfhighlander-0.9.0/lib/cfhighlander.validator.rb:29:in `block in validate'
	 8: from /Users/gus/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/cfhighlander-0.9.0/lib/cfhighlander.validator.rb:40:in `validate_local'
	 7: from /Users/gus/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/aws-sdk-cloudformation-1.19.0/lib/aws-sdk-cloudformation/client.rb:4203:in `validate_template'
	 6: from /Users/gus/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/aws-sdk-core-3.51.0/lib/seahorse/client/request.rb:70:in `send_request'
	 5: from /Users/gus/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/aws-sdk-core-3.51.0/lib/seahorse/client/plugins/response_target.rb:23:in `call'
	 4: from /Users/gus/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/aws-sdk-core-3.51.0/lib/aws-sdk-core/plugins/response_paging.rb:10:in `call'
	 3: from /Users/gus/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/aws-sdk-core-3.51.0/lib/aws-sdk-core/plugins/param_converter.rb:24:in `call'
	 2: from /Users/gus/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/aws-sdk-core-3.51.0/lib/aws-sdk-core/plugins/idempotency_token.rb:17:in `call'
	 1: from /Users/gus/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/aws-sdk-core-3.51.0/lib/aws-sdk-core/plugins/jsonvalue_converter.rb:20:in `call'
/Users/gus/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/aws-sdk-core-3.51.0/lib/seahorse/client/plugins/raise_response_errors.rb:15:in `call': Circular dependency between resources: [loadbalancer, vpc, sftp] (Aws::CloudFormation::Errors::ValidationError)

Guslington avatar May 29 '19 02:05 Guslington