--- /dev/null
+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
# 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
--- /dev/null
+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