Skip to content
This repository was archived by the owner on Jan 18, 2023. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions attributes/default.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,15 @@
default[:ebs][:creds][:aki] = "aws_access_key_id"
default[:ebs][:creds][:sak] = "aws_secret_access_key"
default[:ebs][:creds][:encrypted] = true
default[:ebs][:creds][:iam_roles] = false
default[:ebs][:volumes] = {}
default[:ebs][:raids] = {}
default[:ebs][:mdadm_chunk_size] = '256'
default[:ebs][:md_read_ahead] = '65536' # 64k
default[:ebs][:initrd_md5] = ''



if BlockDevice.on_kvm? && ebs[:devices]
Chef::Log.info("Running on QEMU/KVM: Need to translate device names as KVM allocates them regardless of the given device ID")
ebs_devices = {}
Expand Down
2 changes: 1 addition & 1 deletion metadata.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,5 @@
recipe "ebs::raids", "Mounts attached EBS RAIDs"
recipe "ebs::persistent", "Mounts volumes defined in attributes"

depends 'aws', '>= 0.101.0'
depends 'aws', '>= 3.3.3'
depends 'delayed_evaluator'
10 changes: 7 additions & 3 deletions recipes/persistent.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,11 @@

include_recipe "aws"
# get aws credentials
aws = data_bag_item(node['ebs']['creds']['databag'], node['ebs']['creds']['item'])
if !node[:ebs][:creds][:iam_roles]
aws = data_bag_item(node['ebs']['creds']['databag'], node['ebs']['creds']['item'])
else
aws = nil
end

devices = Dir.glob('/dev/xvd*')
if devices.empty?
Expand All @@ -29,8 +33,8 @@
next_mount.succ!
Chef::Log.info("Attaching #{thisvol} to #{mount}")
aws_ebs_volume mount do
aws_access_key aws['aws_access_key_id']
aws_secret_access_key aws['aws_secret_access_key']
aws_access_key aws['aws_access_key_id'] if aws
aws_secret_access_key aws['aws_secret_access_key'] if aws
device mount
volume_id thisvol
action :nothing
Expand Down
8 changes: 5 additions & 3 deletions recipes/raids.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,14 @@
next_mount = next_mount.succ

aws_ebs_volume mount do
aws_access_key credentials[node.ebs.creds.aki]
aws_secret_access_key credentials[node.ebs.creds.sak]
if !node[:ebs][:creds][:iam_roles]
aws_access_key credentials[node.ebs.creds.aki]
aws_secret_access_key credentials[node.ebs.creds.sak]
end
size options[:disk_size]
device mount
availability_zone node[:ec2][:placement_availability_zone]
volume_type options[:piops] ? 'io1' : 'standard'
volume_type options[:piops] ? 'io1' : options[:gp2] ? 'gp2' : 'standard'
piops options[:piops]
action [ :create, :attach ]
end
Expand Down
31 changes: 24 additions & 7 deletions recipes/volumes.rb
Original file line number Diff line number Diff line change
@@ -1,30 +1,46 @@
node[:ebs][:volumes].each do |mount_point, options|

# skip volumes that already exist
next if File.read('/etc/mtab').split("\n").any?{|line| line.match(" #{mount_point} ")}

# create ebs volume
if !options[:device] && options[:size]
if !options[:device]
if node[:ebs][:creds][:encrypted]
credentials = Chef::EncryptedDataBagItem.load(node[:ebs][:creds][:databag], node[:ebs][:creds][:item])
else
credentials = data_bag_item node[:ebs][:creds][:databag], node[:ebs][:creds][:item]
if !node[:ebs][:creds][:iam_roles]
credentials = data_bag_item node[:ebs][:creds][:databag], node[:ebs][:creds][:item]
end
end

devices = Dir.glob('/dev/xvd?')
devices = ['/dev/xvdf'] if devices.empty?
devid = devices.sort.last[-1,1].succ
device = "/dev/sd#{devid}"
else
devices = ["#{options[:device]}"]
devid = devices.sort.last[-1,1]
end

device = "/dev/sd#{devid}"

if options[:size]
vol = aws_ebs_volume device do
aws_access_key credentials[node.ebs.creds.aki]
aws_secret_access_key credentials[node.ebs.creds.sak]
if !node[:ebs][:creds][:iam_roles]
aws_access_key credentials[node.ebs.creds.aki]
aws_secret_access_key credentials[node.ebs.creds.sak]
end
size options[:size]
device device
availability_zone node[:ec2][:placement_availability_zone]
volume_type options[:piops] ? 'io1' : 'standard'
volume_type options[:piops] ? 'io1' : options[:gp2] ? 'gp2' : 'standard'
piops options[:piops]
if node[:ebs][:volume][:encryption]
encrypted true
kms_key_id node[:ebs][:volume][:kms_key_id]
end
action :nothing
delete_on_termination options[:delete_on_termination]
end
vol.run_action(:create)
vol.run_action(:attach)
Expand Down Expand Up @@ -57,6 +73,7 @@
device device
options 'noatime,nobootwait'
action [:mount, :enable]
only_if { device and options.has_key?(:fstype) }
end

end