Skip to content

Commit

Permalink
Implement Ceph multiple pools and tests
Browse files Browse the repository at this point in the history
  • Loading branch information
GaetanF committed Dec 23, 2024
1 parent ffae6a5 commit 51d0a00
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 7 deletions.
2 changes: 1 addition & 1 deletion lib/fog/libvirt/models/compute/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ After adding the authentication key to a libvirt secret, it can be configured as
```
monitor=mon001.example.com,mon002.example.com,mon003.example.com
port=6789
libvirt_ceph_pool=rbd_pool_name
libvirt_ceph_pool=rbd_pool_name,second_rbd_pool_name
auth_username=libvirt
auth_uuid=uuid_of_libvirt_secret
bus_type=virtio
Expand Down
12 changes: 6 additions & 6 deletions lib/fog/libvirt/models/compute/server.rb
Original file line number Diff line number Diff line change
Expand Up @@ -346,13 +346,13 @@ def to_xml

volumes.each_with_index do |volume, index|
target_device = "vd#{('a'..'z').to_a[index]}"
if ceph_args && volume.pool_name.include?(ceph_args["libvirt_ceph_pool"])
if ceph_args && ceph_args["libvirt_ceph_pool"]&.split(",")&.include?(volume.pool_name)
xml.disk(:type => "network", :device => "disk") do
xml.driver(:name => "qemu", :type => volume.format_type, :cache => "writeback", :discard => "unmap")
xml.source(:protocol => "rbd", :name => volume.path)

ceph_args["monitor"]&.split(",")&.each do |monitor|
xml.host(:name => monitor, :port => ceph_args["port"])
xml.source(:protocol => "rbd", :name => volume.path) do
ceph_args["monitor"]&.split(",")&.each do |monitor|
xml.host(:name => monitor, :port => ceph_args["port"])
end
end

xml.auth(:username => ceph_args["auth_username"]) do
Expand All @@ -363,7 +363,7 @@ def to_xml
end
end

xml.target(:dev => target_device, :bus => args["bus_type"] == "virtio" ? "virtio" : "scsi")
xml.target(:dev => target_device, :bus => ceph_args["bus_type"] == "virtio" ? "virtio" : "scsi")
end
else
is_block = volume.path.start_with?("/dev/")
Expand Down
60 changes: 60 additions & 0 deletions tests/libvirt/models/compute/server_tests.rb
Original file line number Diff line number Diff line change
@@ -1,10 +1,50 @@
RealFile = File
class FakeFile < RealFile
def self.file?(path)
if path == '/etc/foreman/ceph.conf'

Check warning on line 4 in tests/libvirt/models/compute/server_tests.rb

View workflow job for this annotation

GitHub Actions / runner / rubocop

[rubocop] reported by reviewdog 🐶 Use a guard clause (`return true if path == '/etc/foreman/ceph.conf'`) instead of wrapping the code inside a conditional expression. Raw Output: tests/libvirt/models/compute/server_tests.rb:4:5: C: Style/GuardClause: Use a guard clause (`return true if path == '/etc/foreman/ceph.conf'`) instead of wrapping the code inside a conditional expression.
return true

Check warning on line 5 in tests/libvirt/models/compute/server_tests.rb

View workflow job for this annotation

GitHub Actions / runner / rubocop

[rubocop] reported by reviewdog 🐶 Redundant `return` detected. Raw Output: tests/libvirt/models/compute/server_tests.rb:5:7: C: Style/RedundantReturn: Redundant `return` detected.
else
return RealFile.file(path)

Check warning on line 7 in tests/libvirt/models/compute/server_tests.rb

View workflow job for this annotation

GitHub Actions / runner / rubocop

[rubocop] reported by reviewdog 🐶 Redundant `return` detected. Raw Output: tests/libvirt/models/compute/server_tests.rb:7:7: C: Style/RedundantReturn: Redundant `return` detected.
end
end

def self.readlines(path)
if path == '/etc/foreman/ceph.conf'

Check warning on line 12 in tests/libvirt/models/compute/server_tests.rb

View workflow job for this annotation

GitHub Actions / runner / rubocop

[rubocop] reported by reviewdog 🐶 Use a guard clause (`return RealFile.readlines(path) unless path == '/etc/foreman/ceph.conf'`) instead of wrapping the code inside a conditional expression. Raw Output: tests/libvirt/models/compute/server_tests.rb:12:5: C: Style/GuardClause: Use a guard clause (`return RealFile.readlines(path) unless path == '/etc/foreman/ceph.conf'`) instead of wrapping the code inside a conditional expression.
return [

Check warning on line 13 in tests/libvirt/models/compute/server_tests.rb

View workflow job for this annotation

GitHub Actions / runner / rubocop

[rubocop] reported by reviewdog 🐶 Redundant `return` detected. Raw Output: tests/libvirt/models/compute/server_tests.rb:13:7: C: Style/RedundantReturn: Redundant `return` detected.
"monitor=mon001.example.com,mon002.example.com,mon003.example.com",
"port=6789",
"libvirt_ceph_pool=rbd_pool_name,second_rbd_pool_name",
"auth_username=libvirt",
"auth_uuid=uuid_of_libvirt_secret",
"bus_type=virtio"
]
else
return RealFile.readlines(path)

Check warning on line 22 in tests/libvirt/models/compute/server_tests.rb

View workflow job for this annotation

GitHub Actions / runner / rubocop

[rubocop] reported by reviewdog 🐶 Redundant `return` detected. Raw Output: tests/libvirt/models/compute/server_tests.rb:22:7: C: Style/RedundantReturn: Redundant `return` detected.
end
end
end

Shindo.tests('Fog::Compute[:libvirt] | server model', ['libvirt']) do

servers = Fog::Compute[:libvirt].servers
# Match the mac in dhcp_leases mock
nics = Fog.mock? ? [{ :type => 'network', :network => 'default', :mac => 'aa:bb:cc:dd:ee:ff' }] : nil
server = servers.create(:name => Fog::Mock.random_letters(8), :nics => nics)

before do
Object.class_eval do
remove_const(:File)
const_set(:File, FakeFile)
end
end

after do
Object.class_eval do
remove_const(:File)
const_set(:File, RealFile)
end
end

tests('The server model should') do
tests('have the action') do
test('autostart') { server.respond_to? 'autostart' }
Expand Down Expand Up @@ -89,6 +129,26 @@
xml = server.to_xml
xml.match?(/<disk type="block" device="disk">/) && xml.match?(%r{<source dev="/dev/sda"/>})
end
test("with disk of type ceph") do
server = Fog::Libvirt::Compute::Server.new(
{
:nics => [],
:volumes => [
Fog::Libvirt::Compute::Volume.new({ :path => "rbd_pool_name/block-1", :pool_name => "rbd_pool_name" })
]
}
)

Check warning on line 141 in tests/libvirt/models/compute/server_tests.rb

View workflow job for this annotation

GitHub Actions / runner / rubocop

[rubocop] reported by reviewdog 🐶 Trailing whitespace detected. Raw Output: tests/libvirt/models/compute/server_tests.rb:141:1: C: Layout/TrailingWhitespace: Trailing whitespace detected.
xml = server.to_xml

network_disk = xml.match?(/<disk type="network" device="disk">/)
mon_host = xml.match?(%r{<host name="mon001.example.com" port="6789"/>})
source_rbd = xml.match?(%r{<source protocol="rbd" name="rbd_pool_name/block-1">})
auth_username = xml.match?(/<auth username="libvirt">/)
auth_secret = xml.match?(%r{<secret type="ceph" uuid="uuid_of_libvirt_secret"/>})

network_disk && mon_host && source_rbd && auth_username && auth_secret
end
test("with q35 machine type on x86_64") { server.to_xml.match?(%r{<type arch="x86_64" machine="q35">hvm</type>}) }
end
test("with efi firmware") do
Expand Down

0 comments on commit 51d0a00

Please sign in to comment.