KeystoneAdmin: {protocol: 'http', port: '35357', host: 'IP_ADDRESS'}
     KeystoneInternal: {protocol: 'http', port: '5000', host: 'IP_ADDRESS'}
     KeystonePublic: {protocol: 'https', port: '13000', host: 'CLOUDNAME'}
+    MysqlInternal: {protocol: 'mysql+pymysql', port: '3306', host: 'IP_ADDRESS'}
     NeutronAdmin: {protocol: 'http', port: '9696', host: 'IP_ADDRESS'}
     NeutronInternal: {protocol: 'http', port: '9696', host: 'IP_ADDRESS'}
     NeutronPublic: {protocol: 'https', port: '13696', host: 'CLOUDNAME'}
 
     port: 9191
 
 Mysql:
-    '':
+    Internal:
         vip_param: Mysql
+    protocol: mysql+pymysql
+    port: 3306
 
 Heat:
     Internal:
 
       KeystoneAdmin: {protocol: http, port: '35357', host: IP_ADDRESS}
       KeystoneInternal: {protocol: http, port: '5000', host: IP_ADDRESS}
       KeystonePublic: {protocol: http, port: '5000', host: IP_ADDRESS}
+      MysqlInternal: {protocol: mysql+pymysql, port: '3306', host: IP_ADDRESS}
       NeutronAdmin: {protocol: http, port: '9696', host: IP_ADDRESS}
       NeutronInternal: {protocol: http, port: '9696', host: IP_ADDRESS}
       NeutronPublic: {protocol: http, port: '9696', host: IP_ADDRESS}
                   IP_ADDRESS: {get_param: PublicVirtualIP}
             - ':'
             - get_param: [EndpointMap, KeystonePublic, port]
+      MysqlInternal:
+        host:
+          str_replace:
+            template:
+              get_param: [EndpointMap, MysqlInternal, host]
+            params:
+              CLOUDNAME: {get_param: CloudName}
+              IP_ADDRESS: {get_param: MysqlVirtualIP}
+        port:
+          get_param: [EndpointMap, MysqlInternal, port]
+        protocol:
+          get_param: [EndpointMap, MysqlInternal, protocol]
+        uri:
+          list_join:
+          - ''
+          - - get_param: [EndpointMap, MysqlInternal, protocol]
+            - ://
+            - str_replace:
+                template:
+                  get_param: [EndpointMap, MysqlInternal, host]
+                params:
+                  CLOUDNAME: {get_param: CloudName}
+                  IP_ADDRESS: {get_param: MysqlVirtualIP}
+            - ':'
+            - get_param: [EndpointMap, MysqlInternal, port]
+        uri_no_suffix:
+          list_join:
+          - ''
+          - - get_param: [EndpointMap, MysqlInternal, protocol]
+            - ://
+            - str_replace:
+                template:
+                  get_param: [EndpointMap, MysqlInternal, host]
+                params:
+                  CLOUDNAME: {get_param: CloudName}
+                  IP_ADDRESS: {get_param: MysqlVirtualIP}
+            - ':'
+            - get_param: [EndpointMap, MysqlInternal, port]
       NeutronAdmin:
         host:
           str_replace:
 
 
   ControllerServiceChain:
     type: OS::TripleO::Services
+    depends_on: Networks
     properties:
       Services: {get_param: ControllerServices}
       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
-      MysqlVirtualIPUri: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
 
   Controller:
     type: OS::Heat::ResourceGroup
           NovaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
           SwiftProxyVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
           MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
-          MysqlVirtualIPUri: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
           NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
           NovaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
           SaharaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
     properties:
       Services: {get_param: ComputeServices}
       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
-      MysqlVirtualIPUri: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
 
   Compute:
     type: OS::Heat::ResourceGroup
                 '%stackname%': {get_param: 'OS::stack_name'}
           ServiceNetMap: {get_param: ServiceNetMap}
           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
