Blob Blame History Raw
# Packages names
%global vdsm_name vdsm
%global vdsm_bootstrap vdsm-bootstrap
%global vdsm_reg vdsm-reg

# Upstream release
#% global vdsm_release e952471
#% global vdsm_relvtag .git%{vdsm_release}
#% global vdsm_relttag -%{vdsm_release}

# Required users and groups
%global vdsm_user vdsm
%global vdsm_group kvm
%global qemu_group qemu
%global snlk_group sanlock
%global snlk_user sanlock

# Required paths
%global _polkitdir %{_localstatedir}/lib/polkit-1/localauthority/10-vendor.d

Name:           %{vdsm_name}
Version:        4.10.0
Release:        5%{?vdsm_relvtag}%{?dist}%{?extra_release}
Summary:        Virtual Desktop Server Manager

Group:          Applications/System
License:        GPLv2+
Url:            http://www.ovirt.org/wiki/Vdsm
# The source for this package was pulled from upstream's vcs.
# Use the following commands to generate the tarball:
#  git clone http://gerrit.ovirt.org/p/vdsm
#  cd vdsm
#  git reset --hard {vdsm_release}
#  ./autogen.sh --system
#  make VERSION={version}-{vdsm_release} dist
Source0:        %{vdsm_name}-%{version}%{?vdsm_relttag}.tar.gz

Patch0: 0001-deployUtil.yumFind-rename-and-simplify-semantics.patch
Patch1: 0002-drop-deployUtil.yumSearch.patch
Patch2: 0003-deployUtil.yumSearchVersion-compare-versions-sanely.patch
Patch3: 0004-Iterates-over-delete-candidates-networks-only-once.patch
Patch4: 0005-options-translation-in-setupNetworks-is-not-relevant.patch
Patch5: 0006-Minor-optimization-for-delNetwork.patch
Patch6: 0007-Don-t-ignore-bridgeless-networks-in-ifaceUsers.patch
Patch7: 0008-Minor-optimization-for-addNetwork.patch
Patch8: 0009-Use-already-known-iface-in-addNetwork.patch
Patch9: 0010-Use-proper-MTU-on-bonding-when-add-network.patch
Patch10: 0011-Add-bridge-on-top-of-VLAN-if-exists.patch
Patch11: 0012-BZ-830485-Add-netConfigDirty-bit-to-getVdsCaps-repor.patch
Patch12: 0013-remove-flag-skipLibvirt.patch
Patch13: 0014-BZ-826873-Allow-to-change-bond-without-network-attac.patch
Patch14: 0015-BZ-830486-Allow-to-change-network-according-the-diff.patch
Patch15: 0016-BZ-826467-Allow-to-remove-bond-and-attach-network-to.patch
Patch16: 0017-Related-to-BZ-826873-Allow-to-create-bond-without-ne.patch
Patch17: 0018-BZ-832577-node-can-t-be-approved.patch
Patch18: 0019-BZ-824298-fix-typo-in-keyword-argument-exc_info.patch
Patch19: 0020-deployUtil-use-os.uname-instead-of-bin-uname.patch
Patch20: 0021-deployUtil-slightly-saner-kernel-version-comparison.patch
Patch21: 0022-BZ-835784-Allow-to-create-a-network-on-top-of-existi.patch
Patch22: 0023-BZ-833119-Allow-to-create-VLANed-network-on-top-of-e.patch
Patch23: 0024-BZ-833803-Avoid-bond-breaking-after-network-detach.patch
Patch24: 0025-Handle-bond-properly-if-connectivity-check-fail.patch
Patch25: 0026-BZ-806555-having-etc-ovirt-node-means-it-is-a-node.patch
Patch26: 0027-bump-libvirt-version-to-fix-readonly-lease-unsupport.patch
Patch27: 0028-BZ-832199-move-selinux-from-init-to-spec.patch
Patch28: 0029-BZ-838097-_addNetworkValidation-do-not-explode-if-ST.patch
Patch29: 0030-ovirt_functions-fix-elif-statement.patch
Patch30: 0031-BZ-837443-removeBridge-drop-remove-interface.patch
Patch31: 0032-BZ-837443-replace-the-netinfo-import.patch
Patch32: 0033-configNetwork-fix-NetInfo-call.patch
Patch33: 0034-BZ-837443-removeVlan-drop-remove-interface.patch
Patch34: 0035-BZ-837443-remove-bridge-before-add-VDSM-bridge.patch
Patch35: 0036-BZ-836954-Allow-to-break-bond-and-create-a-new-netwo.patch
Patch36: 0037-BZ-837054-Do-not-detach-network-from-the-bond-during.patch
Patch37: 0038-Remove-redundant-explicitBonding-parameter-from-setu.patch
Patch38: 0039-configNet-clear-up-atomicBackup-arg.patch
Patch39: 0040-configNet-atomicBackup-remove-new-files-upon-restore.patch

BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)

BuildRequires: python
BuildRequires: python-devel
BuildRequires: pyflakes
BuildRequires: python-nose
BuildRequires: python-pep8

# BuildRequires needed by the tests during the build
BuildRequires: python-ethtool
BuildRequires: libvirt-python

%if !0%{?rhel}
BuildRequires: systemd-units
%endif

Requires: which
Requires: sudo >= 1.7.3
Requires: logrotate >= 3.8.0
Requires: xz
Requires: ntp
Requires: python-ethtool
Requires: nfs-utils dmidecode
Requires: lvm2 >= 2.02.95
Requires: sanlock >= 2.1, sanlock-python

%if 0%{?rhel}
Requires: python
# Update the qemu-kvm requires when block_stream will be included
Requires: qemu-kvm >= 2:0.12.1.2-2.227
Requires: qemu-img >= 2:0.12.1.2-2.227
Requires: libvirt >= 0.9.10-20
Requires: libvirt-python, libvirt-lock-sanlock
Requires: iscsi-initiator-utils >= 6.2.0.872-15
Requires: device-mapper-multipath >= 0.4.9-52
Requires: e2fsprogs >= 1.41.12-11
%else
# Subprocess and thread bug was found on python 2.7.2
Requires: python >= 2.7.3
Requires: qemu-kvm >= 2:0.15.0-4
Requires: qemu-img >= 2:0.15.0-4
#readonly lease ignored by default on 0.9.11.4-3
Requires: libvirt >= 0.9.11.4-3
Requires: libvirt-python, libvirt-lock-sanlock
Requires: iscsi-initiator-utils >= 6.2.0.872-14
Requires: device-mapper-multipath >= 0.4.9-18
Requires: e2fsprogs >= 1.41.14
%endif

