Class: Convection::Model::Template::Resource
- Inherits:
-
Object
- Object
- Convection::Model::Template::Resource
- Includes:
- DSL::Helpers, DSL::Template::Resource, Mixin::Conditional
- Defined in:
- lib/convection/model/template/resource.rb,
lib/convection/model/template/resource/aws_elb.rb,
lib/convection/model/template/resource/aws_ec2_eip.rb,
lib/convection/model/template/resource/aws_ec2_vpc.rb,
lib/convection/model/template/resource/aws_kms_key.rb,
lib/convection/model/template/resource/aws_iam_role.rb,
lib/convection/model/template/resource/aws_iam_user.rb,
lib/convection/model/template/resource/aws_ec2_route.rb,
lib/convection/model/template/resource/aws_iam_group.rb,
lib/convection/model/template/resource/aws_s3_bucket.rb,
lib/convection/model/template/resource/aws_sns_topic.rb,
lib/convection/model/template/resource/aws_sqs_queue.rb,
lib/convection/model/template/resource/aws_ec2_subnet.rb,
lib/convection/model/template/resource/aws_ec2_volume.rb,
lib/convection/model/template/resource/aws_iam_policy.rb,
lib/convection/model/template/resource/aws_events_rule.rb,
lib/convection/model/template/resource/aws_ec2_instance.rb,
lib/convection/model/template/resource/aws_lambda_alias.rb,
lib/convection/model/template/resource/aws_logs_loggroup.rb,
lib/convection/model/template/resource/aws_ec2_spot_fleet.rb,
lib/convection/model/template/resource/aws_ecr_repository.rb,
lib/convection/model/template/resource/aws_elbv2_listener.rb,
lib/convection/model/template/resource/aws_iam_access_key.rb,
lib/convection/model/template/resource/aws_lambda_version.rb,
lib/convection/model/template/resource/aws_ec2_nat_gateway.rb,
lib/convection/model/template/resource/aws_ec2_network_acl.rb,
lib/convection/model/template/resource/aws_ec2_route_table.rb,
lib/convection/model/template/resource/aws_ec2_vpn_gateway.rb,
lib/convection/model/template/resource/aws_efs_file_system.rb,
lib/convection/model/template/resource/aws_lambda_function.rb,
lib/convection/model/template/resource/aws_rds_db_instance.rb,
lib/convection/model/template/resource/aws_ec2_dhcp_options.rb,
lib/convection/model/template/resource/aws_ec2_vpc_endpoint.rb,
lib/convection/model/template/resource/aws_efs_mount_target.rb,
lib/convection/model/template/resource/aws_s3_bucket_policy.rb,
lib/convection/model/template/resource/aws_sns_topic_policy.rb,
lib/convection/model/template/resource/aws_sqs_queue_policy.rb,
lib/convection/model/template/resource/aws_api_gateway_model.rb,
lib/convection/model/template/resource/aws_api_gateway_stage.rb,
lib/convection/model/template/resource/aws_cloud_watch_alarm.rb,
lib/convection/model/template/resource/aws_lambda_permission.rb,
lib/convection/model/template/resource/aws_route53_recordset.rb,
lib/convection/model/template/resource/aws_api_gateway_method.rb,
lib/convection/model/template/resource/aws_ec2_security_group.rb,
lib/convection/model/template/resource/aws_ec2_vpn_connection.rb,
lib/convection/model/template/resource/aws_elbv2_target_group.rb,
lib/convection/model/template/resource/aws_iam_managed_policy.rb,
lib/convection/model/template/resource/aws_api_gateway_account.rb,
lib/convection/model/template/resource/aws_api_gateway_api_key.rb,
lib/convection/model/template/resource/aws_ec2_eip_association.rb,
lib/convection/model/template/resource/aws_elasticache_cluster.rb,
lib/convection/model/template/resource/aws_elbv2_listener_rule.rb,
lib/convection/model/template/resource/aws_elbv2_load_balancer.rb,
lib/convection/model/template/resource/aws_rds_db_subnet_group.rb,
lib/convection/model/template/resource/aws_route53_hosted_zone.rb,
lib/convection/model/template/resource/aws_api_gateway_resource.rb,
lib/convection/model/template/resource/aws_api_gateway_rest_api.rb,
lib/convection/model/template/resource/aws_ec2_customer_gateway.rb,
lib/convection/model/template/resource/aws_ec2_internet_gateway.rb,
lib/convection/model/template/resource/aws_iam_instance_profile.rb,
lib/convection/model/template/resource/aws_route53_health_check.rb,
lib/convection/model/template/resource/aws_ec2_network_acl_entry.rb,
lib/convection/model/template/resource/aws_rds_db_security_group.rb,
lib/convection/model/template/resource/aws_api_gateway_authorizer.rb,
lib/convection/model/template/resource/aws_api_gateway_deployment.rb,
lib/convection/model/template/resource/aws_api_gateway_usage_plan.rb,
lib/convection/model/template/resource/aws_rds_db_parameter_group.rb,
lib/convection/model/template/resource/aws_rds_event_subscription.rb,
lib/convection/model/template/resource/aws_cloudfront_distribution.rb,
lib/convection/model/template/resource/aws_ec2_vpn_connection_route.rb,
lib/convection/model/template/resource/aws_elasticache_subnet_group.rb,
lib/convection/model/template/resource/aws_logs_subscription_filter.rb,
lib/convection/model/template/resource/aws_ec2_security_group_ingres.rb,
lib/convection/model/template/resource/aws_api_gateway_usage_plan_key.rb,
lib/convection/model/template/resource/aws_ec2_vpc_gateway_attachment.rb,
lib/convection/model/template/resource/aws_ec2_vpc_peering_connection.rb,
lib/convection/model/template/resource/aws_elasticache_security_group.rb,
lib/convection/model/template/resource/aws_auto_scaling_scaling_policy.rb,
lib/convection/model/template/resource/aws_directory_service_simple_ad.rb,
lib/convection/model/template/resource/aws_elasticache_parameter_group.rb,
lib/convection/model/template/resource/aws_elasticbeanstalk_application.rb,
lib/convection/model/template/resource/aws_elasticbeanstalk_environment.rb,
lib/convection/model/template/resource/aws_api_gateway_base_path_mapping.rb,
lib/convection/model/template/resource/aws_auto_scaling_scheduled_action.rb,
lib/convection/model/template/resource/aws_elasticache_replication_group.rb,
lib/convection/model/template/resource/aws_api_gateway_client_certificate.rb,
lib/convection/model/template/resource/aws_auto_scaling_auto_scaling_group.rb,
lib/convection/model/template/resource/aws_certificate_manager_certificate.rb,
lib/convection/model/template/resource/aws_auto_scaling_launch_configuration.rb,
lib/convection/model/template/resource/aws_ec2_vpn_gateway_route_propagation.rb,
lib/convection/model/template/resource/aws_ec2_subnet_network_acl_association.rb,
lib/convection/model/template/resource/aws_ec2_subnet_route_table_association.rb,
lib/convection/model/template/resource/aws_elasticache_security_group_ingress.rb,
lib/convection/model/template/resource/aws_elasticbeanstalk_applicationversion.rb,
lib/convection/model/template/resource/aws_elasticbeanstalk_configurationtemplate.rb
Overview
Resource
Direct Known Subclasses
ApiGatewayAccount, ApiGatewayApiKey, ApiGatewayAuthorizer, ApiGatewayBasePathMapping, ApiGatewayClientCertificate, ApiGatewayDeployment, ApiGatewayMethod, ApiGatewayModel, ApiGatewayResource, ApiGatewayRestApi, ApiGatewayStage, ApiGatewayUsagePlan, AutoScalingGroup, CertificateManagerCertificate, CloudFrontDistribution, CloudWatchAlarm, DirectoryServiceSimpleAD, EC2CustomerGateway, EC2DHCPOptions, EC2EIP, EC2Instance, EC2InternetGateway, EC2NatGateway, EC2NetworkACL, EC2NetworkACLEntry, EC2Route, EC2RouteTable, EC2SecurityGroup, EC2SecurityGroup::Rule, EC2SecurityGroupIngres, EC2Subnet, EC2SubnetNetworkACLAssociation, EC2SubnetRouteTableAssociation, EC2VPC, EC2VPCEndpoint, EC2VPCGatewayAttachment, EC2VPCPeeringConnection, EC2VPNConnection, EC2VPNConnectionRoute, EC2VPNGateway, EC2VPNGatewayRoutePropagation, EC2Volume, ECRRepository, EFSFileSystem, EFSMountTarget, EIPAssociation, ELB, ELBV2Listener, ELBV2ListenerRule, ELBV2LoadBalancer, ELBV2TargetGroup, ElastiCacheCluster, ElastiCacheParameterGroup, ElastiCacheReplicationGroup, ElastiCacheSecurityGroup, ElastiCacheSecurityGroupIngress, ElastiCacheSubnetGroup, ElasticBeanstalkApplication, ElasticBeanstalkApplicationVersion, ElasticBeanstalkConfigurationTemplate, ElasticBeanstalkEnvironment, EventsRule, IAMAccessKey, IAMGroup, IAMInstanceProfile, IAMManagedPolicy, IAMPolicy, IAMRole, IAMUser, KmsKey, Lambda, LambdaAlias, LambdaPermission, LambdaVersion, LaunchConfiguration, LogGroup, RDSDBInstance, RDSDBParameterGroup, RDSDBSecurityGroup, RDSDBSubnetGroup, RDSEventSubscription, Route53HealthCheck, Route53HostedZone, Route53RecordSet, S3Bucket, S3BucketPolicy, SNSTopic, SNSTopicPolicy, SQSQueue, SQSQueuePolicy, ScalingPolicy, ScheduledAction, SpotFleet, SubscriptionFilter
Defined Under Namespace
Classes: ApiGatewayAccount, ApiGatewayApiKey, ApiGatewayAuthorizer, ApiGatewayBasePathMapping, ApiGatewayClientCertificate, ApiGatewayDeployment, ApiGatewayMethod, ApiGatewayModel, ApiGatewayResource, ApiGatewayRestApi, ApiGatewayStage, ApiGatewayUsagePlan, AutoScalingGroup, CertificateManagerCertificate, CloudFrontDistribution, CloudWatchAlarm, DirectoryServiceSimpleAD, EC2CustomerGateway, EC2DHCPOptions, EC2EIP, EC2Instance, EC2InternetGateway, EC2NatGateway, EC2NetworkACL, EC2NetworkACLEntry, EC2Route, EC2RouteTable, EC2SecurityGroup, EC2SecurityGroupIngres, EC2Subnet, EC2SubnetNetworkACLAssociation, EC2SubnetRouteTableAssociation, EC2VPC, EC2VPCEndpoint, EC2VPCGatewayAttachment, EC2VPCPeeringConnection, EC2VPNConnection, EC2VPNConnectionRoute, EC2VPNGateway, EC2VPNGatewayRoutePropagation, EC2Volume, ECRRepository, EFSFileSystem, EFSMountTarget, EIPAssociation, ELB, ELBV2Listener, ELBV2ListenerRule, ELBV2LoadBalancer, ELBV2TargetGroup, ElastiCacheCluster, ElastiCacheParameterGroup, ElastiCacheReplicationGroup, ElastiCacheSecurityGroup, ElastiCacheSecurityGroupIngress, ElastiCacheSubnetGroup, ElasticBeanstalkApplication, ElasticBeanstalkApplicationVersion, ElasticBeanstalkConfigurationTemplate, ElasticBeanstalkEnvironment, EventsRule, HashProperty, HashPropertyInstance, IAMAccessKey, IAMGroup, IAMInstanceProfile, IAMManagedPolicy, IAMPolicy, IAMRole, IAMUser, KmsKey, Lambda, LambdaAlias, LambdaPermission, LambdaVersion, LaunchConfiguration, ListProperty, ListPropertyInstance, LogGroup, Property, PropertyInstance, RDSDBInstance, RDSDBParameterGroup, RDSDBSecurityGroup, RDSDBSubnetGroup, RDSEventSubscription, Route53HealthCheck, Route53HostedZone, Route53RecordSet, S3Bucket, S3BucketPolicy, SNSTopic, SNSTopicPolicy, SQSQueue, SQSQueuePolicy, ScalarProperty, ScalarPropertyInstance, ScalingPolicy, ScheduledAction, SpotFleet, SubscriptionFilter
Instance Attribute Summary collapse
-
#exist ⇒ Object
(also: #exist?)
readonly
Returns the value of attribute exist.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#parent ⇒ Object
readonly
Returns the value of attribute parent.
-
#properties ⇒ Object
readonly
Returns the value of attribute properties.
-
#resource_attributes ⇒ Object
readonly
Returns the value of attribute resource_attributes.
-
#template ⇒ Object
readonly
Returns the value of attribute template.
Class Method Summary collapse
- .attach_method(name, &block) ⇒ Object
- .properties ⇒ Object
- .property(accesor, property_name, options = {}) ⇒ Object
- .type(cf_type = nil, dsl_name = nil) ⇒ Object
Instance Method Summary collapse
- #as_attribute(attr_name, attr_type = :string) ⇒ Object
-
#deletion_policy(deletion_policy) ⇒ Object
rubocop:disable Style/TrivialAccessors We don’t want to use an accessor (e.g. deletion_policy=) because this is a DSL method.
- #depends_on(resource) ⇒ Object
-
#initialize(name, parent) ⇒ Resource
constructor
A new instance of Resource.
- #property(key, *value) ⇒ Object
-
#reference ⇒ Object
rubocop:enable Style/TrivialAccessors.
- #render ⇒ Object
-
#type ⇒ Object
Resource Instance Methods.
- #with_output(output_name = name, value = reference, &block) ⇒ Object
Methods included from Mixin::Conditional
Methods included from DSL::Template::Resource
attach_resource, attach_resource_collection, resource_collection_dsl_methods, resource_dsl_methods
Methods included from DSL::Helpers
#camel_case, included, method_name, #screaming_snake_case, #snake_case
Methods included from DSL::IntrinsicFunctions
#base64, #find_in_map, #fn_and, #fn_equals, #fn_if, #fn_import_value, #fn_not, #fn_or, #fn_ref, #fn_sub, #get_att, #get_azs, #join, #select
Constructor Details
#initialize(name, parent) ⇒ Resource
Returns a new instance of Resource.
295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 |
# File 'lib/convection/model/template/resource.rb', line 295 def initialize(name, parent) @name = name @parent = parent @template = parent.template @type = self.class.type @depends_on = [] @deletion_policy = nil @exist = false @resource_attributes = [] ## Instantiate properties @properties = Model::Collection.new resource = self resource.class.properties.each do |_, property| @properties[property.property_name] = property.instance(resource) end end |
Instance Attribute Details
#exist ⇒ Object (readonly) Also known as: exist?
Returns the value of attribute exist.
292 293 294 |
# File 'lib/convection/model/template/resource.rb', line 292 def exist @exist end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
287 288 289 |
# File 'lib/convection/model/template/resource.rb', line 287 def name @name end |
#parent ⇒ Object (readonly)
Returns the value of attribute parent.
288 289 290 |
# File 'lib/convection/model/template/resource.rb', line 288 def parent @parent end |
#properties ⇒ Object (readonly)
Returns the value of attribute properties.
290 291 292 |
# File 'lib/convection/model/template/resource.rb', line 290 def properties @properties end |
#resource_attributes ⇒ Object (readonly)
Returns the value of attribute resource_attributes.
291 292 293 |
# File 'lib/convection/model/template/resource.rb', line 291 def resource_attributes @resource_attributes end |
#template ⇒ Object (readonly)
Returns the value of attribute template.
289 290 291 |
# File 'lib/convection/model/template/resource.rb', line 289 def template @template end |
Class Method Details
.attach_method(name, &block) ⇒ Object
40 41 42 |
# File 'lib/convection/model/template/resource.rb', line 40 def attach_method(name, &block) define_method(name, &block) end |
.properties ⇒ Object
17 18 19 |
# File 'lib/convection/model/template/resource.rb', line 17 def properties @properties ||= {} end |
.property(accesor, property_name, options = {}) ⇒ Object
30 31 32 33 34 35 36 37 38 |
# File 'lib/convection/model/template/resource.rb', line 30 def property(accesor, property_name, = {}) ## Handle usage of old property interface = {}.tap do |o| o[:type] = end if .is_a?(Symbol) properties[accesor] = Property.create(accesor, property_name, ) properties[accesor].attach(self) end |
.type(cf_type = nil, dsl_name = nil) ⇒ Object
21 22 23 24 25 26 27 28 |
# File 'lib/convection/model/template/resource.rb', line 21 def type(cf_type = nil, dsl_name = nil) return @type if cf_type.nil? @type = cf_type @name = dsl_name || DSL::Helpers.method_name(cf_type) DSL::Template::Resource.attach_resource(@name, self) end |
Instance Method Details
#as_attribute(attr_name, attr_type = :string) ⇒ Object
349 350 351 352 353 354 |
# File 'lib/convection/model/template/resource.rb', line 349 def as_attribute(attr_name, attr_type = :string) @template.attribute_mappings[name] = { :name => attr_name, :type => attr_type } end |
#deletion_policy(deletion_policy) ⇒ Object
rubocop:disable Style/TrivialAccessors
We don't want to use an accessor (e.g. deletion_policy=) because
this is a DSL method
329 330 331 |
# File 'lib/convection/model/template/resource.rb', line 329 def deletion_policy(deletion_policy) @deletion_policy = deletion_policy end |
#depends_on(resource) ⇒ Object
322 323 324 |
# File 'lib/convection/model/template/resource.rb', line 322 def depends_on(resource) @depends_on << (resource.is_a?(Resource) ? resource.name : resource) end |
#property(key, *value) ⇒ Object
314 315 316 317 318 319 320 |
# File 'lib/convection/model/template/resource.rb', line 314 def property(key, *value) return properties[key].value if value.empty? ## Define a property instance on the fly properties[key] = ScalarPropertyInstance.new(self) unless properties.include?(key) properties[key].set(*value) end |
#reference ⇒ Object
rubocop:enable Style/TrivialAccessors
334 335 336 337 338 |
# File 'lib/convection/model/template/resource.rb', line 334 def reference { 'Ref' => name } end |
#render ⇒ Object
356 357 358 359 360 361 362 363 364 365 366 |
# File 'lib/convection/model/template/resource.rb', line 356 def render { 'Type' => type, 'Properties' => properties.map(true, &:render) }.tap do |resource| resource_attributes.map { |a| a.render resource } resource['DependsOn'] = @depends_on unless @depends_on.empty? resource['DeletionPolicy'] = @deletion_policy unless @deletion_policy.nil? render_condition(resource) end end |
#type ⇒ Object
Resource Instance Methods
286 |
# File 'lib/convection/model/template/resource.rb', line 286 attribute :type |
#with_output(output_name = name, value = reference, &block) ⇒ Object
340 341 342 343 344 345 346 347 |
# File 'lib/convection/model/template/resource.rb', line 340 def with_output(output_name = name, value = reference, &block) o = Model::Template::Output.new(output_name, @template) o.value = value o.description = "Resource #{ type }/#{ name }" o.instance_exec(&block) if block @template.outputs[output_name] = o end |