-          MysqlVirtualIPUri: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
           ExtraConfig: {get_param: ExtraConfig}
           BlockStorageExtraConfig: {get_param: BlockStorageExtraConfig}
           CloudDomain: {get_param: CloudDomain}
     properties:
       Services: {get_param: CephStorageServices}
       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
-      MysqlVirtualIPUri: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
 
   CephStorage:
     type: OS::Heat::ResourceGroup
 
   GlanceApiVirtualIP:
     type: string
     default: ''
-  MysqlVirtualIPUri:
-    type: string
-    default: ''
   NetworkDeploymentActions:
     type: comma_delimited_list
     description: >
       config: {get_resource: BlockStorageConfig}
       input_values:
         debug: {get_param: Debug}
-        cinder_dsn: {list_join: ['', ['mysql+pymysql://cinder:', {get_param: CinderPassword}, '@', {get_param: MysqlVirtualIPUri} , '/cinder']]}
+        cinder_dsn:
+          list_join:
+            - ''
+            - - {get_param: [EndpointMap, MysqlInternal, protocol]}
+              - '://cinder:'
+              - {get_param: CinderPassword}
+              - '@'
+              - {get_param: [EndpointMap, MysqlInternal, host]}
+              - '/cinder'
         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
         cinder_lvm_loop_device_size:
 
   MysqlVirtualIP:
     type: string
     default: ''
-  MysqlVirtualIPUri:
-    type: string
-    default: ''
   NeutronApiVirtualIP:
     type: string
     default: ''
         cinder_dsn:
           list_join:
             - ''
-            - - 'mysql+pymysql://cinder:'
+            - - {get_param: [EndpointMap, MysqlInternal, protocol]}
+              - '://cinder:'
               - {get_param: CinderPassword}
               - '@'
-              - {get_param: MysqlVirtualIPUri}
+              - {get_param: [EndpointMap, MysqlInternal, host]}
               - '/cinder'
         cinder_public_url: {get_param: [EndpointMap, CinderPublic, uri]}
         cinder_internal_url: {get_param: [EndpointMap, CinderInternal, uri]}
         neutron_dsn:
           list_join:
             - ''
-            - - 'mysql+pymysql://neutron:'
+            - - {get_param: [EndpointMap, MysqlInternal, protocol]}
+              - '://neutron:'
               - {get_param: NeutronPassword}
               - '@'
-              - {get_param: MysqlVirtualIPUri}
+              - {get_param: [EndpointMap, MysqlInternal, host]}
               - '/ovs_neutron?charset=utf8'
         neutron_internal_url: { get_param: [ EndpointMap, NeutronInternal, uri ] }
         neutron_public_url: { get_param: [ EndpointMap, NeutronPublic, uri ] }
         ceilometer_dsn:
           list_join:
             - ''
-            - - 'mysql+pymysql://ceilometer:'
+            - - {get_param: [EndpointMap, MysqlInternal, protocol]}
+              - '://ceilometer:'
               - {get_param: CeilometerPassword}
               - '@'
-              - {get_param: MysqlVirtualIPUri}
+              - {get_param: [EndpointMap, MysqlInternal, host]}
               - '/ceilometer'
         gnocchi_dsn:
           list_join:
             - ''
-            - - 'mysql+pymysql://gnocchi:'
+            - - {get_param: [EndpointMap, MysqlInternal, protocol]}
+              - '://gnocchi:'
               - {get_param: GnocchiPassword}
               - '@'
-              - {get_param: MysqlVirtualIPUri}
+              - {get_param: [EndpointMap, MysqlInternal, host]}
               - '/gnocchi'
         gnocchi_internal_url: {get_param: [EndpointMap, GnocchiInternal, uri]}
         gnocchi_public_url: { get_param: [ EndpointMap, GnocchiPublic, uri ] }
         nova_dsn:
           list_join:
             - ''
-            - - 'mysql+pymysql://nova:'
+            - - {get_param: [EndpointMap, MysqlInternal, protocol]}
+              - '://nova:'
               - {get_param: NovaPassword}
               - '@'
