]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-cookbooks.git/commitdiff
Creates a LWRP to mount cephfs
authorWalter Huf <walter.huf@corvisa.com>
Tue, 8 Jul 2014 17:51:43 +0000 (12:51 -0500)
committerWalter Huf <walter.huf@corvisa.com>
Wed, 9 Jul 2014 14:56:13 +0000 (09:56 -0500)
providers/cephfs.rb [new file with mode: 0644]
recipes/cephfs.rb
resources/cephfs.rb [new file with mode: 0644]

diff --git a/providers/cephfs.rb b/providers/cephfs.rb
new file mode 100644 (file)
index 0000000..7396183
--- /dev/null
@@ -0,0 +1,85 @@
+def create_client
+  # Client settings
+  client_name = "cephfs.#{node['hostname']}"
+  filename = "/etc/ceph/ceph.client.#{client_name}.secret"
+
+  name = 'cephfs'
+  ceph_client name do
+    filename filename
+    caps('mon' => 'allow r', 'osd' => 'allow rw', 'mds' => 'allow')
+    as_keyring false
+  end
+end
+
+def manage_mount(directory, subdir, use_fuse, action)
+  # Client settings
+  client_name = "cephfs.#{node['hostname']}"
+  filename = "/etc/ceph/ceph.client.#{client_name}.secret"
+
+  if use_fuse
+    if subdir != '/'
+      Chef::Application.fatal!("Can't use a subdir with fuse mounts yet")
+    end
+    mount "#{action} #{directory}" do
+      mount_point directory
+      fstype 'fuse.ceph'
+      # needs two slashes to indicate a network mount to chef
+      device "conf=//etc/ceph/ceph.conf,id=#{client_name},keyfile=#{filename}"
+      options 'defaults'
+      dump 0
+      pass 0
+      action action
+    end
+  else
+    mons = mon_addresses.join(',') + ':' + subdir
+    mount "#{action} #{directory}" do
+      mount_point directory
+      fstype 'ceph'
+      device mons
+      options "_netdev,name=#{client_name},secretfile=#{filename}"
+      dump 0
+      pass 0
+      action action
+    end
+  end
+end
+
+def whyrun_supported?
+  true
+end
+
+def create_mount(action)
+  create_client
+  directory @new_resource.directory
+  manage_mount(@new_resource.directory, @new_resource.cephfs_subdir, @new_resource.use_fuse, action)
+end
+
+action :mount do
+  converge_by("Creating cephfs mount at #{@new_resource.directory}") do
+    create_mount(:mount)
+  end
+end
+
+action :remount do
+  converge_by("Remounting cephfs mount at #{@new_resource.directory}") do
+    create_mount(:remount)
+  end
+end
+
+action :umount do
+  converge_by("Unmounting cephfs mount at #{@new_resource.directory}") do
+    manage_mount(@new_resource.directory, @new_resource.cephfs_subdir, @new_resource.use_fuse, :umount)
+  end
+end
+
+action :enable do
+  converge_by("Enabling cephfs mount at #{@new_resource.directory}") do
+    create_mount(:enable)
+  end
+end
+
+action :disable do
+  converge_by("Disabling cephfs mount at #{@new_resource.directory}") do
+    manage_mount(@new_resource.directory, @new_resource.cephfs_subdir, @new_resource.use_fuse, :disable)
+  end
+end
index 64dbaf9d56296d4bfb744295aba5dacad4253c12..50ce1d6d69e97ddd2b8bf8a6b8a6dae657b0b478 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-include_recipe 'ceph::_common'
-include_recipe 'ceph::cephfs_install'
-include_recipe 'ceph::conf'
-
-name = 'cephfs'
-client_name = "cephfs.#{node['hostname']}"
-filename = "/etc/ceph/ceph.client.#{client_name}.secret"
-
-ceph_client name do
-  filename filename
-  caps('mon' => 'allow r', 'osd' => 'allow rw', 'mds' => 'allow')
-  as_keyring false
-end
-
-mons = mon_addresses.join(',') + ':/'
-
-directory node['ceph']['cephfs_mount']
-
-mount node['ceph']['cephfs_mount'] do
-  fstype 'ceph'
-  device mons
-  options "_netdev,name=#{client_name},secretfile=#{filename}"
-  dump 0
-  pass 0
+ceph_cephfs '/ceph' do
+  use_fuse false
   action [:mount, :enable]
-  not_if { mons.empty? }
 end
diff --git a/resources/cephfs.rb b/resources/cephfs.rb
new file mode 100644 (file)
index 0000000..191d942
--- /dev/null
@@ -0,0 +1,14 @@
+actions :mount, :umount, :remount, :enable, :disable
+default_action :mount
+
+attribute :directory, :kind_of => String, :name_attribute => true, :required => true
+attribute :use_fuse, :kind_of => [TrueClass, FalseClass], :required => true, :default => true
+attribute :cephfs_subdir, :kind_of => String, :default => '/'
+
+def initialize(*args)
+  super
+  @action = :mount
+  @run_context.include_recipe 'ceph::_common'
+  @run_context.include_recipe 'ceph::cephfs_install'
+  @run_context.include_recipe 'ceph::conf'
+end