heat_template_version: 2014-10-16 parameters: key_name: type: string flavor: type: string image: type: string network: type: string signal_transport: type: string default: CFN_SIGNAL software_config_transport: type: string default: POLL_SERVER_CFN dep1_foo: default: fooooo type: string dep1_bar: default: baaaaa type: string dep2a_bar: type: string default: barrr dep3_foo: default: fo type: string dep3_bar: default: ba type: string resources: the_sg: type: OS::Neutron::SecurityGroup properties: name: the_sg description: Ping and SSH rules: - protocol: icmp - protocol: tcp port_range_min: 22 port_range_max: 22 cfg1: type: OS::Heat::SoftwareConfig properties: group: script inputs: - name: foo - name: bar outputs: - name: result config: {get_file: cfg1.sh} cfg2a: type: OS::Heat::StructuredConfig properties: group: cfn-init inputs: - name: bar config: config: files: /tmp/cfn-init-foo: content: get_input: bar mode: '000644' cfg2b: type: OS::Heat::SoftwareConfig properties: group: script outputs: - name: result config: | #!/bin/sh echo -n "The file /tmp/cfn-init-foo contains `cat /tmp/cfn-init-foo` for server $deploy_server_id during $deploy_action" > $heat_outputs_path.result cfg3: type: OS::Heat::SoftwareConfig properties: group: puppet inputs: - name: foo - name: bar outputs: - name: result config: {get_file: cfg3.pp} dep1: type: OS::Heat::SoftwareDeployment properties: config: get_resource: cfg1 server: get_resource: server input_values: foo: {get_param: dep1_foo} bar: {get_param: dep1_bar} signal_transport: {get_param: signal_transport} dep2a: type: OS::Heat::StructuredDeployment properties: name: 10_dep2a signal_transport: NO_SIGNAL config: get_resource: cfg2a server: get_resource: server input_values: bar: {get_param: dep2a_bar} dep2b: type: OS::Heat::SoftwareDeployment properties: name: 20_dep2b config: get_resource: cfg2b server: get_resource: server signal_transport: {get_param: signal_transport} dep3: type: OS::Heat::SoftwareDeployment properties: config: get_resource: cfg3 server: get_resource: server input_values: foo: {get_param: dep3_foo} bar: {get_param: dep3_bar} signal_transport: {get_param: signal_transport} cfg_user_data: type: Heat::InstallConfigAgent server: type: OS::Nova::Server properties: image: {get_param: image} flavor: {get_param: flavor} key_name: {get_param: key_name} security_groups: - {get_resource: the_sg} networks: - network: {get_param: network} user_data_format: SOFTWARE_CONFIG software_config_transport: {get_param: software_config_transport} user_data: {get_attr: [cfg_user_data, config]} outputs: res1: value: result: {get_attr: [dep1, result]} stdout: {get_attr: [dep1, deploy_stdout]} stderr: {get_attr: [dep1, deploy_stderr]} status_code: {get_attr: [dep1, deploy_status_code]} res2: value: result: {get_attr: [dep2b, result]} stdout: {get_attr: [dep2b, deploy_stdout]} stderr: {get_attr: [dep2b, deploy_stderr]} status_code: {get_attr: [dep2b, deploy_status_code]} res3: value: result: {get_attr: [dep3, result]} stdout: {get_attr: [dep3, deploy_stdout]} stderr: {get_attr: [dep3, deploy_stderr]} status_code: {get_attr: [dep3, deploy_status_code]}