-              - {get_param: MysqlVirtualIPUri}
+              - {get_param: [EndpointMap, MysqlInternal, host]}
               - '/nova'
         nova_api_dsn:
           list_join:
             - ''
-            - - 'mysql+pymysql://nova_api:'
+            - - {get_param: [EndpointMap, MysqlInternal, protocol]}
+              - '://nova_api:'
               - {get_param: NovaPassword}
               - '@'
-              - {get_param: MysqlVirtualIPUri}
+              - {get_param: [EndpointMap, MysqlInternal, host]}
               - '/nova_api'
         upgrade_level_nova_compute: {get_param: UpgradeLevelNovaCompute}
         instance_name_template: {get_param: InstanceNameTemplate}
         sahara_dsn:
           list_join:
             - ''
-            - - 'mysql://sahara:'
+            - - {get_param: [EndpointMap, MysqlInternal, protocol]}
+              - '://sahara:'
               - {get_param: SaharaPassword}
               - '@'
-              - {get_param: MysqlVirtualIPUri}
+              - {get_param: [EndpointMap, MysqlInternal, host]}
               - '/sahara'
         swift_proxy_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
         swift_management_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
 
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
-  MysqlVirtualIPUri:
-    type: string
-    default: ''
   Debug:
     default: ''
     description: Set to True to enable debugging on all services.
     description: Role data for the Glance API role.
     value:
       config_settings:
-        glance_dsn: &glance_dsn
+        glance::api::database_connection:
           list_join:
             - ''
-            - - 'mysql+pymysql://glance:'
+            - - {get_param: [EndpointMap, MysqlInternal, protocol]}
+              - '://glance:'
               - {get_param: GlancePassword}
               - '@'
-              - {get_param: MysqlVirtualIPUri}
+              - {get_param: [EndpointMap, MysqlInternal, host]}
               - '/glance'
         glance::api::bind_port: {get_param: [EndpointMap, GlanceInternal, port]}
         glance::api::auth_uri: {get_param: [EndpointMap, KeystoneInternal, uri] }
         glance::api::workers: {get_param: GlanceWorkers}
         glance_notifier_strategy: {get_param: GlanceNotifierStrategy}
         glance_log_file: {get_param: GlanceLogFile}
-        glance::api::database_connection: *glance_dsn
         glance::backend::swift::swift_store_auth_address: {get_param: [EndpointMap, KeystoneInternal, uri] }
         glance::backend::swift::swift_store_user: service:glance
         glance::backend::swift::swift_store_key: {get_param: GlancePassword}
 
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
-  MysqlVirtualIPUri:
-    type: string
-    default: ''
   Debug:
     default: ''
     description: Set to True to enable debugging on all services.
     description: Role data for the Glance Registry role.
     value:
       config_settings:
-        glance_dsn: &glance_dsn
+        glance::registry::database_connection:
           list_join:
             - ''
-            - - 'mysql+pymysql://glance:'
+            - - {get_param: [EndpointMap, MysqlInternal, protocol]}
+              - '://glance:'
               - {get_param: GlancePassword}
               - '@'
-              - {get_param: MysqlVirtualIPUri}
+              - {get_param: [EndpointMap, MysqlInternal, host]}
               - '/glance'
         glance::registry::keystone_password: {get_param: GlancePassword}
-        glance::registry::database_connection: *glance_dsn
         glance::registry::auth_uri: {get_param: [EndpointMap, KeystoneInternal, uri] }
         glance::registry::identity_uri: { get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix] }
         glance::registry::debug: {get_param: Debug}
 
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
-  MysqlVirtualIPUri:
-    type: string
-    default: ''
   HeatWorkers:
     default: 0
     description: Number of workers for Heat service.
 
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
-  MysqlVirtualIPUri:
-    type: string
-    default: ''
   HeatWorkers:
     default: 0
     description: Number of workers for Heat service.
 
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
-  MysqlVirtualIPUri:
-    type: string
-    default: ''
   HeatWorkers:
     default: 0
     description: Number of workers for Heat service.
 
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
-  MysqlVirtualIPUri:
-    type: string
-    default: ''
   HeatEnableDBPurge:
     type: boolean
     default: true
           - get_attr: [HeatBase, role_data, config_settings]
           - heat::engine::num_engine_workers: {get_param: HeatWorkers}
             tripleo::profile::base::heat::manage_db_purge: {get_param: HeatEnableDBPurge}
