#
# spec file for package ceph-iscsi
#
# Copyright (C) 2017-2018 The Ceph iSCSI Project Developers. See
# COPYING file at the top-level directory of this distribution and at
# https://github.com/ceph/ceph-iscsi/blob/master/COPYING
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon.
#
# This file is under the GNU General Public License, version 3 or any
# later version.
#
# Please submit bugfixes or comments via http://tracker.ceph.com/
#
%if 0%{?rhel} == 7
%global with_python2 1
%endif


Name:           ceph-iscsi
Version:        3.5
Release:        2%{?dist}
Group:          System/Filesystems
Summary:        Python modules for Ceph iSCSI gateway configuration management
%if 0%{?suse_version}
License:        GPL-3.0-or-later
%else
License:        GPLv3+
%endif
URL:            https://github.com/ceph/ceph-iscsi
Source0:        https://github.com/ceph/ceph-iscsi/archive/%{version}/%{name}-%{version}.tar.gz

Patch0001: 0001-gwcli-fix-the-erasure-pool-profile-s-display-info.patch
Patch0002: 0002-spec-mark-the-ceph-iscsi-tools-package-deprecated.patch

BuildArch:      noarch

Obsoletes:      ceph-iscsi-config
Obsoletes:      ceph-iscsi-cli

Requires:       tcmu-runner >= 1.4.0
%if 0%{?with_python2}
BuildRequires:  python2-devel
BuildRequires:  python2-setuptools
Requires:       python-rados >= 10.2.2
Requires:       python-rbd >= 10.2.2
Requires:       python-netifaces >= 0.10.4
Requires:       python-rtslib >= 2.1.fb68
Requires:       python-cryptography
Requires:       python-flask >= 0.10.1
Requires:       python-configshell >= 1.1.fb25
%if 0%{?rhel} == 7
Requires:       pyOpenSSL
Requires:       python-requests
%else
Requires:       python-pyOpenSSL
Requires:       python2-requests
%endif
%else
BuildRequires:  python3-devel
BuildRequires:  python3-setuptools
Requires:       python3-rados >= 10.2.2
Requires:       python3-rbd >= 10.2.2
Requires:       python3-netifaces >= 0.10.4
Requires:       python3-rtslib >= 2.1.fb68
Requires:       python3-cryptography
Requires:       python3-pyOpenSSL
Requires:       python3-requests
%if 0%{?suse_version}
BuildRequires:  python-rpm-macros
BuildRequires:  fdupes
Requires:       python3-Flask >= 0.10.1
Requires:       python3-configshell-fb >= 1.1.25
%else
Requires:       python3-flask >= 0.10.1
Requires:       python3-configshell >= 1.1.fb25
%endif
%endif

%if 0%{?rhel}
BuildRequires: systemd
%else
BuildRequires: systemd-rpm-macros
%{?systemd_requires}
%endif

%description
Python package providing the modules used to handle the configuration of an
iSCSI gateway, backed by Ceph RBD. The RPM installs configuration management
logic (ceph_iscsi_config modules), an rbd-target-gw systemd service, and
a CLI-based management tool 'gwcli', replacing the 'targetcli' tool.

The configuration management modules may be are consumed by custom Ansible
playbooks and the rbd-target-gw daemon.

The rbd-target-gw service is responsible for startup and shutdown actions,
replacing the 'target' service used in standalone LIO implementations.
In addition, rbd-target-gw also provides a REST API utilized by the Ceph
dashboard and gwcli tool, and a prometheus exporter for gateway LIO
performance statistics, supporting monitoring and visualisation tools like
Grafana.

%prep
%autosetup -p1

%build
%if 0%{?with_python2}
%{__python2} setup.py build
%else
%if 0%{?suse_version}
%python3_build
%else
%{py3_build}
%endif
%endif

%install
%if 0%{?with_python2}
%{__python2} setup.py install -O1 --skip-build --root %{buildroot}  --install-scripts %{_bindir}
%else
%if 0%{?suse_version}
%python3_install
%python_expand %fdupes %{buildroot}%{$python_sitelib}
%else
%{py3_install}
%endif
%endif
mkdir -p %{buildroot}%{_unitdir}
install -m 0644 .%{_unitdir}/rbd-target-gw.service %{buildroot}%{_unitdir}
install -m 0644 .%{_unitdir}/rbd-target-api.service %{buildroot}%{_unitdir}
mkdir -p %{buildroot}%{_mandir}/man8
install -m 0644 gwcli.8 %{buildroot}%{_mandir}/man8/
gzip %{buildroot}%{_mandir}/man8/gwcli.8
mkdir -p %{buildroot}%{_unitdir}/rbd-target-gw.service.d
# When rtslib is fixed drop  this and update the dep. Note that we add both
# etc and var, because the kernel and userspace developers keep switching
# the dir they want to use.
mkdir -p %{buildroot}%{_sysconfdir}/target/pr
mkdir -p %{buildroot}%{_sysconfdir}/target/alua
mkdir -p %{buildroot}%{_localstatedir}/target/pr
mkdir -p %{buildroot}%{_localstatedir}/target/alua
%if 0%{?suse_version}
mkdir -p %{buildroot}%{_sbindir}
ln -s service %{buildroot}%{_sbindir}/rcrbd-target-gw
ln -s service %{buildroot}%{_sbindir}/rcrbd-target-api
%endif