Requires: psmisc >= 22.6-15
Requires: fence-agents
Requires: bridge-utils
Requires: sos
Requires: tree
Requires: dosfstools
Requires: policycoreutils-python
Requires(pre,preun): policycoreutils-python
Requires: libselinux-python
Requires: kernel >= 2.6.32-198
Requires: %{name}-python = %{version}-%{release}
Requires: selinux-policy-targeted >= 3.7.19-80.el6
Requires: pyparted
Requires(post): /usr/sbin/saslpasswd2

%description
The VDSM service is required by a Virtualization Manager to manage the
Linux hosts. VDSM manages and monitors the host's storage, memory and
networks as well as virtual machine creation, other host administration
tasks, statistics gathering, and log collection.

%package cli
Summary:        VDSM command line interface
BuildArch:      noarch

Requires: %{name}-python = %{version}-%{release}
Requires: %{name}-xmlrpc = %{version}-%{release}

%description cli
Call VDSM commands from the command line. Used for testing and debugging.

%package xmlrpc
Summary:        VDSM xmlrpc API
BuildArch:      noarch

Requires: %{name}-python = %{version}-%{release}

%description xmlrpc
An XMLRPC interface for interacting with vdsmd. Primary control interface for
ovirt-engine and vdsClient.

%package rest
Summary:        VDSM REST API
BuildArch:      noarch

Requires: %{name}-python = %{version}-%{release}
Requires: python-cherrypy python-cheetah

%description rest
A REST interface for interacting with vdsmd.

%package bootstrap
Summary:        VDSM bootstrapping package
BuildArch:      noarch

%description bootstrap
VDSM bootstrapping package. Used for delivering the bootstrap code onto the
Virtualization Manager.

%package reg
Summary:        VDSM registration package
BuildArch:      noarch

Requires: %{name} = %{version}-%{release}
Requires: traceroute

%description reg
VDSM registration package. Used to register a Linux host to a Virtualization
Manager.

%package python
Summary:        VDSM python libraries

%description python
Shared libraries beween the various VDSM packages.

%package debug-plugin
Summary:        VDSM Debug Plugin
Requires:       vdsm
Requires:       %{name}-xmlrpc = %{version}-%{release}
BuildArch:      noarch

%description debug-plugin
Used by the trained monkeys at Red Hat to insert chaos and mayhem in to VDSM.

%package tests
Summary:        VDSM Test Suite
Requires:       vdsm = %{version}-%{release}
BuildArch:      noarch

%description tests
A test suite for verifying the functionality of a running vdsm instance

%package hook-vhostmd
Summary:        VDSM hook set for interaction with vhostmd
Requires:       vhostmd
BuildArch:      noarch

%description hook-vhostmd
VDSM hook to use vhostmd per VM according to Virtualization Manager requests.

%package hook-faqemu
Summary:        Fake qemu process for VDSM quality assurance
BuildArch:      noarch

%description hook-faqemu
VDSM hook used for testing VDSM with multiple fake virtual machines without
running real guests.

%package hook-directlun
Summary:        Direct LUN support for VDSM
BuildArch:      noarch

%description hook-directlun
VDSM hook enable user to add storage LUN for VDSM
without the sharing and storage handling of VDSM.

%package hook-fileinject
Summary:        Allow uploading file to VMs disk
BuildArch:      noarch

%description hook-fileinject
Hook is getting target file name and its content and
create that file in target machine.

%package hook-floppy
Summary:        Allow adding floppy to VM
BuildArch:      noarch

%description hook-floppy
Allow adding floppy to VM

%package hook-hostusb
Summary:        Allow attaching USB device from host
BuildArch:      noarch

%description hook-hostusb
Hook is getting vendor and product id of USB device
disconnect it from host and attach it to VM

%package hook-hugepages
Summary:        Huge pages enable user to handle VM with 2048KB page files.
BuildArch:      noarch

%description hook-hugepages
Hook is getting number of huge pages reserve them for the VM,
and enable user to handle VM with 2048KB page files.

%package hook-isolatedprivatevlan
Summary:        Isolated network environment for VMs
BuildArch:      noarch

%description hook-isolatedprivatevlan
limit VM traffic to a specific gateway by its mac address,
hook prevent VM from spoofing its mac or  ip address
by using <filterref filter='clean-traffic'/> libvirt filter
and by adding custom filter: isolatedprivatevlan-vdsm.xml

%package hook-numa
Summary:        numa sopport for VDSM
BuildArch:      noarch

%description hook-numa
Hooks is getting number/rage of numa nodes and numa mode,
and update the VM xml.

%package hook-pincpu
Summary:        Hook pin VM so specific CPUs
BuildArch:      noarch

%description hook-pincpu
pincpu is hook for VDSM.
pincpu enable to pin virtual machine to a specific CPUs.

%package hook-promisc
Summary:        Network interface promiscuous mode support for VDSM
BuildArch:      noarch

%description hook-promisc
VDSM promiscuous mode let user define a VM interface that will capture
all network traffic.

%package hook-qos
Summary:        QoS network in/out traffic support for VDSM
BuildArch:      noarch

%description hook-qos
Hook adds QoS in/out traffic to VMs interfaces

%package hook-scratchpad
Summary:        One time disk creation for VDSM
BuildArch:      noarch

%description hook-scratchpad
scratchpad hook for VDSM
Hook creates a disk for a VM onetime usage,
the disk will be erased when the VM destroyed.
VM cannot be migrated when using scratchpad hook

%package hook-smartcard
Summary:        Smartcard support for Spice protocol in VDSM
BuildArch:      noarch

%description hook-smartcard
Smartcard hook add support for spice in VDSM.
Smartcard hook enable user to use its smartcard inside virtual machines.

%package hook-smbios
Summary:        Adding custom smbios entries to libvirt domain via VDSM
BuildArch:      noarch

%description hook-smbios
Adding custom smbios entries to libvirt domain via VDSM
such as: vendor, version, date and release

