diff --git a/environments/undercloud.yaml b/environments/undercloud.yaml
index cd50cdda4c..e15c2111fe 100644
--- a/environments/undercloud.yaml
+++ b/environments/undercloud.yaml
@@ -19,6 +19,7 @@ parameter_defaults:
   HeatConvergenceEngine: false
   HeatMaxResourcesPerStack: -1
   HeatMaxJsonBodySize: 2097152
+  IronicDefaultResourceClass: 'baremetal'
   IronicEnabledHardwareTypes: ['ipmi', 'redfish', 'idrac', 'ilo']
   IronicEnabledBootInterfaces: ['pxe', 'ilo-pxe']
   IronicEnabledConsoleInterfaces: ['ipmitool-socat', 'ilo', 'no-console']
diff --git a/puppet/services/ironic-base.yaml b/puppet/services/ironic-base.yaml
index 28c7a73f3a..cd89da939c 100644
--- a/puppet/services/ironic-base.yaml
+++ b/puppet/services/ironic-base.yaml
@@ -40,6 +40,10 @@ parameters:
     type: string
     constraints:
       - allowed_values: [ '', 'true', 'True', 'TRUE', 'false', 'False', 'FALSE']
+  IronicDefaultResourceClass:
+    default: ''
+    description: Default resource class to use for new nodes.
+    type: string
   IronicPassword:
     description: The password for the Ironic service and db account, used by the Ironic services
     type: string
@@ -65,6 +69,7 @@ parameters:
 
 conditions:
   service_debug_unset: {equals : [{get_param: IronicDebug}, '']}
+  default_rsc_unset: {equals : [{get_param: IronicDefaultResourceClass}, '']}
 
 outputs:
   role_data:
@@ -72,24 +77,31 @@ outputs:
     value:
       service_name: ironic_base
       config_settings:
-        ironic::database_connection:
-          make_url:
-            scheme: {get_param: [EndpointMap, MysqlInternal, protocol]}
-            username: ironic
-            password: {get_param: IronicPassword}
-            host: {get_param: [EndpointMap, MysqlInternal, host]}
-            path: /ironic
-            query:
-              read_default_file: /etc/my.cnf.d/tripleo.cnf
-              read_default_group: tripleo
-        ironic::debug:
+        map_merge:
+        -
+          ironic::database_connection:
+            make_url:
+              scheme: {get_param: [EndpointMap, MysqlInternal, protocol]}
+              username: ironic
+              password: {get_param: IronicPassword}
+              host: {get_param: [EndpointMap, MysqlInternal, host]}
+              path: /ironic
+              query:
+                read_default_file: /etc/my.cnf.d/tripleo.cnf
+                read_default_group: tripleo
+          ironic::debug:
+            if:
+            - service_debug_unset
+            - {get_param: Debug }
+            - {get_param: IronicDebug }
+          ironic::rabbit_userid: {get_param: RabbitUserName}
+          ironic::rabbit_password: {get_param: RabbitPassword}
+          ironic::rabbit_port: {get_param: RabbitClientPort}
+          ironic::rabbit_use_ssl: {get_param: RabbitClientUseSSL}
+        -
           if:
-          - service_debug_unset
-          - {get_param: Debug }
-          - {get_param: IronicDebug }
-        ironic::rabbit_userid: {get_param: RabbitUserName}
-        ironic::rabbit_password: {get_param: RabbitPassword}
-        ironic::rabbit_port: {get_param: RabbitClientPort}
-        ironic::rabbit_use_ssl: {get_param: RabbitClientUseSSL}
+          - default_rsc_unset
+          - {}
+          - ironic::default_resource_class: {get_param: IronicDefaultResourceClass}
       step_config: |
         include ::tripleo::profile::base::ironic