
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
121 lines
3.2 KiB
Ruby
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
|