- etcd does not take any arguments. the default is create. - remove use_inline_resources in preparation for custom resources Change-Id: Ic9c98978587cf81bfd430bd5b712cf537c3fb9a0 Depends-On: I161af1074cd17f2e3d2d2cf0b37a0c5fa1015fd3
		
			
				
	
	
		
			169 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			169 lines
		
	
	
		
			5.6 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
 | 
						|
        def whyrun_supported?
 | 
						|
          true
 | 
						|
        end
 | 
						|
 | 
						|
        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
 |