+++
title = "Using stack and launch outputs"
weight = 386
home_region = "eu-west-1"
+++
---
## What are we going to do?
This tutorial will walk you through how to use the "{{% param title %}}" feature.
We will assume you have:
- installed Service Catalog Puppet correctly
- bootstrapped a spoke
- created a manifest file
- added an account to the manifest file
We will assume you are comfortable:
- making changes your portfolios files
- making changes your manifest file
- provisioning stacks
- provisioning products / launches
## Step by step guide
Here are the steps you need to follow to "{{% param title %}}"
### Things to note, before we start
- The cloudformation_stack_output feature was added in version 0.150.0 of Service Catalog Puppet. You will need to be using this version (or later)
- The servicecatalog_provisioned_product_output feature was added in version 0.160.0 of Service Catalog Puppet. You will need to be using this version (or later)
### Provision a stack with some outputs
In order to use a stack output you must first provision a stack that provides the output. Here is an example of such a
template:
{{< highlight js >}}
Parameters:
CidrBlock:
Type: String
Name:
Type: String
Resources:
VPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: !Ref CidrBlock
EnableDnsHostnames: True
EnableDnsSupport: True
Tags:
- Key: Name
Value: !Ref Name
Outputs:
VpcId:
Value: !Ref VPC
Description: Output VPC ID for utilisation by dependent product
VpcCidrBlock:
Value: !GetAtt VPC.CidrBlock
{{< / highlight >}}
Here we are provisioning a stack that outputs VpcId as an output.
### Provisioning a stack that depends on the initial stack, which consumes stack outputs
Once you have provisioned the stack that provides the output you will need to define a stack that uses the output:
{{< highlight js >}}
Parameters:
CidrBlock:
Type: String
VpcId:
Type: String
Resources:
Subnet:
Type: AWS::EC2::Subnet
Properties:
CidrBlock: !Select [ 0, !Cidr [ !Ref CidrBlock, 6, 5 ]]
AvailabilityZone: !Select
- 0
- Fn::GetAZs: !Ref "AWS::Region"
Tags:
- Key: Name
Value: "Example-Subnet-AZ1"
VpcId: !Ref VpcId
{{< / highlight >}}
Here we are defining a stack that uses VpcId as a parameter.
### Provision a stack using Service Catalog Puppet
_Now we are ready to provision the stack using the manifest file._
To use the output from one stack as a parameter for another you can use the following syntax:
{{< highlight js >}}
stacks:
example-subnet:
name: example-subnet
version: v1
depends_on:
- example-vpc
parameters:
CidrBlock:
cloudformation_stack_output:
account_id: ${AWS::AccountId}
region: ${AWS::Region}
stack_name: example-vpc
output_key: VpcCidrBlock
VpcId:
cloudformation_stack_output:
account_id: ${AWS::AccountId}
region: ${AWS::Region}
stack_name: example-vpc
output_key: VpcId
deploy_to:
tags:
- tag: type:prod
regions: regions_enabled
{{< / highlight >}}
In this example we are reading VpcCidrBlock and VpcId from the stack named example-vpc when provisioning the stack named
example-subnet.
### Working with ServiceCatalog Provisioned product outputs
If you would like to obtain the output of a provisioned product deployment, it is possible to call
the `servicecatalog_provisioned_product_output` method to obtain stack outputs. In the example below we are calling from
the output of a launch called 'example-vpc'
{{< highlight js >}}
stacks:
example-subnet:
name: example-subnet
version: v1
depends_on:
- example-vpc
parameters:
CidrBlock:
servicecatalog_provisioned_product_output:
account_id: ${AWS::AccountId}
region: ${AWS::Region}
provisioned_product_name: example-vpc
output_key: VpcCidrBlock
VpcId:
servicecatalog_provisioned_product_output:
account_id: ${AWS::AccountId}
region: ${AWS::Region}
provisioned_product_name: example-vpc
output_key: VpcId
deploy_to:
tags:
- tag: type:prod
regions: regions_enabled
{{< / highlight >}}