%if 0%{?rhel} || 0%{?fedora}
%global rdo 1
%endif
%if 0%{?rhel} == 7
%global skip_python3 1
%endif
%global with_doc 1
%if 0%{?rhel} || 0%{?fedora}
%global rdo 1
%endif
%global with_check 0

Name:           openstack-glance
Version:        21.0.0
Release:        1%{?dist}
Epoch:          0
Summary:        OpenStack Image Service (Glance)
License:        ASL 2.0
URL:            https://docs.openstack.org/glance
Source0:        glance-%{version}.tar.gz
Source1:        openstack-glance.logrotate
Source2:        openstack-glance.conf
Source3:        openstack-glance-api.service
Source6:        openstack-glance.defaultconf
Source7:        openstack-glance.README.config
BuildRequires:  openstack-macros
BuildRequires:  python3-paste
BuildRequires:  python3-paste-deploy
BuildRequires:  python3-routes
BuildRequires:  python3-wsme
BuildRequires:  python3-webob
BuildRequires:  python3-cursive
BuildRequires:  python3-ddt
BuildRequires:  python3-debtcollector
BuildRequires:  python3-defusedxml
BuildRequires:  python3-eventlet
BuildRequires:  python3-futurist
BuildRequires:  python3-glance-store
BuildRequires:  python3-httplib2
BuildRequires:  python3-keystoneclient
BuildRequires:  python3-keystonemiddleware
BuildRequires:  python3-oslo-concurrency
BuildRequires:  python3-oslo-config
BuildRequires:  python3-oslo-context
BuildRequires:  python3-oslo-db
BuildRequires:  python3-oslo-log
BuildRequires:  python3-oslo-messaging
BuildRequires:  python3-oslo-middleware
BuildRequires:  python3-oslo-policy
BuildRequires:  python3-oslo-reports
BuildRequires:  python3-oslo-upgradecheck
BuildRequires:  python3-oslo-utils
BuildRequires:  python3-oslotest
BuildRequires:  python3-osprofiler
BuildRequires:  python3-pyOpenSSL
BuildRequires:  python3-retrying
BuildRequires:  python3-sqlparse
BuildRequires:  python3-stestr
BuildRequires:  python3-stevedore
BuildRequires:  python3-taskflow
BuildRequires:  python3-pyxattr
Requires:       logrotate
Requires:       python3-glance = %{epoch}:%{version}-%{release}
BuildArch:      noarch
%if 0%{?suse_version}
BuildRequires:  systemd-rpm-macros
%{?systemd_requires}
%else
BuildRequires:  systemd
Requires(post): systemd
Requires(postun): systemd
Requires(preun): systemd
%endif
%if 0%{?suse_version}
BuildRequires:  qemu-tools
Requires(pre):  pwdutils
%endif
%if 0%{?rdo}
Requires(pre):  shadow-utils
%endif

%description
The Glance project provides a service where users can upload and discover
data assets that are meant to be used with other services. This currently
includes images and metadata definitions.
Glance image services include discovering, registering, and retrieving
virtual machine images. Glance has a RESTful API that allows querying of
VM image metadata as well as retrieval of the actual image.
VM images made available through Glance can be stored in a variety of
locations from simple filesystems to object-storage systems like the
OpenStack Swift project.

%package -n     python3-glance
Summary:        OpenStack Image Service (Glance) - Python module
Group:          Applications/System
Requires:       python3-paste
Requires:       python3-paste-deploy
Requires:       python3-prettytable
Requires:       python3-routes
Requires:       python3-sqlalchemy
Requires:       python3-wsme
Requires:       python3-webob
Requires:       python3-alembic
Requires:       python3-cryptography
Requires:       python3-cursive
Requires:       python3-debtcollector
Requires:       python3-defusedxml
Requires:       python3-eventlet
Requires:       python3-futurist
Requires:       python3-glance-store
Requires:       python3-httplib2
Requires:       python3-iso8601
Requires:       python3-jsonschema
Requires:       python3-keystoneauth1
Requires:       python3-keystoneclient
Requires:       python3-keystonemiddleware
Requires:       python3-monotonic
Requires:       python3-oslo-concurrency
Requires:       python3-oslo-config
Requires:       python3-oslo-context
Requires:       python3-oslo-db
Requires:       python3-oslo-i18n
Requires:       python3-oslo-log
Requires:       python3-oslo-messaging
Requires:       python3-oslo-middleware
Requires:       python3-oslo-policy
Requires:       python3-oslo-reports
Requires:       python3-oslo-upgradecheck
Requires:       python3-oslo-utils
Requires:       python3-osprofiler
Requires:       python3-pbr
Requires:       python3-pyOpenSSL
Requires:       python3-retrying
Requires:       python3-six
Requires:       python3-migrate
Requires:       python3-sqlparse
Requires:       python3-stevedore
Requires:       python3-taskflow

