1. 27 1月, 2020 3 次提交
    • D
      libvirt: support an "embed" URI path selector for opening drivers · 88446e07
      Daniel P. Berrangé 提交于
      The driver URI scheme:
      
        "$drivername:///embed?root=/some/path"
      
      enables a new way to use the drivers by embedding them directly in the
      calling process. To use this the process must have a thread running the
      libvirt event loop. This URI will then cause libvirt to dynamically load
      the driver module and call its global initialization function. This
      syntax is applicable to any driver, but only those will have been
      modified to support a custom root directory and embed URI path will
      successfully open.
      
      The application can now make normal libvirt API calls which are all
      serviced in-process with no RPC layer involved.
      
      It is required to specify an explicit root directory, and locks will be
      acquired on this directory to avoid conflicting with another app that
      might accidentally pick the same directory.
      
      Use of '/' is not explicitly forbidden, but note that the file layout
      used underneath the embedded driver root does not match the file
      layout used by system/session mode drivers. So this cannot be used as
      a backdoor to interact with, or fake, the system/session mode drivers.
      
      Libvirt will create arbitrary files underneath this root directory. The
      root directory can be kept untouched across connection open attempts if
      the application needs persistence. The application is responsible for
      purging everything underneath this root directory when finally no longer
      required.
      
      Even when a virt driver is used in embedded mode, it is still possible
      for it to in turn use functionality that calls out to other secondary
      drivers in libvirtd. For example an embedded instance of QEMU can open
      the network, secret or storage drivers in the system libvirtd.
      
      That said, the application would typically want to at least open an
      embedded secret driver ("secret:///embed?root=/some/path"). Note that
      multiple different embedded drivers can use the same root prefix and
      co-operate just as they would inside a normal libvirtd daemon.
      
      A key thing to note is that for this to work, the application that links
      to libvirt *MUST* be built with -Wl,--export-dynamic to ensure that
      symbols from libvirt.so are exported & thus available to the dynamically
      loaded driver module. If libvirt.so itself was dynamically loaded then
      RTLD_GLOBAL must be passed to dlopen().
      Reviewed-by: NMichal Privoznik <mprivozn@redhat.com>
      Signed-off-by: NDaniel P. Berrangé <berrange@redhat.com>
      88446e07
    • D
      libvirt: pass a directory path into drivers for embedded usage · 207709a0
      Daniel P. Berrangé 提交于
      The intent here is to allow the virt drivers to be run directly embedded
      in an arbitrary process without interfering with libvirtd. To achieve
      this they need to store all their configuration & state in a separate
      directory tree from the main system or session libvirtd instances.
      
      This can be useful for doing testing of the virt drivers in "make check"
      without interfering with the user's own libvirtd instances.
      
      It can also be used for applications using KVM/QEMU as a piece of
      infrastructure to build an service, rather than for general purpose
      OS hosting. A long standing example is libguestfs, which would prefer
      if its temporary VMs did show up in the main libvirtd VM list, because
      this confuses apps such as OpenStack Nova. A more recent example would
      be Kata which is using KVM as a technology to build containers.
      Reviewed-by: NMichal Privoznik <mprivozn@redhat.com>
      Reviewed-by: NCole Robinson <crobinso@redhat.com>
      Signed-off-by: NDaniel P. Berrangé <berrange@redhat.com>
      207709a0
    • D
  2. 25 1月, 2020 6 次提交
  3. 24 1月, 2020 15 次提交
  4. 23 1月, 2020 5 次提交
  5. 22 1月, 2020 2 次提交
  6. 21 1月, 2020 2 次提交
  7. 20 1月, 2020 1 次提交
  8. 17 1月, 2020 6 次提交