galstrom21 899ec191c9 Normalizing this cookbook
This cookbook needed to be brought up to the standard of the other
cookbooks in the repo.

* Adding .gitreview
* Normalizing .rubocop.yml
* Normalizing Gemfile
* Normalizing metadata.rb
* Normalizing .gitignore
* Adding specs/ directory and spec_helper.rb
* Fixed all rubocop errors

Change-Id: Ica7c525aae5fbd5c441ce50cff36046c678046d6
Partial-Bug: 1348243
2014-07-24 14:18:31 -05:00

121 lines
3.2 KiB
Ruby

# encoding: UTF-8
#
# This recipe creates a monitor cluster
#
# You should never change the mon default path or
# the keyring path.
# Don't change the cluster name either
# Default path for mon data: /var/lib/ceph/mon/$cluster-$id/
# which will be /var/lib/ceph/mon/ceph-`hostname`/
# This path is used by upstart. If changed, upstart won't
# start the monitor
# The keyring files are created using the following pattern:
# /etc/ceph/$cluster.client.$name.keyring
# e.g. /etc/ceph/ceph.client.admin.keyring
# The bootstrap-osd and bootstrap-mds keyring are a bit
# different and are created in
# /var/lib/ceph/bootstrap-{osd,mds}/ceph.keyring
include_recipe 'ceph::default'
include_recipe 'ceph::conf'
service_type = node['ceph']['mon']['init_style']
node.default['ceph']['is_mon'] = true
directory '/var/run/ceph' do
owner 'root'
group 'root'
mode 00755
recursive true
action :create
end
directory "/var/lib/ceph/mon/ceph-#{node['hostname']}" do
owner 'root'
group 'root'
mode 00755
recursive true
action :create
end
# TODO: cluster name
cluster = 'ceph'
unless File.exist?("/var/lib/ceph/mon/ceph-#{node['hostname']}/done")
keyring = "#{Chef::Config[:file_cache_path]}/#{cluster}-#{node['hostname']}.mon.keyring"
if node['ceph']['encrypted_data_bags']
secret = Chef::EncryptedDataBagItem.load_secret(node['ceph']['mon']['secret_file'])
monitor_secret = Chef::EncryptedDataBagItem.load('ceph', 'mon', secret)['secret']
else
monitor_secret = node['ceph']['monitor-secret']
end
execute 'format as keyring' do
command "ceph-authtool '#{keyring}' --create-keyring --name=mon. --add-key='#{monitor_secret}' --cap mon 'allow *'"
creates "#{Chef::Config[:file_cache_path]}/#{cluster}-#{node['hostname']}.mon.keyring"
end
execute 'ceph-mon mkfs' do
command "ceph-mon --mkfs -i #{node['hostname']} --keyring '#{keyring}'"
end
ruby_block 'finalise' do
block do
['done', service_type].each do |ack|
::File.open("/var/lib/ceph/mon/ceph-#{node['hostname']}/#{ack}", 'w').close
end
end
end
end
if service_type == 'upstart'
service 'ceph-mon' do
provider Chef::Provider::Service::Upstart
action :enable
end
service 'ceph-mon-all' do
provider Chef::Provider::Service::Upstart
supports status: true
action [:enable, :start]
end
end
service 'ceph_mon' do
case service_type
when 'upstart'
service_name 'ceph-mon-all-starter'
provider Chef::Provider::Service::Upstart
else
service_name 'ceph'
end
supports restart: true, status: true
action [:enable, :start]
end
mon_addresses.each do |addr|
execute "peer #{addr}" do
command "ceph --admin-daemon '/var/run/ceph/ceph-mon.#{node['hostname']}.asok' add_bootstrap_peer_hint #{addr}"
ignore_failure true
end
end
# The key is going to be automatically
# created,
# We store it when it is created
unless node['ceph']['encrypted_data_bags']
ruby_block 'get osd-bootstrap keyring' do
block do
run_out = ''
while run_out.empty?
run_out = Mixlib::ShellOut.new('ceph auth get-key client.bootstrap-osd').run_command.stdout.strip
sleep 2
end
node.override['ceph']['bootstrap_osd_key'] = run_out
node.save
end
not_if { node['ceph']['bootstrap_osd_key'] }
end
end