%description -n python3-glance
The Glance project provides a service where users can upload and discover
data assets that are meant to be used with other services. This currently
includes images and metadata definitions.
Glance image services include discovering, registering, and retrieving
virtual machine images. Glance has a RESTful API that allows querying of
VM image metadata as well as retrieval of the actual image.
VM images made available through Glance can be stored in a variety of
locations from simple filesystems to object-storage systems like the
OpenStack Swift project.

This package contains the Glance Python library.

%package -n python3-glance-tests
Summary:        Glance tests
Requires:       openstack-glance = %{epoch}:%{version}-%{release}
Provides:       python-glance-tests = %{epoch}:%{version}-%{release}

%description -n python3-glance-tests
The Glance project provides a service where users can upload and discover
data assets that are meant to be used with other services. This currently
includes images and metadata definitions.
Glance image services include discovering, registering, and retrieving
virtual machine images. Glance has a RESTful API that allows querying of
VM image metadata as well as retrieval of the actual image.
VM images made available through Glance can be stored in a variety of
locations from simple filesystems to object-storage systems like the
OpenStack Swift project.

This package contains the Glance test files.

%if 0%{?with_doc}
%package doc
Summary:        Documentation for OpenStack Image Service
Group:          Documentation
BuildRequires:  python3-sphinx
BuildRequires:  python3-openstackdocstheme
BuildRequires:  python3-sphinxcontrib-apidoc

%description doc
The Glance project provides a service where users can upload and discover
data assets that are meant to be used with other services. This currently
includes images and metadata definitions.
Glance image services include discovering, registering, and retrieving
virtual machine images. Glance has a RESTful API that allows querying of
VM image metadata as well as retrieval of the actual image.
VM images made available through Glance can be stored in a variety of
locations from simple filesystems to object-storage systems like the
OpenStack Swift project.

This package contains the documentation.
%endif

%package api
Summary:        OpenStack Image service (Glance) - API
Group:          Development/Languages/Python
Requires:       %{name} = %{epoch}:%{version}-%{release}

%description api
The Glance project provides a service where users can upload and discover
data assets that are meant to be used with other services. This currently
includes images and metadata definitions.
Glance image services include discovering, registering, and retrieving
virtual machine images. Glance has a RESTful API that allows querying of
VM image metadata as well as retrieval of the actual image.
VM images made available through Glance can be stored in a variety of
locations from simple filesystems to object-storage systems like the
OpenStack Swift project.

This package contains the %{name} API server.

%prep
%autosetup -p1 -n glance-%{version} 
%py_req_cleanup

%build
%{py3_build}
# build documentation
%if 0%{?with_doc}
PBR_VERSION=%{version}-%{release} sphinx-build -b html doc/source doc/build/html
PBR_VERSION=%{version}-%{release} sphinx-build -b man doc/source doc/build/man
rm -rf doc/build/html/.{doctrees,buildinfo}
rm -rf doc/build/man/.{doctrees,buildinfo}
%endif
# regenerate the sample config files
for service in api scrubber cache manage image-import; do
    PYTHONPATH=. oslo-config-generator --config-file etc/oslo-config-generator/glance-$service.conf
done
# generate the sample policy
PYTHONPATH=. oslopolicy-sample-generator --config-file=etc/glance-policy-generator.conf --output etc/policy.json
rm -f etc/glance-policy-generator.conf

%install
%{py3_install}
# directories
install -d -m 755 %{buildroot}%{_sysconfdir}/glance
install -d -m 755 %{buildroot}%{_sysconfdir}/glance/glance.conf.d/
install -d -m 755 %{buildroot}%{_sysconfdir}/glance/glance-api.conf.d/
install -d -m 755 %{buildroot}%{_localstatedir}/lib/glance
install -d -m 755 %{buildroot}%{_localstatedir}/lib/glance/images
install -d -m 750 %{buildroot}%{_localstatedir}/log/glance
install -d -m 750 %{buildroot}%{_localstatedir}/cache/glance
install -d -m 700 %{buildroot}%{_rundir}/glance
# tmpfile generator
install -D -m 644 %{SOURCE2} %{buildroot}/%{_tmpfilesdir}/glance.conf
# install sample configs
cp -pr etc/* %{buildroot}%{_sysconfdir}/glance
for service in api scrubber cache manage swift image-import; do
    mv %{buildroot}%{_sysconfdir}/glance/glance-$service.conf{.sample,}
done
install -p -D -m 640 %{SOURCE6} %{buildroot}%{_sysconfdir}/glance/README.config
rm -rf %{buildroot}%{_sysconfdir}/glance/oslo-config-generator
# default config
install -D -m 640 %{SOURCE6} %{buildroot}/%{_sysconfdir}/glance/glance.conf.d/010-glance.conf
# systemd
install -p -D -m 444 %{SOURCE3} %{buildroot}%{_unitdir}/openstack-glance-api.service
# logrotate
install -p -D -m 644 %{SOURCE1} %{buildroot}%{_sysconfdir}/logrotate.d/openstack-glance
# move metadefs
mv %{buildroot}%{_prefix}%{_sysconfdir}/glance/metadefs/* %{buildroot}%{_sysconfdir}/glance/metadefs
# Remove duplicate files under /usr/etc
rm -rf %{buildroot}%{_prefix}%{_sysconfdir}/glance

# man pages
%if 0%{?with_doc}
mkdir -p %{buildroot}%{_mandir}/man1
install -p -D -m 644 doc/build/man/*.1 %{buildroot}%{_mandir}/man1/
%endif

%pre
%openstack_pre_user_group_create glance glance /sbin/nologin

%check
%if 0%{?with_check}
%if 0%{?rdo}
# Skip qemu-tools related tests, those fail on RDO due to missing VDI support
rm -v glance/tests/unit/common/test_format_inspector.py
%endif
PYTHONPATH=. python3 -m stestr.cli --test-path glance/tests/unit run
%endif

%post
%tmpfiles_create %{_tmpfilesdir}/glance.conf

%post api
%systemd_post %{name}-api.service

%preun api
%systemd_preun %{name}-api.service

%postun api
%systemd_postun_with_restart %{name}-api.service

%files
%license LICENSE
%_tmpfilesdir/glance.conf
%dir %attr(0750, root, glance) %{_sysconfdir}/glance
%dir %attr(0750, root, glance) %{_sysconfdir}/glance/glance.conf.d/
%dir %attr(0750, root, glance) %{_sysconfdir}/glance/glance-api.conf.d/
%config(noreplace) %attr(0640, root, glance) %{_sysconfdir}/glance/glance.conf.d/010-glance.conf
%{_sysconfdir}/glance/README.config
%config(noreplace) %attr(0640, root, glance) %{_sysconfdir}/glance/glance-api.conf
%config(noreplace) %attr(0640, root, glance) %{_sysconfdir}/glance/glance-cache.conf
%config(noreplace) %attr(0640, root, glance) %{_sysconfdir}/glance/glance-image-import.conf
%config(noreplace) %attr(0640, root, glance) %{_sysconfdir}/glance/glance-scrubber.conf
%config(noreplace) %attr(0640, root, glance) %{_sysconfdir}/glance/glance-swift.conf
%config(noreplace) %attr(0640, root, glance) %{_sysconfdir}/glance/glance-manage.conf
%config %{_sysconfdir}/glance/glance-api-paste.ini
%config %{_sysconfdir}/glance/policy.json
%config %{_sysconfdir}/glance/property-protections-policies.conf.sample
%config %{_sysconfdir}/glance/property-protections-roles.conf.sample
%config %{_sysconfdir}/glance/ovf-metadata.json.sample
%config %{_sysconfdir}/glance/schema-image.json
%dir %config %{_sysconfdir}/glance/metadefs
%{_sysconfdir}/glance/metadefs/README
%config %{_sysconfdir}/glance/metadefs/*.json
%config(noreplace) %{_sysconfdir}/logrotate.d/%{name}
%dir %attr(0755, glance, glance) %{_localstatedir}/lib/glance
%dir %attr(0755, glance, glance) %{_localstatedir}/lib/glance/images
%dir %attr(0750, glance, glance) %{_localstatedir}/log/glance
%dir %attr(0750, glance, glance) %{_localstatedir}/cache/glance
%{_bindir}/glance-cache-cleaner
%{_bindir}/glance-cache-manage
%{_bindir}/glance-cache-prefetcher
%{_bindir}/glance-cache-pruner
%{_bindir}/glance-control
%{_bindir}/glance-manage
%{_bindir}/glance-replicator
%{_bindir}/glance-scrubber
%{_bindir}/glance-status
%if 0%{?with_doc}
%{_mandir}/man1/glance-cache-cleaner.1.gz
%{_mandir}/man1/glance-cache-manage.1.gz
%{_mandir}/man1/glance-cache-prefetcher.1.gz
%{_mandir}/man1/glance-cache-pruner.1.gz
%{_mandir}/man1/glance-control.1.gz
%{_mandir}/man1/glance-manage.1.gz
%{_mandir}/man1/glance-replicator.1.gz
%{_mandir}/man1/glance-scrubber.1.gz
%endif

%files -n python3-glance
%license LICENSE
%{python3_sitelib}/glance*
%exclude %{python3_sitelib}/glance/tests

%files -n python3-glance-tests
%license LICENSE
%{python3_sitelib}/glance/tests

%if 0%{?with_doc}
%files doc
%license LICENSE
%doc doc/build/html
%endif

%files api
%{_unitdir}/openstack-glance-api.service
%{_bindir}/glance-api
%{_bindir}/glance-wsgi-api
%if 0%{?with_doc}
%{_mandir}/man1/glance-api.1.gz
%endif

%changelog