%package hook-sriov
Summary:        sr-iov support for VDSM
BuildArch:      noarch

%description hook-sriov
sr-iov hook enable to add virtual functions exposed by the device
directly to a virtual machine.

%package hook-vmdisk
Summary:        External disk support for VDSM
BuildArch:      noarch

%description hook-vmdisk
Hook adds additional disk image for a VM (raw or qcow2)

%package gluster
Summary:        Gluster Plugin for VDSM
BuildArch:      noarch

Requires: %{name} = %{version}-%{release}
Requires: glusterfs glusterfs-server glusterfs-fuse

%description gluster
Gluster plugin enables VDSM to serve Gluster functionalities.

%prep
%setup -q -n %{vdsm_name}-%{version}%{?vdsm_relttag}

%patch0 -p1 -b .patch0
%patch1 -p1 -b .patch1
%patch2 -p1 -b .patch2
%patch3 -p1 -b .patch3
%patch4 -p1 -b .patch4
%patch5 -p1 -b .patch5
%patch6 -p1 -b .patch6
%patch7 -p1 -b .patch7
%patch8 -p1 -b .patch8
%patch9 -p1 -b .patch9
%patch10 -p1 -b .patch10
%patch11 -p1 -b .patch11
%patch12 -p1 -b .patch12
%patch13 -p1 -b .patch13
%patch14 -p1 -b .patch14
%patch15 -p1 -b .patch15
%patch16 -p1 -b .patch16
%patch17 -p1 -b .patch17
%patch18 -p1 -b .patch18
%patch19 -p1 -b .patch19
%patch20 -p1 -b .patch20
%patch21 -p1 -b .patch21
%patch22 -p1 -b .patch22
%patch23 -p1 -b .patch23
%patch24 -p1 -b .patch24
%patch25 -p1 -b .patch25
%patch26 -p1 -b .patch26
%patch27 -p1 -b .patch27
%patch28 -p1 -b .patch28
%patch29 -p1 -b .patch29
%patch30 -p1 -b .patch30
%patch31 -p1 -b .patch31
%patch32 -p1 -b .patch32
%patch33 -p1 -b .patch33
%patch34 -p1 -b .patch34
%patch35 -p1 -b .patch35
%patch36 -p1 -b .patch36
%patch37 -p1 -b .patch37
%patch38 -p1 -b .patch38
%patch39 -p1 -b .patch39

%build
%configure %{?with_hooks:--enable-hooks}
make
# Setting software_version and software_revision in dsaversion.py
baserelease=`echo "%{release}" | sed 's/\([0-9]\+\(\.[0-9]\+\)\?\).*/\1/'`
baseversion=`echo "%{version}" | sed 's/\([0-9]\+\(\.[0-9]\+\)\?\).*/\1/'`
sed -i -e 's/^software_version =.*/software_version = "'"${baseversion}"'"/' \
       -e 's/^software_revision =.*/software_revision = "'"${baserelease}"'"/' vdsm/dsaversion.py

%install
rm -rf %{buildroot}
make DESTDIR=%{buildroot} install

# Install the respawn utility
install -Dm 0755 vdsm/respawn \
                 %{buildroot}%{_datadir}/%{vdsm_name}/respawn

# Install the lvm rules
install -Dm 0644 vdsm/storage/12-vdsm-lvm.rules \
                 %{buildroot}/lib/udev/rules.d/12-vdsm-lvm.rules

install -Dm 0644 vdsm/limits.conf \
                 %{buildroot}/etc/security/limits.d/99-vdsm.conf

%if 0%{?rhel}
# Install the SysV init scripts
install -Dm 0755 vdsm/vdsmd.init %{buildroot}%{_initrddir}/vdsmd
install -Dm 0755 vdsm_reg/vdsm-reg.init %{buildroot}%{_initrddir}/vdsm-reg

# This is not commonplace, but we want /var/log/core to be a world-writable
# dropbox for core dumps
install -dDm 1777 %{buildroot}%{_localstatedir}/log/core
%else
# Install the configuration sample
install -Dm 0644 vdsm/vdsm.conf.sample \
                 %{buildroot}%{_sysconfdir}/vdsm/vdsm.conf

# Install the systemd scripts
install -Dm 0755 vdsm/vdsmd.init %{buildroot}/lib/systemd/systemd-vdsmd
install -Dm 0644 vdsm/vdsmd.service %{buildroot}%{_unitdir}/vdsmd.service
install -Dm 0755 vdsm_reg/vdsm-reg.init \
                 %{buildroot}/lib/systemd/systemd-vdsm-reg
install -Dm 0644 vdsm_reg/vdsm-reg.service \
                 %{buildroot}%{_unitdir}/vdsm-reg.service
# Install the polkit for libvirt
install -Dm 0644 vdsm/vdsm-libvirt-access.pkla \
                 %{buildroot}%{_polkitdir}/10-vdsm-libvirt-access.pkla
%endif

%check
# Disabling the nose tests until they'll all succeed in koji.
make check NOSE_EXCLUDE=".*"

%clean
rm -rf %{buildroot}

%pre
/usr/bin/getent passwd %{vdsm_user} >/dev/null || \
    /usr/sbin/useradd -r -u 36 -g %{vdsm_group} -d /var/lib/vdsm \
        -s /sbin/nologin -c "Node Virtualization Manager" %{vdsm_user}
/usr/sbin/usermod -a -G %{qemu_group},%{snlk_group} %{vdsm_user}
/usr/sbin/usermod -a -G %{qemu_group},%{vdsm_group} %{snlk_user}

# vdsm makes extensive use of nfs-exported images
# The next lines will collect the default selinux behaviour for the booleans
virtNFS=$(/usr/sbin/semanage boolean -l | /bin/grep virt_use_nfs | cut -d ',' -f 2)
virtSANLOCK=$(/usr/sbin/semanage boolean -l | /bin/grep virt_use_sanlock | cut -d ',' -f 2)

if [[ "${virtNFS}" == *off* || "${virtSANLOCK}" == *off* ]]; then
    /usr/sbin/semanage boolean -m -S targeted -F /dev/stdin  << _EOF
virt_use_nfs=1
virt_use_sanlock=1
_EOF
fi

if /usr/sbin/selinuxenabled; then
    /usr/sbin/setsebool virt_use_nfs on
    /usr/sbin/setsebool virt_use_sanlock on
