This file is indexed.

/usr/share/rubygems-integration/all/gems/vagrant-libvirt-0.0.43/lib/vagrant-libvirt/action/create_domain_volume.rb is in vagrant-libvirt 0.0.43-2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
require 'log4r'

module VagrantPlugins
  module ProviderLibvirt
    module Action
      # Create a snapshot of base box image. This new snapshot is just new
      # cow image with backing storage pointing to base box image. Use this
      # image as new domain volume.
      class CreateDomainVolume
        include VagrantPlugins::ProviderLibvirt::Util::ErbTemplate

        def initialize(app, _env)
          @logger = Log4r::Logger.new('vagrant_libvirt::action::create_domain_volume')
          @app = app
        end

        def call(env)
          env[:ui].info(I18n.t('vagrant_libvirt.creating_domain_volume'))

          # Get config options.
          config = env[:machine].provider_config

          # This is name of newly created image for vm.
          @name = "#{env[:domain_name]}.img"

          # Verify the volume doesn't exist already.
          domain_volume = ProviderLibvirt::Util::Collection.find_matching(
            env[:machine].provider.driver.connection.volumes.all, @name
          )
          raise Errors::DomainVolumeExists if domain_volume

          # Get path to backing image - box volume.
          box_volume = ProviderLibvirt::Util::Collection.find_matching(
            env[:machine].provider.driver.connection.volumes.all, env[:box_volume_name]
          )
          @backing_file = box_volume.path

          # Virtual size of image. Take value worked out by HandleBoxImage
          @capacity = env[:box_virtual_size] # G

          # Create new volume from xml template. Fog currently doesn't support
          # volume snapshots directly.
          begin
            xml = Nokogiri::XML::Builder.new do |xml|
              xml.volume do
                xml.name(@name)
                xml.capacity(@capacity, unit: 'G')
                xml.target do
                  xml.format(type: 'qcow2')
                  xml.permissions do
                    xml.owner 0
                    xml.group 0
                    xml.mode '0600'
                    xml.label 'virt_image_t'
                  end
                end
                xml.backingStore do
                  xml.path(@backing_file)
                  xml.format(type: 'qcow2')
                  xml.permissions do
                    xml.owner 0
                    xml.group 0
                    xml.mode '0600'
                    xml.label 'virt_image_t'
                  end
                end
              end
            end.to_xml(
              save_with: Nokogiri::XML::Node::SaveOptions::NO_DECLARATION |
                         Nokogiri::XML::Node::SaveOptions::NO_EMPTY_TAGS |
                         Nokogiri::XML::Node::SaveOptions::FORMAT
            )
            domain_volume = env[:machine].provider.driver.connection.volumes.create(
              xml: xml,
              pool_name: config.storage_pool_name
            )
          rescue Fog::Errors::Error => e
            raise Errors::FogDomainVolumeCreateError,
                  error_message: e.message
          end

          @app.call(env)
        end
      end
    end
  end
end