Drive DB initialization via Hiera
authorDan Prince <dprince@redhat.com>
Mon, 20 Jul 2015 11:56:26 +0000 (07:56 -0400)
committerDan Prince <dprince@redhat.com>
Tue, 21 Jul 2015 12:36:39 +0000 (08:36 -0400)
This patch moves most of the ::db::mysql parameter initialization
into a new database.yaml Hiera file. This cleans up the
controller manifests and allows us to define things in a single
location across the two implementations (HA and nonHA).

Change-Id: I895b753b329097a96a6c6f3a03a5fcebefe32dd4

puppet/controller-puppet.yaml
puppet/hieradata/database.yaml [new file with mode: 0644]
puppet/manifests/overcloud_controller.pp
puppet/manifests/overcloud_controller_pacemaker.pp

index 1271ca9..629fe03 100644 (file)
@@ -822,6 +822,7 @@ resources:
         redis_vip: {get_param: RedisVirtualIP}
         memcached_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
         mysql_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
+        mysql_virtual_ip: {get_param: MysqlVirtualIP}
         ceph_cluster_network: {get_attr: [NetIpSubnetMap, net_ip_map, {get_param: [ServiceNetMap, CephClusterNetwork]}]}
         ceph_public_network: {get_attr: [NetIpSubnetMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
         ceph_public_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
@@ -838,6 +839,7 @@ resources:
             - controller_extraconfig
             - extraconfig
             - controller
+            - database
             - object
             - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
             - ceph_cluster # provided by CephClusterConfig
@@ -861,6 +863,8 @@ resources:
                 ceph::profile::params::cluster_network: {get_input: ceph_cluster_network}
                 ceph::profile::params::public_network: {get_input: ceph_public_network}
                 ceph::mon::public_addr: {get_input: ceph_public_ip}
+            database:
+              raw_data: {get_file: hieradata/database.yaml}
             object:
               raw_data: {get_file: hieradata/object.yaml}
             controller:
@@ -907,6 +911,7 @@ resources:
                 cinder_enable_iscsi_backend: {get_input: cinder_enable_iscsi_backend}
                 cinder::glance::glance_api_servers: {get_input: glance_api_servers}
                 cinder_backend_config: {get_input: CinderBackendConfig}
+                cinder::db::mysql::password: {get_input: cinder_password}
 
                 # Glance
                 glance::api::bind_port: {get_input: glance_port}
@@ -930,6 +935,7 @@ resources:
                 glance::backend::swift::swift_store_user: service:glance
                 glance::backend::swift::swift_store_key: {get_input: glance_password}
                 glance_backend: {get_input: glance_backend}
+                glance::db::mysql::password: {get_input: glance_password}
 
                 # Heat
                 heat_stack_domain_admin_password: {get_input: heat_stack_domain_admin_password}
@@ -951,6 +957,7 @@ resources:
                 heat::database_connection: {get_input: heat_dsn}
                 heat::instance_user: heat-admin
                 heat::debug: {get_input: debug}
+                heat::db::mysql::password: {get_input: heat_password}
 
                 # Keystone
                 keystone::admin_token: {get_input: admin_token}
@@ -963,6 +970,7 @@ resources:
                 keystone::public_bind_host: {get_input: keystone_public_api_network}
                 keystone::admin_bind_host: {get_input: keystone_admin_api_network}
                 keystone::debug: {get_input: debug}
+                keystone::db::mysql::password: {get_input: admin_token}
                 # MongoDB
                 mongodb::server::bind_ip: {get_input: mongo_db_network}
                 mongodb::server::nojournal: {get_input: mongodb_no_journal}
@@ -976,6 +984,7 @@ resources:
                 mysql::server::root_password: {get_input: mysql_root_password}
                 mysql_cluster_name: {get_input: mysql_cluster_name}
                 mysql_bind_host: {get_input: mysql_network}
+                mysql_virtual_ip: {get_input: mysql_virtual_ip}
 
                 # Neutron
                 neutron::bind_host: {get_input: neutron_api_network}
@@ -1014,6 +1023,7 @@ resources:
                 neutron_dnsmasq_options: {get_input: neutron_dnsmasq_options}
                 neutron_dsn: {get_input: neutron_dsn}
                 neutron::agents::metadata::auth_url: {get_input: keystone_identity_uri}
+                neutron::db::mysql::password: {get_input: neutron_password}
 
                 # Ceilometer
                 ceilometer_backend: {get_input: ceilometer_backend}
@@ -1031,6 +1041,7 @@ resources:
                 ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
                 ceilometer::agent::auth::auth_url: {get_input: keystone_auth_address}
                 ceilometer::agent::central::coordination_url: {get_input: ceilometer_coordination_url}
+                ceilometer::db::mysql::password: {get_input: ceilometer_password}
                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
 
@@ -1052,6 +1063,7 @@ resources:
                 nova::network::neutron::neutron_url: {get_input: neutron_url}
                 nova::network::neutron::neutron_admin_auth_url: {get_input: neutron_admin_auth_url}
                 nova::vncproxy::host: {get_input: nova_api_network}
+                nova::db::mysql::password: {get_input: nova_password}
 
                 # Horizon
                 apache::ip: {get_input: horizon_network}
diff --git a/puppet/hieradata/database.yaml b/puppet/hieradata/database.yaml
new file mode 100644 (file)
index 0000000..7e925d9
--- /dev/null
@@ -0,0 +1,55 @@
+# Nova
+nova::db::mysql::user: nova
+nova::db::mysql::host: "%{hiera('mysql_virtual_ip')}"
+nova::db::mysql::dbname: nova
+nova::db::mysql::allowed_hosts:
+  - '%'
+  - "%{hiera('mysql_bind_host')}"
+
+# Glance
+glance::db::mysql::user: glance
+glance::db::mysql::host: "%{hiera('mysql_virtual_ip')}"
+glance::db::mysql::dbname: glance
+glance::db::mysql::allowed_hosts:
+  - '%'
+  - "%{hiera('mysql_bind_host')}"
+
+# Keystone
+keystone::db::mysql::user: keystone
+keystone::db::mysql::host: "%{hiera('mysql_virtual_ip')}"
+keystone::db::mysql::dbname: keystone
+keystone::db::mysql::allowed_hosts:
+  - '%'
+  - "%{hiera('mysql_bind_host')}"
+
+# Neutron
+neutron::db::mysql::user: neutron
+neutron::db::mysql::host: "%{hiera('mysql_virtual_ip')}"
+neutron::db::mysql::dbname: ovs_neutron
+neutron::db::mysql::allowed_hosts:
+  - '%'
+  - "%{hiera('mysql_bind_host')}"
+
+# Cinder
+cinder::db::mysql::user: cinder
+cinder::db::mysql::host: "%{hiera('mysql_virtual_ip')}"
+cinder::db::mysql::dbname: cinder
+cinder::db::mysql::allowed_hosts:
+  - '%'
+  - "%{hiera('mysql_bind_host')}"
+
+# Heat
+heat::db::mysql::user: heat
+heat::db::mysql::host: "%{hiera('mysql_virtual_ip')}"
+heat::db::mysql::dbname: heat
+heat::db::mysql::allowed_hosts:
+  - '%'
+  - "%{hiera('mysql_bind_host')}"
+
+# Ceilometer
+ceilometer::db::mysql::user: ceilometer
+ceilometer::db::mysql::host: "%{hiera('mysql_virtual_ip')}"
+ceilometer::db::mysql::dbname: ceilometer
+ceilometer::db::mysql::allowed_hosts:
+  - '%'
+  - "%{hiera('mysql_bind_host')}"
index c9ff86c..0b23a63 100644 (file)
@@ -89,65 +89,14 @@ if hiera('step') >= 2 {
 
   # FIXME: this should only occur on the bootstrap host (ditto for db syncs)
   # Create all the database schemas
-  # Example DSN format: mysql://user:password@host/dbname
-  $allowed_hosts = ['%',hiera('mysql_bind_host')]
-  $keystone_dsn = split(hiera('keystone::database_connection'), '[@:/?]')
-  class { 'keystone::db::mysql':
-    user          => $keystone_dsn[3],
-    password      => $keystone_dsn[4],
-    host          => $keystone_dsn[5],
-    dbname        => $keystone_dsn[6],
-    allowed_hosts => $allowed_hosts,
-  }
-  $glance_dsn = split(hiera('glance::api::database_connection'), '[@:/?]')
-  class { 'glance::db::mysql':
-    user          => $glance_dsn[3],
-    password      => $glance_dsn[4],
-    host          => $glance_dsn[5],
-    dbname        => $glance_dsn[6],
-    allowed_hosts => $allowed_hosts,
-  }
-  $nova_dsn = split(hiera('nova::database_connection'), '[@:/?]')
-  class { 'nova::db::mysql':
-    user          => $nova_dsn[3],
-    password      => $nova_dsn[4],
-    host          => $nova_dsn[5],
-    dbname        => $nova_dsn[6],
-    allowed_hosts => $allowed_hosts,
-  }
-  $neutron_dsn = split(hiera('neutron::server::database_connection'), '[@:/?]')
-  class { 'neutron::db::mysql':
-    user          => $neutron_dsn[3],
-    password      => $neutron_dsn[4],
-    host          => $neutron_dsn[5],
-    dbname        => $neutron_dsn[6],
-    allowed_hosts => $allowed_hosts,
-  }
-  $cinder_dsn = split(hiera('cinder::database_connection'), '[@:/?]')
-  class { 'cinder::db::mysql':
-    user          => $cinder_dsn[3],
-    password      => $cinder_dsn[4],
-    host          => $cinder_dsn[5],
-    dbname        => $cinder_dsn[6],
-    allowed_hosts => $allowed_hosts,
-  }
-  $heat_dsn = split(hiera('heat::database_connection'), '[@:/?]')
-  class { 'heat::db::mysql':
-    user          => $heat_dsn[3],
-    password      => $heat_dsn[4],
-    host          => $heat_dsn[5],
-    dbname        => $heat_dsn[6],
-    allowed_hosts => $allowed_hosts,
-  }
+  include ::keystone::db::mysql
+  include ::glance::db::mysql
+  include ::nova::db::mysql
+  include ::neutron::db::mysql
+  include ::cinder::db::mysql
+  include ::heat::db::mysql
   if downcase(hiera('ceilometer_backend')) == 'mysql' {
-    $ceilometer_dsn = split(hiera('ceilometer_mysql_conn_string'), '[@:/?]')
-    class { 'ceilometer::db::mysql':
-      user          => $ceilometer_dsn[3],
-      password      => $ceilometer_dsn[4],
-      host          => $ceilometer_dsn[5],
-      dbname        => $ceilometer_dsn[6],
-      allowed_hosts => $allowed_hosts,
-    }
+    include ::ceilometer::db::mysql
   }
 
   $rabbit_nodes = hiera('rabbit_node_ips')
index 24a2f73..6a41d16 100644 (file)
@@ -400,71 +400,28 @@ MYSQL_HOST=localhost\n",
   }
 
   # Create all the database schemas
-  # Example DSN format: mysql://user:password@host/dbname
   if $sync_db {
-    $allowed_hosts = ['%',hiera('mysql_bind_host')]
-    $keystone_dsn = split(hiera('keystone::database_connection'), '[@:/?]')
     class { 'keystone::db::mysql':
-      user          => $keystone_dsn[3],
-      password      => $keystone_dsn[4],
-      host          => $keystone_dsn[5],
-      dbname        => $keystone_dsn[6],
-      allowed_hosts => $allowed_hosts,
       require       => Exec['galera-ready'],
     }
-    $glance_dsn = split(hiera('glance::api::database_connection'), '[@:/?]')
     class { 'glance::db::mysql':
-      user          => $glance_dsn[3],
-      password      => $glance_dsn[4],
-      host          => $glance_dsn[5],
-      dbname        => $glance_dsn[6],
-      allowed_hosts => $allowed_hosts,
       require       => Exec['galera-ready'],
     }
-    $nova_dsn = split(hiera('nova::database_connection'), '[@:/?]')
     class { 'nova::db::mysql':
-      user          => $nova_dsn[3],
-      password      => $nova_dsn[4],
-      host          => $nova_dsn[5],
-      dbname        => $nova_dsn[6],
-      allowed_hosts => $allowed_hosts,
       require       => Exec['galera-ready'],
     }
-    $neutron_dsn = split(hiera('neutron::server::database_connection'), '[@:/?]')
     class { 'neutron::db::mysql':
-      user          => $neutron_dsn[3],
-      password      => $neutron_dsn[4],
-      host          => $neutron_dsn[5],
-      dbname        => $neutron_dsn[6],
-      allowed_hosts => $allowed_hosts,
       require       => Exec['galera-ready'],
     }
-    $cinder_dsn = split(hiera('cinder::database_connection'), '[@:/?]')
     class { 'cinder::db::mysql':
-      user          => $cinder_dsn[3],
-      password      => $cinder_dsn[4],
-      host          => $cinder_dsn[5],
-      dbname        => $cinder_dsn[6],
-      allowed_hosts => $allowed_hosts,
       require       => Exec['galera-ready'],
     }
-    $heat_dsn = split(hiera('heat::database_connection'), '[@:/?]')
     class { 'heat::db::mysql':
-      user          => $heat_dsn[3],
-      password      => $heat_dsn[4],
-      host          => $heat_dsn[5],
-      dbname        => $heat_dsn[6],
-      allowed_hosts => $allowed_hosts,
       require       => Exec['galera-ready'],
     }
+
     if downcase(hiera('ceilometer_backend')) == 'mysql' {
-      $ceilometer_dsn = split(hiera('ceilometer_mysql_conn_string'), '[@:/?]')
       class { 'ceilometer::db::mysql':
-        user          => $ceilometer_dsn[3],
-        password      => $ceilometer_dsn[4],
-        host          => $ceilometer_dsn[5],
-        dbname        => $ceilometer_dsn[6],
-        allowed_hosts => $allowed_hosts,
         require       => Exec['galera-ready'],
       }
     }