fi

%post
# update the vdsm "secret" password for libvirt
if [ -f /etc/pki/vdsm/keys/libvirt_password ]; then
    /usr/sbin/saslpasswd2 -p -a libvirt vdsm@rhevh < \
        /etc/pki/vdsm/keys/libvirt_password
fi

# generate the vdsm certificates (if missing)
%{_libexecdir}/%{vdsm_name}/vdsm-gencerts.sh

%if 0%{?rhel}
if [ "$1" -eq 1 ] ; then
    /sbin/chkconfig --add vdsmd
fi
%else
if [ "$1" -eq 1 ] ; then
    /bin/systemctl enable vdsmd.service >/dev/null 2>&1 || :
    /bin/systemctl daemon-reload >/dev/null 2>&1 || :
fi
exit 0
%endif

%preun
%if 0%{?rhel}
if [ "$1" -eq 0 ]
then
    /sbin/service vdsmd stop > /dev/null 2>&1 || :
    /sbin/chkconfig --del vdsmd

    /bin/sed -i '/# by vdsm$/d' \
        /etc/libvirt/libvirtd.conf \
        /etc/libvirt/qemu.conf \
        /etc/sysconfig/libvirtd \
        /etc/sysctl.conf

    /bin/sed -i '/# VDSM section begin/,/# VDSM section end/d' \
        /etc/sysctl.conf

    /usr/sbin/semanage boolean -m -S targeted -F /dev/stdin  << _EOF
virt_use_nfs=0
virt_use_sanlock=0
_EOF

    if /usr/sbin/selinuxenabled; then
        /usr/sbin/setsebool virt_use_nfs off
        /usr/sbin/setsebool virt_use_sanlock off
    fi

    /usr/sbin/saslpasswd2 -p -a libvirt -d vdsm@rhevh

    if /sbin/initctl status libvirtd >/dev/null 2>/dev/null ; then
        /sbin/initctl stop libvirtd  >/dev/null 2>/dev/null
        rm -f /etc/init/libvirtd.conf

        /sbin/chkconfig libvirtd on
        /sbin/service libvirtd start >/dev/null
    fi
fi
%else
if [ "$1" -eq 0 ]; then
    /bin/systemctl --no-reload disable vdsmd.service > /dev/null 2>&1 || :
    /bin/systemctl stop vdsmd.service > /dev/null 2>&1 || :
fi
exit 0
%endif

%postun
%if 0%{?rhel}
if [ "$1" -ge 1 ]; then
    /sbin/service vdsmd condrestart > /dev/null 2>&1
fi
exit 0
%else
if [ "$1" -ge 1 ] ; then
    /bin/systemctl try-restart vdsmd.service >/dev/null 2>&1 || :
fi
exit 0
%endif

%if 0%{?rhel}
%triggerun -- libvirt
if [ "$2" -eq "0" ]; then
    /sbin/initctl stop libvirtd > /dev/null 2>&1 || :
fi

%triggerpostun -- libvirt
if [ "$2" -ge "1" ]; then
    /sbin/initctl restart libvirtd > /dev/null 2>&1 || :
fi
%endif

%post reg
%if 0%{?rhel}
if [ "$1" -eq 1 ] ; then
    /sbin/chkconfig --add vdsm-reg
fi
%else
if [ "$1" -eq 1 ] ; then
    /bin/systemctl enable vdsmd-reg.service >/dev/null 2>&1 || :
    /bin/systemctl daemon-reload >/dev/null 2>&1 || :
fi
exit 0
%endif

%preun reg
%if 0%{?rhel}
if [ "$1" -eq 0 ]
then
    /sbin/service vdsm-reg stop > /dev/null 2>&1 || :
    /sbin/chkconfig --del vdsm-reg
fi
%else
if [ "$1" -eq 0 ]; then
    /bin/systemctl --no-reload disable vdsmd-reg.service > /dev/null 2>&1 || :
    /bin/systemctl stop vdsmd-reg.service > /dev/null 2>&1 || :
fi
exit 0
%endif

