 abab7d0ecb
			
		
	
	abab7d0ecb
	
	
	
		
			
			- Switch to Stein release - Cookstyle fixes - Update cookbook etcd to ~> 5.6 - Update README - Add myself to author list and OSU Copyright - Properly fix completions recipe and ensure it works - Create and start the etcd service in the etcd recipe - Update delivery configuration to exclude integration cookbooks - Refactor and update RenderConfigFileMatcher to work with newer ChefSpec. This fixes output which was passing but showing error messages. Depends-On: https://review.opendev.org/701027 Change-Id: Iba3eeabe85ab9303147e43eeb550212a46d190f3
		
			
				
	
	
		
			165 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			165 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| #
 | |
| # Author:: Seth Chisamore (<schisamo@chef.io>)
 | |
| # Author:: Sean OMeara (<sean@sean.io>)
 | |
| # Copyright:: 2011-2016, Chef Software, Inc.
 | |
| # License:: Apache License, Version 2.0
 | |
| #
 | |
| # Licensed under the Apache License, Version 2.0 (the "License");
 | |
| # you may not use this file except in compliance with the License.
 | |
| # You may obtain a copy of the License at
 | |
| #
 | |
| #     http://www.apache.org/licenses/LICENSE-2.0
 | |
| #
 | |
| # Unless required by applicable law or agreed to in writing, software
 | |
| # distributed under the License is distributed on an "AS IS" BASIS,
 | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
| # See the License for the specific language governing permissions and
 | |
| # limitations under the License.
 | |
| #
 | |
| 
 | |
| # this file is originally from the database cookbook, preserved for legacy
 | |
| # purposes until the functionality can be refactored into a custom resource.
 | |
| # Original: https://github.com/chef-boneyard/database
 | |
| 
 | |
| class Chef
 | |
|   class Provider
 | |
|     class Database
 | |
|       class Mysql < Chef::Provider::LWRPBase
 | |
|         action :create do
 | |
|           # test
 | |
|           schema_present = nil
 | |
| 
 | |
|           begin
 | |
|             test_sql = 'SHOW SCHEMAS;'
 | |
|             Chef::Log.debug("#{new_resource.name}: Performing query [#{test_sql}]")
 | |
|             test_sql_results = test_client.query(test_sql)
 | |
|             test_sql_results.each do |r|
 | |
|               schema_present = true if r['Database'] == new_resource.database_name
 | |
|             end
 | |
|           ensure
 | |
|             close_test_client
 | |
|           end
 | |
| 
 | |
|           # repair
 | |
|           unless schema_present
 | |
|             converge_by "Creating schema '#{new_resource.database_name}'" do
 | |
|               begin
 | |
|                 repair_sql = "CREATE SCHEMA IF NOT EXISTS `#{new_resource.database_name}`"
 | |
|                 repair_sql += " CHARACTER SET = #{new_resource.encoding}" if new_resource.encoding
 | |
|                 repair_sql += " COLLATE = #{new_resource.collation}" if new_resource.collation
 | |
|                 Chef::Log.debug("#{new_resource.name}: Performing query [#{repair_sql}]")
 | |
|                 repair_client.query(repair_sql)
 | |
|               ensure
 | |
|                 close_repair_client
 | |
|               end
 | |
|             end
 | |
|           end
 | |
|         end
 | |
| 
 | |
|         action :drop do
 | |
|           # test
 | |
|           schema_present = nil
 | |
| 
 | |
|           begin
 | |
|             test_sql = 'SHOW SCHEMAS;'
 | |
|             Chef::Log.debug("Performing query [#{test_sql}]")
 | |
|             test_sql_results = test_client.query(test_sql)
 | |
|             test_sql_results.each do |r|
 | |
|               schema_present = true if r['Database'] == new_resource.database_name
 | |
|             end
 | |
|           ensure
 | |
|             close_test_client
 | |
|           end
 | |
| 
 | |
|           # repair
 | |
|           if schema_present
 | |
|             converge_by "Dropping schema '#{new_resource.database_name}'" do
 | |
|               begin
 | |
|                 repair_sql = "DROP SCHEMA IF EXISTS `#{new_resource.database_name}`"
 | |
|                 Chef::Log.debug("Performing query [#{repair_sql}]")
 | |
|                 repair_client.query(repair_sql)
 | |
|               ensure
 | |
|                 close_repair_client
 | |
|               end
 | |
|             end
 | |
|           end
 | |
|         end
 | |
| 
 | |
|         action :query do
 | |
|           begin
 | |
|             query_sql = new_resource.sql_query
 | |
|             Chef::Log.debug("Performing query [#{query_sql}]")
 | |
|             query_client.query(query_sql)
 | |
|           ensure
 | |
|             close_query_client
 | |
|           end
 | |
|         end
 | |
| 
 | |
|         private
 | |
| 
 | |
|         def test_client
 | |
|           require 'mysql2'
 | |
|           @test_client ||=
 | |
|             Mysql2::Client.new(
 | |
|               host: new_resource.connection[:host],
 | |
|               socket: new_resource.connection[:socket],
 | |
|               username: new_resource.connection[:username],
 | |
|               password: new_resource.connection[:password],
 | |
|               port: new_resource.connection[:port],
 | |
|               default_file: new_resource.connection[:default_file],
 | |
|               default_group: new_resource.connection[:default_group]
 | |
|             )
 | |
|         end
 | |
| 
 | |
|         def close_test_client
 | |
|           @test_client.close if @test_client
 | |
|         rescue Mysql2::Error
 | |
|           @test_client = nil
 | |
|         end
 | |
| 
 | |
|         def repair_client
 | |
|           require 'mysql2'
 | |
|           @repair_client ||=
 | |
|             Mysql2::Client.new(
 | |
|               host: new_resource.connection[:host],
 | |
|               socket: new_resource.connection[:socket],
 | |
|               username: new_resource.connection[:username],
 | |
|               password: new_resource.connection[:password],
 | |
|               port: new_resource.connection[:port],
 | |
|               default_file: new_resource.connection[:default_file],
 | |
|               default_group: new_resource.connection[:default_group]
 | |
|             )
 | |
|         end
 | |
| 
 | |
|         def close_repair_client
 | |
|           @repair_client.close if @repair_client
 | |
|         rescue Mysql2::Error
 | |
|           @repair_client = nil
 | |
|         end
 | |
| 
 | |
|         def query_client
 | |
|           require 'mysql2'
 | |
|           @query_client ||=
 | |
|             Mysql2::Client.new(
 | |
|               host: new_resource.connection[:host],
 | |
|               socket: new_resource.connection[:socket],
 | |
|               username: new_resource.connection[:username],
 | |
|               password: new_resource.connection[:password],
 | |
|               port: new_resource.connection[:port],
 | |
|               default_file: new_resource.connection[:default_file],
 | |
|               default_group: new_resource.connection[:default_group],
 | |
|               flags: new_resource.connection[:flags],
 | |
|               database: new_resource.database_name
 | |
|             )
 | |
|         end
 | |
| 
 | |
|         def close_query_client
 | |
|           @query_client.close if @query_client
 | |
|         rescue Mysql2::Error
 | |
|           @query_client = nil
 | |
|         end
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 |