Merge "Make components use PyMySQL as default DB driver"
This commit is contained in:
commit
c5e5a3062a
|
@ -265,7 +265,7 @@ The openstack::compute class deploys the following services:
|
|||
fixed_range => '10.0.0.0/24',
|
||||
network_manager => 'nova.network.manager.FlatDHCPManager',
|
||||
multi_host => false,
|
||||
database_connection => 'mysql://nova:nova_db_passwd@192.168.101.10/nova',
|
||||
database_connection => 'mysql+pymysql://nova:nova_db_passwd@192.168.101.10/nova',
|
||||
rabbit_host => '192.168.101.10',
|
||||
glance_api_servers => '192.168.101.10:9292',
|
||||
vncproxy_host => '192.168.101.10',
|
||||
|
|
|
@ -31,7 +31,7 @@ class openstack_tasks::aodh::aodh {
|
|||
|
||||
$database_vip = hiera('database_vip')
|
||||
|
||||
$db_type = pick($aodh_hash['db_type'], 'mysql')
|
||||
$db_type = pick($aodh_hash['db_type'], 'mysql+pymysql')
|
||||
$db_name = pick($aodh_hash['db_name'], 'aodh')
|
||||
$db_user = pick($aodh_hash['db_user'], 'aodh')
|
||||
$db_password = $aodh_hash['db_password']
|
||||
|
|
|
@ -5,7 +5,7 @@ class openstack_tasks::aodh::db {
|
|||
$aodh_hash = hiera_hash('aodh', { 'db_password' => 'aodh' })
|
||||
$database_vip = hiera('database_vip')
|
||||
|
||||
$db_type = pick($aodh_hash['db_type'], 'mysql')
|
||||
$db_type = pick($aodh_hash['db_type'], 'mysql+pymysql')
|
||||
$db_name = pick($aodh_hash['db_name'], 'aodh')
|
||||
$db_user = pick($aodh_hash['db_user'], 'aodh')
|
||||
$db_password = $aodh_hash['db_password']
|
||||
|
|
|
@ -64,7 +64,7 @@ class openstack_tasks::glance::glance {
|
|||
}
|
||||
|
||||
|
||||
$db_type = 'mysql'
|
||||
$db_type = pick($glance_hash['db_type'], 'mysql+pymysql')
|
||||
$db_host = pick($glance_hash['db_host'], $database_vip)
|
||||
$db_user = pick($glance_hash['db_user'], 'glance')
|
||||
$db_password = $glance_hash['db_password']
|
||||
|
|
|
@ -76,7 +76,7 @@ class openstack_tasks::heat::heat {
|
|||
|
||||
$storage_hash = hiera_hash('storage', {})
|
||||
|
||||
$db_type = 'mysql'
|
||||
$db_type = pick($heat_hash['db_type'], 'mysql+pymysql')
|
||||
$db_host = pick($heat_hash['db_host'], hiera('database_vip'))
|
||||
$db_user = pick($heat_hash['db_user'], 'heat')
|
||||
$db_password = $heat_hash['db_password']
|
||||
|
|
|
@ -27,7 +27,7 @@ class openstack_tasks::ironic::ironic {
|
|||
|
||||
$memcached_servers = hiera('memcached_servers')
|
||||
|
||||
$db_type = 'mysql'
|
||||
$db_type = pick($ironic_hash['db_type'], 'mysql+pymysql')
|
||||
$db_host = pick($ironic_hash['db_host'], $database_vip)
|
||||
$db_user = pick($ironic_hash['db_user'], 'ironic')
|
||||
$db_name = pick($ironic_hash['db_name'], 'ironic')
|
||||
|
|
|
@ -28,7 +28,7 @@ class openstack_tasks::ironic::ironic_compute {
|
|||
$ironic_username = pick($ironic_hash['auth_name'],'ironic')
|
||||
$ironic_user_password = pick($ironic_hash['user_password'],'ironic')
|
||||
|
||||
$db_type = 'mysql'
|
||||
$db_type = pick($nova_hash['db_type'], 'mysql+pymysql')
|
||||
$db_host = pick($nova_hash['db_host'], $database_vip)
|
||||
$db_user = pick($nova_hash['db_user'], 'nova')
|
||||
$db_name = pick($nova_hash['db_name'], 'nova')
|
||||
|
|
|
@ -45,7 +45,7 @@ class openstack_tasks::keystone::keystone {
|
|||
$user_admin_role = hiera('user_admin_role')
|
||||
$user_admin_domain = hiera('user_admin_domain')
|
||||
|
||||
$db_type = 'mysql'
|
||||
$db_type = pick($keystone_hash['db_type'], 'mysql+pymysql')
|
||||
$db_host = pick($keystone_hash['db_host'], $database_vip)
|
||||
$db_password = $keystone_hash['db_password']
|
||||
$db_name = pick($keystone_hash['db_name'], 'keystone')
|
||||
|
|
|
@ -53,7 +53,7 @@ class openstack_tasks::murano::murano {
|
|||
$murano_user = pick($murano_hash['user'], 'murano')
|
||||
$tenant = pick($murano_hash['tenant'], 'services')
|
||||
|
||||
$db_type = 'mysql'
|
||||
$db_type = pick($murano_hash['db_type'], 'mysql+pymysql')
|
||||
$db_user = pick($murano_hash['db_user'], 'murano')
|
||||
$db_name = pick($murano_hash['db_name'], 'murano')
|
||||
$db_password = pick($murano_hash['db_password'])
|
||||
|
|
|
@ -25,7 +25,7 @@ class openstack_tasks::openstack_cinder::openstack_cinder {
|
|||
$kombu_compression = hiera('kombu_compression', $::os_service_default)
|
||||
$memcached_servers = hiera('memcached_servers')
|
||||
$default_volume_type = pick($cinder_hash['default_volume_type'], $::os_service_default)
|
||||
$db_type = 'mysql'
|
||||
$db_type = pick($cinder_hash['db_type'], 'mysql+pymysql')
|
||||
$db_host = pick($cinder_hash['db_host'], hiera('database_vip'))
|
||||
$db_user = pick($cinder_hash['db_user'], 'cinder')
|
||||
$db_password = $cinder_hash[db_password]
|
||||
|
|
|
@ -105,7 +105,7 @@ class openstack_tasks::openstack_controller::openstack_controller {
|
|||
$enable_cpu_pinning = false
|
||||
}
|
||||
|
||||
$db_type = 'mysql'
|
||||
$db_type = pick($nova_hash['db_type'], 'mysql+pymysql')
|
||||
$db_host = pick($nova_hash['db_host'], hiera('database_vip'))
|
||||
$db_user = pick($nova_hash['db_user'], 'nova')
|
||||
$db_password = $nova_hash['db_password']
|
||||
|
|
|
@ -36,7 +36,7 @@ class openstack_tasks::openstack_network::server_config {
|
|||
$primary_controller = roles_include($neutron_primary_controller_roles)
|
||||
$compute = roles_include($neutron_compute_roles)
|
||||
|
||||
$db_type = 'mysql'
|
||||
$db_type = try_get_value($neutron_config, 'database/type', 'mysql+pymysql')
|
||||
$db_password = $neutron_config['database']['passwd']
|
||||
$db_user = dig44($neutron_config, ['database', 'user'], 'neutron')
|
||||
$db_name = dig44($neutron_config, ['database', 'name'], 'neutron')
|
||||
|
|
|
@ -27,7 +27,7 @@ class openstack_tasks::roles::cinder {
|
|||
$keystone_user = pick($cinder_hash['user'], 'cinder')
|
||||
$keystone_tenant = pick($cinder_hash['tenant'], 'services')
|
||||
|
||||
$db_type = 'mysql'
|
||||
$db_type = pick($cinder_hash['db_type'], 'mysql+pymysql')
|
||||
$db_host = pick($cinder_hash['db_host'], hiera('database_vip'))
|
||||
$db_user = pick($cinder_hash['db_user'], 'cinder')
|
||||
$db_password = $cinder_hash[db_password]
|
||||
|
|
|
@ -43,7 +43,7 @@ class openstack_tasks::roles::ironic_conductor {
|
|||
$admin_identity_address = get_ssl_property($ssl_hash, {}, 'keystone', 'admin', 'hostname', [$service_endpoint, $management_vip])
|
||||
$admin_identity_uri = "${admin_identity_protocol}://${admin_identity_address}:35357"
|
||||
|
||||
$db_type = 'mysql'
|
||||
$db_type = pick($ironic_hash['db_type'], 'mysql+pymysql')
|
||||
$db_host = pick($ironic_hash['db_host'], $database_vip)
|
||||
$db_user = pick($ironic_hash['db_user'], 'ironic')
|
||||
$db_name = pick($ironic_hash['db_name'], 'ironic')
|
||||
|
|
|
@ -55,7 +55,7 @@ class openstack_tasks::sahara::sahara {
|
|||
$max_retries = '-1'
|
||||
$idle_timeout = '3600'
|
||||
|
||||
$db_type = 'mysql'
|
||||
$db_type = pick($sahara_hash['db_type'], 'mysql+pymysql')
|
||||
$db_user = pick($sahara_hash['db_user'], 'sahara')
|
||||
$db_name = pick($sahara_hash['db_name'], 'sahara')
|
||||
$db_password = pick($sahara_hash['db_password'])
|
||||
|
|
|
@ -331,7 +331,7 @@ class osnailyfacter::globals::globals {
|
|||
# TODO(aschultz): I don't think this is used so it should probably be
|
||||
# deprecated and removed.
|
||||
$sql_connection = os_database_connection({
|
||||
'dialect' => 'mysql',
|
||||
'dialect' => 'mysql+pymysql',
|
||||
'host' => $database_vip,
|
||||
'database' => 'nova',
|
||||
'username' => 'nova',
|
||||
|
|
|
@ -44,6 +44,7 @@ describe manifest do
|
|||
api_pecan_debug = aodh_hash.fetch('debug', debug)
|
||||
|
||||
db_host = Noop.hiera 'database_vip'
|
||||
db_type = Noop.hiera_structure 'aodh/db_type', 'mysql+pymysql'
|
||||
db_name = aodh_hash.fetch('db_name', 'aodh')
|
||||
db_user = aodh_hash.fetch('db_user', 'aodh')
|
||||
db_password = aodh_hash['db_password']
|
||||
|
@ -139,7 +140,7 @@ describe manifest do
|
|||
db_params = '?charset=utf8'
|
||||
end
|
||||
|
||||
should contain_aodh_config('database/connection').with(:value => "mysql://#{db_user}:#{db_password}@#{db_host}/#{db_name}#{db_params}")
|
||||
should contain_aodh_config('database/connection').with(:value => "#{db_type}://#{db_user}:#{db_password}@#{db_host}/#{db_name}#{db_params}")
|
||||
end
|
||||
|
||||
it 'should configure alarm ttl' do
|
||||
|
|
|
@ -38,6 +38,7 @@ describe manifest do
|
|||
pipeline = 'keystone'
|
||||
end
|
||||
database_vip = Noop.hiera('database_vip')
|
||||
glance_db_type = Noop.hiera_structure 'glance/db_type', 'mysql+pymysql'
|
||||
glance_db_password = Noop.hiera_structure 'glance/db_password', 'glance'
|
||||
glance_db_user = Noop.hiera_structure 'glance/db_user', 'glance'
|
||||
glance_db_name = Noop.hiera_structure 'glance/db_name', 'glance'
|
||||
|
@ -109,7 +110,7 @@ describe manifest do
|
|||
extra_params = '?charset=utf8'
|
||||
end
|
||||
|
||||
db_connection = "mysql://#{glance_db_user}:#{glance_db_password}@#{database_vip}/#{glance_db_name}#{extra_params}"
|
||||
db_connection = "#{glance_db_type}://#{glance_db_user}:#{glance_db_password}@#{database_vip}/#{glance_db_name}#{extra_params}"
|
||||
should contain_class('glance::api').with(:database_connection => db_connection)
|
||||
should contain_class('glance::registry').with(:database_connection => db_connection)
|
||||
should contain_class('glance::glare::db').with(:database_connection => db_connection)
|
||||
|
|
|
@ -67,6 +67,7 @@ describe manifest do
|
|||
storage_hash = Noop.hiera_hash 'storage'
|
||||
|
||||
database_vip = Noop.hiera('database_vip')
|
||||
heat_db_type = Noop.hiera_structure 'heat/db_type', 'mysql+pymysql'
|
||||
heat_db_password = Noop.hiera_structure 'heat/db_password', 'heat'
|
||||
heat_db_user = Noop.hiera_structure 'heat/db_user', 'heat'
|
||||
heat_db_name = Noop.hiera('heat_db_name', 'heat')
|
||||
|
@ -107,7 +108,7 @@ describe manifest do
|
|||
extra_params = '?charset=utf8'
|
||||
end
|
||||
should contain_class('heat').with(
|
||||
:database_connection => "mysql://#{heat_db_user}:#{heat_db_password}@#{database_vip}/#{heat_db_name}#{extra_params}"
|
||||
:database_connection => "#{heat_db_type}://#{heat_db_user}:#{heat_db_password}@#{database_vip}/#{heat_db_name}#{extra_params}"
|
||||
)
|
||||
end
|
||||
|
||||
|
|
|
@ -22,6 +22,7 @@ describe manifest do
|
|||
ironic_enabled = Noop.hiera_structure 'ironic/enabled'
|
||||
|
||||
database_vip = Noop.hiera('database_vip')
|
||||
nova_db_type = Noop.hiera_structure 'nova/db_type', 'mysql+pymysql'
|
||||
nova_db_password = Noop.hiera_structure 'nova/db_password', 'nova'
|
||||
nova_db_user = Noop.hiera_structure 'nova/db_user', 'nova'
|
||||
nova_db_name = Noop.hiera_structure 'nova/db_name', 'nova'
|
||||
|
@ -107,7 +108,7 @@ describe manifest do
|
|||
max_pool_size = Noop.hiera 'max_pool_size', [facts[:os_workers] * 5 + 0, 30 + 0].min
|
||||
|
||||
should contain_class('nova').with(
|
||||
:database_connection => "mysql://#{nova_db_user}:#{nova_db_password}@#{database_vip}/#{nova_db_name}#{extra_params}",
|
||||
:database_connection => "#{nova_db_type}://#{nova_db_user}:#{nova_db_password}@#{database_vip}/#{nova_db_name}#{extra_params}",
|
||||
:cinder_catalog_info => Noop.puppet_function('pick', nova_hash['cinder_catalog_info'], 'volumev2:cinderv2:internalURL'),
|
||||
:use_stderr => use_stderr,
|
||||
:notification_driver => nova_notification_driver,
|
||||
|
|
|
@ -21,6 +21,7 @@ if ironic_enabled
|
|||
admin_password = Noop.hiera_structure('ironic/user_password', 'ironic')
|
||||
|
||||
database_vip = Noop.hiera('database_vip')
|
||||
ironic_db_type = Noop.hiera_structure 'ironic/db_type', 'mysql+pymysql'
|
||||
ironic_db_password = Noop.hiera_structure 'ironic/db_password', 'ironic'
|
||||
ironic_db_user = Noop.hiera_structure 'ironic/db_user', 'ironic'
|
||||
ironic_db_name = Noop.hiera_structure 'ironic/db_name', 'ironic'
|
||||
|
@ -94,7 +95,7 @@ if ironic_enabled
|
|||
extra_params = '?charset=utf8'
|
||||
end
|
||||
should contain_class('ironic').with(
|
||||
:database_connection => "mysql://#{ironic_db_user}:#{ironic_db_password}@#{database_vip}/#{ironic_db_name}#{extra_params}"
|
||||
:database_connection => "#{ironic_db_type}://#{ironic_db_user}:#{ironic_db_password}@#{database_vip}/#{ironic_db_name}#{extra_params}"
|
||||
)
|
||||
end
|
||||
|
||||
|
|
|
@ -70,6 +70,7 @@ describe manifest do
|
|||
primary_controller = Noop.hiera 'primary_controller'
|
||||
|
||||
database_vip = Noop.hiera('database_vip')
|
||||
keystone_db_type = Noop.hiera_structure 'keystone/db_type', 'mysql+pymysql'
|
||||
keystone_db_password = Noop.hiera_structure 'keystone/db_password', 'keystone'
|
||||
keystone_db_user = Noop.hiera_structure 'keystone/db_user', 'keystone'
|
||||
keystone_db_name = Noop.hiera_structure 'keystone/db_name', 'keystone'
|
||||
|
@ -112,7 +113,7 @@ describe manifest do
|
|||
extra_params = '?charset=utf8'
|
||||
end
|
||||
should contain_class('keystone').with(
|
||||
:database_connection => "mysql://#{keystone_db_user}:#{keystone_db_password}@#{database_vip}/#{keystone_db_name}#{extra_params}"
|
||||
:database_connection => "#{keystone_db_type}://#{keystone_db_user}:#{keystone_db_password}@#{database_vip}/#{keystone_db_name}#{extra_params}"
|
||||
|
||||
)
|
||||
end
|
||||
|
|
|
@ -54,6 +54,7 @@ describe manifest do
|
|||
let(:amqp_hosts) { Noop.hiera('amqp_hosts') }
|
||||
let(:public_ssl) { Noop.hiera_structure('public_ssl/services') }
|
||||
|
||||
let(:db_type) { Noop.hiera_structure('murano/db_type', 'mysql+pymysql') }
|
||||
let(:db_user) { Noop.hiera_structure('murano/db_user', 'murano') }
|
||||
let(:db_name) { Noop.hiera_structure('murano/db_name', 'murano') }
|
||||
let(:db_host) { Noop.hiera_structure('murano/db_host', service_endpoint) }
|
||||
|
@ -74,7 +75,7 @@ describe manifest do
|
|||
else
|
||||
extra_params = '?charset=utf8'
|
||||
end
|
||||
"mysql://#{db_user}:#{db_password}@#{db_host}/#{db_name}#{extra_params}"
|
||||
"#{db_type}://#{db_user}:#{db_password}@#{db_host}/#{db_name}#{extra_params}"
|
||||
end
|
||||
|
||||
let(:ssl_hash) { Noop.hiera_hash 'use_ssl', {} }
|
||||
|
|
|
@ -36,6 +36,7 @@ describe manifest do
|
|||
management_vip = Noop.hiera 'management_vip'
|
||||
database_vip = Noop.hiera('database_vip')
|
||||
cinder = Noop.puppet_function 'roles_include', 'cinder'
|
||||
cinder_db_type = Noop.hiera_structure 'cinder/db_type', 'mysql+pymysql'
|
||||
cinder_db_password = Noop.hiera_structure 'cinder/db_password', 'cinder'
|
||||
cinder_db_user = Noop.hiera_structure 'cinder/db_user', 'cinder'
|
||||
cinder_db_name = Noop.hiera_structure 'cinder/db_name', 'cinder'
|
||||
|
@ -83,7 +84,7 @@ describe manifest do
|
|||
extra_params = '?charset=utf8'
|
||||
end
|
||||
should contain_class('cinder').with(
|
||||
:database_connection => "mysql://#{cinder_db_user}:#{cinder_db_password}@#{database_vip}/#{cinder_db_name}#{extra_params}"
|
||||
:database_connection => "#{cinder_db_type}://#{cinder_db_user}:#{cinder_db_password}@#{database_vip}/#{cinder_db_name}#{extra_params}"
|
||||
)
|
||||
end
|
||||
|
||||
|
|
|
@ -31,6 +31,7 @@ describe manifest do
|
|||
management_vip = Noop.hiera 'management_vip'
|
||||
|
||||
let(:database_vip) { Noop.hiera('database_vip') }
|
||||
let(:nova_db_type) { Noop.hiera_structure 'nova/db_type', 'mysql+pymysql' }
|
||||
let(:nova_db_password) { Noop.hiera_structure 'nova/db_password', 'nova' }
|
||||
let(:nova_db_user) { Noop.hiera_structure 'nova/db_user', 'nova' }
|
||||
let(:nova_db_name) { Noop.hiera_structure 'nova/db_name', 'nova' }
|
||||
|
@ -230,8 +231,8 @@ describe manifest do
|
|||
extra_params = '?charset=utf8'
|
||||
end
|
||||
should contain_class('nova').with(
|
||||
:database_connection => "mysql://#{nova_db_user}:#{nova_db_password}@#{database_vip}/#{nova_db_name}#{extra_params}",
|
||||
:api_database_connection => "mysql://#{api_db_user}:#{api_db_password}@#{database_vip}/#{api_db_name}#{extra_params}"
|
||||
:database_connection => "#{nova_db_type}://#{nova_db_user}:#{nova_db_password}@#{database_vip}/#{nova_db_name}#{extra_params}",
|
||||
:api_database_connection => "#{nova_db_type}://#{api_db_user}:#{api_db_password}@#{database_vip}/#{api_db_name}#{extra_params}"
|
||||
)
|
||||
end
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@ describe manifest do
|
|||
|
||||
it 'Configure database options for neutron::server' do
|
||||
sync_db = Noop.hiera('primary_controller')
|
||||
db_type = 'mysql'
|
||||
db_type = neutron_config.fetch('database', {}).fetch('type', 'mysql+pymysql')
|
||||
db_password = neutron_config.fetch('database', {}).fetch('passwd')
|
||||
db_user = neutron_config.fetch('database', {}).fetch('user', 'neutron')
|
||||
db_name = neutron_config.fetch('database', {}).fetch('name', 'neutron')
|
||||
|
|
|
@ -23,6 +23,7 @@ describe manifest do
|
|||
|
||||
management_vip = Noop.hiera 'management_vip'
|
||||
database_vip = Noop.hiera('database_vip')
|
||||
cinder_db_type = Noop.hiera_structure 'cinder/db_type', 'mysql+pymysql'
|
||||
cinder_db_password = Noop.hiera_structure 'cinder/db_password', 'cinder'
|
||||
cinder_db_user = Noop.hiera_structure 'cinder/db_user', 'cinder'
|
||||
cinder_db_name = Noop.hiera_structure 'cinder/db_name', 'cinder'
|
||||
|
@ -52,7 +53,7 @@ describe manifest do
|
|||
extra_params = '?charset=utf8'
|
||||
end
|
||||
should contain_class('cinder').with(
|
||||
:database_connection => "mysql://#{cinder_db_user}:#{cinder_db_password}@#{database_vip}/#{cinder_db_name}#{extra_params}"
|
||||
:database_connection => "#{cinder_db_type}://#{cinder_db_user}:#{cinder_db_password}@#{database_vip}/#{cinder_db_name}#{extra_params}"
|
||||
)
|
||||
end
|
||||
|
||||
|
|
|
@ -13,6 +13,7 @@ describe manifest do
|
|||
amqp_durable_queues = Noop.hiera_structure 'ironic/amqp_durable_queues', 'false'
|
||||
|
||||
database_vip = Noop.hiera('database_vip')
|
||||
ironic_db_type = Noop.hiera_structure 'ironic/db_type', 'mysql+pymysql'
|
||||
ironic_db_password = Noop.hiera_structure 'ironic/db_password', 'ironic'
|
||||
ironic_db_user = Noop.hiera_structure 'ironic/db_user', 'ironic'
|
||||
ironic_db_name = Noop.hiera_structure 'ironic/db_name', 'ironic'
|
||||
|
@ -53,7 +54,7 @@ describe manifest do
|
|||
extra_params = '?charset=utf8'
|
||||
end
|
||||
should contain_class('ironic').with(
|
||||
:database_connection => "mysql://#{ironic_db_user}:#{ironic_db_password}@#{database_vip}/#{ironic_db_name}#{extra_params}",
|
||||
:database_connection => "#{ironic_db_type}://#{ironic_db_user}:#{ironic_db_password}@#{database_vip}/#{ironic_db_name}#{extra_params}",
|
||||
:sync_db => false
|
||||
)
|
||||
end
|
||||
|
|
|
@ -96,6 +96,7 @@ describe manifest do
|
|||
sahara_password = Noop.hiera_structure('sahara/user_password')
|
||||
primary_controller = Noop.hiera 'primary_controller'
|
||||
tenant = Noop.hiera_structure('sahara/tenant', 'services')
|
||||
db_type = Noop.hiera_structure 'sahara/db_type', 'mysql+pymysql'
|
||||
db_user = Noop.hiera_structure('sahara/db_user', 'sahara')
|
||||
db_name = Noop.hiera_structure('sahara/db_name', 'sahara')
|
||||
db_password = Noop.hiera_structure('sahara/db_password')
|
||||
|
@ -110,7 +111,7 @@ describe manifest do
|
|||
else
|
||||
extra_params = '?charset=utf8'
|
||||
end
|
||||
sql_connection = "mysql://#{db_user}:#{db_password}@#{db_host}/#{db_name}#{extra_params}"
|
||||
sql_connection = "#{db_type}://#{db_user}:#{db_password}@#{db_host}/#{db_name}#{extra_params}"
|
||||
|
||||
should contain_class('sahara').with(
|
||||
'auth_uri' => auth_url,
|
||||
|
|
Loading…
Reference in New Issue