本文整理汇总了Python中template.Template.add_resource方法的典型用法代码示例。如果您正苦于以下问题:Python Template.add_resource方法的具体用法?Python Template.add_resource怎么用?Python Template.add_resource使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类template.Template
的用法示例。
在下文中一共展示了Template.add_resource方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: EnvironmentBase
# 需要导入模块: from template import Template [as 别名]
# 或者: from template.Template import add_resource [as 别名]
#.........这里部分代码省略.........
MinLength=9,
MaxLength=18,
AllowedPattern=res.get_str('cidr_regex'),
ConstraintDescription=res.get_str('cidr_regex_message')))
def to_json(self):
'''
Centralized method for managing outputting this template with a timestamp identifying when it was generated and for creating a SHA256 hash representing the template for validation purposes
'''
return self.template.to_template_json()
def add_common_params_to_child_template(self, template):
az_count = self.config['network']['az_count']
subnet_types = self.config['network']['subnet_types']
template.add_common_parameters(subnet_types, az_count)
template.add_parameter_idempotent(Parameter(
'ec2Key',
Type='String',
Default=self.config.get('template').get('ec2_key_default', 'default-key'),
Description='Name of an existing EC2 KeyPair to enable SSH access to the instances',
AllowedPattern=res.get_str('ec2_key'),
MinLength=1,
MaxLength=255,
ConstraintDescription=res.get_str('ec2_key_message')))
def add_child_template(self,
template,
s3_bucket=None,
s3_key_prefix=None,
s3_canned_acl=None,
depends_on=[]):
'''
Method adds a child template to this object's template and binds the child template parameters to properties, resources and other stack outputs
@param name [str] name of this template for key naming in s3
@param template [Troposphere.Template] Troposphere Template object to add as a child to this object's template
@param template_args [dict] key-value pair of configuration values for templates to apply to this operation
@param s3_bucket [str] name of the bucket to upload keys to - will default to value in template_args if not present
@param s3_key_prefix [str] s3 key name prefix to prepend to s3 key path - will default to value in template_args if not present
@param s3_canned_acl [str] name of the s3 canned acl to apply to templates uploaded to S3 - will default to value in template_args if not present
'''
name = template.name
self.add_common_params_to_child_template(template)
self.load_ami_cache(template)
template.build_hook()
if s3_key_prefix == None:
s3_key_prefix = self.template_args.get('s3_key_name_prefix', '')
if s3_bucket is None:
s3_bucket = self.template_args.get('s3_bucket')
stack_url = template.upload_template(
s3_bucket,
upload_key_name=name,
s3_key_prefix=s3_key_prefix,
s3_canned_acl=self.template_args.get('s3_canned_acl', 'public-read'),
mock_upload=self.template_args.get('mock_upload', False))
if name not in self.stack_outputs:
self.stack_outputs[name] = []
stack_params = {}
for parameter in template.parameters.keys():
# Manual parameter bindings single-namespace
if parameter in self.manual_parameter_bindings:
stack_params[parameter] = self.manual_parameter_bindings[parameter]
# Naming scheme for identifying the AZ of a subnet (not sure if this is even used anywhere)
elif parameter.startswith('availabilityZone'):
stack_params[parameter] = GetAtt('privateSubnet' + parameter.replace('availabilityZone',''), 'AvailabilityZone')
# Match any child stack parameters that have the same name as this stacks **parameters**
elif parameter in self.template.parameters.keys():
stack_params[parameter] = Ref(self.template.parameters.get(parameter))
# Match any child stack parameters that have the same name as this stacks **resources**
elif parameter in self.template.resources.keys():
stack_params[parameter] = Ref(self.template.resources.get(parameter))
# Match any child stack parameters that have the same name as this stacks **outputs**
# TODO: Does this even work? Child runs after parent completes?
elif parameter in self.stack_outputs:
stack_params[parameter] = GetAtt(self.stack_outputs[parameter], 'Outputs.' + parameter)
# Finally if nothing else matches copy the child templates parameter to this template's parameter list
# so the value will pass through this stack down to the child.
else:
stack_params[parameter] = Ref(self.template.add_parameter(template.parameters[parameter]))
stack_name = name + 'Stack'
stack_obj = cf.Stack(
stack_name,
TemplateURL=stack_url,
Parameters=stack_params,
TimeoutInMinutes=self.template_args.get('timeout_in_minutes', '60'),
DependsOn=depends_on)
return self.template.add_resource(stack_obj)
示例2: EnvironmentBase
# 需要导入模块: from template import Template [as 别名]
# 或者: from template.Template import add_resource [as 别名]
#.........这里部分代码省略.........
@param template_upload_acl [str] name of the s3 canned acl to apply to templates uploaded to S3 - will default to value in template_args if not present
"""
name = template.name
self.add_common_params_to_child_template(template)
template.load_ami_cache()
template.build_hook()
stack_url = self.upload_template(
template,
template_bucket=template_bucket,
s3_template_prefix=s3_template_prefix,
template_upload_acl=template_upload_acl)
if name not in self.stack_outputs:
self.stack_outputs[name] = []
stack_params = {}
for parameter in template.parameters.keys():
# Manual parameter bindings single-namespace
if parameter in self.manual_parameter_bindings:
stack_params[parameter] = self.manual_parameter_bindings[parameter]
# Naming scheme for identifying the AZ of a subnet (not sure if this is even used anywhere)
elif parameter.startswith('availabilityZone'):
stack_params[parameter] = GetAtt('privateSubnet' + parameter.replace('availabilityZone', ''), 'AvailabilityZone')
# Match any child stack parameters that have the same name as this stacks **parameters**
elif parameter in self.template.parameters.keys():
stack_params[parameter] = Ref(self.template.parameters.get(parameter))
# Match any child stack parameters that have the same name as this stacks **resources**
elif parameter in self.template.resources.keys():
stack_params[parameter] = Ref(self.template.resources.get(parameter))
# Match any child stack parameters that have the same name as this stacks **outputs**
# TODO: Does this even work? Child runs after parent completes?
elif parameter in self.stack_outputs:
stack_params[parameter] = GetAtt(self.stack_outputs[parameter], 'Outputs.' + parameter)
# Finally if nothing else matches copy the child templates parameter to this template's parameter list
# so the value will pass through this stack down to the child.
else:
stack_params[parameter] = Ref(self.template.add_parameter(template.parameters[parameter]))
stack_name = name + 'Stack'
stack_obj = cf.Stack(
stack_name,
TemplateURL=stack_url,
Parameters=stack_params,
TimeoutInMinutes=self.template_args.get('timeout_in_minutes', '60'),
DependsOn=depends_on)
return self.template.add_resource(stack_obj)
def upload_template(self,
template,
template_bucket=None,
s3_template_prefix=None,
template_upload_acl=None):
"""
Upload helper to upload this template to S3 for consumption by other templates or end users.
@param template [Template] object to be uploaded to s3.
@param template_bucket [string] name of the AWS S3 bucket to upload this template to.
@param s3_template_prefix [string] key name prefix to prepend to the key name for the upload of this template.
@param template_upload_acl [string] S3 canned ACL string value to use when setting permissions on uploaded key.
"""
key_serial = str(int(time.time()))
if s3_template_prefix is None:
s3_template_prefix = self.template_args.get("s3_template_prefix")
if template_bucket is None:
template_bucket = self.template_args.get('template_bucket')
if template_upload_acl is None:
template_upload_acl = self.template_args.get('template_upload_acl')
template_name = "%s.%s.template" % (template.name, key_serial)
s3_path = "%s/%s" % (s3_template_prefix, template_name)
local_path = self._ensure_template_dir_exists(template_name)
if self.config['global']['print_debug']:
print 'Saving copy of %s to %s' % (template.name, local_path)
with open(local_path, 'w') as f:
f.write(template.to_json())
s3 = utility.get_boto_resource(self.config, 's3')
s3.Bucket(template_bucket).put_object(
Key=s3_path,
Body=template.to_json(),
ACL=template_upload_acl
)
stack_url = 'https://%s.s3.amazonaws.com/%s' % (template_bucket, s3_path)
return stack_url