%files
%defattr(-, root, root, -)
%doc COPYING README vdsm/vdsm.conf.sample
%if 0%{?rhel}
%{_initrddir}/vdsmd
%else
/lib/systemd/systemd-vdsmd
%{_unitdir}/vdsmd.service
%endif
%dir %attr(-, %{vdsm_user}, %{vdsm_group}) /rhev/data-center
%ghost %dir %attr(-, %{vdsm_user}, %{vdsm_group}) /rhev/data-center/hsm-tasks
%ghost %dir %attr(-, %{vdsm_user}, %{vdsm_group}) /rhev/data-center/mnt
%dir %{_libexecdir}/%{vdsm_name}
%dir %{_datadir}/%{vdsm_name}
%dir %{_datadir}/%{vdsm_name}/storage
%{_datadir}/%{vdsm_name}/alignmentScan.py*
%{_datadir}/%{vdsm_name}/blkid.py*
%{_datadir}/%{vdsm_name}/caps.py*
%{_datadir}/%{vdsm_name}/clientIF.py*
%{_datadir}/%{vdsm_name}/API.py*
%{_datadir}/%{vdsm_name}/hooking.py*
%{_datadir}/%{vdsm_name}/hooks.py*
%{_datadir}/%{vdsm_name}/libvirtev.py*
%{_datadir}/%{vdsm_name}/libvirtvm.py*
%{_datadir}/%{vdsm_name}/lsblk.py*
%{_datadir}/%{vdsm_name}/md_utils.py*
%{_datadir}/%{vdsm_name}/mk_sysprep_floppy
%{_datadir}/%{vdsm_name}/parted_utils.py*
%{_datadir}/%{vdsm_name}/mkimage.py*
%{_datadir}/%{vdsm_name}/supervdsm.py*
%{_datadir}/%{vdsm_name}/supervdsmServer.py*
%{_datadir}/%{vdsm_name}/vmChannels.py*
%{_datadir}/%{vdsm_name}/tc.py*
%{_datadir}/%{vdsm_name}/vdsm
%{_datadir}/%{vdsm_name}/vdsm-restore-net-config
%{_datadir}/%{vdsm_name}/vdsm-store-net-config
%{_datadir}/%{vdsm_name}/vm.py*
%{_datadir}/%{vdsm_name}/write-net-config
%config(noreplace) %{_sysconfdir}/%{vdsm_name}/logger.conf
%config(noreplace) %{_sysconfdir}/logrotate.d/vdsm
%config(noreplace) %{_sysconfdir}/modprobe.d/vdsm.conf
%config(noreplace) %{_sysconfdir}/rwtab.d/vdsm
%{_sysconfdir}/sudoers.d/50_vdsm
%{_sysconfdir}/cron.hourly/vdsm-logrotate
%{_sysconfdir}/cron.d/vdsm-libvirt-logrotate
%{_datadir}/%{vdsm_name}/guestIF.py*
%{_datadir}/%{vdsm_name}/logUtils.py*
%{_datadir}/%{vdsm_name}/dsaversion.py*
%{_datadir}/%{vdsm_name}/pthread.py*
%{_datadir}/%{vdsm_name}/betterThreading.py*
%{_libexecdir}/%{vdsm_name}/persist-vdsm-hooks
%{_libexecdir}/%{vdsm_name}/unpersist-vdsm-hook
%{_libexecdir}/%{vdsm_name}/ovirt_functions.sh
%{_libexecdir}/%{vdsm_name}/vdsm-gencerts.sh
%{_datadir}/%{vdsm_name}/storage/__init__.py*
%{_datadir}/%{vdsm_name}/storage/blockSD.py*
%{_datadir}/%{vdsm_name}/storage/blockVolume.py*
%{_datadir}/%{vdsm_name}/storage/devicemapper.py*
%{_datadir}/%{vdsm_name}/storage/dispatcher.py*
%{_datadir}/%{vdsm_name}/storage/domainMonitor.py*
%{_datadir}/%{vdsm_name}/storage/fileSD.py*
%{_datadir}/%{vdsm_name}/storage/fileUtils.py*
%{_datadir}/%{vdsm_name}/storage/fileVolume.py*
%{_datadir}/%{vdsm_name}/storage/fuser.py*
%{_datadir}/%{vdsm_name}/storage/hba.py*
%{_datadir}/%{vdsm_name}/storage/hsm.py*
%{_datadir}/%{vdsm_name}/storage/image.py*
%{_datadir}/%{vdsm_name}/storage/iscsiadm.py*
%{_datadir}/%{vdsm_name}/storage/iscsi.py*
%{_datadir}/%{vdsm_name}/storage/localFsSD.py*
%{_datadir}/%{vdsm_name}/storage/lvm.py*
%{_datadir}/%{vdsm_name}/storage/misc.py*
%{_datadir}/%{vdsm_name}/storage/mount.py*
%{_datadir}/%{vdsm_name}/storage/multipath.py*
%{_datadir}/%{vdsm_name}/storage/nfsSD.py*
%{_datadir}/%{vdsm_name}/storage/outOfProcess.py*
%{_datadir}/%{vdsm_name}/storage/persistentDict.py*
%{_datadir}/%{vdsm_name}/storage/processPool.py*
%{_datadir}/%{vdsm_name}/storage/resourceFactories.py*
%{_datadir}/%{vdsm_name}/storage/resourceManager.py*
%{_datadir}/%{vdsm_name}/storage/safelease.py*
%{_datadir}/%{vdsm_name}/storage/sdc.py*
%{_datadir}/%{vdsm_name}/storage/sd.py*
%{_datadir}/%{vdsm_name}/storage/securable.py*
%{_datadir}/%{vdsm_name}/storage/sp.py*
%{_datadir}/%{vdsm_name}/storage/storageConstants.py*
%{_datadir}/%{vdsm_name}/storage/storage_exception.py*
%{_datadir}/%{vdsm_name}/storage/storage_mailbox.py*
%{_datadir}/%{vdsm_name}/storage/storageServer.py*
%{_datadir}/%{vdsm_name}/storage/sync.py*
%{_datadir}/%{vdsm_name}/storage/taskManager.py*
%{_datadir}/%{vdsm_name}/storage/task.py*
%{_datadir}/%{vdsm_name}/storage/threadLocal.py*
%{_datadir}/%{vdsm_name}/storage/threadPool.py*
%{_datadir}/%{vdsm_name}/storage/volume.py*
%{_libexecdir}/%{vdsm_name}/safelease
%{_libexecdir}/%{vdsm_name}/spmprotect.sh
%{_libexecdir}/%{vdsm_name}/spmstop.sh
%dir %{_libexecdir}/%{vdsm_name}/hooks/before_vm_start
%dir %{_libexecdir}/%{vdsm_name}/hooks/after_vm_start
%dir %{_libexecdir}/%{vdsm_name}/hooks/before_vm_cont
%dir %{_libexecdir}/%{vdsm_name}/hooks/after_vm_cont
%dir %{_libexecdir}/%{vdsm_name}/hooks/before_vm_pause
%dir %{_libexecdir}/%{vdsm_name}/hooks/after_vm_pause
%dir %{_libexecdir}/%{vdsm_name}/hooks/before_vm_hibernate
%dir %{_libexecdir}/%{vdsm_name}/hooks/after_vm_hibernate
%dir %{_libexecdir}/%{vdsm_name}/hooks/before_vm_dehibernate
%dir %{_libexecdir}/%{vdsm_name}/hooks/after_vm_dehibernate
%dir %{_libexecdir}/%{vdsm_name}/hooks/before_vm_migrate_source
%dir %{_libexecdir}/%{vdsm_name}/hooks/after_vm_migrate_source
%dir %{_libexecdir}/%{vdsm_name}/hooks/before_vm_migrate_destination
%dir %{_libexecdir}/%{vdsm_name}/hooks/after_vm_migrate_destination
%dir %{_libexecdir}/%{vdsm_name}/hooks/before_vm_destroy
%dir %{_libexecdir}/%{vdsm_name}/hooks/after_vm_destroy
%dir %{_libexecdir}/%{vdsm_name}/hooks/before_vm_set_ticket
%dir %{_libexecdir}/%{vdsm_name}/hooks/after_vm_set_ticket
%dir %{_libexecdir}/%{vdsm_name}/hooks/before_vdsm_start
%dir %{_libexecdir}/%{vdsm_name}/hooks/after_vdsm_stop
%{_datadir}/%{vdsm_name}/configNetwork.py*
%{_datadir}/%{vdsm_name}/addNetwork
%{_datadir}/%{vdsm_name}/delNetwork
%{_datadir}/%{vdsm_name}/respawn
%{_datadir}/%{vdsm_name}/get-conf-item
%{_datadir}/%{vdsm_name}/set-conf-item
%{_datadir}/%{vdsm_name}/kaxmlrpclib.py*
%{_datadir}/%{vdsm_name}/dumpStorageTable.py*
%{_datadir}/%{vdsm_name}/ksm.py*
%{_datadir}/%{vdsm_name}/neterrors.py*
%{python_sitelib}/sos/plugins/vdsm.py*
/lib/udev/rules.d/12-vdsm-lvm.rules
/etc/security/limits.d/99-vdsm.conf
%{_mandir}/man8/vdsmd.8*
%if 0%{?rhel}
%dir %{_localstatedir}/log/core
%else
%{_polkitdir}/10-vdsm-libvirt-access.pkla
%endif

