Mind to check that you are using latest master?? If not, tell me which branch are you using to test it. Working for me (latest master), I ran these steps: cd mkdir firstboot cat > firstboot/one_two.yaml << EOF heat_template_version: 2014-10-16 resources: userdata: type: OS::Heat::MultipartMime properties: parts: - config: {get_resource: one_config} - config: {get_resource: two_config} one_config: type: OS::Heat::SoftwareConfig properties: config: | #!/bin/bash echo "one" > /tmp/one two_config: type: OS::Heat::SoftwareConfig properties: config: | #!/bin/bash echo "two" > /tmp/two outputs: OS::stack_id: value: {get_resource: userdata} EOF cd cat > firstboot/userdata_env.yaml << EOF resource_registry: OS::TripleO::NodeUserData: one_two.yaml EOF #Deploy the overcloud as: openstack overcloud deploy \ --libvirt-type qemu \ --ntp-server pool.ntp.org \ --templates /home/stack/tripleo-heat-templates \ -e /home/stack/firstboot/userdata_env.yaml ### Also with your example: cd cat > firstboot/first_boot_update_hook.yaml << EOF heat_template_version: 2014-10-16 resources: userdata: type: OS::Heat::MultipartMime properties: parts: - config: {get_resource: update} update: type: OS::Heat::SoftwareConfig properties: config: | #!/bin/bash yum update -y outputs: OS::stack_id: value: {get_resource: userdata} EOF cd cat > firstboot/first_boot_env.yaml << EOF resource_registry: OS::TripleO::NodeUserData: first_boot_update_hook.yaml EOF #Deploy the overcloud as: openstack overcloud deploy \ --libvirt-type qemu \ --ntp-server pool.ntp.org \ --templates /home/stack/tripleo-heat-templates \ -e /home/stack/firstboot/first_boot_env.yaml #Both examples working and running in latest master. Some logs.. [stack@instack ~]$ heat stack-list WARNING (shell) "heat stack-list" is deprecated, please use "openstack stack list" instead +----+------------+--------------+---------------+--------------+ | id | stack_name | stack_status | creation_time | updated_time | +----+------------+--------------+---------------+--------------+ +----+------------+--------------+---------------+--------------+ [stack@instack ~]$ openstack overcloud deploy \ > --libvirt-type qemu \ > --ntp-server pool.ntp.org \ > --templates /home/stack/tripleo-heat-templates \ > -e /home/stack/firstboot/first_boot_env.yaml Removing the current plan files Uploading new plan files Started Mistral Workflow tripleo.plan_management.v1.update_deployment_plan. Execution ID: 1a3863f4-38c2-40b1-ada5-cf7292ca2a76 Plan updated Deploying templates in the directory /tmp/tripleoclient-QYqpWY/tripleo-heat-templates Started Mistral Workflow tripleo.deployment.v1.deploy_plan. Execution ID: b62e6757-a79f-4ef1-8b86-c2ae7d030cc6 2016-11-24 11:03:28Z [overcloud]: CREATE_IN_PROGRESS Stack CREATE started 2016-11-24 11:03:28Z [overcloud.MysqlRootPassword]: CREATE_IN_PROGRESS state changed 2016-11-24 11:03:28Z [overcloud.PcsdPassword]: CREATE_IN_PROGRESS state changed 2016-11-24 11:03:28Z [overcloud.RabbitCookie]: CREATE_IN_PROGRESS state changed . . .