Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

LXD drivers update #2685

Merged
merged 5 commits into from
Dec 5, 2018
Merged
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
10 changes: 9 additions & 1 deletion SConstruct
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,7 @@ else:
# libxml2
main_env.ParseConfig('xml2-config --libs --cflags')

svncterm_path = 'src/vmm_mad/remotes/lib/lxd/svncterm_server/SConstruct'

# SCONS scripts to build
build_scripts=[
Expand Down Expand Up @@ -269,9 +270,16 @@ build_scripts=[
'src/im_mad/collectd/SConstruct',
'src/client/SConstruct',
'src/docker_machine/SConstruct',
'src/vmm_mad/remotes/lib/lxd/svncterm_server/SConstruct'
svncterm_path
]

# disable svncterm
svncterm = ARGUMENTS.get('svncterm', 'yes')
if svncterm == 'no':
build_scripts.remove(svncterm_path)
else:
pass

for script in build_scripts:
env = main_env.Clone()
SConscript(script, exports='env')
7 changes: 7 additions & 0 deletions src/vmm_mad/remotes/lib/lxd/catfstab
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#!/bin/bash

# Sanitize cat arguments to run safely under sudo
# Access container fstab for OpenNebula containers. Example:
# /var/lib/lxd/storage-pools/default/containers/one-34/rootfs/etc/fstab

echo $1 | grep -q '/[^[:space:]]\+/one-[0-9]\+/rootfs/etc/fstab$' && [ -f $1 ] && cat $1
2 changes: 0 additions & 2 deletions src/vmm_mad/remotes/lib/lxd/container.rb
Original file line number Diff line number Diff line change
Expand Up @@ -392,8 +392,6 @@ def new_disk_mapper(disk)

ds = "#{ds_path}/#{ds_id}/#{vm_id}/disk.#{disk_id}"

Command.execute("#{Mapper::COMMANDS[:chmod_nfs]} #{ds}", false)

_rc, out, _err = Command.execute("#{Mapper::COMMANDS[:file]} #{ds}", false)

case out
Expand Down
30 changes: 16 additions & 14 deletions src/vmm_mad/remotes/lib/lxd/mapper/mapper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ class Mapper
:mount => 'sudo mount',
:umount => 'sudo umount',
:kpartx => 'sudo kpartx',
:nbd => 'sudo qemu-nbd',
:nbd => 'sudo -u root -g oneadmin qemu-nbd',
:su_mkdir => 'sudo mkdir -p',
:mkdir => 'mkdir -p',
:cat => 'sudo cat',
Expand All @@ -66,7 +66,6 @@ class Mapper
:e2fsck => 'sudo e2fsck',
:resize2fs => 'sudo resize2fs',
:xfs_growfs => 'sudo xfs_growfs',
:chmod_nfs => 'chmod o+w',
:rbd => 'sudo rbd --id'
}

Expand Down Expand Up @@ -182,18 +181,19 @@ def map(one_vm, disk, directory)
def unmap(one_vm, disk, directory)
OpenNebula.log_info "Unmapping disk at #{directory}"

sys_parts = lsblk('')

return false if !sys_parts
sys_parts = lsblk('')

return false unless sys_parts

partitions = []
device = ''
real_path = directory

ds = one_vm.lxdrc[:datastore_location] + "/#{one_vm.sysds_id}"
real_ds = File.readlink(ds) if File.symlink?(ds)

real_path = directory
real_path = real_ds + directory.split(ds)[-1] if directory.include?(ds)
if File.symlink?(ds)
real_ds = File.readlink(ds)
real_path = real_ds + directory.split(ds)[-1] if directory.include?(ds)
end

sys_parts.each { |d|
if d['mountpoint'] == real_path
Expand All @@ -213,13 +213,15 @@ def unmap(one_vm, disk, directory)
break if !partitions.empty?
}

partitions.delete_if { |p| !p['mountpoint'] }
partitions.delete_if { |p| !p['mountpoint'] }

partitions.sort! { |a,b|
b['mountpoint'].length <=> a['mountpoint'].length
}

umount(partitions)

partitions.sort! { |a,b|
b['mountpoint'].length <=> a['mountpoint'].length
}

umount(partitions)

do_unmap(device, one_vm, disk, real_path)

Expand Down
3 changes: 3 additions & 0 deletions src/vmm_mad/remotes/lib/lxd/mapper/qcow2.rb
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ def do_map(one_vm, disk, directory)
dsrc = disk_source(one_vm, disk)
cmd = "#{COMMANDS[:nbd]} -c #{device} #{dsrc}"

ds = one_vm.lxdrc[:datastore_location] + "/#{one_vm.sysds_id}"
File.chmod(0664, dsrc) if File.symlink?(ds)

rc, _out, err = Command.execute(cmd, true)

if rc != 0
Expand Down
2 changes: 1 addition & 1 deletion src/vmm_mad/remotes/lib/lxd/opennebula-lxd
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,4 @@
#

Cmnd_Alias ONE_MAPPER = /bin/lsblk, /sbin/losetup, /bin/mount, /bin/umount, /sbin/kpartx, /usr/bin/qemu-nbd, /bin/mkdir, /usr/bin/catfstab, /sbin/e2fsck, /sbin/resize2fs, /usr/sbin/xfs_growfs, /usr/bin/rbd
oneadmin ALL=(ALL) NOPASSWD: ONE_MAPPER
oneadmin ALL=(ALL:ALL) NOPASSWD: ONE_MAPPER