%defattr(-, %{vdsm_user}, %{qemu_group}, -)
%dir %{_localstatedir}/lib/libvirt/qemu/channels

%defattr(-, %{vdsm_user}, %{vdsm_group}, -)
%dir %{_sysconfdir}/pki/%{vdsm_name}
%dir %{_sysconfdir}/pki/%{vdsm_name}/keys
%dir %{_sysconfdir}/pki/%{vdsm_name}/certs
%config(noreplace) %{_sysconfdir}/pki/%{vdsm_name}/keys/libvirt_password
%dir %{_localstatedir}/lib/%{vdsm_name}
%dir %{_localstatedir}/lib/%{vdsm_name}/netconfback
%ghost %dir %{_localstatedir}/run/%{vdsm_name}
%ghost %dir %{_localstatedir}/run/%{vdsm_name}/pools
%ghost %dir %{_localstatedir}/run/%{vdsm_name}/payload
%dir %{_localstatedir}/log/%{vdsm_name}
%dir %{_localstatedir}/log/%{vdsm_name}/backup

%files python
%defattr(-, root, root, -)
%{_bindir}/vdsm-tool
%if !0%{?rhel}
%config(noreplace) %{_sysconfdir}/%{vdsm_name}/vdsm.conf
%endif
%{python_sitelib}/%{vdsm_name}/__init__.py*
%{python_sitelib}/%{vdsm_name}/config.py*
%{python_sitelib}/%{vdsm_name}/constants.py*
%{python_sitelib}/%{vdsm_name}/define.py*
%{python_sitelib}/%{vdsm_name}/exception.py*
%{python_sitelib}/%{vdsm_name}/libvirtconnection.py*
%{python_sitelib}/%{vdsm_name}/netinfo.py*
%{python_sitelib}/%{vdsm_name}/qemuImg.py*
%{python_sitelib}/%{vdsm_name}/SecureXMLRPCServer.py*
%{python_sitelib}/%{vdsm_name}/utils.py*
%{python_sitelib}/%{vdsm_name}/vdscli.py*
%{python_sitelib}/%{vdsm_name}/betterPopen/__init__.py*
%{python_sitelib}/%{vdsm_name}/betterPopen/createprocess.so
%{python_sitelib}/%{vdsm_name}/tool/__init__.py*