%pre
%if 0%{?suse_version}
%service_add_pre rbd-target-gw.service rbd-target-api.service
%endif

%post
%if 0%{?rhel} == 7
/bin/systemctl --system daemon-reload &> /dev/null || :
/bin/systemctl --system enable rbd-target-gw &> /dev/null || :
/bin/systemctl --system enable rbd-target-api &> /dev/null || :
%endif
%if 0%{?fedora} || 0%{?rhel} >= 8
%systemd_post rbd-target-gw.service
%systemd_post rbd-target-api.service
%endif
%if 0%{?suse_version}
%service_add_post rbd-target-gw.service rbd-target-api.service
%endif

%preun
%if 0%{?fedora} || 0%{?rhel} >= 8
%systemd_preun rbd-target-gw.service
%systemd_preun rbd-target-api.service
%endif
%if 0%{?suse_version}
%service_del_preun rbd-target-gw.service rbd-target-api.service
%endif

%postun
%if 0%{?rhel} == 7
/bin/systemctl --system daemon-reload &> /dev/null || :
%endif
%if 0%{?fedora} || 0%{?rhel} >= 8
%systemd_postun rbd-target-gw.service
%systemd_postun rbd-target-api.service
%endif
%if 0%{?suse_version}
%service_del_postun rbd-target-gw.service rbd-target-api.service
%endif


%files
%license LICENSE
%license COPYING
%doc README
%doc iscsi-gateway.cfg_sample
%if 0%{?with_python2}
%{python2_sitelib}/*
%else
%{python3_sitelib}/*
%endif
%{_bindir}/gwcli
%{_bindir}/rbd-target-gw
%{_bindir}/rbd-target-api
%{_unitdir}/rbd-target-gw.service
%{_unitdir}/rbd-target-api.service
%{_mandir}/man8/gwcli.8.gz
%attr(0770,root,root) %dir %{_localstatedir}/log/rbd-target-gw
%attr(0770,root,root) %dir %{_localstatedir}/log/rbd-target-api
%dir %{_unitdir}/rbd-target-gw.service.d
%dir %{_sysconfdir}/target
%dir %{_sysconfdir}/target/pr
%dir %{_sysconfdir}/target/alua
%dir %{_localstatedir}/target
%dir %{_localstatedir}/target/pr
%dir %{_localstatedir}/target/alua
%if 0%{?suse_version}
%{_sbindir}/rcrbd-target-gw
%{_sbindir}/rcrbd-target-api
%endif

%changelog
* Fri Jan 07 2022 Xiubo Li <xiubli@redhat.com> 3.5-2
- spec: mark the ceph-iscsi-tools package deprecated (rhbz#2026582)
- gwcli: fix the erasure pool profile's display info (rhbz#1840721)

* Mon Mar 22 2021 Xiubo Li <xiubli@redhat.com> 3.5-1
- sync to upstream 3.5 release

* Thu Jan 16 2020 Mike Christie <mchristi@redhat.com> 3.4-3
- Make sure we always have the target dir is (rhbz#1791460)

* Wed Jan 08 2020 Mike Christie <mchristi@redhat.com> 3.4-2
- Fix ceph blacklist ls test (rhbz#1785999)
- Always perform full deletion on local node
- Fix crash during unblacklisting with python3 (rhbz#1785999)
- Fix metrics crash if gw not setup yet (rhbz#1779645)
- Support keys() with python 3

* Fri Dec 20 2019 Mike Christie <mchristi@redhat.com> 3.4-1
- sync to upstream 3.4 release
- Fix next() use crash in rbd-target-gw metrics (rhbz#1779645)
- gwcli/api: add force option for gw removal (rhbz#1592189)

* Fri Oct 18 2019 Mike Christie <mchristi@redhat.com> 3.3-2
- Fix RHEL detection in checkversions (rhbz#1762707)

* Thu Sep 26 2019 Mike Christie <mchristi@redhat.com> 3.3-1
- sync to upstream 3.3 release

* Mon Jul 1 2019 Mike Christie <mchristi@redhat.com> 3.2-1
- sync to upstream 3.2 release

* Fri Jun 28 2019 Mike Christie <mchristi@redhat.com> 3.1-1
- sync to upstream 3.1 release

* Tue Mar 19 2019 Jason Dillaman <dillaman@redhat.com> 3.0-1
- initial rpm packaging