-            heat_dsn: &heat_dsn
+            heat::database_connection:
               list_join:
                 - ''
-                - - 'mysql+pymysql://heat:'
+                - - {get_param: [EndpointMap, MysqlInternal, protocol]}
+                  - '://heat:'
                   - {get_param: HeatPassword}
                   - '@'
-                  - {get_param: MysqlVirtualIPUri}
+                  - {get_param: [EndpointMap, MysqlInternal, host]}
                   - '/heat'
             heat::auth_uri: {get_param: [EndpointMap, KeystoneInternal, uri]}
             heat::keystone_ec2_uri: {get_param: [EndpointMap, KeystoneEC2, uri]}
             heat::identity_uri: {get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix]}
             heat::keystone_password: {get_param: HeatPassword}
-            heat::database_connection: *heat_dsn
             heat::db::mysql::password: {get_param: HeatPassword}
             heat::keystone::domain::domain_password: {get_param: HeatStackDomainAdminPassword}
       step_config: |
 
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
-  MysqlVirtualIPUri:
-    type: string
-    default: ''
   Debug:
     type: string
     default: ''
     description: Role data for the Keystone role.
     value:
       config_settings:
-        keystone_dsn: &keystone_dsn
+        keystone::database_connection:
           list_join:
             - ''
-            - - 'mysql+pymysql://keystone:'
+            - - {get_param: [EndpointMap, MysqlInternal, protocol]}
+              - '://keystone:'
               - {get_param: AdminToken}
               - '@'
-              - {get_param: MysqlVirtualIPUri}
+              - {get_param: [EndpointMap, MysqlInternal, host]}
               - '/keystone'
-        keystone::database_connection: *keystone_dsn
         keystone::admin_token: {get_param: AdminToken}
         keystone::roles::admin::password: {get_param: AdminPassword}
         keystone_ca_certificate: {get_param: KeystoneCACertificate}
 
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
-  MysqlVirtualIPUri:
-    type: string
-    default: ''
 
 outputs:
   role_data:
 
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
-  MysqlVirtualIPUri:
-    type: string
-    default: ''
 
 outputs:
   role_data:
       config_settings:
       step_config: |
         include ::tripleo::profile::base::memcached
-
 
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
-  MysqlVirtualIPUri:
-    type: string
-    default: ''
   NeutronEnableIsolatedMetadata:
     default: 'False'
     description: If True, DHCP provide metadata route to VM.
 
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
-  MysqlVirtualIPUri:
-    type: string
-    default: ''
   Debug:
     type: string
     default: ''
 
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
-  MysqlVirtualIPUri:
-    type: string
-    default: ''
   NeutronMetadataProxySharedSecret:
     description: Shared secret to prevent spoofing
     type: string
 
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
-  MysqlVirtualIPUri:
-    type: string
-    default: ''
   GlanceFilePcmkDevice:
     default: ''
     description: >
     type: ../glance-api.yaml
     properties:
       EndpointMap: {get_param: EndpointMap}
-      MysqlVirtualIPUri: {get_param: MysqlVirtualIPUri}
 
 outputs:
   role_data:
 
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
-  MysqlVirtualIPUri:
-    type: string
-    default: ''
 
 resources:
 
     type: ../glance-registry.yaml
     properties:
       EndpointMap: {get_param: EndpointMap}
-      MysqlVirtualIPUri: {get_param: MysqlVirtualIPUri}
 
 outputs:
   role_data:
 
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
-  MysqlVirtualIPUri:
-    type: string
-    default: ''
 
 resources:
   HeatApiCfnBase:
     type: ../heat-api-cfn.yaml
     properties:
       EndpointMap: {get_param: EndpointMap}
