Update to latest mariadb cookbook
This updates us to a new resource driven mariadb cookbook which simplifies how we manage mysql. Other changes: - Update to using MariaDB 10.3 instead of 10.1 as we need this for Stein - Update attributes so they work better with the mariadb_server_configuration resource - Remove use of the mysql2_chef_gem cookbook as it's no longer needed and causes issues with newer versions of MariaDB and MySQL. - Remove use of the openstack.cnf template since we can add all configuration using the mariadb_server_configuration resource - Remove RHEL mariadb-server ChefSpec as it's not needed - Update openstack-db recipe to use the openstack_database resource instead of the openstack_common_database resource which was renamed Depends-On: https://review.opendev.org/710351 Change-Id: Ia5b401cafcdf57aa84e090c745bd3e517c7251bf
This commit is contained in:
parent
ceccaadf8a
commit
8747a1cf96
@ -23,24 +23,26 @@ default['openstack']['mysql']['data_dir'] = nil
|
|||||||
|
|
||||||
# MySQL attributes that we select defaults for:
|
# MySQL attributes that we select defaults for:
|
||||||
|
|
||||||
# Version, support 5.7 and above
|
# Mysql version, support 5.7 and above
|
||||||
default['openstack']['mysql']['version'] = '5.7'
|
default['openstack']['mysql']['version'] = '5.7'
|
||||||
|
# MariaDB version
|
||||||
|
default['openstack']['mariadb']['version'] = '10.3'
|
||||||
# Service name
|
# Service name
|
||||||
default['openstack']['mysql']['service_name'] = 'default'
|
default['openstack']['mysql']['service_name'] = 'default'
|
||||||
# Storage engine, base OpenStack requires the InnoDB flavor
|
# Storage engine, base OpenStack requires the InnoDB flavor
|
||||||
default['openstack']['mysql']['default-storage-engine'] = 'InnoDB'
|
default['openstack']['mysql']['default-storage-engine'] = 'InnoDB'
|
||||||
# InnoDB lock mode for generating auto-increment values
|
# InnoDB lock mode for generating auto-increment values
|
||||||
default['openstack']['mysql']['innodb_autoinc_lock_mode'] = '1'
|
default['openstack']['mysql']['innodb_autoinc_lock_mode'] = 1
|
||||||
# InnoDB give each table its own file
|
# InnoDB give each table its own file
|
||||||
default['openstack']['mysql']['innodb_file_per_table'] = 'OFF'
|
default['openstack']['mysql']['innodb_file_per_table'] = 0
|
||||||
# InnoDB thread concurrency
|
# InnoDB thread concurrency
|
||||||
default['openstack']['mysql']['innodb_thread_concurrency'] = '0'
|
default['openstack']['mysql']['innodb_thread_concurrency'] = 0
|
||||||
# InnoDB commit concurrency
|
# InnoDB commit concurrency
|
||||||
default['openstack']['mysql']['innodb_commit_concurrency'] = '0'
|
default['openstack']['mysql']['innodb_commit_concurrency'] = 0
|
||||||
# InnoDB number of read io threads
|
# InnoDB number of read io threads
|
||||||
default['openstack']['mysql']['innodb_read_io_threads'] = '4'
|
default['openstack']['mysql']['innodb_read_io_threads'] = 4
|
||||||
# InnoDB number of commit transactions to flush log
|
# InnoDB number of commit transactions to flush log
|
||||||
default['openstack']['mysql']['innodb_flush_log_at_trx_commit'] = '1'
|
default['openstack']['mysql']['innodb_flush_log_at_trx_commit'] = 1
|
||||||
# InnoDB memory buffer for caching table data and indexes
|
# InnoDB memory buffer for caching table data and indexes
|
||||||
default['openstack']['mysql']['innodb_buffer_pool_size'] = '134217728'
|
default['openstack']['mysql']['innodb_buffer_pool_size'] = '134217728'
|
||||||
# InnoDB size of each log file in a log group
|
# InnoDB size of each log file in a log group
|
||||||
@ -54,4 +56,4 @@ default['openstack']['mysql']['character-set-server'] = 'latin1'
|
|||||||
# Memory allocated for caching query results
|
# Memory allocated for caching query results
|
||||||
default['openstack']['mysql']['query_cache_size'] = '0'
|
default['openstack']['mysql']['query_cache_size'] = '0'
|
||||||
# Maximum number of connections
|
# Maximum number of connections
|
||||||
default['openstack']['mysql']['max_connections'] = '307'
|
default['openstack']['mysql']['max_connections'] = 307
|
||||||
|
@ -21,9 +21,8 @@ end
|
|||||||
|
|
||||||
depends 'openstack-common', '>= 18.0.0'
|
depends 'openstack-common', '>= 18.0.0'
|
||||||
|
|
||||||
depends 'mariadb', '~> 1.5'
|
depends 'mariadb', '~> 3.1'
|
||||||
depends 'mysql', '~> 8.6'
|
depends 'mysql', '~> 8.6'
|
||||||
depends 'mysql2_chef_gem', '~> 2.0'
|
|
||||||
|
|
||||||
issues_url 'https://launchpad.net/openstack-chef'
|
issues_url 'https://launchpad.net/openstack-chef'
|
||||||
source_url 'https://opendev.org/openstack/cookbook-openstack-ops-database'
|
source_url 'https://opendev.org/openstack/cookbook-openstack-ops-database'
|
||||||
|
@ -15,13 +15,12 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
#
|
#
|
||||||
|
mariadb_repository 'default' do
|
||||||
|
version node['openstack']['mariadb']['version']
|
||||||
|
end
|
||||||
|
|
||||||
node.normal['mariadb']['use_default_repository'] = true
|
mariadb_client_install 'default' do
|
||||||
include_recipe 'mariadb::client'
|
version node['openstack']['mariadb']['version']
|
||||||
|
|
||||||
mysql2_chef_gem_mariadb 'default' do
|
|
||||||
gem_version '0.4.9'
|
|
||||||
action :install
|
|
||||||
end
|
end
|
||||||
|
|
||||||
node['openstack']['db']['python_packages']['mariadb'].each do |pkg|
|
node['openstack']['db']['python_packages']['mariadb'].each do |pkg|
|
||||||
|
@ -22,7 +22,8 @@ end
|
|||||||
|
|
||||||
bind_db = node['openstack']['bind_service']['db']
|
bind_db = node['openstack']['bind_service']['db']
|
||||||
|
|
||||||
listen_address = if bind_db['interface']
|
listen_address =
|
||||||
|
if bind_db['interface']
|
||||||
address_for bind_db['interface']
|
address_for bind_db['interface']
|
||||||
else
|
else
|
||||||
bind_db['host']
|
bind_db['host']
|
||||||
@ -30,29 +31,56 @@ listen_address = if bind_db['interface']
|
|||||||
|
|
||||||
super_password = get_password 'db', node['openstack']['db']['root_user_key']
|
super_password = get_password 'db', node['openstack']['db']['root_user_key']
|
||||||
|
|
||||||
node.normal['mariadb']['remove_test_database'] = true
|
|
||||||
node.normal['mariadb']['allow_root_pass_change'] = true
|
|
||||||
node.normal['mariadb']['server_root_password'] = super_password
|
|
||||||
node.normal['mariadb']['mysqld']['bind_address'] = listen_address
|
|
||||||
|
|
||||||
# increase the default from 5 seconds to allow extra time for services to warm up
|
|
||||||
node.normal['mariadb']['connect_timeout'] = 30
|
|
||||||
|
|
||||||
unless listen_address == '127.0.0.1' || listen_address == 'localhost'
|
|
||||||
node.normal['mariadb']['forbid_remote_root'] = false
|
|
||||||
end
|
|
||||||
|
|
||||||
include_recipe 'openstack-ops-database::mariadb-client'
|
include_recipe 'openstack-ops-database::mariadb-client'
|
||||||
|
|
||||||
# reuse mysql configuration for mariadb
|
mariadb_server_install 'default' do
|
||||||
node.normal['mariadb']['mysqld']['default_storage_engine'] = node['openstack']['mysql']['default-storage-engine']
|
version node['openstack']['mariadb']['version']
|
||||||
node.normal['mariadb']['mysqld']['max_connections'] = node['openstack']['mysql']['max_connections']
|
password super_password
|
||||||
include_recipe 'mariadb::server'
|
action [:install, :create]
|
||||||
|
end
|
||||||
# reuse mysql configuration file for mariadb
|
|
||||||
template "#{node['mariadb']['configuration']['includedir']}/openstack.cnf" do
|
# Using this to generate a service resource to control
|
||||||
owner 'mysql'
|
service 'mysql' do
|
||||||
group 'mysql'
|
supports restart: true, status: true, reload: true
|
||||||
source 'openstack.cnf.erb'
|
action :nothing
|
||||||
notifies :restart, 'service[mysql]'
|
end
|
||||||
|
|
||||||
|
mariadb_server_configuration 'default' do
|
||||||
|
innodb_buffer_pool_size node['openstack']['mysql']['innodb_buffer_pool_size']
|
||||||
|
innodb_file_per_table node['openstack']['mysql']['innodb_file_per_table']
|
||||||
|
innodb_log_buffer_size node['openstack']['mysql']['innodb_log_buffer_size']
|
||||||
|
innodb_log_file_size node['openstack']['mysql']['innodb_log_file_size']
|
||||||
|
innodb_options(
|
||||||
|
innodb_autoinc_lock_mode: node['openstack']['mysql']['innodb_autoinc_lock_mode'],
|
||||||
|
innodb_thread_concurrency: node['openstack']['mysql']['innodb_thread_concurrency'],
|
||||||
|
innodb_commit_concurrency: node['openstack']['mysql']['innodb_commit_concurrency'],
|
||||||
|
innodb_read_io_threads: node['openstack']['mysql']['innodb_read_io_threads'],
|
||||||
|
innodb_flush_log_at_trx_commit: node['openstack']['mysql']['innodb_flush_log_at_trx_commit']
|
||||||
|
)
|
||||||
|
mysqld_bind_address listen_address
|
||||||
|
# increase the default from 5 seconds to allow extra time for services to warm up
|
||||||
|
mysqld_connect_timeout 30
|
||||||
|
mysqld_default_storage_engine node['openstack']['mysql']['default-storage-engine']
|
||||||
|
mysqld_max_connections node['openstack']['mysql']['max_connections']
|
||||||
|
mysqld_query_cache_size node['openstack']['mysql']['query_cache_size']
|
||||||
|
mysqld_skip_name_resolve node['openstack']['mysql']['skip-name-resolve']
|
||||||
|
mysqld_options(
|
||||||
|
'character-set-server' => node['openstack']['mysql']['character-set-server']
|
||||||
|
)
|
||||||
|
version node['openstack']['mariadb']['version']
|
||||||
|
notifies :restart, 'service[mysql]', :immediately
|
||||||
|
end
|
||||||
|
|
||||||
|
# Remove anonymous localhost user
|
||||||
|
mariadb_user 'anonymous' do
|
||||||
|
username ''
|
||||||
|
host 'localhost'
|
||||||
|
ctrl_password super_password
|
||||||
|
action :drop
|
||||||
|
end
|
||||||
|
|
||||||
|
# Remove test database
|
||||||
|
mariadb_database 'test' do
|
||||||
|
password super_password
|
||||||
|
action :drop
|
||||||
end
|
end
|
||||||
|
@ -33,11 +33,6 @@ when 'rhel'
|
|||||||
package 'mariadb-devel'
|
package 'mariadb-devel'
|
||||||
end
|
end
|
||||||
|
|
||||||
mysql2_chef_gem 'default' do
|
|
||||||
gem_version '0.4.5'
|
|
||||||
action :install
|
|
||||||
end
|
|
||||||
|
|
||||||
node['openstack']['db']['python_packages']['mysql'].each do |pkg|
|
node['openstack']['db']['python_packages']['mysql'].each do |pkg|
|
||||||
package pkg
|
package pkg
|
||||||
end
|
end
|
||||||
|
@ -29,7 +29,7 @@ node['openstack']['common']['services'].each do |service, project|
|
|||||||
begin
|
begin
|
||||||
username = node['openstack']['db'][service]['username']
|
username = node['openstack']['db'][service]['username']
|
||||||
password = get_password('db', project)
|
password = get_password('db', project)
|
||||||
openstack_common_database service do
|
openstack_database service do
|
||||||
user username
|
user username
|
||||||
pass password
|
pass password
|
||||||
end
|
end
|
||||||
|
@ -14,12 +14,12 @@ describe 'openstack-ops-database::mariadb-client' do
|
|||||||
runner.converge(described_recipe)
|
runner.converge(described_recipe)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'includes mariadb client recipes' do
|
it do
|
||||||
expect(chef_run).to include_recipe('mariadb::client')
|
expect(chef_run).to add_mariadb_repository('default').with(version: '10.3')
|
||||||
end
|
end
|
||||||
|
|
||||||
it do
|
it do
|
||||||
expect(chef_run).to install_mysql2_chef_gem_mariadb('default').with(gem_version: '0.4.9')
|
expect(chef_run).to install_mariadb_client_install('default').with(version: '10.3')
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'installs mariadb python client packages' do
|
it 'installs mariadb python client packages' do
|
||||||
|
@ -1,40 +0,0 @@
|
|||||||
# encoding: UTF-8
|
|
||||||
|
|
||||||
require_relative 'spec_helper'
|
|
||||||
|
|
||||||
describe 'openstack-ops-database::mariadb-server' do
|
|
||||||
describe 'redhat' do
|
|
||||||
include_context 'database-stubs'
|
|
||||||
let(:runner) { ChefSpec::SoloRunner.new(REDHAT_OPTS) }
|
|
||||||
let(:node) { runner.node }
|
|
||||||
cached(:chef_run) do
|
|
||||||
node.override['mariadb']['install']['version'] = '5.7'
|
|
||||||
runner.converge(described_recipe)
|
|
||||||
end
|
|
||||||
let(:file) { chef_run.template('/etc/my.cnf.d/openstack.cnf') }
|
|
||||||
|
|
||||||
it 'creates template /etc/my.cnf.d/openstack.cnf' do
|
|
||||||
expect(chef_run).to create_template(file.name).with(
|
|
||||||
user: 'mysql',
|
|
||||||
group: 'mysql',
|
|
||||||
source: 'openstack.cnf.erb'
|
|
||||||
)
|
|
||||||
expect(file).to notify('service[mysql]')
|
|
||||||
[/^default-storage-engine = InnoDB$/,
|
|
||||||
/^innodb_autoinc_lock_mode = 1$/,
|
|
||||||
/^innodb_file_per_table = OFF$/,
|
|
||||||
/^innodb_thread_concurrency = 0$/,
|
|
||||||
/^innodb_commit_concurrency = 0$/,
|
|
||||||
/^innodb_read_io_threads = 4$/,
|
|
||||||
/^innodb_flush_log_at_trx_commit = 1$/,
|
|
||||||
/^innodb_buffer_pool_size = 134217728$/,
|
|
||||||
/^innodb_log_file_size = 5242880$/,
|
|
||||||
/^innodb_log_buffer_size = 8388608$/,
|
|
||||||
/^character-set-server = latin1$/,
|
|
||||||
/^query_cache_size = 0$/,
|
|
||||||
/^max_connections = 307$/].each do |line|
|
|
||||||
expect(chef_run).to render_config_file(file.name).with_section_content('mysqld', line)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
@ -8,52 +8,62 @@ describe 'openstack-ops-database::mariadb-server' do
|
|||||||
let(:runner) { ChefSpec::SoloRunner.new(UBUNTU_OPTS) }
|
let(:runner) { ChefSpec::SoloRunner.new(UBUNTU_OPTS) }
|
||||||
let(:node) { runner.node }
|
let(:node) { runner.node }
|
||||||
cached(:chef_run) { runner.converge(described_recipe) }
|
cached(:chef_run) { runner.converge(described_recipe) }
|
||||||
let(:file) { chef_run.template('/etc/mysql/conf.d/openstack.cnf') }
|
|
||||||
|
|
||||||
it 'overrides mariadb default attributes' do
|
|
||||||
expect(chef_run.node['mariadb']['mysqld']['bind_address']).to eq '127.0.0.1'
|
|
||||||
expect(chef_run.node['mariadb']['mysqld']['default_storage_engine']).to eq 'InnoDB'
|
|
||||||
expect(chef_run.node['mariadb']['mysqld']['max_connections']).to eq '307'
|
|
||||||
expect(chef_run.node['mariadb']['forbid_remote_root']).to be true
|
|
||||||
expect(chef_run.node['mariadb']['remove_anonymous_users']).to be true
|
|
||||||
expect(chef_run.node['mariadb']['remove_test_database']).to be true
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'includes mariadb recipes' do
|
it 'includes mariadb recipes' do
|
||||||
expect(chef_run).to include_recipe('openstack-ops-database::mariadb-client')
|
expect(chef_run).to include_recipe('openstack-ops-database::mariadb-client')
|
||||||
expect(chef_run).to include_recipe('mariadb::server')
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'creates template /etc/mysql/conf.d/openstack.cnf' do
|
it do
|
||||||
node.override['mariadb']['install']['version'] = '10.1'
|
expect(chef_run).to install_mariadb_server_install('default').with(
|
||||||
expect(chef_run).to create_template(file.name).with(
|
version: '10.3',
|
||||||
user: 'mysql',
|
password: 'abc123'
|
||||||
group: 'mysql',
|
|
||||||
source: 'openstack.cnf.erb'
|
|
||||||
)
|
)
|
||||||
expect(file).to notify('service[mysql]')
|
|
||||||
[/^default-storage-engine = InnoDB$/,
|
|
||||||
/^innodb_autoinc_lock_mode = 1$/,
|
|
||||||
/^innodb_file_per_table = OFF$/,
|
|
||||||
/^innodb_thread_concurrency = 0$/,
|
|
||||||
/^innodb_commit_concurrency = 0$/,
|
|
||||||
/^innodb_read_io_threads = 4$/,
|
|
||||||
/^innodb_flush_log_at_trx_commit = 1$/,
|
|
||||||
/^innodb_buffer_pool_size = 134217728$/,
|
|
||||||
/^innodb_log_file_size = 5242880$/,
|
|
||||||
/^innodb_log_buffer_size = 8388608$/,
|
|
||||||
/^character-set-server = latin1$/,
|
|
||||||
/^query_cache_size = 0$/,
|
|
||||||
/^max_connections = 307$/].each do |line|
|
|
||||||
expect(chef_run).to render_config_file(file.name)\
|
|
||||||
.with_section_content('mysqld', line)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'creates mariadb with root password' do
|
it do
|
||||||
# Password is fixed as 'abc123' by spec_helper
|
expect(chef_run).to create_mariadb_server_install('default')
|
||||||
expect(chef_run.node['mariadb']['allow_root_pass_change']).to be true
|
end
|
||||||
expect(chef_run.node['mariadb']['server_root_password']).to eq 'abc123'
|
|
||||||
|
it do
|
||||||
|
expect(chef_run).to modify_mariadb_server_configuration('default').with(
|
||||||
|
innodb_buffer_pool_size: '134217728',
|
||||||
|
innodb_file_per_table: 0,
|
||||||
|
innodb_log_buffer_size: '8388608',
|
||||||
|
innodb_log_file_size: '5242880',
|
||||||
|
innodb_options: {
|
||||||
|
innodb_autoinc_lock_mode: 1,
|
||||||
|
innodb_thread_concurrency: 0,
|
||||||
|
innodb_commit_concurrency: 0,
|
||||||
|
innodb_read_io_threads: 4,
|
||||||
|
innodb_flush_log_at_trx_commit: 1,
|
||||||
|
},
|
||||||
|
mysqld_bind_address: '127.0.0.1',
|
||||||
|
mysqld_connect_timeout: 30,
|
||||||
|
mysqld_default_storage_engine: 'InnoDB',
|
||||||
|
mysqld_max_connections: 307,
|
||||||
|
mysqld_query_cache_size: '0',
|
||||||
|
mysqld_skip_name_resolve: false,
|
||||||
|
mysqld_options: {
|
||||||
|
'character-set-server' => 'latin1',
|
||||||
|
},
|
||||||
|
version: '10.3'
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
it do
|
||||||
|
expect(chef_run.mariadb_server_configuration('default')).to notify('service[mysql]').to(:restart).immediately
|
||||||
|
end
|
||||||
|
|
||||||
|
it do
|
||||||
|
expect(chef_run).to drop_mariadb_user('anonymous').with(
|
||||||
|
username: '',
|
||||||
|
host: 'localhost',
|
||||||
|
ctrl_password: 'abc123'
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
it do
|
||||||
|
expect(chef_run).to drop_mariadb_database('test').with(password: 'abc123')
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'set db host to 192.168.1.1' do
|
context 'set db host to 192.168.1.1' do
|
||||||
@ -61,8 +71,10 @@ describe 'openstack-ops-database::mariadb-server' do
|
|||||||
node.override['openstack']['bind_service']['db']['host'] = '192.168.1.1'
|
node.override['openstack']['bind_service']['db']['host'] = '192.168.1.1'
|
||||||
runner.converge(described_recipe)
|
runner.converge(described_recipe)
|
||||||
end
|
end
|
||||||
it 'allow root remote access' do
|
it do
|
||||||
expect(chef_run.node['mariadb']['forbid_remote_root']).to be false
|
expect(chef_run).to modify_mariadb_server_configuration('default').with(
|
||||||
|
mysqld_bind_address: '192.168.1.1'
|
||||||
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -13,10 +13,6 @@ describe 'openstack-ops-database::mysql-client' do
|
|||||||
expect(chef_run).to create_mysql_client 'default'
|
expect(chef_run).to create_mysql_client 'default'
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'has default mysql chef gem resource' do
|
|
||||||
expect(chef_run).to install_mysql2_chef_gem('default').with(gem_version: '0.4.5')
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'installs mysql packages' do
|
it 'installs mysql packages' do
|
||||||
expect(chef_run).to install_package 'MySQL-python'
|
expect(chef_run).to install_package 'MySQL-python'
|
||||||
expect(chef_run).to install_package 'mariadb-devel'
|
expect(chef_run).to install_package 'mariadb-devel'
|
||||||
|
@ -13,10 +13,6 @@ describe 'openstack-ops-database::mysql-client' do
|
|||||||
expect(chef_run).to create_mysql_client 'default'
|
expect(chef_run).to create_mysql_client 'default'
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'has default mysql chef gem resource' do
|
|
||||||
expect(chef_run).to install_mysql2_chef_gem('default').with(gem_version: '0.4.5')
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'installs mysql packages' do
|
it 'installs mysql packages' do
|
||||||
expect(chef_run).to install_package 'python3-mysqldb'
|
expect(chef_run).to install_package 'python3-mysqldb'
|
||||||
expect(chef_run).to install_package 'libmysqlclient-dev'
|
expect(chef_run).to install_package 'libmysqlclient-dev'
|
||||||
|
@ -20,9 +20,8 @@ describe 'openstack-ops-database::openstack-db' do
|
|||||||
'orchestration' => 'heat',
|
'orchestration' => 'heat',
|
||||||
'telemetry' => 'ceilometer',
|
'telemetry' => 'ceilometer',
|
||||||
}.each do |service, _project|
|
}.each do |service, _project|
|
||||||
expect(chef_run).to create_openstack_common_database(service)
|
expect(chef_run).to create_openstack_database(service)
|
||||||
.with(user: node['openstack']['db'][service]['username'],
|
.with(user: node['openstack']['db'][service]['username'], pass: 'test-pass')
|
||||||
pass: 'test-pass')
|
|
||||||
end
|
end
|
||||||
## TODO: utilize _project and create test for rescue with specific log message
|
## TODO: utilize _project and create test for rescue with specific log message
|
||||||
## when databag does not exist
|
## when databag does not exist
|
||||||
|
Loading…
Reference in New Issue
Block a user