%files tests
%doc %{_datadir}/%{vdsm_name}/tests/README
%defattr(-, root, root, -)
%{_datadir}/%{vdsm_name}/tests/*.py*
%{_datadir}/%{vdsm_name}/tests/run_tests.sh
%{_datadir}/%{vdsm_name}/tests/cpu_info.out
%{_datadir}/%{vdsm_name}/tests/netmaskconversions
%{_datadir}/%{vdsm_name}/tests/functional/*.py*

%files hook-vhostmd
%defattr(-, root, root, -)
%doc COPYING
%{_sysconfdir}/sudoers.d/50_vdsm_hook_vhostmd
%{_libexecdir}/%{vdsm_name}/hooks/before_vm_start/50_vhostmd
%{_libexecdir}/%{vdsm_name}/hooks/before_vm_migrate_destination/50_vhostmd
%{_libexecdir}/%{vdsm_name}/hooks/before_vm_dehibernate/50_vhostmd
%{_libexecdir}/%{vdsm_name}/hooks/after_vm_destroy/50_vhostmd

%if 0%{?with_hooks}
%files hook-directlun
%defattr(-, vdsm, kvm, -)
%attr (440,root,root) %{_sysconfdir}/sudoers.d/50_vdsm_hook_directlun
%attr (755,vdsm,kvm) %{_libexecdir}/%{vdsm_name}/hooks/before_vm_start/50_directlun
%attr (755,vdsm,kvm) %{_libexecdir}/%{vdsm_name}/hooks/after_vm_destroy/50_directlun
%attr (755,vdsm,kvm) %{_libexecdir}/%{vdsm_name}/hooks/before_vm_migrate_destination/50_directlun

%files hook-fileinject
%defattr(-, vdsm, kvm, -)
%attr (755,vdsm,kvm) %{_libexecdir}/%{vdsm_name}/hooks/before_vm_start/50_fileinject

%files hook-floppy
%defattr(-, vdsm, kvm, -)
%attr (755,vdsm,kvm) %{_libexecdir}/%{vdsm_name}/hooks/before_vm_start/50_floppy
%attr (755,vdsm,kvm) %{_libexecdir}/%{vdsm_name}/hooks/before_vm_migrate_source/50_floppy

%files hook-hostusb
%defattr(-, vdsm, kvm, -)
%attr (440,root,root) %{_sysconfdir}/sudoers.d/50_vdsm_hook_hostusb
%attr (755,vdsm,kvm) %{_libexecdir}/%{vdsm_name}/hooks/before_vm_start/50_hostusb
%attr (755,vdsm,kvm) %{_libexecdir}/%{vdsm_name}/hooks/before_vm_migrate_source/50_hostusb
%attr (755,vdsm,kvm) %{_libexecdir}/%{vdsm_name}/hooks/after_vm_destroy/50_hostusb

%files hook-hugepages
%defattr(-, vdsm, kvm, -)
%attr (440,root,root) %{_sysconfdir}/sudoers.d/50_vdsm_hook_hugepages
%attr (755,vdsm,kvm) %{_libexecdir}/%{vdsm_name}/hooks/before_vm_start/50_hugepages
%attr (755,vdsm,kvm) %{_libexecdir}/%{vdsm_name}/hooks/before_vm_migrate_destination/50_hugepages
%attr (755,vdsm,kvm) %{_libexecdir}/%{vdsm_name}/hooks/after_vm_destroy/50_hugepages

%files hook-isolatedprivatevlan
%defattr(-, vdsm, kvm, -)
%attr (755,vdsm,kvm) %{_libexecdir}/%{vdsm_name}/hooks/before_vm_start/50_isolatedprivatevlan
%config(noreplace) %{_sysconfdir}/libvirt/nwfilter/isolatedprivatevlan-vdsm.xml

%files hook-numa
%defattr(-, vdsm, kvm, -)
%attr (755,vdsm,kvm) %{_libexecdir}/%{vdsm_name}/hooks/before_vm_start/50_numa

%files hook-pincpu
%defattr(-, vdsm, kvm, -)
%attr (755,vdsm,kvm) %{_libexecdir}/%{vdsm_name}/hooks/before_vm_start/50_pincpu

%files hook-promisc
%defattr(-, vdsm, kvm, -)
%attr (440,root,root) %{_sysconfdir}/sudoers.d/50_vdsm_hook_promisc
%attr (755,vdsm,kvm) %{_libexecdir}/%{vdsm_name}/hooks/after_vm_start/50_promisc
%attr (755,vdsm,kvm) %{_libexecdir}/%{vdsm_name}/hooks/before_vm_destroy/50_promisc

%files hook-qos
%defattr(-, vdsm, kvm, -)
%attr (755,vdsm,kvm) %{_libexecdir}/%{vdsm_name}/hooks/before_vm_start/50_qos

%files hook-scratchpad
%defattr(-, vdsm, kvm, -)
%attr (755,vdsm,kvm) %{_libexecdir}/%{vdsm_name}/hooks/before_vm_start/50_scratchpad
%attr (755,vdsm,kvm) %{_libexecdir}/%{vdsm_name}/hooks/before_vm_migrate_source/50_scratchpad
%attr (755,vdsm,kvm) %{_libexecdir}/%{vdsm_name}/hooks/after_vm_destroy/50_scratchpad

%files hook-smartcard
%defattr(-, vdsm, kvm, -)
%attr (755,vdsm,kvm) %{_libexecdir}/%{vdsm_name}/hooks/before_vm_start/50_smartcard

%files hook-smbios
%defattr(-, vdsm, kvm, -)
%attr (755,vdsm,kvm) %{_libexecdir}/%{vdsm_name}/hooks/before_vm_start/50_smbios

%files hook-sriov
%defattr(-, vdsm, kvm, -)
%attr (440,root,root) %{_sysconfdir}/sudoers.d/50_vdsm_hook_sriov
%attr (755,vdsm,kvm) %{_libexecdir}/%{vdsm_name}/hooks/before_vm_start/50_sriov
%attr (755,vdsm,kvm) %{_libexecdir}/%{vdsm_name}/hooks/after_vm_destroy/50_sriov
%attr (755,vdsm,kvm) %{_libexecdir}/%{vdsm_name}/hooks/before_vm_migrate_source/50_sriov

%files hook-vmdisk
%defattr(-, vdsm, kvm, -)
%attr (755,vdsm,kvm) %{_libexecdir}/%{vdsm_name}/hooks/before_vm_start/50_vmdisk
%endif

%files debug-plugin
%defattr(-, root, root, -)
%{_datadir}/%{vdsm_name}/vdsmDebugPlugin.py*
%{_datadir}/%{vdsm_name}/debugPluginClient.py*

%files cli
%defattr(-, root, root, -)
%doc COPYING
%{_bindir}/vdsClient
%{_datadir}/%{vdsm_name}/vdsClient.py*
%{_datadir}/%{vdsm_name}/vdsClientGluster.py*
%{_sysconfdir}/bash_completion.d/vdsClient
%{_mandir}/man1/vdsClient.1*

%files xmlrpc
%defattr(-, root, root, -)
%{_datadir}/%{vdsm_name}/BindingXMLRPC.py*

%files rest
%defattr(-, root, root, -)
%{_datadir}/%{vdsm_name}/rest/__init__.py*
%{_datadir}/%{vdsm_name}/rest/BindingREST.py*
%{_datadir}/%{vdsm_name}/rest/Dispatcher.py*
%{_datadir}/%{vdsm_name}/rest/Controller.py*
%{_datadir}/%{vdsm_name}/rest/templates/*.x
%{_datadir}/%{vdsm_name}/rest/templates/api.xsd
%{_datadir}/%{vdsm_name}/rest/templates/rsdl.xml

%files bootstrap
%defattr(-, root, root, -)
%doc COPYING
%{_datadir}/%{vdsm_bootstrap}/vds_bootstrap.py*
%{_datadir}/%{vdsm_bootstrap}/deployUtil.py*
%{_datadir}/%{vdsm_bootstrap}/vds_bootstrap_complete.py*

%files reg
%defattr(-, root, root, -)
%doc COPYING
%dir %{_sysconfdir}/%{vdsm_reg}
%dir %{_datadir}/%{vdsm_reg}
%config(noreplace) %{_sysconfdir}/logrotate.d/vdsm-reg
%config(noreplace) %{_sysconfdir}/%{vdsm_reg}/vdsm-reg.conf
%config(noreplace) %{_sysconfdir}/%{vdsm_reg}/logger.conf
%ghost %dir /data
%ghost %dir %attr(0775, root, root) /data/updates
%if 0%{?rhel}
%{_initrddir}/vdsm-reg
%else
/lib/systemd/systemd-vdsm-reg
%{_unitdir}/vdsm-reg.service
%endif
%{_datadir}/%{vdsm_reg}/vdsm-reg-setup
%{_datadir}/%{vdsm_reg}/define.py*
%{_datadir}/%{vdsm_reg}/vdsm-complete
%{_datadir}/%{vdsm_reg}/vdsm-gen-cert
%{_datadir}/%{vdsm_reg}/vdsm-upgrade
%{_datadir}/%{vdsm_reg}/config.py*
%{_datadir}/%{vdsm_reg}/deployUtil.py*
%attr(0755, -, -) %{_datadir}/%{vdsm_reg}/register-to-engine.py*
%{_datadir}/%{vdsm_reg}/createDaemon.py*
%{python_sitelib}/ovirt_config_setup/engine.py*
%{_datadir}/%{vdsm_reg}/save-config
%{_sysconfdir}/ovirt-config-boot.d/vdsm-config
%{_sysconfdir}/ovirt-commandline.d/vdsm-reg
%{_sysconfdir}/cron.hourly/vdsm-reg-logrotate
%{_mandir}/man8/vdsm-reg.8*

%defattr(-, %{vdsm_user}, %{vdsm_group},-)
%dir %{_var}/log/%{vdsm_reg}

%files hook-faqemu
%defattr(-, root, root, -)
%doc COPYING
%{_libexecdir}/%{vdsm_name}/vdsm-faqemu
%{_libexecdir}/%{vdsm_name}/hooks/before_vm_start/10_faqemu

%files gluster
%defattr(-, root, root, -)
%dir %{_datadir}/%{vdsm_name}/gluster
%doc COPYING
%{_datadir}/%{vdsm_name}/gluster/__init__.py*
%{_datadir}/%{vdsm_name}/gluster/api.py*
%{_datadir}/%{vdsm_name}/gluster/cli.py*
%{_datadir}/%{vdsm_name}/gluster/exception.py*
%{_datadir}/%{vdsm_name}/gluster/hostname.py*

%changelog
* Tue Jul 17 2012 Federico Simoncelli <fsimonce@redhat.com> 4.10.0-5.fc17
- configNet: atomicBackup: remove new files upon restore
- configNet: clear up atomicBackup arg
- Remove redundant 'explicitBonding' parameter from setupNetworks
- BZ#837054 - Do not detach network from the bond during bond resize
- BZ#836954 - Allow to break bond and create a new network on its interface in single action.
- BZ#837443: remove bridge before add VDSM bridge
- BZ#837443: removeVlan() drop/remove interface
- configNetwork: fix NetInfo call
- BZ#837443: replace the netinfo import
- BZ#837443: removeBridge() drop/remove interface
- ovirt_functions: fix elif statement
- BZ#838097 _addNetworkValidation: do not explode if STP/DNS1 option passed
- BZ#832199: move selinux from init to spec
- bump libvirt version to fix readonly lease unsupported issue

* Fri Jun 29 2012 Federico Simoncelli <fsimonce@redhat.com> 4.10.0-4.fc17
- deployUtil: use os.uname instead of /bin/uname
- deployUtil: slightly saner kernel version comparison
- BZ#835784 - Allow to create a network on top of existing bond in additional
  to create a new bond and network
- BZ#833119 - Allow to create VLANed network on top of existing bond
- BZ#833803 - Avoid bond breaking after network detach
- Handle bond properly if connectivity check fail.
- BZ#806555 having /etc/ovirt-node-* means it is a node

* Tue Jun 26 2012 Federico Simoncelli <fsimonce@redhat.com> 4.10.0-3.fc17
- BZ#832577: node can't be approved
- BZ#824298 fix typo in keyword argument exc_info

* Wed Jun 20 2012 Federico Simoncelli <fsimonce@redhat.com> 4.10.0-2.fc17
- deployUtil.yumFind: rename and simplify semantics
- drop deployUtil.yumSearch
- deployUtil.yumSearchVersion: compare versions sanely
- Iterates over delete candidates networks only once
- 'options' translation in setupNetworks is not relevant
- Minor optimization for delNetwork
- Don't ignore bridgeless networks in ifaceUsers
- Minor optimization for addNetwork
- Use already known iface in addNetwork
- Use proper MTU on bonding when add network
- Add bridge on top of VLAN if exists
- BZ#830485 - Add netConfigDirty bit to getVdsCaps report
- remove flag skipLibvirt
- BZ#826873 - Allow to change bond without network attached to it
- BZ#830486 - Allow to change network according the diffs from previous state
- BZ#826467 - Allow to remove bond and attach network to NIC
- Related to BZ#826873 - Allow to create bond without network

* Mon Jun 11 2012 Federico Simoncelli <fsimonce@redhat.com> 4.10.0-1.fc17
- vdsm-4.10.0

* Mon Jun  4 2012 Federico Simoncelli <fsimonce@redhat.com> 4.9.6-2.gite952471.fc17
- BZ#822158 Report version-release in a short format

* Mon Jun  4 2012 Federico Simoncelli <fsimonce@redhat.com> 4.9.6-1.gite952471.fc17
- vdsm-4.9.6-ge952471

* Mon May 28 2012 Federico Simoncelli <fsimonce@redhat.com> 4.9.6-0.git1b07249.fc16
- vdsm-4.9.6-g1b07249

* Tue Feb 28 2012 Dan Kenigsberg <danken@redhat.com> - 4.9.4-0.gb3642e5.fc17
- vdsm-4.9.4-0.gb3642e5

* Wed Jan 25 2012 Dan Kenigsberg <danken@redhat.com> - 4.9.3.2-0.fc16
- vdsm-4.9.3.2
- Reverts "BZ#773666 - Fix HSM flows should not change rw permissions."

* Mon Jan 16 2012 Federico Simoncelli <fsimonce@redhat.com> - 4.9.3.1-0.fc16
- vdsm-4.9.3.1

* Fri Jan 13 2012 Dan Kenigsberg <danken@redhat.com> - 4.9.2-1.git1d7b929.fc16
- vdsm-4.9.2-g1d7b929

* Tue Jan 10 2012 Federico Simoncelli <fsimonce@redhat.com> - 4.9.2-0.git951b41d.fc16
- vdsm-4.9.2-g951b41d

* Fri Dec 02 2011 Federico Simoncelli <fsimonce@redhat.com> - 4.9.1-2.git931a43e.fc16
- add the revision control comments to the specfile

* Wed Nov 30 2011 Federico Simoncelli <fsimonce@redhat.com> - 4.9.1-1.git6ee166c.fc16
- require iscsi-initiator-utils >= 6.2.0.872-14 bz442980
- fix the rpmlint errors

* Wed Oct 12 2011 Federico Simoncelli <fsimonce@redhat.com> - 4.9.0-0
- Initial upstream release

* Thu Nov 02 2006 Simon Grinberg <simong@qumranet.com> -  0.0-1
- Initial build