-      MysqlVirtualIPUri: {get_param: MysqlVirtualIPUri}
 
 outputs:
   role_data:
 
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
-  MysqlVirtualIPUri:
-    type: string
-    default: ''
 
 resources:
   HeatApiCloudwatchBase:
     type: ../heat-api-cloudwatch.yaml
     properties:
       EndpointMap: {get_param: EndpointMap}
-      MysqlVirtualIPUri: {get_param: MysqlVirtualIPUri}
 
 outputs:
   role_data:
 
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
-  MysqlVirtualIPUri:
-    type: string
-    default: ''
 
 resources:
   HeatApiBase:
     type: ../heat-api.yaml
     properties:
       EndpointMap: {get_param: EndpointMap}
-      MysqlVirtualIPUri: {get_param: MysqlVirtualIPUri}
 
 outputs:
   role_data:
 
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
-  MysqlVirtualIPUri:
-    type: string
-    default: ''
 
 resources:
   HeatEngineBase:
     type: ../heat-engine.yaml
     properties:
       EndpointMap: {get_param: EndpointMap}
-      MysqlVirtualIPUri: {get_param: MysqlVirtualIPUri}
 
 
 outputs:
 
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
-  MysqlVirtualIPUri:
-    type: string
-    default: ''
 
 resources:
 
     type: ../keystone.yaml
     properties:
       EndpointMap: {get_param: EndpointMap}
-      MysqlVirtualIPUri: {get_param: MysqlVirtualIPUri}
 
 outputs:
   role_data:
 
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
-  MysqlVirtualIPUri:
-    type: string
-    default: ''
 
 resources:
   LoadbalancerServiceBase:
     type: ../loadbalancer.yaml
     properties:
       EndpointMap: {get_param: EndpointMap}
-      MysqlVirtualIPUri: {get_param: MysqlVirtualIPUri}
 
 outputs:
   role_data:
 
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
-  MysqlVirtualIPUri:
-    type: string
-    default: ''
 
 resources:
 
           - memcached::service_manage: false
       step_config: |
         include ::tripleo::profile::pacemaker::memcached
-
 
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
-  MysqlVirtualIPUri:
-    type: string
-    default: ''
 
 resources:
 
     type: ../neutron-dhcp.yaml
     properties:
       EndpointMap: {get_param: EndpointMap}
-      MysqlVirtualIPUri: {get_param: MysqlVirtualIPUri}
 
 outputs:
   role_data:
 
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
-  MysqlVirtualIPUri:
-    type: string
-    default: ''
 
 resources:
 
     type: ../neutron-l3.yaml
     properties:
       EndpointMap: {get_param: EndpointMap}
-      MysqlVirtualIPUri: {get_param: MysqlVirtualIPUri}
 
 outputs:
   role_data:
 
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
-  MysqlVirtualIPUri:
-    type: string
-    default: ''
 
 resources:
 
     type: ../neutron-metadata.yaml
     properties:
       EndpointMap: {get_param: EndpointMap}
-      MysqlVirtualIPUri: {get_param: MysqlVirtualIPUri}
 
 outputs:
   role_data:
 
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
-  MysqlVirtualIPUri:
-    type: string
-    default: ''
 
 resources:
   RabbitMQServiceBase:
     type: ../rabbitmq.yaml
     properties:
       EndpointMap: {get_param: EndpointMap}
-      MysqlVirtualIPUri: {get_param: MysqlVirtualIPUri}
 
 outputs:
   role_data:
 
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
-  MysqlVirtualIPUri:
-    type: string
-    default: ''
   RabbitUserName:
     default: guest
     description: The username for RabbitMQ
 
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
-  MysqlVirtualIPUri:
-    default: ''
-    type: string
-    description: The URI virtual IP for the MySQL service.
 
 resources:
 
       concurrent: true
       resource_properties:
         EndpointMap: {get_param: EndpointMap}
-        MysqlVirtualIPUri: {get_param: MysqlVirtualIPUri}
 
 outputs:
   config_settings: