Adds the ability to store a client secret instead of a keyfile
This commit is contained in:
		@@ -14,10 +14,15 @@ action :add do
 | 
			
		||||
        auth_set_key(keyname, caps) unless @current_resource.exists
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
    if get_saved_key_file(@current_resource.filename) != get_new_key_file(@current_resource.keyname)
 | 
			
		||||
    if @current_resource.as_keyring
 | 
			
		||||
      get_new_content = method(:get_new_key_file)
 | 
			
		||||
    else
 | 
			
		||||
      get_new_content = method(:get_new_key)
 | 
			
		||||
    end
 | 
			
		||||
    if get_saved_key_file(@current_resource.filename) != get_new_content.call(keyname)
 | 
			
		||||
      converge_by("save ceph auth key to #{filename}") do
 | 
			
		||||
        file filename do
 | 
			
		||||
          content lazy {get_new_key_file(keyname)}
 | 
			
		||||
          content lazy {get_new_content.call(keyname)}
 | 
			
		||||
          owner "root"
 | 
			
		||||
          group "root"
 | 
			
		||||
          mode "640"
 | 
			
		||||
@@ -30,15 +35,28 @@ end
 | 
			
		||||
def load_current_resource
 | 
			
		||||
  @current_resource = Chef::Resource::CephClient.new(@new_resource.name)
 | 
			
		||||
  @current_resource.name(@new_resource.name)
 | 
			
		||||
  @current_resource.as_keyring(@new_resource.as_keyring)
 | 
			
		||||
  @current_resource.keyname(@new_resource.keyname || "client.#{current_resource.name}.#{node['hostname']}")
 | 
			
		||||
  @current_resource.filename(@new_resource.filename || "/etc/ceph/ceph.client.#{current_resource.name}.#{node['hostname']}.keyring")
 | 
			
		||||
  @current_resource.caps(get_caps(@current_resource.keyname))
 | 
			
		||||
  if @current_resource.as_keyring
 | 
			
		||||
    get_new_content = method(:get_new_key_file)
 | 
			
		||||
    @current_resource.filename(@new_resource.filename || "/etc/ceph/ceph.client.#{current_resource.name}.#{node['hostname']}.keyring")
 | 
			
		||||
  else
 | 
			
		||||
    get_new_content = method(:get_new_key)
 | 
			
		||||
    @current_resource.filename(@new_resource.filename || "/etc/ceph/ceph.client.#{current_resource.name}.#{node['hostname']}.secret")
 | 
			
		||||
  end
 | 
			
		||||
  if @current_resource.caps == @new_resource.caps and
 | 
			
		||||
     get_saved_key_file(@current_resource.filename) == get_new_key_file(@current_resource.keyname)
 | 
			
		||||
     get_saved_key_file(@current_resource.filename) == get_new_content.call(@current_resource.keyname)
 | 
			
		||||
    @current_resource.exists = true
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
def get_new_key(keyname)
 | 
			
		||||
  cmd = "ceph auth print_key #{keyname}"
 | 
			
		||||
  key = Mixlib::ShellOut.new(cmd).run_command.stdout
 | 
			
		||||
  key
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
def get_new_key_file(keyname)
 | 
			
		||||
  cmd = "ceph auth print_key #{keyname}"
 | 
			
		||||
  key = Mixlib::ShellOut.new(cmd).run_command.stdout
 | 
			
		||||
 
 | 
			
		||||
@@ -4,12 +4,16 @@ default_action :add
 | 
			
		||||
attribute :name, :kind_of => String, :name_attribute => true
 | 
			
		||||
attribute :caps, :kind_of => Hash, :default => {"mon"=>"allow r", "osd"=>"allow r"}
 | 
			
		||||
 | 
			
		||||
# Whether to store the secret in a keyring file or a plain secret file
 | 
			
		||||
attribute :as_keyring, :kind_of => [TrueClass,FalseClass], :default => true
 | 
			
		||||
 | 
			
		||||
# what the key should be called in the ceph cluster
 | 
			
		||||
# defaults to client.#{name}.#{hostname}
 | 
			
		||||
attribute :keyname, :kind_of => String
 | 
			
		||||
 | 
			
		||||
# where the key should be saved
 | 
			
		||||
# defaults to /etc/ceph/ceph.client.#{name}.#{hostname}.keyring
 | 
			
		||||
# defaults to /etc/ceph/ceph.client.#{name}.#{hostname}.keyring if as_keyring
 | 
			
		||||
# defaults to /etc/ceph/ceph.client.#{name}.#{hostname}.secret if not as_keyring
 | 
			
		||||
attribute :filename, :kind_of => String
 | 
			
		||||
 | 
			
		||||
attr_accessor :exists
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user